寫爲TCP/IP客戶端 - 服務器的一部分:write()系統調用是否會阻止進一步操作,直到涉及read(),反之亦然?
服務器:
write(nfds,data1,sizeof(data1));
usleep(1000);
write(nfds,data2,sizeof(data2));
客戶:
read(fds,s,sizeof(s));
printf("%s",s);
read(fds,s,sizeof(s));
printf("%s",s);
沒有兩個電話之間usleep(1000)
到write()
,客戶端打印數據1次。爲什麼是這樣?
背景:
我做所在服務器都有自己的收購後,發送兩個連續的信息客戶端 - 服務器程序,通過網絡(插座); nfds
是我們從accept()
獲得的文件描述符。 在客戶端,我們通過read
收到這些信息;這裏fds
是通過socket()
獲得的文件描述符。
我的問題是,當我不使用的write()
功能之間的usleep(1000)
,客戶端只是打印而不是打印數據1,然後通過DATA2 DATA1代表兩次信息。當我輸入usleep()
時沒問題。這究竟是爲什麼發生的?是否write()
阻止操作直到緩衝區被讀取或者是read()
阻止操作直到信息被寫入緩衝區?或者我完全離開了網頁?
您沒有給出足夠的上下文以獲得有意義的答案。 –
你需要什麼?我可以提供它。 –
始終檢查讀取和寫入的返回代碼,以查看它們傳輸了多少個字符。 – meuh