🧼C, C++/네트워크
소켓 데이터 C++ TCP
시작하기 앞서서 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와 원리가비슷함)를 만들어보겠습니다
감사합니다!
'🧼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 |
댓글