Socket程式設計問題小記

2021-09-19 13:28:22 字數 893 閱讀 5254

在socket程式設計中,如果在乙個while迴圈中使用:

objectinputstream reader = new objectinputstream(socket.getinputstream);

reader.readobject();

可能會出現eofexception,

看了網上的很多答案和解釋,覺得都不對,網上都說是因為已經到達檔案末尾了,而reader還在讀取資料,所以在報錯

其實,這是不對的,在迴圈中呼叫它本沒有錯,在while迴圈中如果沒有資料可讀了,它會自動阻塞,有資料來的時候就會讀,所以在這種情況下根本不會出現

到達檔案末尾了,而reader還在讀

的問題,那麼出現這種情況的原因是什麼呢?

其實是**業務邏輯的問題,導致reader在讀的時候,socket被關閉,reader被關閉,連線被關閉等等,所以完全是**設計的問題,

另外在使用objectoutputstreamobjectinputstream的時候要注意乙個問題,這兩者建立的順序需要遵循一定的約定,objectinputstream的建立需要objectoutputstream建立後的一些資料,所以它一般在objectoutputstream之前。建立好objectoutputstream之後,還會先向流中先寫入4個位元組的資料,建立objectinputstream的時候會相應的將其讀出來,所以,不能多次建立objectoutputstream,因為這會導致多次寫入資料,

socket程式設計小記

網路程式設計課上學習了一些socket函式,在c語言下和mfc下小結一下 首先socket的五元組有 源ip,目標ip,源埠,目的埠,協議 總的來說socket分為幾個步驟,對於客戶端 1.初始化 2.建立socket結構,填充如tcp udp型別,ipv4結構等 3.建立目標ip的位址,目的埠資訊...

socket程式設計小記

1.在寫乙個原始套接字程式設計的過程中查到的知識點 建立原始套接字之後,就可以使用sendto 和recvfrom 傳送和接收icmp資料報了。原始套接字接收報文規則 若接收的報文協議型別和定義的原始套接字匹配,那麼接收的所有資料拷貝入套接字中 如果套接字繫結了本地位址,那麼只有接收資料ip頭中對應...

socket程式設計小記

前言 winsock是由unix下的bsd socket發展而來,是乙個與網路協議無關的程式設計介面。標頭檔案 include 引用庫 pragma comment lib,ws2 32.lib 引數 wversionrequested 版本資訊。高階位元組指定小版本號,低位位元組指定主版本號。lp...