关于winsock的有关问题:客户端怎么在关闭与服务器的连接以后第二次连接服务器时不会出现报错

关于winsock的问题::客户端如何在关闭与服务器的连接以后第二次连接服务器时不会出现报错?
问题描述:   我做了一个客户端和一个服务器端     。
                      客户端我用了一个udp协议的winsock   和   一个tcp协议的winsock  
                      服务器端也是用了一个udp协议的winsock   和   一个tcp协议的winsock
                      彼此之间有udp协议的winsock来获取彼此的端口和ip     然后传给各自的
                      tcp协议的winsock   这样来建立tcp连接。
                      问题出现了::当我的客户端连接上服务器之后,进行了一段时间的
                      通信。我关闭了客户端,再启动客户端,欲第二次建立连接时。系统报
                      出了错:”40006“。
我的解决方法:我在服务器加了代码,作用是在客户端关闭他的winsock时,
                      服务器也关闭自己的winsock,可是怎么这样做还是会出错啊?


请各位高手指教一二。帮我把这个问题解决啊。谢谢你们了啊

------解决方案--------------------
这个错误主要出现在你的tcp连接部分
由于服务器 初始化时候有一个端口 监听 当连接后就没有监听端口了 之后客户端再连接因为服务器没有监听的tcp控件 因此出错
解决办法
服务器tcp2个控件 1个监听 一个有连接请求时候负责和客户端榜定
------解决方案--------------------
服务器端自己关闭sockte反而会出错,你要在关闭之后重新监听才对
若有可能,在客户端断开前通知服务器端(发个通知),让服务器主动断开并重新监听
客户端非正常断开后再次使用上次的端口有时会出错
------解决方案--------------------
主要是服务器方面,你不是提到客户端关闭WINSOCK后服务器也关闭WINSOCK 吗?这个代码还是你修改的,你再在关闭WINSOCK后再监听 ,等待下一次的连接请求!
------解决方案--------------------
方法2 就是一个负责监听一个负责通讯,也就是服务器方面需要3个WINSOCK
------解决方案--------------------
winsockz在close并不是立即就关闭的
他进入一个TIME_WAIT状态,此时端口仍然占用,至于要WAIT多久,取决于系统

解决这个问题有两个办法,一个用api将socket设置为不关闭等待,但这个用来设置vb的winsock不太好做
另外一个就是用控件数组,一个专门监听,另外的数组负责接收
------解决方案--------------------
一个不大可能。。。除非你换监听端口
------解决方案--------------------
在服务器端clos事件里增加程序,先关闭winsock控件,接着在设定为监听
客户端也是这样设计
这样无论哪一方断开连接,服务器端都会自动打开监听功能
------解决方案--------------------
在客户端设个代码啊!如果关闭客户端就写发个消息给服务器要服务器先断开
------解决方案--------------------
tcp协议一个是不可能的 因为一个有可能会没有响应 服务器经常会瘫痪 还是不要自己找麻烦了
------解决方案--------------------
Private Sub wskSev_Close(Index As Integer)
wskSev(Index).Close
wskSev(Index).Listen
End Sub