Winsock2.h를 이용한 TCP 통신
2023. 8. 11. 16:35ㆍServer
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 |