gpt4 book ai didi

c - 打印比特流数据/TCP 相关

转载 作者:太空宇宙 更新时间:2023-11-04 08:00:06 25 4
gpt4 key购买 nike

我正在尝试通过 TCP 在客户端和服务器之间进行通信。

假设客户端将 10 个十六进制数字作为比特流发送到服务器。 send(socketID, pSend, 20, 0); 其中 pSend = &ArrayClient;unsigned short ArrayClient[] = { 0A, 0B, BA, B1.. .., FA .

服务器使用recv(acceptID, pRecv, 20, 0) 接收字节流。我怎样才能正确打印出指针 pRecv 中的内容。作为服务器,我不知道客户端发送了多少字节,因此我不知道要打印多少字节。因为数据是作为比特流发送的,而不是字符串。我无法通过查找 \0 来知道消息的结尾,就像使用字符串一样。

那么有没有一种方法可以让我知道我作为服务器收到了多少字节,或者有什么方法可以在我的 pRecv 中将比特流打印为十六进制数。

我试过指向指针的指针和类似这样的东西:

while( ((unsigned int*)pRecv)[i] != 0){
printf("%X", ((unsigned int*)pRecv)[i]);
i++;
}

最佳答案

处理 TCP 时,没有内置的消息分隔方式,因此您的协议(protocol)需要以某种已知方式分隔消息边界。

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

例如,在发送上面的消息之前,这样做:

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

关于c - 打印比特流数据/TCP 相关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47335177/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com