|
http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=3478 [복사]
우선 소스부터 보여드리겠습니다.
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<arpa/inet.h>
#include<sys/socket.h>
void error_handling(char *message);
int main(int argc, char *argv[])
{
int serv_sock;
int clnt_sock;
struct sockaddr_in serv_addr;
struct sockaddr_in clnt_addr;
socklen_t clnt_addr_size;
char message[]="Hello World!";
if(argc!=2)
{
printf("Usage : %s <port>\n", argv[0]);
exit(1);
}
serv_sock=socket(PF_INET, SOCK_STREAM, 0);
if(serv_sock ==-1)
error_handling("socket() error");
memset(&serv_addr, 0, sizeof(serv_addr));
serv_addr.sin_family=AF_INET;
serv_addr.sin_addr.s_addr=htonl(INADDR_ANY);
serv_addr.sin_port=htons(atoi(argv[1]));
if(bind(serv_sock,(struct sockaddr*) &serv_addr, sizeof(serv_addr))==-1)
error_handling("listen() error");
clnt_addr_size=sizeof(clnt_addr);
clnt_sock=accept(serv_sock, (struct sockaddr*)&clnt_addr, &clnt_addr_size);
if(clnt_sock==-1)
error_handling("accept() error");
write(clnt_sock, message, sizeof(message));
close(clnt_sock);
close(serv_sock);
return 0;
}
void error_handling(char *message)
{
fputs(message, stderr);
fputc('\n',stderr);
exit(1);
}
리눅스에서 컴파일하여 포트 입력해서 실행시키면 accept함수에서 파일디스크립터? 이게 되서 클라이언트가 연결요청을 했을때 문자열이 출력되야하는데 실패해서 accept() error가 뜨네요. 책에 나온 소스 그대로 따라 친건데 뭐가 문제인지 잘모르겠네요
그리고 제가 c언어 한번 배운후에 제가 정보보안가 쪽으로 진로를 잡고 tcp/ip소켓프로그래밍을 배우고있는중인데 이게 과연 정보보안과 관련이 있는건지 의문이 좀 가네요.. |
Hit : 4629 Date : 2012/08/03 04:08
|