簡體   English   中英

服務器套接字在SendCallback中關閉連接

[英]Server socket close the connection in SendCallback

我創建一個windows form是服務器套接字,而android app是客戶端套接字。 對於服務器套接字,我遵循MSDN上的本教程 我的問題是,當我調用從服務器發送的消息時,套接字將關閉,並且不再能接收到來自用戶的消息。 當我從SendCallback方法刪除ShotDownClose套接字時,在停止服務器之前,沒有任何東西發送到客戶端,並且消息將發送到客戶端。 這是SendCallback方法:

private  void SendCallback(IAsyncResult ar)
{
    Socket handler = (Socket)ar.AsyncState;
    int bytesSent = handler.EndSend(ar);

    // When I delete this two lines, nothing send to client
    handler.Shutdown(SocketShutdown.Both);
    handler.Close();
}

我不明白為什么這些行必須在SendCallback

如msdn的備注部分( 此處 )所述。 關閉處理程序將強制進行一次刷新並發送套接字中仍剩余的任何內容。

使用面向連接的Socket時,請始終在關閉Socket之前調用Shutdown方法。 這樣可確保在關閉所有數據之前,已在連接的套接字上發送和接收所有數據。

通過在msdn文章上實現的設計,它需要關閉。 Google搜索將為您顯示不同的實現。

希望這可以幫助。

回答我的問題:服務器套接字將數據放入緩沖區(這是WireShark所說的),但是android客戶端無法讀取數據。 我發現這是因為我在Java客戶端中使用in.readLine()從套接字讀取數據,但是僅當發送數據的末尾帶有末尾行時它才起作用,所以我只在任何末尾添加\\n來自服務器的消息,現在一切正常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM