Windows Socket

Windows TCP서버 소켓 통신 - 클라이언트 소켓

코카(Coca) 2021. 4. 5. 01:46

지난번 포스팅에서는 서버의 소켓을 만들었다
이번에는 클라이언트의 소켓을 정의해보고 서버에 연결한다.

1. 클라이언트의 소켓

//클라이언트 소켓 생성
SOCKET clntSocket;
clntSocket = socket(AF_INET, SOCK_STREAM, 0);

if (clntSocket == INVALID_SOCKET) {
	printf("invalid socker error");
	return 0;
}

//서버 소켓 주소정보 입력
sockaddr_in servAddr;
servAddr.sin_family = AF_INET;
servAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
servAddr.sin_port = htons(11000);


//서버로 연결
if (connect(clntSocket, (sockaddr*)& servAddr, sizeof(servAddr)) != 0) {
	printf("connect() error! [error code: %d\]n", WSAGetLastError());
	return 0;
}

클라이언트의 소켓 생성과정은 서버에 비해 훨씬 간단하다.


1) 클라이언트 소켓 생성

clntSocket = socket(AF_INET, SOCK_STREAM, 0);

socket함수를 통해 소켓을 생성한다. 소켓 생성함수의 인자들에 관한 설명은 이전 포스팅들에서 다뤘으므로 생략한다.
여기서 3번째 인자는 0을 기입해서 생략할 수 있는데, 이 경우에는 자동적으로 알맞은 프로토콜이 배정된다. 



2) 소켓 연결

connect( clientSocket, (sockaddr*)&servAddr, sizeof(servAddr))

 connect 함수를 사용하여 클라이언트에서 서버로 연결할 수 있다.

1번째 인자: 현재 다른것과 연결이 되지않은 소켓을 기입한다
2번째 인자: 연결할 정보를 담은 sockaddr 구조체의 포인터
3번째 인자: 2번째로 넘겨준 sockaddr 구조체의 byte 크기

클라이언트 소켓을 생성하고, 이것을 서버 소켓의 주소를 대상으로 연결하면 서버-클라이언트 통신이 완성된다.


서버와 클라이언트의 통신이 수립되는 과정을 요약한 그림이다.


다음 포스팅에서는 이렇게 서로 연결된 서버-클라이언트가 데이터를 송수신하는 Winsock함수를 살펴보고,
보냈던 말을 그대로 답변하는 echo서버를 구현할 것이다.