注:当服务端和手机模拟器运行在一台机器时,会有奇怪错误。将服务端放在其它机器上更改客户端连接地址,运行正常。或者直接用本机modern调试也可以。
实例化一个对象
StreamSocket clientSocket = new StreamSocket();
建立连接
async void connect()
{
try
{
HostName serverHost = new HostName("127.0.0.1"); //设置服务器IP
await clientSocket.ConnectAsync(serverHost, 5000); //设置服务器端口号
}
catch (Exception e)
{
Debug.WriteLine(e);
clientSocket.Dispose();
clientSocket = null;
}
}
接收和发送数据
由于Socket通信从本质上说是数据流的传输,即byte类型,StreamSocket使用DataReader类和DataWriter类来接收和发送数据流,两个类封装了不少实用的方法,但归根结底是对byte类型数据读取和发送的封装。
DataReader reader = new DataReader(clientSocket.InputStream); //实例化reader对象,并以StreamSocket的输入流为reader的来源
reader.InputStreamOptions = InputStreamOptions.Partial; //采用异步方式
await reader.LoadAsync(1024); //获取一定大小的数据流
string response = reader.ReadString(reader.UnconsumedBufferLength); //获取字符串,指定为reader的未读取缓冲区的长度
DataWriter writer = new DataWriter(clientSocket.OutputStream); //实例化writer对象,以StreamSocket的输出流作为writer的方向
string content = "ABCDEFGH"; //发送一字符串
byte[] data = Encoding.UTF8.GetBytes(content); //将字符串转换为字节类型,完全可以不用转换
writer.WriteBytes(data); //写入字节流,当然可以使用WriteString直接写入字符串
await writer.StoreAsync(); //异步发送数据
writer.DetachStream(); //分离
writer.Dispose(); //结束writer
中断连接
clientSocket.Dispose();
clientSocket = null;
版权声明:本文为博主原创文章,未经博主允许不得转载。