断开连接时关闭客户端套接字
问题描述:
我有监听客户端的服务器应用程序。 让我们的客户端失去了互联网连接,并失去与服务器的连接。断开连接时关闭客户端套接字
服务器自动检查客户端何时断开连接?如果不是我怎么能实现这样的事情?
Main.cs http://pastebin.com/fHYpErz7
ServerSocket.cs:http://pastebin.com/erw4tzdp
Client.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets;
namespace jM2
{
class Client
{
private int clientConnectionID;
private Socket clientSocket;
private string clientIP;
private byte[] clientBuffer = new byte[1024];
public Client(int connectionID, Socket connectionSocket)
{
clientConnectionID = connectionID;
clientSocket = connectionSocket;
clientIP = connectionSocket.RemoteEndPoint.ToString();
clientSocket.BeginReceive(clientBuffer, 0, clientBuffer.Length, SocketFlags.None, new AsyncCallback(dataArrival), null);
}
public void Disconnect()
{
clientSocket.Close();
}
private void dataArrival(IAsyncResult iar)
{
int bytesReceived = clientSocket.EndReceive(iar);
clientSocket.BeginReceive(clientBuffer, 0, clientBuffer.Length, SocketFlags.None, new AsyncCallback(dataArrival), null);
}
}
}
答
根据Chris Haas的说法,我可能是错的,但是我之前编写了一个TCP服务器,并在收到0字节时检测到了关闭的连接。换句话说,在您的dataArrival方法中,如果bytesReceived为0,则表示连接已关闭。这似乎通过相当广泛的测试工作。
基本上在服务器端进行ping功能来ping客户端,如果没有响应就关闭客户端套接字。正确?另外什么是存储客户端套接字的最佳方式? – 2011-02-18 20:54:32