소켓통신에서..
글쓴이: ymkim00 / 작성시간: 금, 2003/11/21 - 4:17오후
소켓통신을 하는데 문제가 있어 질문을 드립니다.
고수님들의 도움이 필요합니다..^^
unsigned char ret_buffer[52]; unsigned int len = sizeof(ret_buffer); int result,i; if(sockfd == -1) { } else { result = send(sockfd,ret_buffer, len, 0); if(result < 0) sock_init = 1; }
간단하게 이렇게 구성을 했을때..
ret_buffer배열 중간에 NUL이 존재합니다. 그러다 보니..
NUL이후의 데이터들은 전송이 안됩니다.
NUL과 그 이후의 데이터를 모두 전송하는 방법은 없는건가요?
며칠째 씨름하고 있는데 답이 안나옵니다.
도와주세요요요^^
Forums:
음.. 제가 알고 있는 바로는 NUL값에 상관없이 지정한 size
음.. 제가 알고 있는 바로는
NUL값에 상관없이 지정한 size만큼 데이터를 보내
는걸로 알고 있습니다.
실제 소스를 올려주시면 .. 좀더 정확히 알 수 있을거
같습니다.
“바람에게도 길은 있다. 나는 비로소 나의 길을 가느니. 길은 언제나 어디에나 있다.”
그렇다면...write() 함수를 한 번 사용해 보세요.이건 무조
그렇다면...
write() 함수를 한 번 사용해 보세요.
이건 무조건 지정한 양 만큼 보내주게 됩니다.
근데... send()는 저도 한 번도 사용을 안해봐서 잘 모르겠지만...
지정한 만큼 갈거 같은데...-_-ㅋ
<어떠한 역경에도 굴하지 않는 '하양 지훈'>
#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);
send는 지정된 크기만큼 전송하는 걸 보장하지 않습니다. send로 데
send는 지정된 크기만큼 전송하는 걸 보장하지 않습니다. send로 데이터를 보낼 때, 얼마나 보냈는지가 리턴되므로 이걸 이용해 원하는 양이 모두 전송될때까지 루프를 돌리거나 해야 합니다.
또 실수.. ^^;
요즘 좀 바쁘다 보니 두번씩이나 잘못된 답변 달았네요.. :lol:
잘못 된 답변은 삭제했고....
위분 말씀들 다 맞고..
그리고, send()했을 경우 한번에 다 전송된다는 보장 없는 것은
사실이지마, 왠만하면 한번에 다 전송됩니다. 데이터가 너무 크다던지,
네트웍 환경이 너무 좋지 않아던지.. 하는 것만 아니라면..
원하는 만큼 전송이 안되는 것은 어떻게 확인하셨는지요?
send()의 return 값으로? 아니면, 상대측 recv()의 return 값으로?
간단한 방법
송신측에선 데이터를 보내기 전에 데이터의 싸이즈를 구해서 보낸후에
데이터를 전송하게 하구요.
수신측에선 싸이즈를 받아서 그만큼 루프를 돌려 받으면 됨니다.
일단 데이터 싸이즈 받는 버퍼의 크기는 송.수신측 모두 동일 해야 겠구요.
H/W가 컴퓨터의 심장이라면 S/W는 컴퓨터의 영혼이다!
.
send 를 써서 보낼때 NULL 값인 것과는 상관없습니다.
데이타에 NULL값이 들어가서 못보낸 것이 아니라..
혹시 받는 쪽에서 NULL을 처리 못하는 건 아닌지 확인할
필요가 있겠습니다.
send의 리턴값을 꼭 확인하셔서 몇 바이트 보냈는지도
확인이 필요합니다.
Re: 소켓통신에서..
이상하군요. NULL 자체도 데이터이기 때문에 전달되어야 하는 것이 맞을 것 같은데...
혹시 수신측에서 데이터를 char*로 사용하거나 혹은 그와 관련된 어떤 함수로 처리를 하시는 것인지 확인해 보시기 바랍니다.
또, 송신측은 다음과 비슷하게 수정 하시는 것이 좋을 것 같습니다.
socket 관련 에러 처리는 적지 않았습니다.
위와 비슷하게 처리해야 원하는 크기의 data를 전송하는 것을 보장할 수 있습니다.
To be a rich
댓글 달기