DYCOM之Windows Phone 7.1网络通信

原创 2011年05月26日 11:52:00

在接到wp7 mango sdk的通知后马上着开发DYCOM For wp mango。毕竟这也已经是等了很久的事情。一直wp7 sdk就没有开放socket通信接口(包括s60的silverlight)。

经过两分钟的工作。顺利把DYCOM for silverlight 4 成功移值到wp7.1。这充份表明了silverlihgt for wp7.1和silverlight 4有着很完美的一致性。起来来说网络通信方面是。致于能不能够支持wcf.net.tcp找个时间再测试下。

在接入正题前先和大家介绍一个DYCOM这个产品。也算是一个小广告。不过不是营利目的的广告。DYCOM是一个跨平台的网络通信套件。它目前支持的客户端已经有.net,wm5/6,wp7.1,android,flash,java和xna。重点是DYCOM决定走共享软件的策略,DYCOM本身须然不开源,不过它提供了免费使用的使用政策。你可以通过使用DYCOM快速开发自己的跨平台通信应用程序。如果你不想付费即可以到http://dy2com.com申请免费授权。它是终身免费的授权。而收费授权和免费授权是一样的。换言之是否付费给DYCOM开发团队是出于你个人自愿的原则。

接下来我会为大家演练如何通过DYCOM快速开发一个wp7.1的即时聊天应用程序。本程序分为两个终端程序。服务器端和客户端程序.

未命名

a)服务器端我们通过c#开始服务器端业务逻辑并以一个控制台程式提供服务给客户端连接和广播消息到所有客户端。

b)客户端是一个wp7.1应用程序。它是一个客户端程序可以连接到服务器

c)要现实的功能是:

1.由任意一个连接到服务器端的wp7手机发送一条消息到服务器端。

2.服务器端收到这条消息后广播到所有已经连接到服务器的所有客户端。

通过以上两个功能需求我们可以完成一个简单的即时文字聊天程序。

以下是正常手动操作的演练过程:

1.登陆DYCOM官方网站申请免费授权,地址:http://bbs.dy2com.com/forum.php?mod=viewthread&tid=18&extra=

申请一个论坛账号登陆后即可以通上以上地址连接浏览到申请DYCOM免费授权KEY的申请框:

未命名

填写好你的用户名和邮箱后点击“申请密钥”按钮后DYCOM会发送一封包含DYCOM密钥的邮件到你的邮箱。通过这个密钥你就可以永久免费的使用DYCOM了。

2.下载DYCOM服务器和wp7客户端示例工程文件:

a)DYCOM服务器示例工程文件:http://www.dy2com.com/a/DYcomxiazai/fuwuqiduanshili/2011/0120/59.html

未命名

以上是五个DYCOM示例,我们只需要下载“dycom 服务器端.net4.0示例”即可。

b)DYCOM客户端下载:http://www.dy2com.com/a/DYcomxiazai/kehuduanshili/2011/0121/66.html

客户端我们只下载wp7即可:

image

要下载的东西到此已经完成.接下来开始调试运行这两个示例并让它们可以相互通信:

小提示:如果你还没有安装wp7.1 sdk 请点击下载并安装:Windows phone 7.1 SDK 下载地址:Direct Download Link

a)解压两个已下载文件后我们得到两个vs2010的项目工程文件。那些我们分别用两个vs2010程序打开这两个工程项目文件。

b)开始运行服务端:调试运行打开了DYComServerVS10Sample工程的vs2010.运行后情况如下:

未命名

 

c)开始运行客户端:调试运行打开了DYComWPTestClient工程的vs2010.运行后情况如下:

小提示:如果这运行其间出现任何vs的错误提示我们可以先“重新编译”一下整个客户端工程.

未命名

^^运行成功后调试运行即完成。我们试着点击输入框输入一些文字然后发送。正常情况下我们会收到我们自己发送的文本。而且你多几好几个客户端的话同样可以收到某一个客户端发的消息。至此。我们的调试运行已经成功了。接下来就是看看工程的源代码了。

未命名

3.让程序成为正式版呢:还记得我们刚刚申请的DYCOM产品密钥吧。现在我们打开服务端工程文件DYComServerVS10Sample的DYComServer.cs文件。

修改代码:string key = "PD Key";//产品密钥,请修改为您自己的产品密钥

把以上这个key变量的内容改为你的DYCOM产品密钥,

例如:string key = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";//产品密钥,请修改为您自己的产品密钥

这样整个应用就已经成为正式的应用了,你可以部署到正式的服务器上。而客户端是不需要输入DYCOM产品密钥的。

通过以上的演练我们已经拥有了一个wp7的高速网络通信源代码工程了。接下来我们尝试自己亲手去为这个应用添加自己需要的功能了。通过接下来的演练你将能够懂得怎样利用DYCOM开发你自己的网络通信应用。而这一切将会是无比的简单。而且通信效率是相当高的。你还可以用DYCOM开发wp7的网络游戏喔。^^

4.添加用户连接通知,需求:当某个新的客户端连接到服务器后,服务器端发送一条通知给已经连接到服务器端的其他客户端。

a)服务器端代码编写:我们只需要修改服务器端的DYComServer.cs即可,

在DYComServer.cs的文件内容开头我们可以看到这样一句代码:

List clients = new List();

其实它就是所有已经连接到服务器端的客户端集合。那么我们就可以着针对这个集合的调来实现我们的功能了。首先我们找到

//自定义消息操作符
public enum op
{
    login
}

这个enum定义。我们加上一个操作符。你可以随意起个名字,还可以是中文的。修改后如下:

//自定义消息操作符
public enum op
{
    login,
    有新用户连接进入
}

然后我再在服务端的客户OnConnetEvent里添加我们的功能逻辑:

//用户连接事件
void server_OnConnetEvent(DYSocket e, bool IsConneted)
{
    //客户端连接提示
    Console.WriteLine(e.SocketArgs.AcceptSocket.RemoteEndPoint.ToString() + " 已接入");
    //判断连接客户端是否新接入(新接入用户UserToken是等于null的)
    if (e.SocketArgs.UserToken == null)
    {
        //实例化
        var mc = new myClient();
        //把连接客户端设置到客户端实例
        mc.Sock = e;
        //希望用户在一定时间内没有任何通信将其断开(秒)
        //mc.SetupTimeoutCheck(server, 5);
        //操作完成,保存客户实例
        e.SocketArgs.UserToken = mc;

        //发送一个消息给所有已连接到本服务的客户端
        //操作符是 op.有新用户连接进入
        //消息内容是:"服务器通知你,有新的用户连接进入了系统"
        //并使用UTF8编码
        server.SendToAll(clients, DYWriter.Merge(DYWriter.GetDYBytes((int)op.有新用户连接进入),
            DYWriter.GetDYBytes("服务器通知你,有新的用户连接进入了系统",Encoding.UTF8)));

        //添加新客户端到客户端集合
        clients.Add(e.SocketArgs.UserToken as myClient);
    }
}

添加完以上的一句代码后。

5.我们的服务器端修改已经完成.接下来我们着手让客户端接收到消息后显示到用户界面:

a)首先复制DYComServer.cs文件里的eumu op到客户端并代替客户端原有的eumu op。换言之我们把客户端工程DYComWPTestClient中的MainPage.xaml.cs中的enum op改为:

//自定义消息操作符
public enum op
{
    login,
    有新用户连接进入
}

b)在再修改客户端的Ondata事件,因为所有服务器发送的消息都会触发这个事件。我们只要解释消息内容即可:

void ondata(byte[] data)
{
    DYReader read = new DYReader(data);
    int type;
    if (!read.ReadInt32(out type))
    {
        return;
    }
    op opera = (op)type;

    if (opera == op.login)
    {
        string date;
        if (read.ReadString(out date, System.Text.Encoding.UTF8))
        {
            //listBox1.Items.Insert(0, DateTime.Now.Subtract(date).TotalMilliseconds.ToString());
            lb_msgShow.Items.Insert(0, date);
        }
    }
    //判断是否新用户连入操作符,由服务器发送来的
    else if (opera == op.有新用户连接进入)
    {
        string str_服务端消息内容;
        //把消息内容读出到 str_服务端消息内容 变量
        if (read.ReadString(out str_服务端消息内容, System.Text.Encoding.UTF8))
        {
            //在界面中的ListBox中显示消息内容
            lb_msgShow.Items.Insert(0, str_服务端消息内容);
        }
    }
}

