我一直在使用套接字编写服务器端的代码,它工作正常,但有一个问题,我不知道如何处理这种情况:如果客户只是关闭应用程序而不发送断开连接请求时,我的服务器端程序崩溃。我需要做什么来避免这种情况?请指导我我是Socket编程的新手。如何在Socket编程中处理客户端断开连接?
private void OnReceive(IAsyncResult result)
{
try
{
Socket clientSocket = (Socket)result.AsyncState;
clientSocket.EndReceive(result);
command = responseMessage = string.Empty;
command = ByteToString(receviedData);
receviedData = new byte[30];
if (command=="Connect")
{
ClientInfo clientInfo = new ClientInfo();
clientInfo.socket = clientSocket;
clientInfo.IP = clientSocket.RemoteEndPoint.ToString();
connectedClients.Add(clientInfo);
responseMessage = "Connection established...";
}
else if (command=="Disconnect")
{
for (int i = 0; i < connectedClients.Count; i++)
{
if (connectedClients[i].socket == clientSocket)
{
connectedClients.RemoveAt(i);
break;
}
}
clientSocket.Close();
}
else
{
responseMessage = "Error";
}
byte[] responseStatus = StringToByte(responseMessage);
for (int i = 0; i < connectedClients.Count; i++)
{
if (connectedClients[i].socket==clientSocket)
{
connectedClients[i].socket.BeginSend(responseStatus, 0, responseStatus.Length,SocketFlags.None, new AsyncCallback(OnSend), connectedClients[i].socket);
break;
}
}
}
catch(Exception ex)
{
throw new Exception(ex.Message);
}
}
你需要的try/catch相应的异常:http://msdn.microsoft.com/en-US/library/0yd65esw( v = vs.110).aspx 由于您似乎是堆栈溢出的新手,请务必阅读FAQ部分。 http://stackoverflow.com/faq – yas4891
请发布您的例外代码。 –
我使用的这个,但整个服务器端的应用程序,因为这崩溃,没能以及 – user1941098