我正在尝试通过TCP在客户端和服务器之间进行通信。
让我们说客户端将10个十六进制数作为比特流发送给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
的形式打印出比特流作为十六进制数字。
我尝试过指向指针的指针和类似的东西:
while( ((unsigned int*)pRecv)[i] != 0){
printf("%X", ((unsigned int*)pRecv)[i]);
i++;
}
答案 0 :(得分:2)
在处理TCP时,没有内置的分离消息的方法,因此您的协议需要以某种已知的方式划分消息边界。
一种简单的方法是首先发送表示消息长度的单字节,然后发送该字节数。
例如,在发送上述消息之前,请执行以下操作:
char mlen = 20;
send(socketID, &mlen, 1, 0);