至此我们的客户端读取和显示功能也完成了。以下是最终运行后的结果截图,由于wp7模拟器多开很困难。所以我用另一个普通的silverlihgt客户端连接到服务器端:

未命名

 

结束语:经过这些演练后相信你已经对DYCOM有了比较概念的理解了。希望它能为你创造更多惊喜和价值。

本演练的源工程文件下载:http://dl.dbank.com/c0wllqu9w7

作者:黎东海

网名:内Cool超人

设置Windows phone 手机真机调试

最近要做Widows phone开发,用的最新的8.1的API,所以手机由8.0升级到了8.1,从网上查了下教程,做个记录! 1.首先,我们点击手机自带的应用商店 -->搜索软件“升级到WP8...
  • u010004082
  • u010004082
  • 2015年02月17日 21:52
  • 975

windows上的5种网络通信模型示例代码

一些好设计的经验: linux网络: 高性能网络编程IO复用和Epoll高效率之处-遍历的集合更小空间换时间/水平触发和边缘触发主动返回。 反应堆的设计模式-避免C风格的一个应用逻辑都需要处理多...
  • Blues1021
  • Blues1021
  • 2015年03月03日 22:57
  • 5817

Windows Phone8模拟器设置

一、Windows Phone8 sdk 下载链接 http://dev.windowsphone.com/zh-cn/downloadsdk 系统要求 •操作系统类型:  Windo...
  • cometwo
  • cometwo
  • 2013年04月19日 23:15
  • 1404

Windows phone 多分辨率适配问题

Windows phone 多分辨率适配问题 2012/11/8 10:48:32 | 阅读28次       因为之前的 windows phone 应用是基于 7.1...
  • qxue2000
  • qxue2000
  • 2013年01月17日 23:56
  • 499

Windows 8.1 下 Windows Phone 开发环境的搭建流程

转载:Windows 8.1 下 Windows Phone 开发环境的搭建流程 Windows 8.1 下 Windows Phone 开发环境的搭建流程...
  • LH806732
  • LH806732
  • 2014年04月14日 19:24
  • 3761

Windows Phone 保存、读取图片

转自:http://blog.csdn.net/leons77/article/details/8085662 读取图片 图片的来源一般有3个地方:网络、独立存储和程序包。 ...
  • gf771115
  • gf771115
  • 2014年07月09日 23:31
  • 2122

win8.1使用WP8SDK出现Windows Phone Emulator无法启动的问题解决方案

近期在win8.1专业版系统的vs2012上装了wp8SDK 体验一把wp开发的快感 安装sdk过程一切顺利 打完代码之后运行调试 问题来了: 提示如下错误 遂百度之 主要的方法...
  • qq1010885678
  • qq1010885678
  • 2014年07月08日 20:20
  • 1230

开发者如何选择系统平台?Android、IOS还是Windows Phone?

笃定Android的开发者赢得是未来,选择IOS的开发者赚取的是现在,钟情Windows Phone(以下简称WP)的开发者将紧随市场潮流。尽管这样的判断还有待考证,但是事实证明移动平台的命运肯定是被...
  • shuimanting520
  • shuimanting520
  • 2015年05月10日 08:49
  • 619

Windows平台网络通信中的I/O操作的总结与类比

此篇博客是我专门针对我的一本教科书进行的笔记整理。以前我一直采用的纸质的笔记本进行的记录,现在将它们转录到博客上,也随一下大流。 这篇文章是刘琰、刘龙等编著的由机械工业出版社出版的《Windows 网...
  • qq_33205982
  • qq_33205982
  • 2017年02月06日 19:56
  • 228

Windows Phone是一个严重被低估的移动操作系统

在Android垄断智能手机市场的形势下,讨论WindowsPhone超越Android肯定会面临大批Android用户的激烈声讨。有位叫做许来西的知乎网友大概吃了熊心豹子胆,竟在WindowsPho...
  • u012247462
  • u012247462
  • 2014年08月19日 21:59
  • 2201
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:DYCOM之Windows Phone 7.1网络通信
举报原因:
原因补充:

(最多只允许输入30个字)