请教一个socket编程的问题

发布于 2022-07-21 09:10:18 字数 370 浏览 6 评论 3

在学习socket编程时写了一个IP报文的远程发送程序,功能是将IP分片重组为报文然后用TCP连接从客户端发送到服务器端并在服务器端显示。在客户端我是利用ping产生的报文,在这个过程中我发现服务器端的accept函数的返回时机好像是不确定的,当我在服务器端设置了固定长度的缓冲区然后接受报文时,发现accept函数并不是全都在接受到一个完整的报文之后再返回,而是由时候接受了一个分片,有时候接受了几个分片的时候就返回了。我在客户端的报文是存储在一个完整的缓冲区发送的, 服务端接收的缓冲区也足够大,那accept函数到底是在什么时候返回呢?还有在我传送64字节大小的报文时,发现不管服务器端是将报文存在缓冲区里然后返回还是每接收一个字符就返回,都不能在接受之后马上返回并在屏幕上显示,而是在接受了7个包之后才返回在屏幕上打印,这是为什么?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

彩虹直至黑白 2022-07-23 04:30:00

原帖由 mq110 于 2006-4-28 11:32 发表
你printf里加n了吗?
我怀疑是printf行缓冲的原因.

有道理,我以前用UDP通讯也遇到这样的问题,经证实就是printf("%sn",)与printf("%s",)的差异引起的

[ 本帖最后由 duanjigang 于 2006-5-5 17:44 编辑 ]

财迷小姐 2022-07-22 20:29:21

printf行缓冲是怎么样的?为什么我有的时候可以一次打印整个报文,有的时候只能打印一部分,而且这一部分还正好是几个分片的长度,这应该不是巧合吧。还有如果我循环调用accept(),就可以受到整个的报文,但是每次受到的长度跟我发送的长度是不一样的?

下雨或天晴 2022-07-22 04:38:30

你printf里加n了吗?
我怀疑是printf行缓冲的原因.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文