[네트워크 프로그래밍] client, server 통신

  • 클라이언트로부터 문자열 받기

학교 수업시간 서버 프로그램의 전체 소스를 작성후 실행하던 중, 

아래와 같이 오류가 나왔다.

while(1){
                client_addr_size = sizeof(client_addr);
                client_socket = accept(server_socket, (struct sockaddr *)& client_addr, &client_addr_size);
                if (-1 == client_socket)
                {
                        printf("client connection failed\n");
                        exit(1);
                }
                read(client_socket, buff_rcv,BUFF_SIZE);
                printf("receive: %s\n", buff_rcv);

                sprintf(buff_snd, "%d : %s", strlen(buff_rcv), buff_rcv);
                write(client_socket, buff_snd, strlen(buff_snd)+1);
                close(client_socket);
        }
  • (1오류)

위에서 strlen(buff_rcv) 가 size_t 로 반환되는데, %d 는 int만 수용할 수 있어서 오류가 난 부분이 있다.

(int) 강제형 변환으로 해결하였다.

 

  • (2 오류)

snprintf(buff_snd, sizeof(buff_snd), "%zu : %.1000s",  strlen(buff_rcv), buff_rcv);

위와 같이 해서 해결했다.

sprintf: 형식화된 문자열을 목적지 버퍼에 쓰는 함수입니다. 버퍼의 크기를 검사하지 않아 버퍼 오버플로우의 위험이 있습니다.

snprintf: sprintf의 안전한 버전입니다. 첫 번째 인자로 목적지 버퍼를, 두 번째 인자로 버퍼의 크기를 받습니다. 지정된 버퍼 크기를 초과하지 않도록 출력을 제한합니다.

%.1000s : 최대 1000까지 입력받을 수 있도록 정의

client 와 server 가 성공적으로 통신했다!