2009-10-22 32 views
2

我正在使用超简单同步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 
} 

,然后去与我的计划,但有将初始检查集成到现有代码中的一种干净方式?还是有更好的方法来检查一个活动主机之前尝试调用我的套接字对象上的连接?

回答

1

您可以也可能应该处理多个并发连接。只需在循环中调用accept并在不同的线程上分派客户端即可。我想你只使用一个线程,所以当服务器忙于一个客户端连接尝试超时在客户端。

相关问题