本文出自:53078485群大咖Aran
StreamSocket属于UWP中的网络通信开发技术,UWP中的StreamSocket已具备很完整的网络通信能力,可适应网络开发中不同的开发需求。首先我们先看下StreamSocket类的官方文档:传送门
通过文档我们可以看出来UWP中的StreamSocket使用起来极其方便,对一个网络终端服务端发起连接请求一般要经过以下几个步骤:
- 创建一个StreamSocket对象
- 使用ConnectAsync方法对网络终端服务发起连接请求
- 从SteamSocket.InputStream对象中读取终端数据
- 如若需要断开连接直接使用StreamSocket.Dispose()方法
为了更深入的了解StreamSocket的使用,接下来几篇博客中我会结合一个聊天室的实例来从头到尾做一个简单的UWP版聊天室。
首先先看下项目解决方案文件架构:
Models项目中存放着通用的Model
SocketBusiness 项目是用来处理StreamSocket通信的逻辑的,里面包含socket对象生成工厂、客户端socket逻辑、服务端socket逻辑
SocketClientSample 是用来存放UWP StreamSocket客户端代码
SocketServiceSample 是用来存放UWP StreamSocket服务端代码
接下来我们一步一步的去实现这个项目
创建Models
首先从Models项目着手,无论什么项目什么需求总要先把它们给抽象化嘛,而数据抽象化出来的就是Model,所有无论是什么项目,第一要做的基本都是建模,不然数据都没你咋玩?
既然要聊天,那我们就先创建聊天消息Model类,新建MessageModel.cs类,类成员如下,注释写的很清楚,就不解释了
public class MessageModel
{
/// <summary>
/// 消息类型
/// </summary>
public MessageType MessageType { get; set; }
/// <summary>
/// 消息数据
/// </summary>
public object Message { get; set; }
/// <summary>
/// 发送者
/// </summary>
public UserModel User { get; set; }
/// <summary>
/// 发送时间
/// </summary>
public DateTime SetDateTime { get; set; }
/// <summary>
/// 辅助属性,用来决定消息显示的时候是靠左还是靠右
/// 靠左是别人发来的消息 靠右是自己发出去的消息
/// </summary>
public HorizontalAlignment Horizontal { get; set; } = HorizontalAlignment.Left;
}
public enum MessageType
{
//文字消息
TextMessage,
//系统消息之断开连接
Disconnect
}
NavModel:这个Model是用来做导航菜单的,也很简单:
public class NavModel
{
/// <summary>
/// 要显示的文字
/// </summary>
public string Title { get; set; }
/// <summary>
/// 图标
/// </summary>
public Symbol Icon { get; set; }
/// <summary>
/// 要导航到的页面
/// </summary>
public Type PageType { get; set; }
}
UserModel:用来存储用户数据的,这里我们就只存储下用户昵称,至于IP 、Guid 、用户头像等等等神马的暂时就不考虑了。
public class UserModel
{
/// <summary>
/// 用户昵称
/// </summary>
public string UserName { get; set; }
/// <summary>
/// ip 地址 暂时不需要
/// </summary>
public string UserIpAddress { get; set; }
}
Models项目我们就创建完毕了,今天就先到这吧,如果再接着写SocketBusiness部分估计博文会太长,还是分开来写吧。
先放上来一张运行的效果图解解馋(非最终版,同时在操作服务端和客户端,有点忙不过来QAQ):