본문 바로가기
[ ★ ]Study/Network

TCP 에코 서버 클라이언트 (리눅스)

by nroses-taek 2017. 6. 11.
반응형

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

댓글