728x90
반응형
프로그램 사용 함수 관련 포스팅 참고
서버 프로그램과 클라이언트 프로그램 만들기
소켓 프로그래밍 TCP/IP 통신 함수 사용하는 순서 Server Client Socket() Bind() Listen() Accept() Send() / Recv() Close() Socket() Connect() Send() / Recv() Close() socket() : 소켓 생성 ..
lieadaon.tistory.com
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include "MySocketError.h"
#pragma comment(lib, "ws2_32.lib")
#define SERVER_IP "외부ip"
#define SERVER_PORT 원하는 포트 //well-known port만 아니면 된다.
int main(void)
{
int result = -1;
//WSAStartup
WSADATA wData = { 0 };
result = WSAStartup(MAKEWORD(2, 2), &wData);
if (!result) OKMsg("WSAStartup");
else ErrorExit("WSAStartup");
//socket
SOCKET serverSocket;
serverSocket = socket(AF_INET, SOCK_STREAM, 0);
if (serverSocket == INVALID_SOCKET)
ErrorExit("socket");
else OKMsg("socket");
//bind - IP/PORT 바인드(묶어준다)
SOCKADDR_IN serverAddress = { 0 };
serverAddress.sin_family = AF_INET; //PF_INET
serverAddress.sin_port = htons(SERVER_PORT); //host - to network short
serverAddress.sin_addr.s_addr = htonl(INADDR_ANY);
serverAddress.sin_addr.s_addr = inet_addr(SERVER_IP);
result = bind(serverSocket, (SOCKADDR*)&serverAddress, sizeof(serverAddress));
if (result == SOCKET_ERROR)
ErrorMsg("bind");
else OKMsg("bind");
//listen
result = listen(serverSocket, 5);
if (result == SOCKET_ERROR)
ErrorMsg("listen");
else OKMsg("listen");
//accept
SOCKET clientSocket;
SOCKADDR_IN clientAddress = { 0 };
memset(&clientAddress, 0, sizeof(clientAddress));
int sizeClientAddress = sizeof(clientAddress);
clientSocket = accept(serverSocket, (SOCKADDR*)&clientAddress,
&sizeClientAddress);
if (clientSocket == INVALID_SOCKET)
ErrorMsg("accept");
else OKMsg("accept");
printf("client(IP:%s,PORT:%d)accepted\n", inet_ntoa(clientAddress.sin_addr), ntohs(clientAddress.sin_port));
char clientIP[20] = { 0 };
printf("[client IP:%s,PORT:%d] accepted\n", clientIP, ntohs(clientAddress.sin_port));
//send/recv
//closesocket - serverSocket 닫는 것
result = closesocket(serverSocket);
if (result == SOCKET_ERROR)
ErrorMsg("closesocket");
else OKMsg("closesocket");
//WSACleanup
result = WSACleanup();
if (result == SOCKET_ERROR)
ErrorMsg("WSACleanup");
else OKMsg("WSACleanup");
return 0;
}
728x90
반응형