WP10通过StreamSocket连接C++服务器
注:当服务端和手机模拟器运行在一台机器时,会有奇怪错误。将服务端放在其它机器上更改客户端连接地址,运行正常。或者直接用本机modern调试也可以。 
实例化一个对象
StreamSocket _client = new StreamSocket();
Byte[] recvBuf= new Byte[8096];
Byte[] sendBuf= new Byte[8096];建立连接:
async void connect()
{
    try
    {
        //设置服务器IP
        HostName serverHost = new HostName("127.0.0.1");
        //设置服务器端口号
        await _client.ConnectAsync(serverHost, 5000);
    }
    catch (Exception e)
    {
        Debug.WriteLine(e);
        _client.Dispose();
        _client = null;
    }
}接收和发送数据 
         由于Socket通信从本质上说是数据流的传输,即byte类型,StreamSocket使用DataReader类和DataWriter类来接收和发送数据流,两个类封装了不少实用的方法,但归根结底是对byte类型数据读取和发送的封装。 
         为了能够发送汉字,必须使用unicode编码。 
C++发送数据: 
         为了能够发送汉字,必须将数据转换为wchar_t.
    wstring wstr = str_to_wstr(str);
    send(m_sock, (char*)wstr.c_str(), wstr.size()*2, 0);C#接收数据:
    _reader = new DataReader(_client.InputStream);
    _reader.InputStreamOptions = InputStreamOptions.Partial;
    uint count = await _reader.LoadAsync(8096);
    _reader.ReadBytes(recvBuf);
    string msg = Encoding.Unicode.GetString(recvBuf);C#发送数据:
    string strSend="xxxx";
    _writer = new DataWriter(_client.OutputStream);
    sendBuf= Encoding.Unicode.GetBytes(strSend);
    _writer.WriteBytes(sendBuf);
    await _writer.StoreAsync();
    _writer.DetachStream();
    _writer.Dispose(); C++接收数据:
    //按照以往方式接收数据,存放到char* buf中,然后转换
    wstring msg = dchar_to_wchar(buf);
    //转换函数可以这样写
    wstring dchar_to_wchar(char* source)
    {
        wchar_t* p =reinterpret_cast<wchar_t*>(source);
        return wstring(p);
    }C#中断连接:
    clientSocket.Dispose();
    clientSocket = null;此处有坑: 
当使用async/await异步发送消息,然后再用async/await异步接收消息,虽然C++服务器返回了信息,但datareader.LoadAsync(int)会出各种错。主要是:datareader.LoadAsync(int)不返回,一直卡在那个这个函数等。 
解决方法: 
确认发送消息完成后再接收消息。
WP10通过StreamSocket连接C++服务器的更多相关文章
- WP8.1通过StreamSocket连接C++服务器
		注:当服务端和手机模拟器运行在一台机器时,会有奇怪错误.将服务端放在其它机器上更改客户端连接地址,运行正常.或者直接用本机modern调试也可以. 实例化一个对象 StreamSocket clien ... 
- SQL Server 无法连接到服务器。SQL Server 复制需要有实际的服务器名称才能连接到服务器。请指定实际的服务器名称。
		异常处理汇总-数据库系列 http://www.cnblogs.com/dunitian/p/4522990.html SQL性能优化汇总篇:http://www.cnblogs.com/dunit ... 
- 解决Oracle SQL Developer无法连接远程服务器的问题
		在使用Oracle SQL Developer连接远程服务器的时候,出现如下的错误 在服务器本地是可以正常连接的.这个让人想起来,跟SQL Server的一些设计有些类似,服务器估计默认只在本地监听, ... 
- win7中 SQL server 2005无法连接到服务器,错误码:18456
		win7中 SQL server 2005无法连接到服务器,错误码:18456.. 数据库刚装完.我用Windows登陆 结果登陆不上去.. 选中SQL Server Management Stud ... 
