소켓 프로그래밍에서 구조체를 넘길 때 데이터가 안넘어옵니다.
글쓴이: 익명 사용자 / 작성시간: 목, 2021/12/02 - 2:59오후
소켓프로그래밍을 하는 도중 클라이언트와 서버 측 모두 동일한 구조체를 선언하였습니다
typedef struct s_connection { SOCKET sock; int index; int age; char mbti[4]; char rname[32]; char nick[32]; }Connection;
이러한 구조체를 클라이언트 측에서는
Connection client; //내용을 채우고 send(client.sock,(char*)&client, sizeof(client), 0);
이렇게 서버로 보내고 서버 측에서는
Connection *tmp; char buf[512]; int retval; retval = recv(client_sock, buf, 512, 0);//client_sock은 accept의 return 값을 받은 SOCKET입니다. buf[retval] = '\0';//잉여 데이터를 제거 tmp = (Connection*)buf;//구조체 대입 tmp->sock = client_sock;//통신 소켓 변경 tmp->index = client_count++;//인덱스 저장
이런 식으로 받아오는데 이때 rname 배열에 데이터가 하나도 안 채워진 채로 넘어옵니다.
클라이언트 측에서 32바이트를 다 채우고 보내도 strlen을 이용해서 \0을 넣어도
제가 할 수 있는 많은 방식을 시도 해봤지만 아무리 해도 다른 멤버들은 정상적으로 넘어오지만
rname에 아무런 데이터도 저장 되지 않은채로 넘어옵니다 ㅠ 조언 부탁드립니다.
Forums:
일단 send, recv 함수들 반환값 정도는 찍어서
일단 send, recv 함수들 반환값 정도는 찍어서 확인해 봅시다.
제가 테스트 해봤는데 정상적으로 동작합니다.
제가 테스트 해봤는데 정상적으로 동작합니다.
서버 코드
클라이언트 코드
클라이언트 실행 결과
서버 실행 결과
테스트는 리눅스에서 했습니다.
댓글 달기