Windows Programming/Windows Socket

C언어 Echo Server (1:1 통신)

Privat3 2022. 7. 14. 11:11
#define _CRT_SECURE_NO_WARNINGS

#include <stdlib.h>
#include <stdio.h>
#include <WinSock2.h>
#include <WS2tcpip.h>

#pragma comment(lib, "ws2_32")

#define PORT 7777

int main(void) 
{
	printf("Sever Working...\n\n");

	WSADATA wsaData			= { 0, };
	SOCKADDR_IN listnAddr		= { 0, };
	SOCKADDR_IN ClntAddr		= { 0, };
	char buf[MAX_PATH]			= { 0, };
	SOCKET hListen			= NULL;
	int iClntSize = 0, nErrorCode = 0;

	WSAStartup(MAKEWORD(2, 2), &wsaData);

	hListen = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
	if (hListen == SOCKET_ERROR)
	{
		printf("Socket Error!");
	}

	listnAddr.sin_family = AF_INET;
	listnAddr.sin_port = htons(PORT);
	listnAddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);

	nErrorCode = bind(hListen, (SOCKADDR*)&listnAddr, sizeof(listnAddr));
	if (nErrorCode == SOCKET_ERROR)
	{
		printf("Bind() Error!");
		return 0;
	}

	nErrorCode = listen(hListen, SOMAXCONN);
	if (nErrorCode == -1)
	{
		printf("Listen() Error!");
		return 0;
	}

	iClntSize = sizeof(ClntAddr);

	SOCKET hClient = accept(hListen, (SOCKADDR*)&ClntAddr, &iClntSize);
	if (hClient == SOCKET_ERROR)
	{
		printf("Accept() Error!");
		return 0;
	}

	while (TRUE)
	{
		nErrorCode = recv(hClient, buf, MAX_PATH, 0);
		if (nErrorCode == SOCKET_ERROR)
		{
			printf("Recv() Error!");
			break;
		}

		printf("Client Msg = %s\n", buf);

		nErrorCode = send(hClient, buf, strlen(buf), 0);
		if (nErrorCode == SOCKET_ERROR)
		{
			printf("Send() Error!");
			break;
		}
	}

	closesocket(hListen);
	WSACleanup();
	
	return 0;
}