- Redis集群~StackExchange.redis连接Sentinel服务器并订阅相关事件(原创)
		回到目录 对于redis-sentinel我在之前的文章中已经说过,它是一个仲裁者,当主master挂了后,它将在所有slave服务器中进行选举,选举的原则当然可以看它的官方文章,这与我们使用者没有什 ... 
- Strophe.js连接XMPP服务器Openfire、Tigase实现Web私聊、群聊(MUC)
		XMPP(Extensible Messaging and Presence Protocol)是一种网络即时通讯协议,它基于XML,具有很强的扩展性,被广泛使用在即时通讯软件.网络游戏聊天.Web聊 ... 
- 【FTP】C# System.Net.FtpClient库连接ftp服务器(上传文件)
		如果自己单枪匹马写一个连接ftp服务器代码那是相当恐怖的(socket通信),有一个评价较高的dll库可以供我们使用. 那就是System.Net.FtpClient,链接地址:https://net ... 
- 【FTP】C# System.Net.FtpClient库连接ftp服务器(下载文件)
		如果自己单枪匹马写一个连接ftp服务器代码那是相当恐怖的(socket通信),有一个评价较高的dll库可以供我们使用. 那就是System.Net.FtpClient,链接地址:https://net ... 
- 禁止Visual Studio启动时自动连接TFS服务器
		在默认设置情况下,Visual Studio启动时,会自动连接上次打开过的TFS服务器.这种设计能够提高开发人员的工作效率,避免每次手动连接TFS服务器. 但是在某些情景中,也会给人造成不必要的麻烦, ... 
随机推荐
- 【sparkSQL】DataFrame的常用操作
			scala> import org.apache.spark.sql.SparkSession import org.apache.spark.sql.SparkSession scala> ... 
- 让Android模拟器飞一会
			https://software.intel.com/zh-cn/android/articles/speeding-up-the-android-emulator-on-intel-architec ... 
- flask bootstrap IE11的 兼容性问题
			在子模板内添加如下代码确保IE11的兼容性问题. {% extends 'bootstrap/base.html' %}{% block metas %} <meta http-equiv=&q ... 
- maven  pox.xml文件报错解决办法 亲测可以
			问题1 由于maven下载依赖包失败导致一些文件没完全下载下来,形成了lastUpdated结尾的文件存放在本地仓库中(我是默认地址:C:\Users\Administrator\.m2\reposi ... 
- Tinker爬坑之路
			目的 热修复去年年底出的时候,变成了今年最火的技术之一.依旧记得去年面试的时候统一的MVP,然而今年却变成了RN,热修复.这不得不导致我们需要随时掌握最新的技术.不然可能随时会被淘汰.记得刚进公司,技 ... 
- Golang使用MongoDB通用操作
			MongoDB是Nosql中常用的一种数据库,今天笔者就简单总结一下Golang如何使用这些通用的供能的,不喜勿喷... 研究的事例结构如下: type LikeBest struct { Autho ... 
- 2017年终巨献阿里、腾讯最新Java程序员面试题,准备好进BAT了吗
			Java基础 进程和线程的区别: Java的并发.多线程.线程模型: 什么是线程池,如何使用? 数据一致性如何保证:Synchronized关键字,类锁,方法锁,重入锁: Java中实现多态的机制是什 ... 
- 剑指Offer面试题:11.调整数组顺序使奇数位于偶数前面
			一 题目:调整数组顺序使奇数位于偶数前面 题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分. 二 解题思路 如果不考虑时间复杂度 ... 
- matlab算法转为c语言注意事项
			matlab算法转为c语言后,影响c语言效率的关键在于multiword的产生,基于此会有multiword加减法和乘除法,极大消耗资源,减少甚至消除multiword很重要,需注意的是:算法中尽量减 ... 
- POJ3764,BZOJ1954 The xor-longest Path
			题意 In an edge-weighted tree, the xor-length of a path p is defined as the xor sum of the weights of ... 
