리셋 되지 말자

윈도우 기반 서버, 클라이언트 예제 작성(동작함) 본문

socket

윈도우 기반 서버, 클라이언트 예제 작성(동작함)

kyeongjun-dev 2020. 4. 6. 14:19

server

#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include <winsock2.h>
#pragma comment (lib, "ws2_32.lib")

int main(){
	WSADATA wsaData;
	SOCKET    sockSvr;
	SOCKET    sockSS;

	int        nlen;

	struct sockaddr_in    addrSockSvr;
	struct sockaddr_in    addrSockclt;

	// 윈속 초기화
	WSAStartup(MAKEWORD(2, 0), &wsaData);

	// 소켓 만들기
	sockSvr = socket(AF_INET, SOCK_STREAM, 0);

	// 소켓 설정
	addrSockSvr.sin_family = AF_INET;
	addrSockSvr.sin_port = htons(12345);

	//addrSockSvr.sin_addr.S_un.S_addr = INADDR_ANY;
	//addrSockSvr.sin_addr.S_un.S_addr = 192;
	addrSockSvr.sin_addr.s_addr = inet_addr("192.168.0.23");

	bind(sockSvr, (struct sockaddr *)&addrSockSvr, sizeof(addrSockSvr));

	// TCP클라이언트로 부터 접속 요구를 대기
	listen(sockSvr, 5);

	// TCP클라이언트로 부터 접속 요구 받기
	nlen = sizeof(addrSockclt);

	sockSS = accept(sockSvr, (struct sockaddr *)&addrSockclt, &nlen);

	// 문자송신
	send(sockSS, "Hello TCP/IP world", 18, 0);


	// TCP세션 종료
	closesocket(sockSS);

	// 윈속 종료
	WSACleanup();
	
	return 0;
}

 

client

#define _WINSOCK_DEPRECATED_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

#include <winsock2.h>
#pragma comment (lib, "ws2_32.lib")

int main()

{

	WSADATA    wsaData;

	SOCKET    sockClt;

	char    szMsg[32];

	struct sockaddr_in addrSockSvr;


	// 윈속 초기화

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


	// 소켓 만들기

	sockClt = socket(AF_INET, SOCK_STREAM, 0);


	// 접속할 서버 설정

	addrSockSvr.sin_family = AF_INET;

	addrSockSvr.sin_port = htons(12345);

	addrSockSvr.sin_addr.S_un.S_addr = inet_addr("192.168.0.23");


	// 서버에 접속

	connect(sockClt, (struct sockaddr *)&addrSockSvr, sizeof(addrSockSvr));


	// 서버로 부터 데이터 수신

	memset(szMsg, 0, sizeof(szMsg));

	int nLet = recv(sockClt, szMsg, sizeof(szMsg), 0);


	printf("%s\n", szMsg);
	scanf("%s", szMsg);

	// 윈속 종료

	WSACleanup();


	return 0;

}

오류 처리가 빠진 건데, 인터넷 블로그에서 찾았다.(출처 : https://wwwi.tistory.com/21)

192.168.0.23 부분 ip주소를 변경하면 된다.

Comments