`
zjf-2004
  • 浏览: 10380 次
  • 性别: Icon_minigender_1
  • 来自: 张家港
最近访客 更多访客>>
社区版块
存档分类
最新评论

Android学习——写个小实例

 
阅读更多

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

目标:完成一个与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

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics