问题描述
服务器端代码:classThreadtcp{privateSocketserver;publicThreadtcp(){IPAddresslocal=Dns.GetHostAddresses(Dns.GetHostName())[0];IPEndPointiep=newIPEndPoint(local,30000);server=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);server.Bind(iep);server.Listen(20);Console.WriteLine("等待客户机进行连接...");while(true){Socketclient=server.Accept();clientThreadnewclient=newclientThread(client);Threadnewthread=newThread(newThreadStart(newclient.ClientService));newthread.Start();}}}classclientThread{publicstaticintconn=0;publicSocketservice;inti;publicclientThread(Socketsc){this.service=sc;}publicvoidClientService(){stringdata=null;byte[]bytes=newbyte[1024];if(service!=null)Console.WriteLine("新客户连接建立:{0}个连接数",++conn);while((i=service.Receive(bytes))!=0){data=Encoding.ASCII.GetString(bytes,0,i);Console.WriteLine("收到的数据:{0}",data);data=data.ToUpper();byte[]msg=Encoding.ASCII.GetBytes(data);service.Send(msg);Console.WriteLine("发送的数据:{0}",data);}service.Close();Console.WriteLine("客户关闭连接:{0}个连接数",--conn);}}客户端代码:classProgram{staticvoidMain(string[]args){stringstr=null;while(str!="1"){byte[]buffer=newbyte[1024];Socketserver=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);IPAddressadr=IPAddress.Parse("192.168.1.100");IPEndPointep=newIPEndPoint(adr,30000);str=Console.ReadLine();server.Connect(ep);server.Send(Encoding.ASCII.GetBytes(str));intrec=server.Receive(buffer);//就在这里出错:“远程主机强迫关闭了一个现有的连接”Console.WriteLine(Encoding.ASCII.GetString(buffer,0,rec));server.Close();Console.WriteLine("断开了与服务器的连接...");}}}当把客户端的IP地址换成外网服务器端的IP就不行了.另外,30000端口已打开,服务器操作系统是windowsserver2003enterprise服务器WINDOWS防火墙已关闭.不过服务器有一个ARP防火墙客户端关不了,只能关闭ARP服务.
解决方案
解决方案二:
up
解决方案三:
up
解决方案四:
up
解决方案五:
Socket学习
解决方案六:
1.对方关闭时没有调用shutdown而是直接调用closesocket时会出现这个问题2.对方的进程异常结束时
解决方案七:
学习来。
解决方案八:
你完全可以捕获这个异常,然后处理这个异常!
解决方案九:
这个是因为服务器端已经将连接断开了,所以这个异常是需要捕获的,然后把连接断开,释放socket如果需要重新连接,则去重新连接。
解决方案十:
帮顶来。