【发布时间】:2013-01-20 20:11:29
【问题描述】:
我使用 Sockets 编写了一个服务器端代码,它工作正常,但有一个问题我不知道如何处理这种情况:如果客户端只是关闭应用程序而不发送断开连接请求,我的服务器端程序会崩溃。我需要做些什么来避免这种情况?请指导我,我是 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);
}
}
【问题讨论】:
-
您将需要尝试/捕获相应的异常:msdn.microsoft.com/en-US/library/0yd65esw(v=vs.110).aspx 由于您似乎对堆栈溢出不熟悉,请务必阅读常见问题解答部分。 stackoverflow.com/faq
-
请在您得到异常的地方发布代码。
-
我正在使用这个,但是整个服务器端应用程序因此崩溃并且无法响应其他客户端
-
我已经发布了代码@ErenErsönmez
-
@user1941098 好吧,您只是重新抛出异常。您只需忽略它(但可能会执行其他操作,例如从 connectedClients 中删除客户端对象)。
标签: c# sockets network-programming