소켓 server.cpp
(아래 코드의 주석은 필자가 이해한대로 해석한 것입니다.)
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 | #include <stdio.h> #include <WinSock2.h> // 윈도우의 내장된 소케 #pragma comment(lib, "ws2_32.lib") // 헤더를 사용하기위한라이브러리 int main() { WSADATA wsaData; SOCKET servSock, clntSock; SOCKADDR_IN servAddr, clntAddr; char msg[] = "Hello!"; char buf[128]; int szClntAddr = sizeof(clntAddr); WSAStartup(MAKEWORD(2, 2), &wsaData); // 원속초기화 servSock = socket(PF_INET, SOCK_STREAM, 0); // 소켓 생성 // 서버측 주소 설정 memset(&servAddr, 0, sizeof(servAddr)); // 소켓의 주소초기화 servAddr.sin_family = AF_INET; servAddr.sin_addr.s_addr = htonl(ADDR_ANY); // 서버에서 어떤 주소를 받을지 입력(모든 클라이언트가 받을 수 있게) servAddr.sin_port = htons(55555); // 포트번호 설정 // 서버 소켓 할당 bind(servSock, (SOCKADDR*)&servAddr, sizeof(servAddr)); // 소켓주소를 할당 // 클라이언트 요청 대기 listen(servSock, 5); // 클라이언트 요청 수락 및 클라이언트 소켓 설정 clntSock = accept(servSock, (SOCKADDR*)&clntAddr, &szClntAddr); // 데이터 교환 send(clntSock, msg, sizeof(msg), 0); // 데이터를보냄 recv(clntSock, buf, sizeof(buf), 0); // 데이터를받음 printf("%s\n", buf); //받은것을 출력 // 소켓 닫기 closesocket(clntSock); // 클라이언트 소켓을 닫는다고 말해줌 (*순서에 주의하자) closesocket(servSock); // 윈속 닫기 WSACleanup(); return 0; } | cs |
소켓 clinet.cpp
(아래 코드의 주석은 필자가 이해한대로 해석한 것입니다.)
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 | #include <stdio.h> #include <WinSock2.h> // 윈도우의 내장된 소켓 #pragma comment(lib, "ws2_32.lib") // 헤더를 사용하기위한 라이브러리 int main() { WSADATA wsaData; SOCKET sock; // 서버와 다르게 자신이 연결할것 하나만 있으면된다. SOCKADDR_IN sockAddr; char ipAddr[20]; char msg[] = "Hello!"; char buf[128]; int szSockAddr = sizeof(sockAddr); // 윈속 초기화 WSAStartup(MAKEWORD(2, 2), &wsaData); // 소켓 생성 sock = socket(PF_INET, SOCK_STREAM, 0); printf("서버 아이피 주소 : "); scanf("%s", ipAddr); // 소켓 주소 설정 memset(&sockAddr, 0, sizeof(sockAddr)); sockAddr.sin_family = AF_INET; sockAddr.sin_addr.s_addr = inet_addr(ipAddr); // 서버와다르게 모든 주소를 받게하면 안된다. sockAddr.sin_port = htons(55555); // 서버에 연결 요청 connect(sock, (SOCKADDR*)&sockAddr, sizeof(sockAddr)); // 데이터 교환 recv(sock, buf, sizeof(buf), 0); // 받고 printf("%s\n", buf); // 받은것을 출력 send(sock, msg, sizeof(msg), 0); // 보낸다 // 소켓 닫기 closesocket(sock); // 윈속 닫기 WSACleanup(); return 0; } | cs |
'네퓨즈 수업' 카테고리의 다른 글
[네퓨즈수업 - 아두이노] Fade 예제 (0) | 2016.05.19 |
---|---|
[네퓨즈 수업 - C] 포인터 정리 (0) | 2016.04.12 |
[네퓨즈 수업 - C] 함수 정리 (1) | 2016.04.07 |
[네퓨즈 수업 - C] 배열 정리 (0) | 2016.04.05 |