구조체배열을 소켓스트림에 실어서 다른 호스트의 똑같은 구조체
글쓴이: hiscom / 작성시간: 금, 2005/06/03 - 10:34오전
struct _a {
x [50] ;
y [50] ;
z [50] ;
} a [10] ;
서버(linux)에 이런 구조체에 테이터가 들어 있고요.
socket => bind => listen => accept 해서 대기상태.
클라이언트(Windows)에도 똑같은 구조체로 준비하고
socket => connect 해서 정상적으로 연결이 되었습니다.
서버에서 accept하면 바로 아래와 같이 하게 했습니다.
write (sock, a, sizeof (a));
write (sock, '\0', 1);
클라이언트는 connect 후 아래와 같이 하게 했습니다.
while( recv(sock, a, sizeof (a) - 1, 0) != 0);
ㅜㅜ 블러킹 되어서 '응답없음'이라고 하고 동작이 않되네요..
똑같이 복사하는 방법좀 알려주세요~~~
Forums:
Re: 구조체배열을 소켓스트림에 싫어서 다른 호스트의 똑같은 구
struct를 만드실때 #pragma pack(1) 같은것으로 1byte align을 해서 보내보세요.
http://www.korone.net QT 커뮤니티 사이트
자세히좀 알려주세요..
pragma 공부해서 했는데요...
똑같아요.. 다른 문제가 있는듯한데요..
write(sock, '\0', 1); 대신 close(sock)해도 마찬가지 입니다.
ㅜㅜ
recv 에 대해 잘 못 이해하고 계시군요.논블럭 소켓에서 recv
recv 에 대해 잘 못 이해하고 계시군요.
논블럭 소켓에서 recv 에서 0 이 리턴되는건 상대방이 접속을 끊었을 때입니다.
이런식의 수신한 데이터를 계속 누적해 가면서 사이즈를
체크하는 코드가 필요합니다.
위에꺼 작동할지는 모르겠네요.
요점의 스트림을 어떻게 수신을 처리하는지 개념을 이해하는
정도로 해주세요.
그리고 좀 더 효율적으로 코딩하면
recv(fd, &buf_accum[buf_pos], sizeof(buf_accum)-buf_pos)
이렇게 해서 recv 에서 바로 누적 buf 로 데이터를 기록하게 하므로서 memcpy 를 제거하는 것이죠
댓글 달기