Android学习——写个小实例

摘要:
网络是多计算机互连中最常用的。在网络编程中,底层通信机制是Socket。我们只想尝试Socket来实现双计算机对联。通常,当我们编写PC的套接字程序时,我们了解到服务器使用套接字侦听器侦听网络的端口。当客户端连接时,服务器侦听器返回一个套接字对象来发送和接收消息。如果未添加,则在Android中接收时会出现错误。我不知道Ll:byte[]readBuffer=newbyte[read_BUFFER_SIZE]收到的消息;this.client.GetStream().BegginRead;intBytesRead=client.GetStream().EndRead;retString=编码.ASCII.GetString;Android客户端l连接服务Socketsocket=newSocket;在模拟器中,用于连接到PC的IP是“10.0.2.2”,端口是服务器监视的端口。

学了不少基础的知识,拼一个完整点的小例子吧!

目标:完成一个与PC机互发消息的聊天程序。

 

首先要先试通,通讯机制。在多机互联中最常用的是网络,而网络编程中,底层的通讯机制也就是Socket。我们就想试一试用Socket来实现双机对联。先试通Socket通讯,PC机当服务器,手机当客户端。

通常,我们写PCSocket程序时,了解到,服务器端是采用Socket监听程序来监听网络的某个端口,当客户端连入时,服务器监听程序返回一个Socket对象来收发消息。客户端要连接到服务器端时,需要知道对方的IP和端口。在本实例中,服务器端我们采用C#来实现。

 

C#服务端

l  监听服务:

IPAddress ip = IPAddress.Parse("127.0.0.1");

myList = new TcpListener(ip,8001); //8001为端口号

myList.Start();

l  开始监听:

TcpClient client = myList.AcceptTcpClient(); //程序将会卡住,是同步执行不是异步。一旦客户端接入时,创建对象,继续执行。

l  发送消息:

StreamWriter writer = new StreamWriter(client.GetStream());

writer.Write(Context + (char)13 + (char)10);

writer.Flush();

注意:在发送的消息内容中,结尾必须要加上回车换行。如是不加,Android中接收会出错(会报Bad package)。具体原来我也不清楚L

l  接收消息:

byte[] readBuffer = new byte[read_BUFFER_SIZE];

this.client.GetStream().BeginRead(readBuffer, 0, read_BUFFER_SIZE, new AsyncCallback(StreamReceiver), null);

int BytesRead = client.GetStream().EndRead(ar);

retString= Encoding.ASCII.GetString(readBuffer, 0, BytesRead - 1);

 

Android客户端

l  连接服务

Socket socket = new Socket("10.0.2.2", 8001);

在模拟器中,连接到PC端采用的IP"10.0.2.2",端口用服务器端监听的端口。

l  发送消息

DataOutputStream dos=new DataOutputStream(socket.getOutputStream());

dos.write(str.getBytes());

l  接收消息

BufferedReader mReader = new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF-8"),8192);

String strRet = mReader.readLine(); //同样,执行读时,程序也会卡住,等待信息。

l  断开连接

socket.shutdownInput();         //需要调此方法,不然mReader.readLine还傻傻挂着。

socket.shutdownOutput();

socket.close();

 

在编写通讯程序时,由于读消息都是同步的,所以一般我们会采用线程来处理。

这章就写到这里,简单的通讯也就跑起来了,下次再把界面整得好看一点。

 

 

实例下载:MyTalk.rar

免责声明:文章转载自《Android学习——写个小实例》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Linux命令之ddgit push rejected下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

RabbitMQ 消息应答机制

一、概述 消费者处理一个任务是需要一段时间的,如果有一个消费者正在处理一个比较耗时的任务并且只处理了一部分,突然这个时候消费者宕机了,那么会出现什么情况呢? 要回答这个问题,我们先了解一下 RabbitMQ 的消息应答机制 为了保证消息从队列可靠地达到消费者并且被消费者消费处理,RabbitMQ 提供了消息应答机制,RabbitMQ 有两种应答机制,自动应...

协程—gevent模块的使用

gevent:认识一 import time import gevent # 带有io操作的内容写在函数里,然后提交func函数给gevent def func(): print("start func ...") gevent.sleep(1) print("end func ...") g1 = gevent.spawn(f...

数据绑定流程分析

1.    数据绑定流程原理★ ①   Spring MVC 主框架将 ServletRequest  对象及目标方法的入参实例传递给 WebDataBinderFactory 实例,以创建 DataBinder 实例对象 ②   DataBinder 调用装配在 Spring MVC 上下文中的 ConversionService 组件进行数据类型转换、...

mac下使用svn

原文地址:http://www.cnblogs.com/mjios/archive/2013/03/10/2952258.html 本文目录在Windows环境中,我们一般使用TortoiseSVN来搭建svn环境。在Mac环境下,由于Mac自带了svn的服务器端和客户端功能,所以我们可以在不装任何第三方软件的前提下使用svn功能,不过还需做一下简单的配...

Mininet实验 多个数据中心的拓扑网络实现

实验目的 掌握多数据中心网络拓扑的构建 掌握多数据中心数据交换过程 实验原理 主机间发送消息上报给交换机,交换机对收到的报文信息进行分析判断,如果交换机中存在此消息相对应的流表,则交换机直接下发流表,将报文消息转发给目的主机;如果交换机中没有相对应的流表,交换机将此发送消息给控制器,控制器根据消息分析关键字段内容,进行流表下发决策,交换机再将消息发送...

【Python】使用socketserver建立一个异步TCP服务器

概述 这篇文章是讲解如何使用socketserver建立一个异步TCP服务器,其中Python版本为3.5.1。 socketserver主要的类 socketserver模块中的类主要有以下几个:1、BaseServer 包含服务器的核心功能与混合类(mix-in)的钩子功能。这个类主要用于派生,不要直接生成这个类的类对象,可以考虑使用TCPServer...