打印比特流数据/ TCP相关

时间:2017-11-16 16:53:42

标签: c pointers tcp

我正在尝试通过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++;
}

1 个答案:

答案 0 :(得分:2)

在处理TCP时,没有内置的分离消息的方法,因此您的协议需要以某种已知的方式划分消息边界。

一种简单的方法是首先发送表示消息长度的单字节,然后发送该字节数。

例如,在发送上述消息之前,请执行以下操作:

char mlen = 20;
send(socketID, &mlen, 1, 0);