728x90
반응형
#pragma comment(lib,"ws2_32.lib") #include <stdio.h> #include <stdlib.h> #include <string.h> #include <winsock2.h> #include <process.h> #define BUFSIZE 1024 int main(int argc, char** argv){ WSADATA wsaData; SOCKET hServSock; SOCKET hClntSock; HANDLE hThread; DWORD dwThreadID; SOCKADDR_IN servAddr; SOCKADDR_IN clntAddr; int clntAddrSize; if(argc != 2){ printf("Usage: %s <port> \n", argv[0]); exit(1); } if(WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) ErrorHandling("WSAStartup() error!"); hServSock = socket(PF_INET, SOCK_STREAM, 0); if(hServSock == INVALID_SOCKET) ErrorHandling("socket() error"); memset(&servAddr, 0, sizeof(servAddr)); servAddr.sin_family = AF_INET; servAddr.sin_addr.s_addr = htonl(INADDR_ANY); servAddr.sin_port = htons(atoi(argv[1])); if(bind(hServSock, (SOCKADDR*)&servAddr, sizeof(servAddr)) == SOCKET_ERROR) ErrorHandling("bind() error"); if(listen(hServSock, 5) == SOCKET_ERROR) ErrorHandling("listen() error"); while(1){ clntAddrSize = sizeof(clntAddr); hClntSock = accept(hServSock, (SOCKADDR*)&clntAddr, &clntAddrSize); if(hClntSock == INVALID_SOCKET) ErrorHandling("accept() error"); printf("연결 요청: %s:%d \n", inet_ntoa(clntAddr.sin_addr), ntohs(clntAddr.sin_port)); hThread = (HANDLE)_beginthreadex(NULL, 0, ClntConnect, (void*)hClntSock, 0, (unsigned int*)&dwThreadID); if(hThread == 0){ puts("쓰레드 생성"); exit(1); } } WSACleanup(); return 0; } DWORD WINAPI ClntConnect(void* arg){ SOCKET hClntSock = (SOCKET)arg; char buf[BUFSIZE]; recv(hClntSock, buf, BUFSIZE, 0); send(sock, protocol, strlen(protocol), 0); return 0; } void ErrorHandling(char* message){ fputs(message, stderr); fputc('\n', stderr); exit(1); }
728x90
반응형
'개발 언어 > C,VC++' 카테고리의 다른 글
VC++ 버전별 배포방법과 재배포패키지(Redistributable Package) (0) | 2012.05.16 |
---|---|
[STL] 시퀀스 컨테이너 <Vector> (0) | 2012.05.14 |
#pragma - once, pack, warning, comment, link (0) | 2012.05.14 |
간단한 C++ 매크로 만들기 (0) | 2010.07.21 |
CString ->int -> CString (0) | 2010.07.21 |