TCP를 통해 클라이언트와 서버간에 통신을 시도하고 있습니다.비트 스트림 데이터 인쇄/TCP 관련
클라이언트가 비트 스트림으로 10 개의 16 진수를 Sever에게 보냈다고 가정 해 봅시다. send(socketID, pSend, 20, 0);
pSend = &ArrayClient;
및 unsigned short ArrayClient[] = { 0A, 0B, BA, B1...., FA }
입니다.
서버는 recv(acceptID, pRecv, 20, 0)
으로 바이트 스트림을 수신합니다. 내 포인터 pRecv
의 내용을 올바르게 인쇄하려면 어떻게해야합니까? Sever는 클라이언트가 보낸 바이트 수를 알 수 없으므로 인쇄 할 수있는 바이트 수를 알지 못합니다. 데이터가 비트 스트림으로 전송 되었기 때문에 문자열이 아닙니다. 문자열로 작업하는 것 같이 \0
을 찾음으로써 메시지의 끝을 알 수 없습니다.
따라서 얼마나 많은 바이트를 서버로 수신했는지, 또는 pRecv
의 16 진수로 비트 스트림을 인쇄하는 방법을 알 수 있습니다.
이 같은 포인터와 비슷한 포인터를 시도 :
while(((unsigned int*)pRecv)[i] != 0){
printf("%X", ((unsigned int*)pRecv)[i]);
i++;
}
RECV() 함수의 값을 반환한다. (수신 한 바이트 수 또는 -1) ANY * 전송할 수있는 바이트 수를 알 수 없습니다. 당신은 단지 당신이 얼마나 많이 받았는지 알 수 있습니다. 클라이언트와 서버가 일종의 프로토콜이나 규칙을 사용하면 예상되는 바이트 수만 알 수 있습니다. (고정 길이를 전송하거나 먼저 길이를 전송하거나 매 * 메시지 * 다음에 구분 기호를 보내는 것과 같이) – joop