作为TCP/IP客户端-服务器的一部分编写:
服务器:
代码语言:javascript运行复制write(nfds,data1,sizeof(data1));
usleep(1000);
write(nfds,data2,sizeof(data2));客户端:
代码语言:javascript运行复制read(fds,s,sizeof(s));
printf("%s",s);
read(fds,s,sizeof(s));
printf("%s",s);在对write()的两次调用之间没有usleep(1000)的情况下,客户机将打印data1两次。为什么会这样呢?
背景:
我正在做一个客户机-服务器程序,在这个程序中,服务器必须在获取信息后通过网络(套接字)发送两个连续的信息;nfds是我们从accept()获得的文件描述符。在客户端,我们通过read接收这些信息;这里的fds是通过socket()获得的文件描述符。
我的问题是,当我不在write()函数之间使用usleep(1000)时,客户机只打印data1表示的信息两次,而不是先打印data1,然后打印data2。当我放入usleep()时,它是正常的。究竟为什么会发生这种情况?是write()阻塞操作直到缓冲区被读取,还是read()阻塞操作直到信息被写入缓冲区?还是说我完全偏离主题了?