我正在使用超简单的同步C#套接字进行分配。分配是创建点对点聊天程序,因此每个实例必须同时作为客户端和服务器。当我把它放入监听模式时,我的程序运行得很好:( StateBall是一个传递状态变量的对象)
public void startListening()
{
lState = new StateBall();
IPEndPoint peer = new IPEndPoint(StateBall.host, StateBall.port);
lSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream,
ProtocolType.Tcp);
try
{
lSocket.Bind(peer);
lSocket.Listen(10);
Console.WriteLine("Waiting for a connection...");
StateBall.updateText("Waiting for a Connection...");
client = lSocket.Accept();
StateBall.toSend=StateBall.ourName;
StateBall.updateText("Connection made! Sending our name...");
...
但是当我尝试启动第二个实例并连接到已经运行的实例时,它只是挂起并且没有连接。
从我在本网站和其他网站上看到的内容,我可以使用以下内容检查预先存在的连接:
try{
lsocket.Connect(peer);
}
catch(Exception ex){
//check for SocketException type and errors
}
然后继续我的程序,但有没有一种干净的方法将初始检查集成到现有的代码中?或者,在尝试在我的套接字对象上调用Connect之前,是否有更好的方法来检查活动主机?
答案 0 :(得分:1)
您可以并且可能应该处理多个并发连接。只需在循环中调用accept并在不同的线程上调度客户端。我想你只使用一个线程,所以当服务器忙于一个客户端连接时,尝试在客户端超时。