【发布时间】:2019-03-07 23:05:20
【问题描述】:
我有一个简单的 TCP 套接字,可以将图像发送到连接的客户端。但是,如果客户端断开连接,我会得到一个异常(我应该这样做):
Systems.Net.SocketException
如何在连接丢失的情况下重新绑定到 Socket,以便在断开连接后服务器在客户端断开连接后再次开始侦听?
这是我的源代码,希望有人能帮助我。
static void HandleServer()
{
int sent;
Console.WriteLine("Server is starting...");
byte[] data = new byte[1024];
IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 9050);
Socket newsock = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
newsock.Bind(ipep);
newsock.Listen(10);
Console.WriteLine("Waiting for a client...");
Socket client = newsock.Accept();
IPEndPoint newclient = (IPEndPoint)client.RemoteEndPoint;
Console.WriteLine("Client {0} connected at port {1}!",
newclient.Address, newclient.Port);
while(true)
{
//send some data
}
}
【问题讨论】:
-
通常您将
Accept()调用包含在循环内,因此您可以拥有多个连接。然后,在每次连接之后,将其传递给另一个线程,以便它独立于其他线程工作...... -
所以做一个 while(true) 并接受内部并将客户端传递给另一个循环。断开连接后如何恢复接受?
-
外循环将仍在运行,等待连接。所以在他们失去连接后,他们会尝试重新连接......然后循环会给他们一个新的连接......
-
您好,感谢您的帮助。我将绑定提取到自己的方法中并捕获了异常。这对我来说更“正确”(个人)。无论如何感谢您的帮助!
标签: c#