请教SERVERSOCKET阻塞方式里断开连接的问题

Tony_2002 2002-11-25 04:43:06
当CLIENT断开连接后,SERVER端在那里接收到(或者说处理)CLIENT断开的信息?
ONCLIENTDISCONNECT事件好象不起作用。但是,SERVER端的接收线程在收到最后一个字节后自动停了,而我在那里使用的是无限循环While(1),请问是怎么回事?
...全文
129 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tony_2002 2002-11-29
  • 打赏
  • 举报
回复
明白了,只要这一点就够了。谢谢!结帖喽。
copy_paste 2002-11-29
  • 打赏
  • 举报
回复
GetThread里面写的线程,不需要你去delete,ServerSocket有个线程池的功能,它会自动处理,你只要在GetThread new Thread就是了。

我是没看懂你说什么。不过检测阻塞断开连接,我现在只看到这个,其它的没试过,也不知。:)
Tony_2002 2002-11-29
  • 打赏
  • 举报
回复
那我就不必专门DELETE GETTHREAD这个线程了吧?
invalid 2002-11-29
  • 打赏
  • 举报
回复
端口号+1是正常的,它+到某个值后会回落重新开始++的。
Tony_2002 2002-11-29
  • 打赏
  • 举报
回复
谢谢各位!copy_paste(木石三)的帖子我还不太明白,要用Winsock2中的EVENT来处理,觉得有些麻烦。
SERVER端的接收线程在收到最后一个字节后自动停了,而我在那里使用的是无限循环While(1),请问是怎么回事?这一点,我是通过在线程的循环里显示一个递增的i变量发现的,在CLIENT端发一条信息,i就显示加1,不发就不显示,按理说这个线程如果还在运行就应该不断显示i在增加。
还有一个现象就是每次客户端重新连接服务端给它分配的断口号都会加1,这是不是我服务器端没有DELETE前面的GETSOCKET线程造成的,我就是不知道在哪里执行这个DELETE。
copy_paste 2002-11-27
  • 打赏
  • 举报
回复
http://expert.csdn.net/Expert/topic/1210/1210492.xml?temp=.2102167
看看这里,它是使用WinSock2的Event得到的。
相关函数
WSACreateEvent, WSAResetEvent, WSACloseEvent, WSAEventSelect

TServerSocket在阻塞模式中,
OnClientConnect
OnClientDisConnect
OnClientRead
OnClientWrite
OnClientError
事件不能,也不会再触发了。它是给非阻塞使用的。其它事件可以。
invalid 2002-11-27
  • 打赏
  • 举报
回复
TCP协议中,一端断开连接会向另一端发送FIN(好像)标志的包,告诉对方,自己断开连接了。
sncel 2002-11-27
  • 打赏
  • 举报
回复
没有人回答我来说吧。
在阻塞方式时:
当CLIENT断开连接后,SERVER端在那里接收到(或者说处理)CLIENT断开的信息?
答:要自己去读数据的。

SERVER端的接收线程在收到最后一个字节后自动停了,而我在那里使用的是无限循环While(1),请问是怎么回事?
答:应该没有停,而是没有继续接收数据,这时看看客户端是否继续有数据发送过来。和客户端连接是否正常。

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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