WP8.1通过StreamSocket连接C++服务器

注:当服务端和手机模拟器运行在一台机器时,会有奇怪错误。将服务端放在其它机器上更改客户端连接地址,运行正常。或者直接用本机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;

版权声明:本文为博主原创文章,未经博主允许不得转载。

原文地址:https://www.cnblogs.com/ggzone/p/4786421.html