UdpClient 的用法问题,愁死了,请大家帮忙。
这是在本机做的一个程序用作测试。本机的IP为127.0.0.1吧。
请大家帮我分析一下,这些问题让我很郁闷,心理很憋屈,这到底是怎么回事啊?
问题都在注释中。
服务器端 :
using System;
using System.Collections.Generic;
using System.Text;
using System.Net.Sockets;
using System.Net;
namespace UDPServer
{
     class Program
     {
         static void Main(string[] args)
         {
             UdpClient receivingUdpClient = new UdpClient(12222);
             IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0);
             //问题一
            //第二个参数0 不是说只要有效的端口都可以接收数据吗?为什么客户端的端口不等于12222的时候就接收不到数据了呢?
            //问题二
            //IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Parse("124.110.0.1"), 0);//胡乱写的IP地址也能收到数据,郁闷。
            //这里的"124.110.0.1",不是指定只接收这个IP地址的数据吗?那为什么这个可以接收到数据。
             while (true)
             {
                 try
                 {
                     Byte[] receiveBytes = receivingUdpClient.Receive(ref RemoteIpEndPoint);
                     if (receiveBytes.GetLength(0) > 0)
                     {
                         string returnData = Encoding.ASCII.GetString(receiveBytes);                          
                         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());
                     }
                 }
                 catch (Exception e)
                 {
                     Console.WriteLine(e.ToString());
                 }
             }
         }
     }
}
客户端:
using System;
using System.Collections.Generic;
using System.Text;
using System.Net.Sockets;
using System.Net;
namespace UDPClient
{
     class Program
     {
         static void Main(string[] args)
         {
             UdpClient udpClient = new UdpClient();
             Byte[] sendBytes = Encoding.ASCII.GetBytes("Is anybody there");
             try
             {
                 udpClient.Send(sendBytes, sendBytes.Length,"127.125.100.100", 12222);
                 //"127.125.100.100"不是指定的目的机的IP吗?结果发现只要第一个端的地址为127都可以发送成功,服务端也都可以接收到数据。为什么?            }
             catch (Exception e)
             {
                 Console.WriteLine(e.ToString());
             }
             Console.ReadLine();
         }
     }
}
------解决方案--------------------
//第二个参数0 不是说只要有效的端口都可以接收数据吗?为什么客户端的端口不等于12222的时候就接收不到数据了呢?  
因为你的客户端是发给12222端口的 你的server也得在这个端口接收 因为你是个server  
如果你是client的话可以随便选个端口就可以 因为他是先随机选择一个端口发送给server 然后因为server是通过Byte[] receiveBytes = receivingUdpClient.Receive(ref RemoteIpEndPoint); 来接收数据的 也就知道了client选择的随即端口号是多少 IP地址是多少 就可以通过这个RemoteIpEndPoint来给客户端发送了  因为收数据必须在明确的端口号 发数据必须发往明确的端口号 至于随便绑定一个IP就不清楚了