我在网络上运行我的应用程序,在某些情况下,客户端失去了与服务器的连接。之后,当我想要向服务器发送一条消息时,我收到了以下错误:不允许对未连接的套接字执行操作(类似于下面的内容)。
我想为对象类型TcpClient创建一个事件,当tcp_obj.Connected = false时,调用一个函数来终止当前代码的执行。我怎么能这样做呢?
或者给我其他建议。
谢谢。
发布于 2010-01-16 04:34:28
至少我从Java的套接字编程中知道,当客户端与服务器断开连接时,服务器不会也不能知道这一点。您需要某种类型的心跳来检测早期断开连接。
我们经常在客户端/服务器应用程序中使用心跳来检测早期断开连接,并将其记录在服务器上。这样,服务器就可以关闭关联的套接字,并将连接释放回池。
只需定期向客户端发送命令并等待响应即可。如果在超时时间内没有获得响应,则假定断开连接并关闭流。
发布于 2010-01-16 04:35:27
在尝试发送消息之前,我只需先检查您的连接对象,以确保您已连接。还要确保你把你的发送逻辑放在try-catch中,这样如果你在传输过程中碰巧断开了连接,你将能够在不破坏你的应用程序的情况下恢复。
Psuedo代码:
private void SendMessage(string message, Socket socket)
{
if(socket.connectionState = States.Connected)
{
try{
// Attempt to Send
}
catch(SocketException Ex)
{
// Disconenct, Additional Cleanup Etc.
}
}
}如果你在C#中,在你的连接状态改变之前,你将会在你的连接状态改变之前触发一个套接字断开事件。确保在套接字连接后立即绑定此事件。
发布于 2010-01-16 04:51:04
我们能知道你为什么使用TCP套接字吗?是用来调用tcp设备或服务器代码的吗?
如果是调用.net服务器应用,建议使用Windows Communication Foundation.通过net.tcp、http等公开服务很简单。
致以敬意,
https://stackoverflow.com/questions/2074558
复制相似问题