为什么在Winsock的ConnectionRequest事件中要调用Winsock1.close()?

zebulon 2005-02-24 08:07:17
在使用Winsock控件编写基于TCP的程序时,为什么在ConnectionRequest事件中接收RequestID前,要写如下代码:
   if Winsock1.State <> sckClosed Then winsock1.close

然后再是:
   Call Winsock1.Accept(RequestID)

如果不执行Winsock1.close,就会出现运行时错误:“当前的状态操作无效”

请教高手明示!!
...全文
304 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zyg0 2005-02-25
  • 打赏
  • 举报
回复
因为,如果他监听,了.lission就不能和控件连接因此要先将监听关闭
of123 2005-02-25
  • 打赏
  • 举报
回复
最好是用控件数组。用一个控件元素(一般是下标 0)侦听,对新的呼叫重新 Load 一个元素来处理。这样对每个用户都有一个对应的Winsock。

不过,要注意的是,客户断开连接时要给服务发消息,使它 Unload 相应的控件元素。此外,服务还需要定时呼叫客户,检查意外断开的用户,卸掉控件。否则,会耗尽资源,连接速度越来越慢,直至死机。
zebulon 2005-02-25
  • 打赏
  • 举报
回复
非常感谢!!!解贴
homezj 2005-02-25
  • 打赏
  • 举报
回复
一个端口不能同干这件两件事,
你可以不关闭侦听,而是另外加载一个Winsock接受连接,这样,你就可以保持侦听,不断接受新连接了,服务器程序都是这样做的。

加载新Winsock,一般使用控件数组
lsftest 2005-02-24
  • 打赏
  • 举报
回复
为什么在ConnectionRequest事件中接收RequestID前,要写如下代码:
------------------------------------------------
使Socket在接收联接请求之前保持关闭状态

1,451

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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