gpt4 book ai didi

c - 如何在套接字流缓冲区中添加空终止。 C

转载 作者:行者123 更新时间:2023-11-30 16:46:52 26 4
gpt4 key购买 nike

我已经用 C 成功创建了 TCP 客户端/服务器模型。一切都很完美,所以我不希望这个问题被误解为如何用 C 语言编写 TCP 客户端/服务器。

我想要的只是通过流发送一个NullTerminator(大小为一个字节)。

假设客户端仅发送而服务器正在接收。我写了下面的代码,但它有一些问题(我正在寻找一些帮助)

/* client code*/
strcpy(stringToSend,argv[i]);
strcat(stringToSend,argv[i+1]);
strcat(stringToSend,"\\0"); //note that double '\\' refers on escaping the '\'
strcat(stringToSend,argv[i+2]);
send(mySocket, stringToSend, strlen(stringToSend), 0);
/* client code*/

但是快速浏览一下下面的代码(及其结果),我正在处理的问题是不言自明的:

#include <stdio.h>

int main(){
printf("Null in ASCII is <%d>\n", ((char) 0));
printf("Size of null is <%ld>\n", sizeof((char)0));

printf("Size of this \\0 is <%ld>\n", sizeof("\0"));
return 0;
}

终端输出:

bash$>./test
Null in ASCII is <0>
Size of null is <1>
Size of this \0 is <2>
bash$>

简而言之,使用 strcat(stringToSend,"\\0"); 我只是将字符 '\''0' 添加到字符串中,然后仅此而已。

我尝试在客户端使用 strcat(stringToSend,(char) 0) 在字符串中附加空字符(1 个字节)以发送到流,但我遇到了 strcatstrcpy 需要一个指针才能工作,而不是一个 INT (其中 (char) 0 是,我不认为这也是一种方法来解决问题。

我知道每个字符串本身都是以空字符结尾的,并且我不是在寻找此信息。我所尝试的只是按照自己的意愿将一个字节的空终止符附加到流中。还有其他我不知道的功能可以帮助我做到这一点吗?

感谢您的宝贵时间!

最佳答案

send(mySocket, stringToSend, strlen(stringToSend), 0);

问题就出在这里。缓冲区中已经有一个尾随空值可以使其工作,但您没有发送它。试试这个:

send(mySocket, stringToSend, strlen(stringToSend)+1, 0);

您也这样误导自己:

printf("Size of this \\0 is <%ld>\n", sizeof("\0"));

它打印 sizeof "\0",而不是 sizeof "\\0",这是你想要的,应该是 3。这都是无关紧要的。

关于c - 如何在套接字流缓冲区中添加空终止。 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43558969/

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