socket10054(socket10054错误)
如何处理socket10054错误
flashfxp出现“Socket 错误: 10054: 连接被重置”,一般是因为windows防火前的问题。如果你安装了别的防火墙就把windows自带的防火墙关掉。
Socket 错误 = #10054通常原因为:远程主机上对等方应用程序突然停止运行,或远程主机重新启动,或远程主机在远程方套接字上使用了“强制”关闭(参见setsockopt (SO_LINGER)。另外,在一个或多个操作正在进行时,如果连接因“keep-alive”活动检测 到一个失败而中断,也可能导致此错误。
Socket error (#10054): Connection reset by peer.分析原因:中病毒了。请查看系统目录是否存在一个C:WINDOWSMedia,里边是否有Click.exe Svchost.exe和Csrss.exe。对了,就是这个文件在搞鬼,同时你也会在注册表里找到这个文件相应的调用项。
如何才能正确的关闭Socket连接
1、被动关闭:当程序收到一个FIN包从peer,并反馈一个ACK包,于是程序的socket转入CLOSE_WAIT状态。因为peer已经关闭了,所以不能发任何消息了。但程序还可以。要关闭连接,程序自已发送给自已FIN,使程序的TCP socket状态变成LAST_ACK状态,当程序从peer收到ACK包时,程序进入CLOSED状态。
2、所以要用长连接啊。客户端端口关闭后需要在close_wait状态等待1-2分钟才会彻底关闭,具体看操作系统的设置,一般默认2分钟。详细TCP状态转换可以参考TCP协议。如果预期需要频繁传数据,就不要关闭端口,而是维持端口连接,每次都复用这个连接传。如果预期有几分钟以上不会用到连接再关闭。
3、从TCP协议角度来看,一个已建立的TCP连接有两种关闭方式,一种是正常关闭,即四次挥手关闭连接;还有一种则是异常关闭,我们通常称之为连接重置(RESET)。
4、对于面向连接的协议,建议先调用 Shutdown,然后再调用 Close 方法。这可以确保在已连接的套接字关闭之前,已发送和接收该套接字上的所有数据。
5、通过设置套接字的属性,把其从阻塞模式改为非阻塞模式,即使没有数据到来或者连接建立,程序也不会一直等待,而是立刻返回。超时机制:在代码中设置超时机制,即如果套接字在指定时间内依然处于阻塞状态,则退出程序。