Chinaunix

标题: UNP 读写套接字背后是怎样的? [打印本页]

作者: 729926317    时间: 2011-12-01 15:11
标题: UNP 读写套接字背后是怎样的?
开始看了一点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报文段中的数据?
作者: crazyhadoop    时间: 2011-12-01 15:43
read读取的就是数据流,不知道是多少个数据包。
作者: 729926317    时间: 2011-12-01 15:47
回复 2# crazyhadoop

恩,我也就是不知道会不会把两个甚至更多的TCP报文段中的数据合并在一起一次给read了。
作者: crazyhadoop    时间: 2011-12-01 16:04
回复 3# 729926317


    会,你每次写10个,写3次,可以一次就读30个出来。
作者: 729926317    时间: 2011-12-01 16:27
回复 4# crazyhadoop

那如果换成使用UDP,recvfrom方法是不是每次都只能接受一个UDP数据报?




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2