리눅스 윈도우 사이의 소켓 통신 질문
글쓴이: ywh1120 / 작성시간: 금, 2011/03/04 - 11:05오전
제가 이번에 리눅스와 윈도우 간의 소켓 통신으로 어느 정도 간단한 네트워크 게임을 구상 중에 있습니다.
그래서 제작하기 전에 먼저 리눅스와 윈도우 사이의 소켓 통신이 원활하게 되는지 실험을 해볼려고 각자 에코 서버를 두고 클라이언트 예제를 코딩하여 실험 해보았습니다.
근데 제 생각대로 되지 않는 군요..-_-
리눅스를 서버로 두고 윈도우를 클라이언트로 두고서 연결 시도를 해봤는데 클라이언트 쪽에서 깜빡깜빡 거리더니 그냥 종료가 되어버렸습니다.
그래서 혹시 코드가 아예 안되는 건가 싶어서 이번엔 반대로 윈도우를 서버로 두고 리눅스를 클라이언트로 해봤는데, 이번에는 신기하게 잘 되더군요..-_-;;
대체 리눅스 - 윈도우는 안 되면서 왜 윈도우 - 리눅스는 되는 걸까요..;;
코드 첨부하겠습니다.
#include "stdafx.h" #include <winsock2.h> #include <stdlib.h> #define BUFSIZE 512 void err_quit(char *msg); void err_display(char *msg); int _tmain(int argc, _TCHAR* argv[]) { int retval; WSADATA wsa; if(WSAStartup(MAKEWORD(2,2), &wsa) != 0) return -1; SOCKET sock = socket(AF_INET, SOCK_STREAM, 0); if(sock == INVALID_SOCKET) err_quit("socket()"); SOCKADDR_IN serveraddr; serveraddr.sin_family = AF_INET; serveraddr.sin_port = htons(xxxx); serveraddr.sin_addr.s_addr = inet_addr("xxx.xxx.xxx.xxx"); retval = connect(sock, (SOCKADDR *)&serveraddr, sizeof(serveraddr)); if(retval == SOCKET_ERROR) err_quit("connect()"); char buf[BUFSIZE+1]; int len; while(1) { ZeroMemory(buf, sizeof(buf)); printf("\n[보낼 데이터]"); if(fgets(buf, BUFSIZE+1, stdin) == NULL) break; len = strlen(buf); if(buf[len-1] == '\n') buf[len-1] = '\0'; if(strlen(buf) == 0) break; retval = send(sock, buf, strlen(buf), 0); if(retval == SOCKET_ERROR) { err_display("send()"); break; } printf("[TCP 클라이언트] %d바이트를 보냈습니다.\n", retval); retval = recv(sock, buf, retval, 0); if(retval == SOCKET_ERROR) { err_display("recv()"); break; } else if(retval == 0) break; buf[retval] = '\0'; printf("[TCP 클라이언트] %d바이트를 받았습니다.\n", retval); printf("[받은 데이터] %s\n", buf); } 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, msg, MB_ICONERROR); LocalFree(lpmsgbuf); exit(-1); } void err_display(char *msg) { LPVOID lpmsgbuf; FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER| FORMAT_MESSAGE_FROM_SYSTEM, NULL, WSAGetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&lpmsgbuf, 0, NULL); printf("[%s] %s", msg, (LPCTSTR)lpmsgbuf); LocalFree(lpmsgbuf); }
여기까지는 윈도우쪽에서 구동하는 윈도우 클라이언트 소스코드이며,
Forums:
추가로 서버쪽 소스코드입니다.
이쪽은 리눅스에서 구동하는 서버쪽 소스코드입니다.
소스를 <code> </code>
블록으로 싸주시면 답변 달릴 가능성이 높아집니다. :)
소스 시작 지점에서
아하
제가 평소에 봤던 코드 형식대로 나오는군요
감사합니다.
이 문제 해결하셨나요?
이 문제 해결하셨으면...
해결 방법 좀 알려주세요..
댓글 달기