[深入浅出WP8.1(Runtime)]Socket编程之UDP协议
13.3 Socket编程之UDP协议
UDP协议和TCP协议都是Socket编程的协议,但是与TCP协议不同,UDP协议并不提供超时重传,出错重传等功能,也就是说其是不可靠的协议。UDP适用于一次只传送少量数据、对可靠性要求不高的应用环境。既然 UDP 是一种不可靠的网络协议,那么还有什么使用价值或必要呢?其实不然,在有些情况下UDP协议可能会变得非常有用。因为UDP具有TCP所望尘莫及的速度优势。虽然TCP协议中植入了各种安全保障功能,但是在实际执行的过程中会占用大量的系统开销,无疑使速度受到严重的影响。反观UDP由于排除了信息可靠传递机制,将安全和排序等功能移交给上层应用来完成,极大降低了执行时间,使速度得到了保证。那么在Windows Phone里面的UDP协议的通讯是通过DatagramSocket类来实现消息的发送,接受和监听等功能的,下面我们来看一下如何在Windows Phone中实现UDP协议的通信。
13.3.1 发送和接收消息
使用UDP协议进行消息的发送和接收和TCP协议是有区别的,UDP协议并不一定要进行连接的操作,它可以直接通过主机地址进行消息的发送和接收。使用UDP协议进行消息的发送和接收也一样是要依赖DataWriter类和DataReader类来进行分别进行数据的发送和接收。下面我们来看一下在Windows Phone中使用UDP协议进行发送和接收消息的两种方式。
(1)使用主机名和端口号直接发送和接收消息
创建一个DatagramSocket类对象,调用GetOutputStreamAsync方法获取输出流IOutputStream对象,再使用IOutputStream对象创建DataWriter对象进行消息的发送。接收消息直接订阅DatagramSocket对象的MessageReceived事件接收消息,使用DataReader对象获取消息的内容。示例代码如下所示:
// 主机名
HostName hostName = new HostName("localhost");
DatagramSocket datagramSocket = new DatagramSocket();
// 订阅接收消息的事件
datagramSocket.MessageReceived += datagramSocket_MessageReceived;
// 获取输出流
IOutputStream outputStream = await datagramSocket.GetOutputStreamAsync(hostName, "");
// 创建DataWriter对象发送消息
DataWriter writer = new DataWriter(datagramSocket.OutputStream);
writer.WriteString("test");
await writer.StoreAsync();
// 接收消息的事件处理程序
async void datagramSocket_MessageReceived(DatagramSocket sender, DatagramSocketMessageReceivedEventArgs args)
{
// 获取DataReader对象,读取消息内容
DataReader dataReader = args.GetDataReader();
uint length = dataReader.UnconsumedBufferLength;
string content = dataReader.ReadString(length);
}
(2)先连接Socket再发送接收消息
DatagramSocket类也提供了ConnectAsync方法来负责Socket的连接,连接成功之后就可以使用该DatagramSocket对象来进行消息的发送,消息的接收和第一种方式的实现是一样的。示例代码如下所示:
// 创建DatagramSocket
DatagramSocket datagramSocket = new DatagramSocket();
datagramSocket.MessageReceived += datagramSocket_MessageReceived;
// 连接服务器
await datagramSocket.ConnectAsync(new HostName("localhost"), "");
// 发送消息
DataWriter writer = new DataWriter(datagramSocket.OutputStream);
writer.WriteString("test");
await writer.StoreAsync();
13.3.2 UDP协议服务器端监听消息
UDP协议在实现服务器端监听消息的功能也是使用DatagramSocket类去实现的,实现的步骤如下所示:
(1)注册DatagramSocket对象的MessageReceived事件接收消息(注意和TCP的ConnectionReceived事件的区别);
(2)使用BindServiceNameAsync方法建立起本地服务器的监听;
(3)使用GetOutputStreamAsync方法传入服务器地址和端口号,获取IOutputStream对象,从而创建DataWriter对象向客户端发送消息。
UDP协议服务器端监听消息的代码示例如下所示:
// 创建DatagramSocket对象,调用BindServiceNameAsync方法绑定服务
DatagramSocket datagramSocket = new DatagramSocket();
// 订阅MessageReceived事件监听客户端发送过来的消息
datagramSocket.MessageReceived += datagramSocket_MessageReceived;
await datagramSocket.BindServiceNameAsync("");
// MessageReceived事件的处理程序,获取到客户端的地址后可以向客户端发送消息
async void datagramSocket_MessageReceived(DatagramSocket sender, DatagramSocketMessageReceivedEventArgs args)
{
// 读取客户端发送过来的消息
DataReader dataReader = args.GetDataReader();
uint length = dataReader.UnconsumedBufferLength;
string content = dataReader.ReadString(length);
IOutputStream outputStream = await sender.GetOutputStreamAsync(
args.RemoteAddress,
args.RemotePort);
DataWriter writer = new DataWriter(outputStream);
writer.WriteString(content + "(服务器发送)" );
await writer.StoreAsync();
}
本文来源于《深入浅出Windows Phone 8.1 应用开发》
WP8.1 Runtime文章列表:http://www.cnblogs.com/linzheng/p/3998037.html
源代码下载:http://vdisk.weibo.com/s/zt_pyrfNHb99O
欢迎关注我的微博@WP林政 微信公众号:wp开发(号:wpkaifa)
WP8.1技术交流群:372552293
[深入浅出WP8.1(Runtime)]Socket编程之UDP协议的更多相关文章
- [深入浅出WP8.1(Runtime)]网络编程之HttpClient类
12.2 网络编程之HttpClient类 除了可以使用HttpWebRequest类来实现HTTP网络请求之外,我们还可以使用HttpClient类来实现.对于基本的请求操作,HttpClient类 ...
- python六十八课——网络编程之UDP协议
1.1 概述 UDP是无连接通信协议,即在数据传输时,数据的发送端和接收端不建立逻辑连接.简单来说,当一台计算机向另外一台计算机发送数据时,发送端不会确认接收端是否存在,就会发出数据,同样接收端在收到 ...
- Linux系统编程(37)—— socket编程之UDP服务器与客户端
典型的UDP客户端/服务器通讯过程: 编写UDP Client程序的步骤 1.初始化sockaddr_in结构的变量,并赋值.这里使用"8888"作为连接的服务程序的端口,从命令行 ...
- 【Linux】Linux C socket 编程之UDP
发送方: /* * File: main.c * Author: tianshuai * * Created on 2011年11月29日, 下午10:34 * * 主要实现:发送20个文本消息,然后 ...
- C#编程 socket编程之udp服务器端和客户端
基于Udp协议是无连接模式通讯,占用资源少,响应速度快,延时低.至于可靠性,可通过应用层的控制来满足.(不可靠连接) 使用Udp协议通讯需要具备以下几个条件: (1).建立一个套接字(Socket) ...
- Linux系统编程(36)—— socket编程之UDP详解
UDP 是User DatagramProtocol的简称,中文名是用户数据报协议.UDP协议不面向连接,也不保证传输的可靠性,例如: 1.发送端的UDP协议层只管把应用层传来的数据封装成段交给IP协 ...
- java 25 - 4 网络编程之 UDP协议传输的代码优化
UDP协议的输出端: /* UDP发送数据: A:创建Socket发送端对象 B:创建数据报包(把数据打包) C:调用Socket对象发送数据报包 D:释放资源(底层是IO流) */ public c ...
- java 25 - 4 网络编程之 UDP协议传输思路
UDP传输 两个类:DatagramSocket与DatagramPacket(具体看API) A:建立发送端,接收端. B:建立数据包. C:调用Socket的发送接收方法. D:关闭Socket. ...
- 网络编程之UDP协议
UDP协议 UDP(User Datagram Protocol)也就是用户数据报协议,是一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETF RFC 768是UDP的正式规范. 提 ...
随机推荐
- 【转载】有哪些省时小技巧,是每个Linux用户都应该知道的
http://www.cnblogs.com/amberly/p/4352682.html
- MangoDB的C#Driver驱动简单例子
以下是本人学习C#Driver驱动简单的学习例子.GridFS的增删查操作 和 表的增删查改操作. public class MongoServerHelper { public static str ...
- Arch Linux 安装、配置、美化和优化
国庆假期玩了下Arch Linux,发现这货跟Ubuntu之流相差甚远,甚难调教,而且安裝过程全命令行,会有各种问题,各种知识... --- 安装引导器--- -------------------- ...
- SQL的一切常用函数展示
练习了一下, 用时再慢慢看吧. SHOW WARNINGS; SELECT quote(text_fld) FROM string_tbl; ), 'n'); SELECT ASCII('ö'); S ...
- oracle相关环境变量配置
ORACLE_HOME:D:\Program File\oracle\product\10.2.0\db_1 ORACLE_SID:orcl Path中增加:D:\ProgramFile\oracle ...
- 手机WEB自适应头部代码
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> < ...
- [Unity3d插件]EasyTouch的初步使用
对于移动平台上的RPG类的游戏,我们常用虚拟摇杆来控制人物角色的行走和一些行为,相信我们对它并不陌生,之前尝试了EasyTouch2.5,发现并没有最新版的3.1好用,2.5版本的对于自适应没有做的很 ...
- 推荐一些顶级的Android开发书籍(转)
本帖对Android开发菜鸟和中级老兵同样适用,因为本帖重点列出了那些最常用的Android开发资源. 推荐书籍 你或许觉得,都现在了,再去看个什么书来学习Android开发,这方法应该早就过时了.没 ...
- 图说设计模式(UML和设计模式)
https://github.com/me115/design_patterns http://design-patterns.readthedocs.org/zh_CN/latest/index.h ...
- select 框option添加属性 js计算价格 保持两位小数
<select name="" id=""> <volist name="v['childList']" id=" ...