首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

c# UDP学习札记

2012-11-08 
c# UDP学习笔记UDP 只有在需要的时候客户端和服务端才会进行连接。UDP 对主机进行单项数据操作,只需要使用U

c# UDP学习笔记
UDP 只有在需要的时候客户端和服务端才会进行连接。
UDP 对主机进行单项数据操作,只需要使用UDPClient进行通讯操作。
主要方法:
REceive(ref IPEndPoint ep) ep:数据发送的主机,包括IP和端口。堵塞式接受数据。
Send(byte[] buf,int length,IPEndPoint ep) 。buf要发送的数据,length:发送数据的长度;ep发送到哪里

服务端接收代码:

UdpClient server = new UpdClient(port); //监听端口IpEndPoint ipRemote;try{    byte[] buf = server.Receive(ref ipRemote); //堵塞在这里。将接收到的数据存放在buf,同时将客户端的Ip,端口信息保存在ipRemote变量中,这样就知道是谁发过来的数据了    string message = Encoding.Default.GetString(buf); 将byte转为string类型}catch(Exception ex){}


可以通过while实现反复监听。通常结合多线程实现接收功能

Thread th = new Thread(new ThreadStart(GetData));th.IsBackground = true;th.Start();


this.Invoke(new 委托(functon),object[]{msg});


子线程需要使用委托更新主线程信息

客户端发送代码
UdpClient client = new UdpClient(clientPort); //本机端口,通过这个端口号发送数据IPEnPoint server  = new IpEndPoint(IPAddress.Parse(serverHost,serverPort)); //制定服务器IP和端口byte[] buf = Encoding.Default.GetByte(message); //将发送的消息转为字节数组client.Send(buf,buf.length,server);


UpdClient关闭前,可以重复利用,多次发布、接收消息

public event DataArriveHandler onDataArrived; //定义事件//需要声明一个同名、同参数的方法private void onDataArrived(byte[] ,IpEndpoint ep){   this.Invoke(....); //子线程更新主线程}调用if(this.onDataArrived !=null){   onDataArrived(buf,clientep);}


服务端发送数据

public void Send(byte[] data,IPEndPoint endPont) { //data发送的数据;endPoint数据接收地址,也就是目的地址  this.Server.Send(data,data.length,endpont); //server=new UdpClient(port); 服务端监听端口}

同一个UdpClient实例,既可以接收,也可以发送

取得本机的IP地址
string hostname = Dns.GetHostName(); //取得当前主机名IPAddress[] myIps = Dns.GetHostAddresses(hostname); //取得当前主机所有IP,多个网卡有多个地址foreach(IPAddress ip in myIps){   string ip = address.ToString();   //还需要判断这个ip是否是需要的,比如只取得Ipv4的地址}


双向通讯,两端都需要监听,代码是类似的。

热点排行