- 클라이언트로부터 문자열 받기
학교 수업시간 서버 프로그램의 전체 소스를 작성후 실행하던 중,
아래와 같이 오류가 나왔다.
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 가 성공적으로 통신했다!
'cs이론 > 네트워크 프로그래밍' 카테고리의 다른 글
[네트워크 프로그래밍] 소켓, 서버/클라이언트 프로그램 (0) | 2024.09.30 |
---|---|
[네트워크 프로그래밍-윤성우 저 열혈강의 TCP/IP 소켓 프로그래밍] chap01,02,03 정리 (0) | 2024.09.13 |
[네트워크 프로그래밍-3주차 정리] 소켓이란/네트워크 연결 모델/인터넷 서비스 포트 (0) | 2024.09.13 |