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服务器. 但是在某些情景中,也会给人造成不必要的麻烦, ...
随机推荐
- 【LABVIEW到C#】4》String的操作之Search and Replace.vi
C#封装如下: public class SearchAndRepalce : Darrenstring { public bool replaced; private string stringou ...
- 【scala】IO
1.读文件 可以使用Scala的Source类及其对象来读取文件. Source 类 需要导入 scala.io.Source 然后调用fromFile()方法来读取文件内容 import scala ...
- 条款30:透彻了解inline的里里外外。
inline可以带来各种好处: 首先其可以使得消除函数调用带来的开销,再者编译器对这种非函数的代码可以做出更多的优化策略. 但是inline函数首先肯定是会导致程序代码的大小更加的庞大,这样会带来 ...
- 20165210 2017-2018-2《Java程序设计》课程总结
20165210 2017-2018-2<Java程序设计>课程总结 每周作业链接汇总: 预备作业一: 20165210 我期望的师生关系 预备作业二:20165210 学习基础和C语言基 ...
- Some Interview Questions About Python
一大波超链接即将袭来 Django认证流程 Python实现阶乘 Python文件处理 Python统计日志文件IP出现次数 JSON数据解析 JSON数据解析2 买卖股票的最佳时期 读取一个大文件比 ...
- MySQL 进入 导入
命令行进入时 不能用 ‘;’ 结尾
- C++ Primer 第四版中文版
C++Primer是C++的经典教程. 开始时间:2014-08-10 完成时间:2014-08-28 学习成果:基础语法+
- 让ListView中的控件失去焦点:android:descendantFocusability="blocksDescendants"
值得注意的是,ListView中的控件不能设置clickable="true",否则会无视父控件的blockDescendants. 可参考: https://segmentfau ...
- HDU - 6242:Geometry Problem(随机+几何)
Alice is interesting in computation geometry problem recently. She found a interesting problem and s ...
- ehchache和redis
Ehcache 在java项目广泛的使用.它是一个开源的.设计于提高在数据从RDBMS中取出来的高花费.高延迟采取的一种缓存方案.正因为Ehcache具有健壮性(基于java开发).被认证(具有apa ...