[Socket網絡編程]由於套接字沒有連接並且(當使用一個 sendto 調用發送數據報套接字時)沒有提供地址,發送或接收數據的請求沒有被接受。


原文地址:http://blog.sina.com.cn/s/blog_70bf579801017ylu.html,記錄在此方便查看

解決辦法:

MSDN的說明:

Close 方法可關閉遠程主機連接,並釋放所有與 Socket 關聯的托管資源和非托管資源。關閉后,Connected 屬性將設置為 false。

對於面向連接TCP的協議,建議先調用 Shutdown,然后再調用 Close 方法。這可以確保在已連接的套接字關閉之前,已發送和接收該套接字上的所有數據。

如果需要在不首先調用 Shutdown 的情況下調用 Close,則可以將 DontLingerSocket 選項設置為 false,並且指定一個非零的超時間隔,從而可以確保排隊等待輸出的數據得到發送。這樣,Close 將會一直阻止到發送完該數據或指定的時限超時為止。如果將 DontLinger 設置為 false,並且指定了一個非零的超時間隔,Close 將會釋放連接並自動放棄排隊等待輸出的數據。

 

aSocket.Shutdown(SocketShutdown.Both); aSocket.Close();

 

調用Shutdown方法,可以讓應用程序不在接受和發送數據,和確保正在傳輸隊列的數據繼續傳輸,保證雙方都能收到應用程序發出的所有數據

Shutdown的參數有三個取值Both, Receive, Send

Receive表示讓應用程序不在接受數據

 

而Close()方法,會直接釋放套接字的描述,會丟棄與套接字描述相關的所有資源,包括傳輸隊列中的數據。這樣可能造成傳輸的數據丟失

所以對於面向連接TCP的套接字,應該先調用Shutdown方法在調用Close方法

 

問題:

調用Shutdown方法產生以下異常

由於套接字沒有連接並且(當使用一個 sendto 調用發送數據報套接字時)沒有提供地址,發送或接收數據的請求沒有被接受。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM