Metro开发中的Socket支持(C#)
2012-11-30 18:01
267 查看
最近在尝试Metro应用开发,作为本系列文章的开篇,简要介绍一下WinRT中对Socket的支持,废话不多说了,以下代码段声明了一个StreamStocket实例连接谷歌主页:
//声明并初始化一个HostName
HostName hostName;
try
{
hostName = new HostName("www.google.com");
}
catch (ArgumentException)
{
NotifyUser("Error: Invalid host name.");
return;
}
//初始化一个StreamSocket实例用于连接网络
StreamSocket socket = new StreamSocket();
try
{
// 连接服务器
await socket.ConnectAsync(hostName, "http");
//或者await socket.ConnectAsync(hostName, "8003");
//此方法有几个重载,可以选择是否使用Ssl等
NotifyUser("Connected");
}
catch (Exception exception)
{
if (SocketError.GetStatus(exception.HResult) ==
SocketErrorStatus.Unknown)
{
throw;
}
NotifyUser("Connect failed with error: " +
exception.Message);
}
其中用到的通知方法:
经过以上操作,相信已经顺利连接上需要操作的各种服务器了,接下来发送请求:
发送请求后就可以开始尝试读取从服务器返回的数据了,以下是简单示例:
经过以上步骤,我们完成了一次简单的从谷歌服务器获取网页数据的过程。当然,在实际项目使用中肯定不会这么简单,这里面未考虑和刻意忽略的细节问题非常多,此篇文章只是介绍了一下基本的使用方法,仅此而已。
//声明并初始化一个HostName
HostName hostName;
try
{
hostName = new HostName("www.google.com");
}
catch (ArgumentException)
{
NotifyUser("Error: Invalid host name.");
return;
}
//初始化一个StreamSocket实例用于连接网络
StreamSocket socket = new StreamSocket();
try
{
// 连接服务器
await socket.ConnectAsync(hostName, "http");
//或者await socket.ConnectAsync(hostName, "8003");
//此方法有几个重载,可以选择是否使用Ssl等
NotifyUser("Connected");
}
catch (Exception exception)
{
if (SocketError.GetStatus(exception.HResult) ==
SocketErrorStatus.Unknown)
{
throw;
}
NotifyUser("Connect failed with error: " +
exception.Message);
}
其中用到的通知方法:
protected async void NotifyUser(String msg) { MessageDialog dialg = new MessageDialog(msg, "测试结果"); await dialg.ShowAsync(); }
经过以上操作,相信已经顺利连接上需要操作的各种服务器了,接下来发送请求:
//声明并初始化向socket连接写数据的DataWriter对象 DataWriter writer = new DataWriter(socket.OutputStream); String stringToSend = "HelloStocket"; writer.WriteUInt32(writer.MeasureString(stringToSend)); writer.WriteString(stringToSend); // 向网络发送数据 try { await writer.StoreAsync(); } catch (Exception exception) { if (SocketError.GetStatus(exception.HResult) == SocketErrorStatus.Unknown) { throw; } NotifyUser("Send failed with error: " + exception.Message); }
发送请求后就可以开始尝试读取从服务器返回的数据了,以下是简单示例:
DataReader reader = new DataReader(Socket.InputStream); uint sizeFieldCount = await reader.LoadAsync(sizeof(uint)); if (sizeFieldCount != sizeof(uint)) { return; } // 读取字符串 uint stringLength = reader.ReadUInt32(); uint actualStringLength = await reader.LoadAsync(stringLength); if (stringLength != actualStringLength) { return; } String result=reader.ReadString(actualStringLength); NotifyUser("Receive data: " + result);
经过以上步骤,我们完成了一次简单的从谷歌服务器获取网页数据的过程。当然,在实际项目使用中肯定不会这么简单,这里面未考虑和刻意忽略的细节问题非常多,此篇文章只是介绍了一下基本的使用方法,仅此而已。
相关文章推荐
- C#多国语言支持的WinForm程序开发(转)
- 使用C#开发Metro 风格应用的路线图 -- 控件分类介绍
- Windows Store apps开发[18]Metro Revealed Building Windows 8 apps with XAML and C#中文翻译全部汇总
- Windows 8实用窍门系列:1.使用Xaml+C#开发第一个Metro Style应用程序 推荐
- 使用C#开发Metro 风格应用的路线图 -- metro应用生命周期的处理
- 功能齐全、效率一流的免费开源数据库导入导出工具(c#开发,支持SQL server、SQLite、ACCESS三种数据库),每月借此处理数据5G以上
- cocos2d-x学习之旅(六):1.5 使用C#开发windows phone手机游戏(暂不支持windows 8)
- 使用C#开发Metro 风格应用的路线图 -- 在页面间导航、传值
- 基于C#的Socket开发快速入门(转载)
- C#版OPOS打印(基于北洋OPOS SDK二次开发包,支持EPSON和北洋、佳博、商祺等支持标准ESC/POS指令的POS打印机)
- C# WinForm开发系列 - Socket/WCF/Rometing/Web Services
- c# websocket 服务端,客户端 兼容低版本IE,支持超长数据传输 附源码
- C#开发之Socket网络编程
- c#让Socket服务支持IPv6
- 今天才明白VC++.net的含义: VS系列的c++编译器可以支持托管C++(类似于C#,具体请看MS在线文档),当然包括winform界面开发。
- C#编写支持10W以上socket 同时在线服务实例代码
- C#开发EXCEL导入、导出支持MSSQL、ORACLE、ACCESS
- 使用C#开发Metro 风格应用的路线图 -- 添加启动画面
- C#开发的高性能EXCEL导入、导出工具DataPie(支持MSSQL、ORACLE、ACCESS
- 使用C#开发Metro 风格应用的路线图 -- metro应用生命周期的处理