博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
.net + Android 通信
阅读量:4705 次
发布时间:2019-06-10

本文共 3771 字,大约阅读时间需要 12 分钟。

上次实现了WCF与Android端的通信,这次参考网友的Demo实现聊天功能,使用Socket实现。当前使用的是Tcp,后面有时间再使用udp.

此例子用json实现,大致格式如下:{Method:"Login",Message:{username:"kevin",message="hello world"},time:"2012-10-22 11:41:32"}

  • 服务端:.net 控制台应用程序

服务器端思路是利用Socket接收数据,然后根据请求信息做相应处理

 首先,搭建Socket服务分为四部:实例化、绑定、侦听、接收数据。代码如下:

View Code
public void Start()        {            Thread socketThread = new Thread(() =>            {                //实例化Socket                Socket host = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);                IPEndPoint point = new IPEndPoint(IPAddress.Any, Port);                //绑定                host.Bind(point);                //侦听                host.Listen(20);                //开始异步连接                                host.BeginAccept(new AsyncCallback(Accept), host);            });            socketThread.Start();        }

以上使用了线程,并实现异步连接。

这里通过接收数据中的Method来判断请求方法,然后根据请求方法作相应处理,代码如下:

View Code
//序列化反序列化帮助类            JavaScriptSerializer Serializer = new JavaScriptSerializer();            SocketData requestdata = Serializer.ConvertToType(request, typeof(SocketType)) as SocketData;            if (request != null)            {                SocketData response;                string context;                Dictionary
param = requestdata.Message as Dictionary
; if (requestdata.Message.Equals("Login"))//响应登录请求 { response = new SocketData() { Method = "Login", Message = new { UserName = param["UserName"] }, Time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }; context = Serializer.Serialize(response); sender.Send(Encoding.UTF8.GetBytes(context)); } else if (requestdata.Message.Equals("Send"))//响应聊天请求 { string Message = param["Message"] as string; response = new SocketData() { Method = "Send", Message = new { UserName = param["UserName"], Message = Message }, Time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }; context = Serializer.Serialize(response); //将聊天信息群发 Parallel.ForEach(SocketCache.Select(e => e.Key).ToArray(), (temp) => { temp.Send(Encoding.UTF8.GetBytes(context)); }); } }

 

服务建好后,可以使用SocketTool工具进行测试,可以,效果如下,显示已连接表示服务搭建成功。

  • 客户端:Android

 

首先,要设置可以通信的权限,在AndroidManifest.xml文件里加上<uses-permission android:name="android.permission.INTERNET" />。

Android 的Socket通信可以参考,对于客户端来说,请求和接收数据分别使用getOutputStream()和getInputStream(),

参考代码:

View Code
//接收数据Socket client = new Socket("IP","端口号");BufferedReader reader;                    try {                        reader = new BufferedReader(new InputStreamReader(                                client.getInputStream()));                        String line = reader.readLine();                        JSONObject json = new JSONObject(line);                        } catch (IOException e) {                    } catch (JSONException e) {                    }//发送数据Socket client = new Socket("IP","端口号");try {            OutputStreamWriter osw = new OutputStreamWriter(client                    .getOutputStream());            BufferedWriter writer = new BufferedWriter(osw);            JSONObject json = new JSONObject();            json .put("Message", "fs");            json .put("UserName", "fds");            writer.write(json.toString());            writer.flush();        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (JSONException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }

 

在此感谢网友的代码,原文地址如下:

转载于:https://www.cnblogs.com/liqiao/archive/2012/10/22/2733667.html

你可能感兴趣的文章
poj 1961 Period(KMP训练指南例题)
查看>>
leetcode Sum Root to Leaf Numbers(所有路径之和)
查看>>
poj 2686 Traveling by Stagecoach ---状态压缩DP
查看>>
Rational Rose--简介
查看>>
声明银行账户类,成员变量包括账号,储户姓名,开户时间,身份证号码,存储余额等账户信息...
查看>>
利用isPointInPath()实现canvas小游戏的交互
查看>>
创建简单线程
查看>>
ASP.NET MVC 随想录——开始使用ASP.NET Identity,初级篇
查看>>
用纯JS实现双向数据绑定
查看>>
php 解决返回数据 数字 变成科学计数法后转换问题
查看>>
How-To-Secure-A-Linux-Server
查看>>
网络与多线程的设计例子
查看>>
ubuntu12.04 各种小问题及解决方案集锦【持续更新】
查看>>
如何更改silverlight datagrid header的背景
查看>>
Data Structure Binary Tree: Construct Full Binary Tree from given preorder and postorder traversals
查看>>
类和对象的系统函数和运算符
查看>>
Checkstyle
查看>>
go语言的数组
查看>>
【题解】士兵训练-C++
查看>>
C#设计模式(4)——抽象工厂模式
查看>>