免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2098 | 回复: 4
打印 上一主题 下一主题

UNP 读写套接字背后是怎样的? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-01 15:11 |只看该作者 |倒序浏览
开始看了一点UNP,看完了那个最简单的回射程序之后有了一些疑惑的地方,跑来这请教下大家。

在tcp链接建立之后
client从stdin读出数据写到套接字中,然后再从套接字中读取数据;

  1. while (Fgets(sendline, MAXLINE, fp) != NULL) {

  2.                 Writen(sockfd, sendline, strlen(sendline));

  3.                 if (Readline(sockfd, recvline, MAXLINE) == 0)
  4.                         err_quit("str_cli: server terminated prematurely");

  5.                 Fputs(recvline, stdout);
  6.         }
复制代码
server从套接字读取数据再些回到套接字中。

  1. while ( (n = read(sockfd, buf, MAXLINE)) > 0)
  2.                 Writen(sockfd, buf, n);
复制代码
我的疑问是在client执行Writen之后,是不是就报这些数据封装成一个TCP报文段发送给server?
那么server的read是不是读取一个TCP报文段之后就停止了(假设这个TCP报文段大小小于MAXLINE)?
有没有可能server的一次read就读取了多个TCP报文段中的数据?

论坛徽章:
1
天蝎座
日期:2013-12-06 18:23:58
2 [报告]
发表于 2011-12-01 15:43 |只看该作者
read读取的就是数据流,不知道是多少个数据包。

论坛徽章:
0
3 [报告]
发表于 2011-12-01 15:47 |只看该作者
回复 2# crazyhadoop

恩,我也就是不知道会不会把两个甚至更多的TCP报文段中的数据合并在一起一次给read了。

论坛徽章:
1
天蝎座
日期:2013-12-06 18:23:58
4 [报告]
发表于 2011-12-01 16:04 |只看该作者
回复 3# 729926317


    会,你每次写10个,写3次,可以一次就读30个出来。

论坛徽章:
0
5 [报告]
发表于 2011-12-01 16:27 |只看该作者
回复 4# crazyhadoop

那如果换成使用UDP,recvfrom方法是不是每次都只能接受一个UDP数据报?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP