今天要写一个局域网两台机器发送信息的程序,所以用到了Socket,但是让人很郁闷的是。代码写完。出现了无法连接的问题
IPAddress ip = Dns.GetHostAddresses("192.168.0.85").GetValue(0) as IPAddress;
IPEndPoint serverFullAddr = new IPEndPoint(ip, 8080);
Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
sock.Connect(serverFullAddr);
err :由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败
那位有经验的弟兄帮助一下。 或者提示“目标主动拒绝”.
telnet看下.
可以从下面2点入手排查
1.防火墙
2.服务器端IP地址错误
估计端口的问题, 你用一个其它程序没用的端口试一下
服务器端 socket 开启了吗?
“目标主动拒绝” 通常是没有开端口,或者防火墙割断并友好地返回错误包。
“err :由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败”
这个错误通常是IP地址错误,或者防火墙隔断所致,如果都在一个局域网中,可以做以下几步诊断:
ping [ 对端 ip ] 当然要弄清别人的IP
arp -a | findstr [ 对端 ip ]
如果ping不通,但是第二条ARP表有内容表示对端防火墙开启,隔断你们之间的连接,如果第二条命令没有显示的话,那就是IP错了,或者网线掉了,或者对方根本没有开机。
再来,
telnet [ 对端 ip ] [ port ] ,这个不用解析了吧,判断能否建立TCP连接,如果能连接,估计应用层也不会出什么问题,还有问题就是协议没有写好的问题。
如果 telnet 不通,此时应该到对方机器上面运行
netstat -an | findstr [ port ] ,看看对端机器是否真的打开了这个端口,如果没有开不用问题就是接收连接的程序没有跑起来,或者监听错端口了。
如果端口是打开的,那就防火墙的问题,特别Windows自带的那个防火墙,比较隐蔽的。
祝你好运。
因为你是在自己机子上同时运行server和client两种程序,所以应该排除网络问题,我做了测试,当服务端的程序没有开启监听的时候出现的错误提示和你给出的是一样的,你应该查一下服务端的socketname.listen(Port)