1. 程式人生 > >TCP斷開連線情況判斷(傳送端沒有任何資訊告知現在狀態的情況下)

TCP斷開連線情況判斷(傳送端沒有任何資訊告知現在狀態的情況下)

上一章可以接收資料顯示了,使用中發現,第2次連線時,出現毫無反應的現象,
故障排查,想著是不是要斷開連線,沒有關閉的緣故,
後來覺的不傳送資料了並不是說就要斷開連線,
並且資料傳送段沒有任何資訊告訴我啥時候是連著沒資料(暫停),啥時候是不連線了(關閉),
所以,想通過以接收的資料是不是0判斷就不行了,

最後的思路是:執行後我開啟一個後臺執行緒時刻監聽是否有連線請求,收到請求就建立一個執行緒,去接收處理資料,
再收到一個請求就把上一個執行緒殺死,執行下一個執行緒。(如果不是在一個死迴圈裡,執行緒長久不使用了,會被清理的,不過我需要寫在死迴圈裡,所以要手動殺死)

整理的程式碼如下:

 ///
<summary>
/// 初始化連線 /// </summary> public void initBack() { //定義偵聽埠,偵聽任何IP ipEnd = new IPEndPoint(IPAddress.Any, 5300); //定義套接字型別,在主執行緒中定義 serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //連線
serverSocket.Bind(ipEnd); //開始偵聽,最大10個連線 serverSocket.Listen(10); //開啟一個執行緒連線,必須的,否則主執行緒卡死 Thread thread = new Thread(Listen); thread.Start(serverSocket); } /// <summary> /// 監聽連線 /// </summary> Thread lastThread = null
; void Listen( ) { while (true) { clientSocket = serverSocket.Accept(); countSocket++; if (clientSocket != null) { Thread th = new Thread(A); th.IsBackground = true; if (lastThread != null) { lastThread.Abort(); } th.Start(); lastThread = th; } } } void A() { while (true) { ReceiveBack(); } }

這樣就可以了