为IPv4专用网络创建异步服务器时出现C#套接字异常

时间:2015-02-20 19:34:22

标签: c# .net sockets asyncsocket ipv4

好的,这有点令人沮丧,从过去几个小时我一直在努力使用基于 .Net Socket的应用程序,简而言之,这个应用程序就是一个异步服务器,这个服务器可以通过两种方式实例化: -

  • 第一种方法是启动服务器是通过获取计算机的本地DNS名称,然后将其绑定到套接字对象。(这完全正常)
  • 第二种方法是启动服务器是通过从用户输入获取主机名,例如“192.168.1.2”,然后我试图将它绑定到套接字对象但它继续射击例外。准确地说,只有在我尝试使用基于IPv4专用网络的IP时才会出现这种异常。
    我真的不知道为什么会发生这种情况

  

例外: “请求的地址在其上下文中无效”

以下代码用于启动服务器



    public void StartServer(int port, IPAddress ipAddress)
            {
                byte[] bytes = new Byte[1024];
                IPAddress[] ips = Dns.GetHostAddresses(ipAddress.ToString());
                Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

                this._socket = listener;
                try
                {

                    IPEndPoint bindEndPoint;
                    bindEndPoint = new IPEndPoint(ipAddress, port);
                    listener.Bind(bindEndPoint);
                    listener.Listen(100);

                    WriteStatus("\nStarted -" + bindEndPoint.ToString() + " on " + Convert.ToString(port));
                    IsUp = true;

                    while (IsUp)
                    {
                        allDone.Reset();
                        WriteStatus("\nWaiting for a connection......");
                        try
                        {
                            listener.BeginAccept(new AsyncCallback(AcceptCallback), listener);
                        }
                        catch (ObjectDisposedException)
                        {
                            return;
                        }

                        allDone.WaitOne();
                    }
                }
                catch (SocketException se)
                {
                    MessageBox.Show(se.Message, "Error : Start Server",  MessageBoxButton.OK, MessageBoxImage.Error);

                }

            }


    

这样会加载预配置的DNS名称



    private void LoadStaticIp()
            {
            IPHostEntry ipHostInfo = Dns.Resolve(Dns.GetHostName());
            _ipAddress = ipHostInfo.AddressList[0].ToString();
            }

请帮忙。

0 个答案:

没有答案