2010-01-15 71 views
1

我在网络上运行我的应用程序,并且在某些情况下客户端失去了与服务器的连接。在这段时间之后,当我想向服务器发送一条消息时,我收到以下错误:在未连接的套接字上不允许操作(类似这样的事)。C#客户端 - 服务器应用程序问题

我想创建对象类型的TcpClient的事件,并且当tcp_obj.Connected = false以调用一个函数来中止当前的代码的执行。我怎么能这样做?

或给我其他suggestios。

谢谢。

回答

0

我知道至少从套接字编程在Java中,当客户端断开连接到服务器,服务器不会也不可能知道这件事。您需要某种心跳来检测早期断开连接。

我们经常在我们的客户机/服务器应用程序,以检测早期断开,并记录他们的服务器上使用心跳。这样服务器可以关闭关联的套接字并将连接释放回池中。

只需向客户端定期发送命令并等待响应。如果在超时时间内没有收到响应,则假定断开连接并关闭流。

0

在尝试发送消息之前,我只是首先检查您的连接对象以确保您已连接。另外,请确保您将发送逻辑放在try-catch中,这样,如果您碰巧断开了中间传输,您将可以继续进行,而不会将应用程序分开。

伪代码:

private void SendMessage(string message, Socket socket) 
{ 
    if(socket.connectionState = States.Connected) 
    { 
     try{ 
     // Attempt to Send 
     } 
     catch(SocketException Ex) 
     { 
     // Disconenct, Additional Cleanup Etc. 
     } 
} 
} 

如果你在C#中,之前您的连接状态改变,你将有一个插座中拔出事件火,你的连接状态改变之前。确保您在套接字连接后立即启用此事件。

+0

如何创建一个TCP断开连接的事件触发器?你可以给我一个例子吗? – Emanuel 2010-01-15 21:05:33

0

我们可以知道为什么使用TCP套接字吗?用于调用一个tcp设备o服务器代码?

我建议你,如果是调用.NET服务器应用程序中使用Windows通讯基础温度。这是通过简单的net.tcp,HTTP等

问候公开服务,

0

其实这是一个非常古老的问题,

如果我正确理解你的问题,你需要一种方法来了解是否你的应用程序仍然连接到服务器,反之亦然。

如果是这样,然后一个解决方法是有一个UDP连接只是为了检查连接(我知道的开销,但它更好地轮询连接状态),你可以在你发送数据之前检查。

由于UDP不是面向连接的,所以在发送数据时不需要连接

相关问题