运维开发网
广告位招商联系QQ:123077622
 
广告位招商联系QQ:123077622

如何使用小缓冲区将格式化字符串发送到套接字?

运维开发网 https://www.qedev.com 2020-07-15 08:59 出处:网络 作者:运维开发网整理
我正在尝试将一些xml数据写入C中的套接字.我可以使用以下命令将xml字符串打印到屏幕: printf("<tag1>%d</tag1>" "<tag2>%s</tag2>" "<tag3>%s</tag3>" "<tag4>%d</tag4>", int1, str2, str3, int4); 我
我正在尝试将一些xml数据写入C中的套接字.我可以使用以下命令将xml字符串打印到屏幕:

printf("<tag1>%d</tag1>"
       "<tag2>%s</tag2>"
       "<tag3>%s</tag3>"
       "<tag4>%d</tag4>",
       int1,
       str2,
       str3,
       int4);

我尝试将该字符串snprintf到缓冲区(char []),然后将缓冲区的内容写入套接字,而不是打印到stdout.不幸的是,我想这里缓冲区在写入str2或str3时可能已满,可能甚至不足以包含任何一个字符串.

使用snprintf可以很容易地检查我是否能够将所有数据写入缓冲区,但是在将缓冲区内容发送到套接字后我不能继续停止.

基本上:如果格式化的字符串超过64个字节,是否有功能可以让我将“%d%s%s%d”的64字节发送到套接字?

如果此功能不存在,我对您建议的解决方法感兴趣(如果有帮助,您可以假设%s字段由一个试图溢出缓冲区的邪恶机器人填充,无论大小如何).

使用带有套接字描述符的fprintf怎么样?

就像是:

int sockfd = socket(AF_INET, SOCK_STREAM, 0);
FILE *fd = fdopen(sockfd, "w")
fprintf(fd, "<tag1>%d</tag1>"
   "<tag2>%s</tag2>"
   "<tag3>%s</tag3>"
   "<tag4>%d</tag4>",
   int1,
   str2,
   str3,
   int4);
fflush(fd);

扫码领视频副本.gif

0

精彩评论

暂无评论...
验证码 换一张
取 消