我做在客戶端寫一些東西到服務器一個簡單的TCP服務器/客戶端應用程序,它然後回顯到客戶端。但是,當我試圖讀取服務器在客戶端回顯什麼時,我遇到了一些問題。讀取和寫入套接字
string s;
while((n = read(socketFD[0],readBuf, BUFFER_SIZE)) > 0){
cout<<"\nBytes read: "<<n<<endl;
s.append(readBuf, n);
}
cout<<"\nTest after read\n";
我寫16 KB的文本到服務器。當我在客戶端閱讀時,我每次閱讀4 KB。
從這段代碼的輸出是:
Bytes read: 4096
Bytes read: 4096
Bytes read: 4096
Bytes read: 4046
讀取調用似乎它的完成從套接字讀取後,再也不離開環路阻斷。我怎樣才能解決這個問題?
編輯:這是處理連接的客戶端的服務器中的代碼。
if((childpid = fork()) == 0){
close(listenFD);
while ((n = read(connectFD, buf, BUFFSIZE)) > 0){
cout<<"\nBytes read: "<<n<<endl;
write(connectFD, buf, n);
}
cout<<"\nTest after read\n";
exit(0);
}
這個輸出是:
Bytes read: 4096
Bytes read: 4096
Bytes read: 4096
Bytes read: 4046
Test after read
相比,在客戶端的代碼有什麼不同在這裏?爲什麼讀取調用塊不像在客戶端中那樣?
什麼是'readArr'?當服務器關閉連接時,循環應該退出 - 'read()'將返回0來指示EOF。 – Barmar
這是一個拼寫錯誤,應該是readBuf – Carlj901
這是行不通的,因爲readBuf不是C++字符串或C字符串。 C字符串需要以null結尾,而'read'不會這樣做,因爲它可以用於非字符串的數據。 – Barmar