为什么WINSOCK控件 服务器端的WINSOCK控件 执行了 close 事件后,客户端WINSOCK控件的tcpClient_Close不停反复的执行。

elvazhuwwww 2016-02-29 10:21:19
为什么WINSOCK控件 服务器端的WINSOCK控件 执行了 close 事件后,客户端WINSOCK控件的tcpClient_Close不停反复的执行。

相关代码如下:

Private Sub tcpServer_DataArrival(Index As Integer, ByVal bytesTotal As Long) '服务器端接收到客户端发过来的 Q 字符,服务器端让 与此客户端 建立连接的 WINSOCK控件 执行 CLOSE操作。
Dim sData As String
Dim sName As String

tcpServer(Index).GetData sData
rtbSave.SelStart = Len(rtbSave.Text)

sName = Left(sData, 1)

If sName = "Q" Then
tcpServer(Index).Close ‘与此客户端 建立连接的 WINSOCK控件 执行 CLOSE操作
End If

End Sub

Private Sub tcpClient_Close() ’服务器端 执行 tcpServer(Index).Close 后 客户端 自动产生 tcpClient_Close 事件,并且反复执行

End Sub


服务器端 执行 tcpServer(Index).Close 后 客户端 自动产生 tcpClient_Close 事件,并且反复执行,正常应该执行一次,就完毕呀,它为什么反反复复的不断执行?

谢谢大家
...全文
123 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-03-01
  • 打赏
  • 举报
回复
重入 递归
elvazhuwwww 2016-03-01
  • 打赏
  • 举报
回复
引用 10 楼 zhao4zhong1 的回复:
你可能得这样写:
Private Sub tcpClient_Close()

If tcpClient.State<>sckClosed Then tcpClient.Close '改成这样再试试

'……

End Sub
非常感谢。试过了,可以了。但是想问题一下,为什么不执行 tcpClient.Close ,Private Sub tcpClient_Close() 就会不停的自动 执行?
赵4老师 2016-03-01
  • 打赏
  • 举报
回复
你可能得这样写:
Private Sub tcpClient_Close()

If tcpClient.State<>sckClosed Then tcpClient.Close '改成这样再试试

'……

End Sub
赵4老师 2016-02-29
  • 打赏
  • 举报
回复
Close 事件 当远程计算机关闭连接时出现。应用程序应正确使用 Close 方法关闭 TCP 连接。 语法 object_Close( ) object 所在处代表一个对象表达式,其值是“应用于”列表中的对象。 参数 None Close 方法(Winsock 控件) 对客户机和服务器应用程序关闭 TCP 连接或侦听套接字。 语法 object.Close object 所在处代表对象表达式,其值是“应用于”列表中的对象。 参数 None 返回值 Void
elvazhuwwww 2016-02-29
  • 打赏
  • 举报
回复
引用 2 楼 zhao4zhong1 的回复:
Private Sub tcpClient_Close()
tcpClient.Close '加这句再试试
'……
End Sub
加这句,可以,是不是这个客户端 的 tcpClient 在接收到服务器端的 CLOSE 事件后, 不能自己 执行 tcpClient.close操作 ,只能由程序开发人员在客户端的 tcpClient_Close 事件中执行 tcpClient.Close 来关闭。 还有一问是 tcpClient.Close 这一操作, 是关闭的什么东西,是(1) 与服务器WINSOCK的连接 (2)其他? 非常感谢。
赵4老师 2016-02-29
  • 打赏
  • 举报
回复
Private Sub tcpClient_Close()
tcpClient.Close '加这句再试试
'……
End Sub
一如既往哈 2016-02-29
  • 打赏
  • 举报
回复
最好把代码弄全了,就这点东西看不出来.......
elvazhuwwww 2016-02-29
  • 打赏
  • 举报
回复
这不成了自己调用自己了吗?
elvazhuwwww 2016-02-29
  • 打赏
  • 举报
回复
引用 6 楼 zhao4zhong1 的回复:
为什么 客户端的tcpClient_Close 事件 反复被触发?
你会在VB6 IDE中的tcpClient_Close 事件中某行代码上设断点,然后在每次断点触发时,按Ctrl+L(或点击视图、调用堆栈),在弹出的调用堆栈对话框中查看从上到下列出的对应从里层到外层的函数调用历史吗?


按了CTRL+L键后,出现的提示,如下图所示:



这么成了自己调用自己了吗?
elvazhuwwww 2016-02-29
  • 打赏
  • 举报
回复
引用 6 楼 zhao4zhong1 的回复:
为什么 客户端的tcpClient_Close 事件 反复被触发? 你会在VB6 IDE中的tcpClient_Close 事件中某行代码上设断点,然后在每次断点触发时,按Ctrl+L(或点击视图、调用堆栈),在弹出的调用堆栈对话框中查看从上到下列出的对应从里层到外层的函数调用历史吗?
非常感谢,赵四 老师。
赵4老师 2016-02-29
  • 打赏
  • 举报
回复
为什么 客户端的tcpClient_Close 事件 反复被触发? 你会在VB6 IDE中的tcpClient_Close 事件中某行代码上设断点,然后在每次断点触发时,按Ctrl+L(或点击视图、调用堆栈),在弹出的调用堆栈对话框中查看从上到下列出的对应从里层到外层的函数调用历史吗?
elvazhuwwww 2016-02-29
  • 打赏
  • 举报
回复
引用 4 楼 zhao4zhong1 的回复:
Close 事件 当远程计算机关闭连接时出现。应用程序应正确使用 Close 方法关闭 TCP 连接
非常感谢,资料中说 当远程计算机关闭连接时出现。应用程序应正确使用 Close 方法关闭 TCP 连接。 远程计算机不已经关闭了这个 TCP 连接了吗,干么客户端还是关闭? 还有一问,您还没回答呢,为什么 客户端的tcpClient_Close 事件 反复被触发?

7,762

社区成员

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

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