반응형
TCP 에코 클라이언트 예제 - TCP echo Client Example
전체 소스
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define PORT 9999
int main(void){
int sock;
struct sockaddr_in addr;
char buffer[1024];
const char *msg = "hello! world!";
int recv_len;
if((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0){
perror("socket ");
return 1;
}
memset(&addr, 0x00, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = inet_addr("127.0.0.1");
addr.sin_port = htons(PORT);
if(connect(sock, (struct sockaddr *)&addr, sizeof(addr)) < 0){
perror("connect ");
return 1;
}
if(send (sock, msg, strlen(msg), 0) < 0){
perror("send ");
return 1;
}
if((recv_len = recv(sock, buffer, 1024, 0)) < 0){
perror("recv ");
return 1;
}
buffer[recv_len] = '\0';
printf("recevied data : %s\n", buffer);
close(sock);
return 0;
}
TCP 서버 예제 게시글에서는 nc localhost 9999 로 접속하였지만, 이번에는 같이 쓰일 클라이언트 프로그램을 만들어보자.
클라이언트 프로그램은 아래와 같은 구조를 가진다.
1. 소켓 초기화 (socket) 2. 서버로 접속 (connect) 3. 데이터 송수진 (send, sendto/ recv, recvfrom) 4. 연결 종료(close) |
TCP 클라이언트는 서버보다 단순하다. 클라이언트 프로그램은 connect()함수를 이용하여 바로 서버에 접속하면 된다.
=======details======
if((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0){
perror("socket ");
return 1;
}
memset(&addr, 0x00, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = inet_addr("127.0.0.1");
addr.sin_port = htons(PORT);
socket()함수를 이용하여 소켓을 초기화하고, 주소정보를 저장하여 서버에 접속하는 내용이다. 주소 정보가 저장되는 구조체 addr에 주소 정보를 저장하게 되는데 inet_addr() 함수를 이용하여 서버의 IP주소를 네트워크 바이트 오더로 변환하여 저장하고 htons() 함수를 이용하여 접속하고자 하는 서버의 포트 번호를 변환하여 저장한다. 그 뒤에 connect()함수를 이용하여 서버로 접속한다.
TCP 에코 서버 예제 <-- 클릭
반응형
'[ ★ ]Study > Network' 카테고리의 다른 글
TCP 에코 클라이언트 (윈도우) (0) | 2017.06.11 |
---|---|
TCP 에코 서버 (윈도우) (0) | 2017.06.11 |
TCP 에코 서버 예제 (리눅스) (0) | 2017.06.11 |
TCP 프로토콜 (2) (0) | 2017.06.10 |
TCP 프로토콜 (1) (0) | 2017.06.09 |
댓글