winsock自动停止接收数据了.

时间:2022-02-26 23:42:24
我使用WinSock控件和UDP协议.两台电脑A和B连接后,开始接收和发送数据是正常地.过几分钟,某一台B会停止接收数据,但发送还是正常地.如果此时操作B如下程序:
    L1=winsocklocalPort
    winsock.close
    winsock.bind L1
    则B机又参正常接收数据了.但有时winsock.bind L1时会出错,不是原来的端口号,则两机无法正常联络了.
    互相发送的是实时音视频,数据量较大.两台电脑通过集线器和路由器连接上ADSL.通过服务器中转数据或在一个集线器下直接传送数据同样有此问题.

    请问有没有朋友遇到此类问题?如何避免或解决?谢谢!

7 个解决方案

#1


应该是程序哪里处理的有问题

#2


好像不应该再“winsock.bind L1” 了

#3


接收程序很简单,没有别的代码控制了.winsock接收时有时候会出错,都自动跳过了.程序运行的很平稳,每次出现上面的问题都是在7分钟左右的时候.停止收数据时不会报错.
    winsock.bind L1时,因为旧端口L1没有及时关闭,所以有时会出错,绑定的是下一个自动生成的端口.
    winsock控件添加到窗体后,我除了修改了协议类型为UDP外,别的没有修改,是不是还要调整一些设置呢?

#4


bind 是 采用 udp

#5


是用的UDP协议,在局域网内二台电脑用timer控件不停的收发消息,大概每秒发送15次左右,每个数据包长度不超过1440字节,有的数据包很短,只有十几个字节.
    当出现winsock接收事件无响应时,点一个按钮,运行上面的关闭后再绑定到原来的端口,会立即响应,无响应期间的数据也马上都收到了(不能确定全部收到了,至少有一部分是收到了).
  现在这个问题解决不了,只有定时检查没有数据传来时就自动关闭winsock再绑定到原来的端口了.请朋友们讨论一下如何避免?
    谢谢!

#6


关注

#7


UDP的特点是不建立连接的发送.他是一个简单的协议,所以要自己加上一些容错的功能,但是我们加了容错功能的程序有时还不如直接使用TCP协议简单.所以,如果同时连接的数量不是很大的话,用TCP会更好些,因为TCP其实就是一个有更多容错功能的UDP集.

#1


应该是程序哪里处理的有问题

#2


好像不应该再“winsock.bind L1” 了

#3


接收程序很简单,没有别的代码控制了.winsock接收时有时候会出错,都自动跳过了.程序运行的很平稳,每次出现上面的问题都是在7分钟左右的时候.停止收数据时不会报错.
    winsock.bind L1时,因为旧端口L1没有及时关闭,所以有时会出错,绑定的是下一个自动生成的端口.
    winsock控件添加到窗体后,我除了修改了协议类型为UDP外,别的没有修改,是不是还要调整一些设置呢?

#4


bind 是 采用 udp

#5


是用的UDP协议,在局域网内二台电脑用timer控件不停的收发消息,大概每秒发送15次左右,每个数据包长度不超过1440字节,有的数据包很短,只有十几个字节.
    当出现winsock接收事件无响应时,点一个按钮,运行上面的关闭后再绑定到原来的端口,会立即响应,无响应期间的数据也马上都收到了(不能确定全部收到了,至少有一部分是收到了).
  现在这个问题解决不了,只有定时检查没有数据传来时就自动关闭winsock再绑定到原来的端口了.请朋友们讨论一下如何避免?
    谢谢!

#6


关注

#7


UDP的特点是不建立连接的发送.他是一个简单的协议,所以要自己加上一些容错的功能,但是我们加了容错功能的程序有时还不如直接使用TCP协议简单.所以,如果同时连接的数量不是很大的话,用TCP会更好些,因为TCP其实就是一个有更多容错功能的UDP集.