最简单的C#,UDP通讯简例。

初次接触网络编程,由于自己功力有限,一个最简单的UPD实例都摸索了好久。

网络上虽然有很多例子,但总是存在个别不理解的语句,终于通过一个简单的例子,使思路能够连续起来。

例子的实现功能:发送端发送一段字符串数据;接收端接收数据,并打印出来。

 

发送端代码:

 1 static void Main(string[] args)
 2         {
 3             IPEndPoint udpPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 4505);
 4             UdpClient udpClient = new UdpClient(udpPoint);
 5             //UdpClient udpClient = new UdpClient();
 6             string sendMsg = "Hello UDP Server.";
 7             byte[] sendData = Encoding.Default.GetBytes(sendMsg);
 8             IPEndPoint targetPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 5500);
 9             udpClient.Send(sendData, sendData.Length, targetPoint);
10             Console.WriteLine("Send Message:{0}",sendMsg);
11             Console.Read();
12         }

1、UdpClient的实例化时需要依靠一个IpEndPoint对象,这个IpEndPoint对象在UdpClient收发数据时,起到关键的作用。

2、targetPoint表示,发送的数据要去往的地址。因为我在本机测试,所以targetPoint与udpPoint的两个IPAddress是一样的,它们之间是没有关系的。

接收端代码:

 1 static void Main(string[] args)
 2         {
 3             IPEndPoint udpPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 5500);
 4             UdpClient udpClient = new UdpClient(udpPoint);
 5             //IPEndPoint senderPoint = new IPEndPoint(IPAddress.Parse("14.55.36.2"), 0);
 6             IPEndPoint senderPoint = new IPEndPoint(IPAddress.Any, 0);
 7             byte[] recvData = udpClient.Receive(ref senderPoint);
 8             Console.WriteLine("Receive Message:{0}",Encoding.Default.GetString(recvData));
 9             Console.Read();
10         }

1、接收端同样初始化一个UdpClient对象,并指定其收发数据的IPEndPoint。

2、senderPint是一个IPEndPoint对象,用来存放,所接收到数据的发送者的IPEndPoint。在下面的方法udpClient.Receive中会用到。这里曾经困扰我很长时间,一直不知道这个对象在这时声明做什么用,IPAddress.Any起到了什么作用。我的理解是,它只是为下面的Receive方法提前准备了一个对象,这个对象当前的地址和端口都不重要,重要的是,Receive方法可以使用它来存放一些东西。

3、udpClient.Receive方法,一直等待有数据传过来,当有数据传来时,返回数据,并将携带数据的IPEndPoint对象放入引用参数senderPoint中。这里我想到了一点,c#中的对象本身就是引用类型的(除了基本类型,struct等),为何还要加ref呢?似乎这里是为了明确地强调,这个要传入的参数是会被改动的。

 

 

posted @ 2013-01-05 20:42  javon  阅读(16224)  评论(2编辑  收藏  举报