2014-07-15 5 views
0

소켓에서 int 배열을 전송하는 중 문제가 있습니다. htonl()의 올바른 사용법은 무엇입니까?소켓을 통해 배열을 전송하는 데 문제가 있습니다.

int arra[3]={6000,7000,8000}; 

을 소켓이라고 new_socket

어떻게 내가 소켓의 다른 쪽 끝을 올바르게 전송할 않습니다 내가 가지고 말할 수?

클라이언트는 다음 코드를 읽고 :

char buf[BUFLEN] = ""; // buffer for recv() calls 

for (i = 0; i < nbytes; i += INTLEN) { 
    int file_port = ntohl(*(int *)&buf[i]); 
+0

'htol' * before * 송신을 통해 송신기 측을 개조하고,'ntohl'을 사용하여 수신 측에서 * complete * 수신을 한 후에 배열을 열거하십시오. 이미 거의 두 번째 절반이 내려간 것처럼 보입니다. – WhozCraig

+0

나는 버퍼를 기다리고있는 클라이언트를 수정할 수없고 그것으로부터 int를 취한다. 여전히 서버를 구현하는 방법을 알지 못한다. –

+0

당신의 질문은 그것을 보내기 전에'arra' 배열로 무엇을 할 것인가에 대한 것으로 보인다. 끝으로, 나는 당신에게 말했다. 실제 소켓 작업의 책임은 전혀 관련이없는 문제입니다. 또한이 디자인은 클라이언트와 서버 모두에서 'int'가 동일한 비트 폭이라고 가정해야합니다. 클라이언트 쪽이 진정으로 휴대 가능하다면 참을 수없는 * 것이 될 수 있습니다. 행운을 빌어 요. – WhozCraig

답변

0
int i, wp1, ret; 
    for (i = 0; i < 3; i++) { 
     wp1 = htonl(arr[i]); 
     ret = write(sockfd, wp1, sizeof(int)); 
     //error check based on ret 
    } 

이 작동합니다. TCP는 스트림입니다. 하나의 쓰기 또는 여러 개의 쓰기가 중요하지 않습니다. 필요한 바이트 수를 얻고 어느 쪽이든 전체 출력을 붙여 넣을 때까지 한꺼번에 읽을 수 있습니다.

+0

여전히 작동하지 않으며 클라이언트 메소드를 변경할 수 없습니다. 버퍼로 보내야합니다. –

+1

이 대답을 좀 더 잘 설명 할 수 있습니까? 지금 당장은 StackOverflow 경험적 방법에 의해 낮은 품질로 표시되었습니다. – Brian

+0

독서 후에 ntohl하고있는 것처럼 글쓰기 전에 htonl – Nish

관련 문제