Study/Others 네트워크 프로그래밍 TCP 서버 구현 성주 2008. 10. 13. 15:51 // 필요한 헤더 인클루드 // stdio.h, stdlib.h, string.h, winsock2.h #include #include #include #include int main(int argc, char *argv) { // WSADATA 데이터타입의 변수 선언 WSADATA wsaData; // SOCKET 변수 선언 SOCKET tcpSock; // 클라이언트 SOCKET 변수 선언 SOCKET hClntSock; // 클라이언트의 연결정보 저장을 위한 sockaddr_in 변수 struct sockaddr_in clntAddr; // SOCKADDR_IN clntAddr; // 주소 구조체의 길이를 갖기 위한 정수형 변수 int clntAddrSize; // sockaddr_in 변수 선언 struct sockaddr_in addr; char* ip = "220.67.113.136"; char* port = "9192"; // WSAStartup() 윈속 라이브러리 초기화 // 오류처리 if(WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) { printf("WSAStartup() Error!\n"); exit(1); } printf("윈속 라이브러리 초기화 성공!\n"); // IPv4, TCP 소켓 생성 tcpSock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); printf("TCP 소켓 생성\n"); // sockaddr_in 값 할당 memset(&addr, 0, sizeof(addr)); addr.sin_family = AF_INET; addr.sin_port = htons(atoi(port)); //addr.sin_addr.s_addr = inet_addr(ip); addr.sin_addr.s_addr = htons(INADDR_ANY); // 소켓에 주소 바인딩 if(bind(tcpSock, (SOCKADDR*)&addr, sizeof(addr)) == SOCKET_ERROR) { printf("bind() Error!\n"); exit(1); } printf("바인드 완료\n"); // listen 함수 if(listen(tcpSock, 5) == SOCKET_ERROR) { printf("listen() Error!\n"); exit(1); } printf("연결 요청 대기상태\n"); // accept 함수 clntAddrSize = sizeof(clntAddr); hClntSock = accept(tcpSock, (SOCKADDR*)&clntAddr, &clntAddrSize); if(hClntSock == INVALID_SOCKET) { printf("accept() Error!\n"); exit(1); } printf("클라이언트와 연결 완료\n"); // 소켓 종료 closesocket(tcpSock); // WSACleanup() 윈속 라이브러리 해제 WSACleanup(); return 0; } 저작자표시 비영리 변경금지