Socket

C server , C client 통신 기본예제

섭섭입니다 2020. 2. 23. 02:37

오렌지미디어 - <윤성우의 열혈 tcp/ip 소켓 프로그래밍>  자료실의 예제를 참고 했다

 

 

#pragma comment(lib, "ws2_32.lib") 
#define _WINSOCK_DEPRECATED_NO_WARNINGS

 

갖갖이 오류들이 떠 위의 코드를 추가

 

 

 

- C Server -

 

#pragma comment(lib, "ws2_32.lib") 
#define _WINSOCK_DEPRECATED_NO_WARNINGS 
#include <stdio.h>
#include <stdlib.h>
#include <winsock2.h>
void ErrorHandling(char* message); 

int 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 \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"); 

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(); 
return 0; 
} 

void ErrorHandling(char* message) 
{ 
fputs(message, stderr); 
fputc('\n', stderr); 
exit(1); 
}

 

 

- C Client -

 

#pragma comment(lib, "ws2_32.lib") 
#define _WINSOCK_DEPRECATED_NO_WARNINGS 
#include <stdio.h>
#include <stdlib.h>
#include <winsock2.h>
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  \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_addr = inet_addr(argv[1]); 
servAddr.sin_port = htons(atoi(argv[2])); 

if (connect(hSocket, (SOCKADDR*)&servAddr, sizeof(servAddr)) == SOCKET_ERROR) 
ErrorHandling("connect() error!"); 

strLen = recv(hSocket, message, sizeof(message) - 1, 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); 
}

 

먼저 Cserver 코드를 빌드해 실행 파일을 만들고 cmd창에서 파일의 위치로가 포트번호와 함께 실행시킨다.

 

그다음 똑같이 클라이언트도 접속을 해준다. 실행파일.exe 127.0.0.1 포트번호 입력 후 엔터 하면  

Hello World! 가 뜨고 연결됨을 알 수 있다.

 

'Socket' 카테고리의 다른 글

C (win) - Android  (6) 2020.03.02
라즈베리파이 (python) - android  (0) 2020.02.24
라즈베리파이(리눅스) - win <C 언어>  (0) 2020.02.24
python 서버 android 클라이언트  (4) 2020.02.23
python 서버, python 클라이언트  (0) 2020.02.23