客户端连接127.0.0.1:2003遭主动拒绝,请求排查问题根源
连接被主动拒绝?问题出在服务端代码!
嘿,这个错误百分百是服务端的逻辑顺序错了,客户端代码没问题。
为啥会报错?
看你服务端的代码顺序:
IPAddress ipAddress = IPAddress.Parse("127.0.0.1"); //Localhost Ip Address TcpListener connectionListner = new TcpListener(ipAddress, 2003); connectedSocket = connectionListner.AcceptSocket(); connectionListner.Start();
你居然先调用AcceptSocket()等待连接,再启动TcpListener?这完全搞反了!TcpListener必须先调用Start()来开启端口监听,之后才能调用AcceptSocket()(或者AcceptTcpClient())来等着客户端连进来。
现在的情况是:服务端还没开始监听2003端口,就傻等着客户端连接——那客户端连的时候,系统发现这个端口根本没有程序在监听,自然就返回“目标机器主动拒绝”的错误了。
修正后的服务端代码
把Start()挪到AcceptSocket()前面就行:
IPAddress ipAddress = IPAddress.Parse("127.0.0.1"); //Localhost Ip Address TcpListener connectionListner = new TcpListener(ipAddress, 2003); connectionListner.Start(); // 先启动监听!这步必须在前 connectedSocket = connectionListner.AcceptSocket(); // 再等客户端连接
额外小提示
- 处理完连接后,记得调用
connectionListner.Stop()来停止监听,释放端口资源,避免后续重启服务时提示端口被占用。 AcceptSocket()是阻塞调用,如果要支持多客户端连接,建议用异步方法或者开个新线程处理连接,不然主线程会一直卡在这里没法干别的。
内容的提问来源于stack exchange,提问作者skm
相关产品推荐
相关产品推荐

