客户端 IPEndPoint 不能使用 IPAddress.Any?



我一直在学习一些套接字编程,我已经创建了一个异步服务器,它只是监听和返回数据。

但我在这里有一个问题,我在服务器上使用IPEndPoint(IPAddress.any,port),我在客户端也这样做。当运行服务器和客户端时,我使用try catch,客户端返回异常,如下所示

"请求的地址在其上下文中是无效的0.0.0.0:port"

下面是代码:

Server.cs

      Public void Listen()
      {
        IPEndPoint IpEnd = new IPEndPoint(IPAddress.Any, 11000);
        Console.WriteLine("Create new socket");
        mainSocket = new Socket(AddressFamily.InterNetwork,
                       SocketType.Stream,ProtocolType.IP);
        Console.WriteLine("Bind the socket");
        mainSocket.Bind(IpEnd);
        Console.WriteLine("Listening to socket");
        mainSocket.Listen(10);
        Console.WriteLine("Waiting Connection");
        mainSocket.BeginAccept(new AsyncCallback(AcceptConnect), null);
      }
      protected void AcceptConnect(IAsyncResult ar)
      {
        try
        {
            Socket client = mainSocket.EndAccept(ar);
            SessionData session = new SessionData();
            Console.WriteLine("Connection Accepted, waiting for Data");
            Console.WriteLine("Waiting a new Connection");
            mainSocket.BeginAccept(new AsyncCallback(AcceptConnect), null);
            try{
                session.clientSocket = client;
                client.BeginReceive(session.buffer,0,SessionData.buffersize,0, 
                                    new AsyncCallback(ReceiveData), session);
            }catch(Exception e){
                client.Send(ASCIIEncoding.Default.GetBytes(e.Message));
                Console.WriteLine(e.Message);
            }
        }
        catch(Exception e)
        {
            Console.WriteLine(e.Message);
            Console.WriteLine(e.StackTrace);
        }
      }

Client.cs

    public void ClientConnect()
    {
        // Create a TCP/IP socket.
        Socket client = new Socket(AddressFamily.InterNetwork, 
                        SocketType.Stream, ProtocolType.Tcp);
        IPEndPoint remoteEP = new IPEndPoint(IPAddress.Any, 11000);
        // Connect to the remote endpoint.
        client.BeginConnect(remoteEP, new AsyncCallback(ConnectServer), client);
    }
    public void ConnectServer(IAsyncResult ar) 
    {
        try
        {
            Socket client = (Socket)ar.AsyncState;
            client.EndConnect(ar);
            Console.WriteLine("Socket connected to {0}", 
                             client.RemoteEndPoint.ToString());
        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message);
        }
    }
我的问题是:
  1. 客户端需要指向一个IPAddress吗?
  2. 我只是在服务器上使用错误的代码吗?

客户端需要指向一个特定的IP地址(即192.168.1.101或类似的东西),您不能发送数据包到IP 0.0.0.0。服务器可以接受IP的原因。任何是它正在监听本地机器上的所有IP地址,表示为0.0.0.0。

相关内容

最新更新