轻轻的问一句,如何关闭一个socket连接

hebeijg 2011-05-23 02:18:27
查的用Shutdown来禁止发送和接受,然后close这个socket,

但是在异步接收数据的时候,当Shutdown后,接受函数总是接收到一次请求,但是这个时候因为已经调用了Shutdown所以会出异常,查看此时的socket状态connected为FALSE。

请问各位高手,如何关闭一个连接的socket呢

谢谢
...全文
957 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
daifei4451 2011-05-23
  • 打赏
  • 举报
回复
socket.setSoTimeout(Timeout); //设置超时
closesocket( SOCKET s)的作用是关闭指定的socket,并且回收其所有的资源。
shutdown( SOCKET s, int how)则是禁止在指定的socket s上禁止进行由how指定的操作,但并不对资源进行回收,shutdown之后而closesocket之前s还不能再次connect或者WSAConnect.

ghost5216 2011-05-23
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 hebeijg 的回复:]
引用 9 楼 ghost5216 的回复:
TCP要三次握手
FIN要来回传递,客户端关闭,服务器告诉它“我知道了!”
更详细的可看《windows网络编程技术》的某章,网上有电子书。


高手,
我平常都把三次握手背的滚瓜烂熟,结果到实际中才发现,实践出真知,
谢谢
[/Quote]
愧不敢当,我只记得些印象,楼主自裁。
hebeijg 2011-05-23
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 ghost5216 的回复:]
TCP要三次握手
FIN要来回传递,客户端关闭,服务器告诉它“我知道了!”
更详细的可看《windows网络编程技术》的某章,网上有电子书。
[/Quote]

高手,
我平常都把三次握手背的滚瓜烂熟,结果到实际中才发现,实践出真知,
谢谢
ghost5216 2011-05-23
  • 打赏
  • 举报
回复
TCP要三次握手
FIN要来回传递,客户端关闭,服务器告诉它“我知道了!”
更详细的可看《windows网络编程技术》的某章,网上有电子书。
wozaiqingniao 2011-05-23
  • 打赏
  • 举报
回复

我没在客户端上写过close 都是在服务端写的,还有那个禁止收发的。
hebeijg 2011-05-23
  • 打赏
  • 举报
回复
不是,
现在假设有一个服务器端,一个客户端,
当客户端执行shutDown的时候,服务器端会得到0字节,这样服务器端知道客户端已经关闭,
但是郁闷的是,客户端的接收函数里也会触发一次,这时,如果调用EndReceive会报错,
查看这时的socket的connected属性,发现是FALSE。

想知道为什么在客户端会有第二次的这个触发,
wangyue4 2011-05-23
  • 打赏
  • 举报
回复
Receive方法返回0就代表对方关闭了!!!
ghost5216 2011-05-23
  • 打赏
  • 举报
回复
Receive返回0个字节,对吗?
你可以关闭了
hebeijg 2011-05-23
  • 打赏
  • 举报
回复
当我执行Shutdown这个函数的时候,接收函数里就有一次请求,

和服务端执行send函数一样。
ghost5216 2011-05-23
  • 打赏
  • 举报
回复
"接受函数总是接收到一次请求,"
请求是什么意思
hebeijg 2011-05-23
  • 打赏
  • 举报
回复
如果用close关闭,这样在服务器端会产生一个远程强制关闭远程连接的错误。
beckfun 2011-05-23
  • 打赏
  • 举报
回复
没深入研究过socket 不过我都是用close关闭呀...

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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