글
소켓프로그래밍 예제
전전컴/C++
2014. 1. 15. 01:02
server이다
cmd에서 파일이름 9190으로 먼저 실행후 대기한다
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | #include <iostream> #include <winsock2.h> #pragma comment(lib, "ws2_32.lib") using namespace std; void ErrorHandling(char* message); void main(int argc, char* argv[]){ WSADATA wsaData; SOCKET hServSock, hClntSock; SOCKADDR_IN servAddr, clntAddr; int szClntAddr; char* message= "Hello World!"; 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 =inet_addr("127.0.0.1"); //servAddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY); //servAddr.sin_addr.S_un.S_addr =inet_addr("127.0.0.1"); //.sin_addr.s_addr=inet_addr("127.0.0.1"); 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"); szClntAddr = sizeof(clntAddr); hClntSock = accept(hServSock, (SOCKADDR*)&clntAddr, &szClntAddr); if(hClntSock == INVALID_SOCKET){ ErrorHandling("accept() error"); } send(hClntSock, message, sizeof(message), 0 ); closesocket(hClntSock); closesocket(hServSock); WSACleanup(); } void ErrorHandling(char* message){ fputs(message, stderr); fputc('\n', stderr); exit(1); } |
아래는 client이다
cmd에서 파일이름 127.0.0.2 9190으로 대기한다
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | #include <iostream> #include <winsock2.h> #pragma comment(lib, "ws2_32.lib") using namespace std; void ErrorHandling(char* message); int main(int argc, char* argv[]) { WSADATA wsaData; SOCKET hSocket; SOCKADDR_IN servAddr; char message[30]; int strLen; if(argc!=3){ printf("Usage : %s <IP> <port>\n", argv[0]); exit(1); } if(WSAStartup(MAKEWORD(2,2), &wsaData) !=0 ) ErrorHandling("WSAStartup() error!"); hSocket = socket(PF_INET, SOCK_STREAM, 0); if(hSocket == INVALID_SOCKET) ErrorHandling("socket() error"); memset(&servAddr, 0, sizeof(servAddr)); servAddr.sin_family = AF_INET; servAddr.sin_addr.S_un.S_addr = inet_addr(argv[1]); servAddr.sin_port = htons(atoi(argv[2])); if(connect(hSocket, (SOCKADDR*)&servAddr, sizeof(servAddr)) == SOCKET_ERROR) ErrorHandling("connet() error!"); strLen = recv(hSocket, message, sizeof(message),0); if(strLen == -1) ErrorHandling("read() error!"); printf("Message from server : %s \n", message); closesocket(hSocket); WSACleanup(); return 0; } void ErrorHandling(char* message){ fputs(message, stderr); fputc('\n', stderr); exit(1); } |