🧼C, C++/네트워크

소켓 데이터 C++ TCP

Mawile 2020. 9. 24.
728x90

시작하기 앞서서 STDC++11,14에서 정상작동이 확인되었습니다.

IDE는 DeVcpp을 사용했습니다.

 " 이글은 윈도우소켓 기본 C++ TCP " 글의 다음글임을 참고해주세요!


이번에는 ! 서버와 클라이언트간의 데이터를 받아오는 방법에 대해 포스팅할게요!

먼저 

 

데이터를 보내는방법

더보기

[  send()  ]

데이터를 받는방법

더보기

[  recv()  ]

  

여기서 주의할점은 이건 프로토콜타입이 TCP인 서버와클라이언트에서만 먹히는

데이터통신함수입니다

UDP프로토콜서버랑 클라이언트에관한 강좌는 동적연결라이브러리강좌를 끝마친뒤 올리겠습니다

 

 

 

예제코드먼저 보여드리고 설명해드릴게요

 


[[[  서버  ]]]

#include <winsock2.h>
#include <iostream>
using namespace std;

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

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

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

bind(skt, (SOCKADDR*)&addr,sizeof(addr));
listen(skt,SOMAXCONN);

SOCKADDR_IN client = {};
int client_size = sizeof(client);
ZeroMemory(&client,client_size);
SOCKET client_sock = accept(skt,(SOCKADDR*)&client,&client_size);

char buffer[]="I am server",ret=[1024]={0};
send(client_sock,buffer,strlen(buffer),0);
recv(client_sock,ret,1024,0);

closesocket(client_sock);
closesocket(skt);
WSACleanup();
}

일단 send함수는 (보낼소켓,보내고싶은데이터가담긴변수,변수의크기,플래그)

 

입니다! 먼저 저는 클라이언트의 정보를 담은구조체 "  client  " 로부터 accept를 통해 만들어진 소켓을 client_sock

이라고했고 이것이 앞으로 데이터를 받아올 클라이언트소켓입니다!

 

만약에 보내고싶은 버퍼의 자료형을 char*이아니라 string으로하고싶다? 하시면

 

string으로 바꾸시고 buffer가아닌 buffer.c_str() 이렇게 바꿔줘도 정상작동됩니다!

 

그다음 recv함수는 (보낼소켓,데이터를 받아올변수,데이터의크기,플래그)

 

입니다!

 

 

[[[  클라이언트  ]]]

#include <winsock2.h>
#include <iostream>
using namespace std;

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

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

SOCKADDR_IN addr = {};
addr.sin_family = AF_INET;
addr.sin_port = htons(4444);
addr.sin_addr.s_addr = inet_addr("서버아이피");

connect(skt, (SOCKADDR*)&addr,sizeof(addr));

char buffer[]="I am server",ret=[1024]={0};
recv(skt,ret,1024,0);
send(skt,buffer,strlen(buffer),0);

closesocket(skt);
WSACleanup();
}

 

 

사실 send랑 recv함수는 사용법만 알면 서버를 사용할때와

클라이언트를 사용할때의 차이점은 거의없습니다!

 

오늘은 이쯤하고 TCP기본 소켓강좌는 여기서 맞치겠습니다!

다음 TCP강좌는 심화강좌로서

TCP를 이용한 간단한 Backdoor (악성코드Backdoor와 원리가비슷함)를 만들어보겠습니다

감사합니다!

728x90

'🧼C, C++ > 네트워크' 카테고리의 다른 글

소켓 기본 틀 #1  (0) 2020.10.05
리버스 쉘 Reverse Shell C++  (0) 2020.10.05
실시간 채팅 프로그램 C++ TCP  (6) 2020.10.01
백도어 만들기 C++ TCP  (0) 2020.09.26
소켓 기본 C++ TCP  (0) 2020.09.18

댓글