Winsock2.h를 이용한 TCP 통신

2023. 8. 11. 16:35Server

Winsock2.h는 C++에서 소켓 통신을 위해 사용한다

이를 이용한 TCP 통신은 기본적으로 각각 socket을 만든 뒤

server측은 socket을 bind -> listen후 client에서 connect를 신청하기를 accept에서 기다리다 요청이 오면 연결 후

서로 send()로 데이터를 보내고 recv()로 받는다

 

server

#include<iostream>
#include<WinSock2.h>

#pragma comment(lib, "ws2_32")


#define PORT 1234
#define PACKET_SIZE 1024
#define SERVER_IP "127.0.0.1"
int main() {
	WSADATA wsaDATA;
	WSAStartup(MAKEWORD(2, 2), &wsaDATA);

	SOCKET hListen;
	hListen = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);

	SOCKADDR_IN tListenAddr = {};
	tListenAddr.sin_family = AF_INET;
	tListenAddr.sin_port = htons(PORT);
	tListenAddr.sin_addr.s_addr = htonl(INADDR_ANY);

	bind(hListen, (SOCKADDR*)&tListenAddr, sizeof(tListenAddr));
	listen(hListen, SOMAXCONN);
	SOCKADDR_IN tClntAddr = {};
	int iClntSize = sizeof(tClntAddr);
	SOCKET hClient = accept(hListen, (SOCKADDR*)&tClntAddr, &iClntSize);

	while (1) {
		char cBuffer[PACKET_SIZE] = {};
		recv(hClient, cBuffer, PACKET_SIZE, 0);
        std::cout << cBuffer;
		char cMsg[PACKET_SIZE] = {};
		std::cin >> cMsg;
		send(hClient, cMsg, strlen(cMsg), 0);
	}
	closesocket(hClient);
	closesocket(hListen);
	WSACleanup();
}

 

client

#include<iostream>
#include<WinSock2.h>
#include<string>
#include <ws2tcpip.h>

#pragma comment(lib, "ws2_32")
using namespace std;

#define PORT 1234
#define PACKET_SIZE 1024
#define SERVER_IP "127.0.0.1"

int main() {
	WSADATA wsaDATA;
	WSAStartup(MAKEWORD(2, 2), &wsaDATA);

	SOCKET hSocket;
	hSocket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);

	SOCKADDR_IN tAddr = {};
	tAddr.sin_family = AF_INET;
	tAddr.sin_port = htons(PORT);
	inet_pton(AF_INET, SERVER_IP, &(tAddr.sin_addr.s_addr));

	connect(hSocket, (SOCKADDR*)&tAddr, sizeof(tAddr));

	while (1) {
		int *arr = new int[20];
		char* cMsg = new char[20];
		std::cin >> cMsg;
		send(hSocket, cMsg, strlen(cMsg), 0);

		char cBuffer[PACKET_SIZE] = {};
		recv(hSocket, cBuffer, PACKET_SIZE, 0);

		std::cout << cBuffer << '\n';
	}
	closesocket(hSocket);
	WSACleanup();
}

 

 

'Server' 카테고리의 다른 글

Nginx Load Balancing  (0) 2024.03.12
JWT  (0) 2024.01.13
Http의 한계와 WebSocket  (0) 2023.08.16
Session, Cookie, Token  (0) 2023.08.16
Http에서의 Post Get Method  (0) 2023.08.07