1)UDP是一种无连接通信协议;与此对应的TCP是有连接通信协议。通信双方采用无连接的UDP协议,那么任意一方可以随时发送数据而另一方可以随时接收数据。从这个意义上讲,UDP不需要专门处理对方连接的服务器(Listener)。因此,在.net 中没有UdpListener类,而只有UdpClient类。
2)一个简单的例子可以帮助你理解上面的概念:有两个计算机A和计算机B:A计算机的IP地址为192.168.1.10;B计算机的IP地址为192.168.1.11。
现在要求:
两台计算机采用UDP协议进行通信。
计算机A在8000端口等待计算机B发送的数据;
当A接收到来自B数据后向B计算机发送“OK"
在计算机A上运行的程序如下:
/**
* 运行在计算机A上的程序
* */
using System;
using System.Text;
using System.Net;
using System.Net.Sockets;
namespace ConsoleApplication1
{
class program
{
static void Main()
{
// 1、创建一个UdpClient实例,在8000端口等待接收来自计算机B的数据
UdpClient clientA = new UdpClient(8000);
IPEndPoint remoteEP = null;
// 2、等待来自计算机B的数据
byte[] dataRecv = clientA.Receive(ref remoteEP);
// 3、打印来自计算机B的数据
string message = Encoding.Default.GetString(dataRecv);
Console.WriteLine("接收到来自{0}的数据:{1}", remoteEP.ToString(), message);
// 4、向计算机B发送"OK"
byte[] dataSend = Encoding.Default.GetBytes("OK");
clientA.Send(dataSend, dataSend.Length, remoteEP);
Console.WriteLine("按任意键结束程序");
Console.ReadKey();
clientA.Close();
}
}
}
在计算机B上运行的程序如下:
using System;
using System.Text;
using System.Net;
using System.Net.Sockets;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
// 1、创建一个UdpClient实例
UdpClient clientB = new UdpClient();
// 2、向计算机A发送数据
byte[] dataSend = Encoding.Default.GetBytes("我是计算机B");
// 计算机A的IP地址与端口
IPEndPoint remoteEP = new IPEndPoint(IPAddress.Parse("192.168.1.10"), 8000);
clientB.Send(dataSend, dataSend.Length, remoteEP);
//3、接收来自计算机A的应答数据
byte[] dataRecv = clientB.Receive(ref remoteEP);
string message = Encoding.Default.GetString(dataRecv);
//4、显示接收的数据
Console.WriteLine("计算机A回应的信息为:{0}", message);
Console.WriteLine("按任意键结束程序");
Console.ReadKey();
clientB.Close();
}
}
}
追问接收方在创建连接client实例时不需要指明自己的IP地址吗?只指定端口就可以了?谢谢你非常细心的回答!