socket 프로그래밍 질문입니다.

new0092의 이미지

리눅스 소켓 프로그램을 하기 전에 winsock 교재로 공부하고 있습니다. ( 입문 단계입니다. )

server 와 client 가 send() recv () 가 되지 않습니다.

같은 코드로 다른 자리에서는 되는 것을 확인했습니다(!)

왜 그런지 궁금합니다. 환경 설정 문제인디. 참고로 저는 visual c++ 2010 을 사용하고 있습니다

server code 입니다.


#include
#include
#include
void err_display(char *msg) ;
void err_quit(char *msg) ;

int main()
{

SOCKET sock; // 소켓이란 데이타 타입
WSADATA wsa;
SOCKET clnt_sock; // 핸들러 생성
struct sockaddr_in serv_addr;
struct sockaddr_in clnt_addr;
int port = 10000 ;
int clntaddr_size;
char msg[] = "client-Hello world!!\n";
int len = 0;

if(WSAStartup(MAKEWORD(2,2),&wsa) != 0 )
return -1;
printf("원속 초기화 성공 \n");

sock = socket ( PF_INET, SOCK_STREAM , 0 );

if( sock == INVALID_SOCKET )
err_quit("socket error");

puts("TCP 소켓 생성 성공");

memset( &serv_addr, 0 , sizeof(serv_addr));
serv_addr.sin_family = PF_INET;
serv_addr.sin_addr.s_addr = htons(INADDR_ANY);
serv_addr.sin_port = htons(port);
if(bind( sock, (SOCKADDR*)&serv_addr, sizeof(serv_addr)) == SOCKET_ERROR ) // bind 함수 주소 할당
err_display("BIND ERROR");

puts(" 연결 요청 대기 중 입니다.....");
if ( listen( sock, 10) == SOCKET_ERROR )
err_display("LISTEN ERROR");
clntaddr_size = sizeof(clnt_addr);
clnt_sock = accept( sock, (SOCKADDR*)&clnt_addr,&clntaddr_size );

if (clnt_sock == INVALID_SOCKET )
err_display("ACCEPT ERROR");
else
puts("연결 성공 !!!");
//printf("%s : %d에서 접속 \n",inet_ntoa(clnt_addr.sin_addr), ntohs(clnt_addr.sin_port));

memset( msg, '\0', sizeof(msg));
len = recv( clnt_sock, msg, sizeof(msg)-1, 0 );
printf("Message from client : %s(%d) \n",msg,len);


closesocket( sock );
closesocket( clnt_sock);

WSACleanup();
return 0;

}

void err_display(char *msg) // msg만 출력
{
LPVOID lpMsgBuf;
int err = WSAGetLastError();
FormatMessage(

FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM,
NULL, err,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR)&lpMsgBuf, 0, NULL);
printf("[%s](%d) %s", msg, err, (LPCTSTR)lpMsgBuf);
LocalFree(lpMsgBuf);

}

void err_quit(char *msg) //
{
LPVOID lpMsgBuf;
FormatMessage(

FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM,
NULL, WSAGetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR)&lpMsgBuf, 0, NULL);
MessageBox( NULL, (LPCTSTR)lpMsgBuf, (LPCWSTR)msg,MB_ICONERROR);
LocalFree(lpMsgBuf);
LocalFree(lpMsgBuf);
exit(-1);

}

client 코드입니다.

#include
#include
#include
void err_quit(char *msg) ;
int main()
{
SOCKET sock;
WSADATA wsaData;
struct sockaddr_in serv_addr;
char *ip = "210.110.149.150";
int port = 10000;
char msg[1024]="server-Hello world";
int len = 0;

if(WSAStartup(MAKEWORD(2,2),&wsaData) != 0 )
return -1;
printf("원속 초기화 성공 \n");

sock = socket( PF_INET, SOCK_STREAM, 0);

if( sock == INVALID_SOCKET)
err_quit("SOCKET ERROR");

memset( &serv_addr, 0 , sizeof(serv_addr));

serv_addr.sin_family = PF_INET;
serv_addr.sin_addr.s_addr = inet_addr(ip);
serv_addr.sin_port =htons(port);

if( connect( sock, (SOCKADDR*)&serv_addr, sizeof(serv_addr))== SOCKET_ERROR)
err_quit("CONNECT ERROR");
else
puts(" 서버와 연결 성공");

if(len = send(sock,msg, strlen(msg), 0 ) == -1 )
err_quit("send error");
else
printf("메시지 전송 성공 %s(%d)\n",msg, len);


closesocket( sock );

WSACleanup();
return 0;

}

void err_quit(char *msg) //
{
LPVOID lpMsgBuf;
FormatMessage(

FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM,
NULL, WSAGetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR)&lpMsgBuf, 0, NULL);
MessageBox( NULL, (LPCTSTR)lpMsgBuf, (LPCWSTR)msg,MB_ICONERROR);
LocalFree(lpMsgBuf);
LocalFree(lpMsgBuf);
exit(-1);

}


댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.