Android网络编程 基于socket 的通信_第1页
Android网络编程 基于socket 的通信_第2页
Android网络编程 基于socket 的通信_第3页
Android网络编程 基于socket 的通信_第4页
Android网络编程 基于socket 的通信_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Android 网络编程实践之旅 二 基于网络编程实践之旅 二 基于 Socket 的网络通信的网络通信 Socket 套接字 是一种通信机制 可以实现单机或跨网络进行通信 其创建需要明 确的区分 C 客户端 S 服务器端 支持多个客户端连接到同一个服务器 有两种传 输模式 1 面向连接的传输 基于 TCP 协议 可靠性高 但效率低 2 面向无连接的传输 基于 UDP 协议 可靠性低 但效率高 Android 中 直接采用 Socket 通信应该是我们遇到的最低级的网络运用 尽管已经作 了很大程度的抽象 但是纯粹的 Socket 通信 仍然给开发者留下很多细节需要处理 尤 其在服务器端 开发者需要处理多线程以及数据缓冲等的设计问题 相对而言 处于更高 抽象层的 HTTP 等 已经对 Socket 通信中需要处理的技术细节进行了很好的封装 开发 者无须关心 因此 HTTP 在网络开发中通常具有决定性的优势 Android 在其核心库的 java 包中 提供了用于客户端的 Socket class 和用于服务器端 的 ServerSocket class 分别位于 SOURCE libcore luni src main java java net Socket java 和 SOURCE libcore luni src main java java net ServerSocket java 文件中 分析两个 class 的源码 可以看出封装考虑的很全面 只构造方法一向每个 class 都考虑了很多种使用情 况 由于本人只是初学者 很多理解的不深入 这里只抛砖引玉的对两个 class 的构造方 法分别介绍一种 就是我下面的程序中用到的 Socket String dstName int dstPort 创建一个以流的方式 基于 TCP 协议 连接到目标 机 这里可以理解为服务器 的客户端 Socket dstName 是目标机的 IP 地址 dstPort 是 要连接的目标机的端 口号 这里要注意对端口的理解 它不能理解为物理上的一个接口 而是对计算机中一块特殊内存区域的形象表述 ServerSocket int aport 创建一个绑定到本机指定端口的服务端 Socket aport 就是指定 的本机端口 与上述客户端 Socket 对应 通过 TCP 连接时 ServerSocket 创建后需要在 aport 端口上进行监听 等待客户端的连接 上面所写都是些背景知识 下面对本人的编程实践进行详细说明 1 功能描述 功能描述 1 简单的基于 Socket 的数据通信 2 采用 TCP 方式连接 3 采用 C S 结构 但服务端只支持一个连接 4 客户端能够向服务端发送数据 并显示服务端的返回信息 5 服务端能够接收客户端的数据 并将收到的数据以特定的方式返回给客户端 2 程序实现思路 程序实现思路 1 服务端 设计为在后台执行的 service 用一个独立的线程来处理客户端的连接请 求 数据接收和返回 为了启动该 service 编写个简单的 Activity 2 客户端 设计为一个 Activity 界面由三部分组成 显示服务端返回信息的文本区 域 一个文本框 进行数据输入的编辑区域 一个编辑框 以及触发连接请求并执行 数据发送的触发区域 一个按钮 3 服务端源程序 服务端源程序 1 Activity 文件 SocketServerDemo java view plaincopy to clipboardprint 1 package com android sample SocketServerDemo 2 3 import android app Activity 4 import android content Intent 5 import android os Bundle 6 7 public class SocketServerDemo extends Activity 8 9 Override 10 protected void onCreate Bundle savedInstanceState 11 TODO Auto generated method stub 12 super onCreate savedInstanceState 13 14 setContentView R layout main 15 16 System out println begin start service 17 this startService new Intent this SocketService class 18 19 20 Override 21 protected void onDestroy 22 TODO Auto generated method stub 23 super onDestroy 24 25 this stopService new Intent this SocketService class 26 27 package com android sample Sock import android app Activity import android content Intent import android os Bundle 2 service 文件 SocketService java view plaincopy to clipboardprint 1 package com android sample SocketServerDemo 2 3 import java io BufferedReader 4 import java io BufferedWriter 5 import java io IOException 6 import java io InputStreamReader 7 import java io OutputStreamWriter 8 import java io PrintWriter 9 import ServerSocket 10 import Socket 11 12 import android app Service 13 import android content Intent 14 import android os IBinder 15 16 public class SocketService extends Service 17 Thread mServiceThread 18 19 Socket client 20 21 Override 22 public IBinder onBind Intent intent 23 TODO Auto generated method stub 24 return null 25 26 27 Override 28 public void onCreate 29 TODO Auto generated method stub 30 super onCreate 31 32 mServiceThread new Thread new SocketServerThread 33 34 35 Override 36 public void onStart Intent intent int startId 37 TODO Auto generated method stub 38 super onStart intent startId 39 40 mServiceThread start 41 42 43 Override 44 public void onDestroy 45 TODO Auto generated method stub 46 super onDestroy 47 48 49 public class SocketServerThread extends Thread 50 private static final int PORT 54321 51 52 private SocketServerThread 53 54 55 Override 56 public void run 57 try 58 ServerSocket server new ServerSocket PORT 59 60 while true 61 System out println begin client connected 62 client server accept 63 System out println client connected 64 65 BufferedReader reader new BufferedReader new InputStream Reader client getInputStream 66 System out println read from client 67 68 String textLine reader readLine 69 if textLine equalsIgnoreCase EXIT 70 System out println EXIT invoked closing client 71 break 72 73 74 System out println textLine 75 76 PrintWriter writer new PrintWriter new BufferedWriter new Outp utStreamWriter client getOutputStream 77 78 writer println ECHO from server textLine 79 writer flush 80 81 writer close 82 reader close 83 84 catch IOException e 85 TODO Auto generated catch block 86 System err println e 87 88 89 90 91 package com android sample Sock import java io BufferedReader import java io BufferedWriter import java io IOException import java io InputStreamReade 3 AndroidManifest xml 文件 因为需要在其中添 加 service 和网络访问权限 这里一并贴出 view plaincopy to clipboardprint 1 2 6 7 8 9 11 12 13 14 15 16 17 18 19 20 21 22 23 xml version 1 0 encoding u manifest xmlns android http package com android samp android versionCode 1 android versionName 1 0 uses sdk android minSdkVer 4 客户端程序 客户端程序 1 布局文件 main xml view plaincopy to clipboardprint 1 2 7 12 13 18 19 25 xml version 1 0 encoding u 2 Activity 文件 SocketClientDemo java view plaincopy to clipboardprint 1 package com android sample SocketClientDemo 2 3 import java io BufferedReader 4 import java io BufferedWriter 5 import java io IOException 6 import java io InputStreamReader 7 import java io OutputStreamWriter 8 import java io PrintWriter 9 import Socket 10 import UnknownHostException 11 12 import android app Activity 13 import android os Bundle 14 import android view View 15 import android view View OnClickListener 16 import android widget Button 17 import android widget EditText 18 import android widget TextView 19 20 public class SocketClientDemo extends Activity 21 private static final String SERVERIP 192 168 1 68 22 private static final int SERVERPORT 54321 23 24 TextView mMsgRev 25 EditText mMsgEdit 26 Button mMsgSendBtn 27 28 String mSendMsg 29 String mReceivedMsg 30 31 Called when the activity is first created 32 Override 33 public void onCreate Bundle savedInstanceState 34 super onCreate savedInstanceState 35 setContentView R layout main 36 37 mMsgRev TextView findViewById R id receive msg 38 mMsgEdit EditText findViewById R id edit msg 39 mMsgSendBtn Button findViewById R id send msg 40 41 mMsgSendBtn setOnClickListener new OnClickListener 42 Override 43 public void onClick View v 44 Socket socket null 45 mSendMsg mMsgEdit getText toString 46 47 try 48 socket new Socket SERVERIP SERVERPORT 49 50 PrintWriter writer new PrintWriter new BufferedWriter new Outp utStreamWriter socket getOutputStream 51 writer println mSendMsg 52 writer flush 53 54 BufferedReader reader new BufferedReader new Inpu

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论