以C#编写的Socket服务器的Android手机聊天室Demo

  次阅读 作者:智能小宝 来源:互联网 2015-09-28 16:17 我要评论(0)

内容摘要

1.程序架构

2.通信协议

3.服务器源代码

4.客户端源代码

5.运行效果

一、程序架构

在开发一个聊天室程序时,我们可以使用Socket、Remoting、WCF这些具有双向通信的协议或框架。而现在,我正要实现一个C#语言作为服务器 端、Android作为客户端的聊天室。由于服务器端和客户端不是同一语言(C#和java),所有我选择了Socket作为通信协议。

图1.1所示,我们可以看出:android手机客户端A向服务器端发送消息,服务器端收到消息后,又把消息推送到android手机客户端B。

图1.1

二、通信协议

我们知道,在C#语言中使用Socket技术需要 四部曲 ,即 Bind , Listen , Accept , Receive 。然而 Socket编程不像WCF那样面向对象。而且对应每个请求都用同一种方式处理。作为习惯面向对象编程的我来说,编写一个传统的Socket程序很不爽。 绞尽脑汁,我们将数据传输的格式改为json(JavaScript Object Notation 是一种轻量级的数据交换格式),面对对象的问题就解决了。

假设程序的服务契约有两个方法: 登陆 和 发送消息 。调用登陆的方法,就传送方法名(Method Name)为 Logon 的json数据;调用发送消息的方法,就传送方法名为 Send 的json数据。返回的数据中也使用json格式,这样在 android客户端中也能知道是哪个方法的返回值了。

三、服务器源代码

首先需要编写一个处理客户端消息的接口:IResponseManager。

publicinterfaceIResponseManager

{

voidWrite(Socket sender, IList < Socket >cliens, IDictionary < string ,object >param);

}

其次,我们知道,换了是WCF编程的话,就需要在服务契约中写两个方法: 登陆 和 发送消息 。由于这里是Socket编程,我们实现之前写的IResponseManager接口,一个实现作为 登陆 的方法,另一个实现作为 发送消息 的方法。

publicclassLogonResponseManager : IResponseManager

{

publicvoidWrite(System.Net.Sockets.Socket sender, IList < System.Net.Sockets.Socket >cliens, IDictionary < string ,object >param)

{

Console.WriteLine( " 客户端({0})登陆 " , sender.Handle);

var response=newSocketResponse

{

Method=" Logon " ,

DateTime=DateTime.Now.ToString( " yyyy-MM-dd HH:mm:ss " ),

Result=new{ UserName=param[ " UserName " ].ToString() }

};

JavaScriptSerializer jss=newJavaScriptSerializer();

stringcontext=jss.Serialize(response);

Console.WriteLine( " 登陆发送的数据为:{0} " , context);

sender.Send(Encoding.UTF8.GetBytes(context+" \n " ));

}

}

publicclassSendResponseManager : IResponseManager

{

publicvoidWrite(System.Net.Sockets.Socket sender, IList < System.Net.Sockets.Socket >cliens, IDictionary < string ,object >param)

{

Console.WriteLine( " 客户端({0})发送消息 " , sender.Handle);

var msgList=param[ " Message " ]asIEnumerable < object > ;

本站文章信息来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • 英国研发“杀生”机器人 通过生命体获取能量

    英国研发“杀生”机器人 通过生命体获取能量

  • 无人驾驶汽车如何改变城市生活?听听他们怎么说

    无人驾驶汽车如何改变城市生活?听听他们怎么说

  • 未来两年人工智能要怎么走?看这篇就够了

    未来两年人工智能要怎么走?看这篇就够了

  • 韩春雨称已能重复实验结果 近期将有消息公布

    韩春雨称已能重复实验结果 近期将有消息公布

网友点评网友点评
阅读推荐阅读推荐

据国外媒体报道,在过去两年内,聊天机器人(chatbot)、人工智能以及机器学习的研发和采用取得了巨大进展。许多初创公司正利用人工智能和...

霍金 视觉中国 图 英国著名物理学家霍金(Stephen Hawking)再次就人工智能(AI)发声,他认为:对于人类来说,强大AI的出现可能是最美妙的...

文|郑娟娟 今年,人工智能(AI) 60岁了。在AI60岁的时候,笔者想要介绍一下AI100,一个刚刚2岁的研究项目,但它的预设寿命是100年,甚至更长...

AlphaGo与李世石的人机大战,为大众迅速普及了人工智能的概念。 但对谷歌而言,除了下围棋,现在的人工智能进展到哪一步了?未来,人工智能...