远程主机强制关闭现有连接

时间:2021-06-03 15:13:14

I need to obtain UDP datagram from Asynchronous Socket Server but an exception occurred in my application :

我需要从异步套接字服务器获取UDP数据报,但我的应用程序中发生异常:

Problem appear there :

出现问题:

Byte[] receiveBytes = udpClient.Receive(ref RemoteIpEndPoint);

The full source code:

完整源代码:

class Program
    {
        static void Main(string[] args)
        {
            const int PORT = 30485;
            IPAddress IP;
            IPAddress.TryParse("92.56.23.87", out IP);
            // This constructor arbitrarily assigns the local port number.
            UdpClient udpClient = new UdpClient(PORT);
            Socket receiveSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
            try
            {
                udpClient.Connect("92.56.23.87", PORT);

                if (udpClient.Client.Connected)
                    Console.WriteLine("Connected.");

                // Sends a message to the host to which you have connected.
                Byte[] sendBytes = Encoding.ASCII.GetBytes("CONNECT");

                udpClient.Send(sendBytes, sendBytes.Length);

                //IPEndPoint object will allow us to read datagrams sent from any source.
                IPEndPoint RemoteIpEndPoint = new IPEndPoint(IP, PORT);

                // Blocks until a message returns on this socket from a remote host.
                Byte[] receiveBytes = udpClient.Receive(ref RemoteIpEndPoint);
                string returnData = Encoding.ASCII.GetString(receiveBytes);
                // Uses the IPEndPoint object to determine which of these two hosts responded.
                Console.WriteLine("This is the message you received " + returnData.ToString());
                Console.WriteLine("This message was sent from " + RemoteIpEndPoint.Address.ToString() + " on their port number " + RemoteIpEndPoint.Port.ToString());

                udpClient.Close();

            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());

            }
        }
    }

Exception:

例外:

Connected.
System.Net.Sockets.SocketException (0x80004005): An existing connection
was forcibly closed by the remote host at System.Net.Sockets.Socket.ReceiveFrom(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags, EndPoint& remoteEP) at ystem.Net.Sockets.UdpClient.Receive(IPEndPoint& remoteEP) at ConsoleApplication7.Program.Main(String[] args) in c:\users\user\documents\visual studio 2010\Projects\ConsoleApplication7\ConsoleApplication7\Program.cs

What can be the problem?

可能是什么问题?


To provide more information, i bought the private socks connection on this page: http://rapidsocks.com/ this services give me a list of IP and port who in really is not a proxy .. just a connection that give me a proxyIP:proxyPort from a pool on server in response...

为了提供更多信息,我在这个页面上购买了私人袜子连接:http://rapidsocks.com/这个服务给我一个IP和端口列表谁真的不是代理..只是给我一个代理的连接IP :来自服务器上的池的proxyPort响应...

How to get that answer with proxyIP:proxyPort from the server?

如何从服务器上获取proxyIP:proxyPort的答案?

2 个解决方案

#1


3  

This really is a generic error message that could mean anything. Time to get the low level network traffic sniffers to filter what is actually going wrong. Adding extra error handling try catch blocks on the server with decent logging is always a great place to start.

这确实是一个通用的错误消息,可能意味着什么。是时候让低级网络流量嗅探器过滤实际出错的地方了。添加额外的错误处理尝试使用正确的日志记录服务器上的catch块始终是一个很好的起点。

#2


41  

In UDP land, one way this can occur is when you send a UDP packet to a host, and the remote host doesn't have a listener on that port, and bounces an ICMP host unreachable message in response.

在UDP域中,可能出现的一种方法是将UDP数据包发送到主机,并且远程主机在该端口上没有侦听器,并在响应中弹回ICMP主机不可达消息。

http://support.microsoft.com/kb/263823/en-us

http://support.microsoft.com/kb/263823/en-us

This exception tells you that no process is listening on that port.

此异常告诉您没有进程正在侦听该端口。


Update: You should be able to avoid that behaviour with the following code:

更新:您应该能够使用以下代码避免该行为:

  var udpClient = new UdpClient();
  uint IOC_IN = 0x80000000;
  uint IOC_VENDOR = 0x18000000;
  uint SIO_UDP_CONNRESET = IOC_IN | IOC_VENDOR | 12;
  udpClient.Client.IOControl((int)SIO_UDP_CONNRESET, new byte[] { Convert.ToByte(false) }, null);

#1


3  

This really is a generic error message that could mean anything. Time to get the low level network traffic sniffers to filter what is actually going wrong. Adding extra error handling try catch blocks on the server with decent logging is always a great place to start.

这确实是一个通用的错误消息,可能意味着什么。是时候让低级网络流量嗅探器过滤实际出错的地方了。添加额外的错误处理尝试使用正确的日志记录服务器上的catch块始终是一个很好的起点。

#2


41  

In UDP land, one way this can occur is when you send a UDP packet to a host, and the remote host doesn't have a listener on that port, and bounces an ICMP host unreachable message in response.

在UDP域中,可能出现的一种方法是将UDP数据包发送到主机,并且远程主机在该端口上没有侦听器,并在响应中弹回ICMP主机不可达消息。

http://support.microsoft.com/kb/263823/en-us

http://support.microsoft.com/kb/263823/en-us

This exception tells you that no process is listening on that port.

此异常告诉您没有进程正在侦听该端口。


Update: You should be able to avoid that behaviour with the following code:

更新:您应该能够使用以下代码避免该行为:

  var udpClient = new UdpClient();
  uint IOC_IN = 0x80000000;
  uint IOC_VENDOR = 0x18000000;
  uint SIO_UDP_CONNRESET = IOC_IN | IOC_VENDOR | 12;
  udpClient.Client.IOControl((int)SIO_UDP_CONNRESET, new byte[] { Convert.ToByte(false) }, null);