socket连接拔掉网线后,重插后,socket断了

glacierful 2009-03-31 10:38:03
socket连接拔掉网线后,send命令将无法发送字符。等20多秒把网线重新插上后,再次用send发送命令,这时候还是无法发送字符。我用windows中的telnet测试,这种情况是可以发送字符的。为什么我自己用socket写就无法发送了呢?
...全文
1167 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
jyh_baoding 2009-04-01
  • 打赏
  • 举报
回复
断了就重新连接,象打电话一样
glacierful 2009-04-01
  • 打赏
  • 举报
回复
重新连接是指使用connect去连吗?
还是重新创建socket去连。因为要连得那个设备限制了只能有一个客户端连上,必须得关闭前一个连接后,才能连。
网线重新插上后,用原来的socket句柄可以关闭原来连接吗?因为我试了几次,重新插上网线后,使用CloseSocket关闭,没有起作用。
glacierful 2009-04-01
  • 打赏
  • 举报
回复
对方的应该socket没断,因为创建新的sokcet连接时,总是提示说已经达到达到连接的限制数了(因为设备只允许一个连接)。
zdrone 2009-04-01
  • 打赏
  • 举报
回复
断开连接了,那说明对方的Socket也断掉了。要看服务器程序怎么写了。
一般如果是一个列队。要看对方怎么判断了。socket断开了就允许重新连。那就没问题了。服务器总是先是Accept一个连接获得一个socket 然后这个到列队比对一下。
如果不满足就直接closesocket关掉好了。
关键要看列队数据结构和判断方法。这个就不是您能左右的了。
yajyjy 2009-04-01
  • 打赏
  • 举报
回复
tcp还是udp?
zdrone 2009-04-01
  • 打赏
  • 举报
回复
DWORD dwRet=Send(....);
if(dwRet==SocketError)
{
dwRet=WSAGetLastError()
if(dwRet==//会返回给你错误信息,查一下断开连接的错误码是多少 忘记了)
{
//执行重连操作
}
}
路人乙2019 2009-04-01
  • 打赏
  • 举报
回复
udp是能发的,TCP能发那是来鬼了.
oyljerry 2009-03-31
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 glacierful 的回复:]
引用 12 楼 cnzdgs 的回复:
把当前socket关闭,重新创建一个socket,然后再connect。另一端也需要关闭socket,然后允许新的连接。

主要是对端在两分钟后,才会关闭当前连接,然后才能再创建新的socket去连接。
我奇怪的是,windows自带的telnet程序可以正常工作,所以很想知道,它是怎么做到这一点的。
[/Quote]
心跳机制间隔可以设短点,30秒等就断开,所以telnet容易经常断开
glacierful 2009-03-31
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 cnzdgs 的回复:]
把当前socket关闭,重新创建一个socket,然后再connect。另一端也需要关闭socket,然后允许新的连接。
[/Quote]
主要是对端在两分钟后,才会关闭当前连接,然后才能再创建新的socket去连接。
我奇怪的是,windows自带的telnet程序可以正常工作,所以很想知道,它是怎么做到这一点的。
csgdseed 2009-03-31
  • 打赏
  • 举报
回复
采用重连机制
Wenxy1 2009-03-31
  • 打赏
  • 举报
回复
隔一段时间后,没有收发数据,就要用要用心跳包来检测连接断开的情况。然后再做处理。
奉海 2009-03-31
  • 打赏
  • 举报
回复
重新连接上socket的值会发生变化,要重新创建socket
cnzdgs 2009-03-31
  • 打赏
  • 举报
回复
把当前socket关闭,重新创建一个socket,然后再connect。另一端也需要关闭socket,然后允许新的连接。
glacierful 2009-03-31
  • 打赏
  • 举报
回复
我迅速拔掉网线后,再迅速插上,这时候不会断。
WSAEINVAL错误,在任泰明写的《TCP/IP协议与网络编程》里边的解释是:套接口没有准备好与一地址捆绑。之前我检查了socket句柄,是有效的,怎么会有一个这样的错误呢?
scq2099yt 2009-03-31
  • 打赏
  • 举报
回复

可以试试在迅速拔掉网线后再迅速插上网线,用同一个socket句柄自动重连
glacierful 2009-03-31
  • 打赏
  • 举报
回复
我用connect去重新连接,WSAGetLastError返回错误代码10022,我查了一下是WSAEINVAL,MSDN对这个错误的描述是:

Invalid argument.
Some invalid argument was supplied (for example, specifying an invalid level to the setsockopt function). In some instances, it also refers to the current state of the socket—for instance, calling accept on a socket that is not listening.

glacierful 2009-03-31
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 oyljerry 的回复:]
断开连接了,重新插上,需要重新连接,不会一直保持连接
[/Quote]

只是把网线拔掉,没去关闭连接。
奇怪的是同样的情况,用windows自带的telnet程序,拔掉网线过一会儿再插上,是依然可以发送字符,接收字符的。

如果重新连接,是用同一个socket句柄去连吗?
bragi523 2009-03-31
  • 打赏
  • 举报
回复
已经断了,当然可以再连上来
就是不知道对方还在不在监听
oyljerry 2009-03-31
  • 打赏
  • 举报
回复
断开连接了,重新插上,需要重新连接,不会一直保持连接
glacierful 2009-03-31
  • 打赏
  • 举报
回复
如何重建,使用同一个socket再连一次吗?因为目标机限制了只能有一个客户端连上去。
加载更多回复(11)

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