在socket程式設計中,如果在乙個while迴圈中使用:
objectinputstream reader = new objectinputstream(socket.getinputstream);
reader.readobject();
可能會出現eofexception,
看了網上的很多答案和解釋,覺得都不對,網上都說是因為已經到達檔案末尾了,而reader
還在讀取資料,所以在報錯
其實,這是不對的,在迴圈中呼叫它本沒有錯,在while
迴圈中如果沒有資料可讀了,它會自動阻塞,有資料來的時候就會讀,所以在這種情況下根本不會出現
到達檔案末尾了,而reader還在讀的問題,那麼出現這種情況的原因是什麼呢?
其實是**業務邏輯的問題,導致reader
在讀的時候,socket被關閉,reader被關閉,連線被關閉等等,所以完全是**設計的問題,
另外在使用objectoutputstream
和objectinputstream
的時候要注意乙個問題,這兩者建立的順序需要遵循一定的約定,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...