关于Android Socket的总结
来源:互联网 发布:北京冰灯节 知乎 编辑:程序博客网 时间:2024/06/05 11:25
之前的Socket程序(一个Android设备做server,其他几个Android做clients)好像还有些问题,所以晚上想先对Android的Socket编程做点总结,以备后续工作的开展。因为资料来源于多篇网络帖子、书籍,还有我自己的总结,所以对其中引用部分不一一列出,望各位原作者见谅!
总的来说,Android Socket编程是基于javaSocket相关内容的,但是又不完全相同。比如说Android的Bluetooth通信,也是通过BluetoothSocket实现的,BluetoothSocket虽然在大体上还是和Socket相近,但是还有很多Sokcet支持的方法,BluetoothSocket却并不支持,比如javaSocket有判断连接超时的方法,但是BluetoothSocket中就没有,需要自己写判断超时,比如用Timer或者就干脆读取本地时间,然后来读秒计数。
先来最简单的两个JavaSocket例子,一个UDP,一个TCP的,就我个人而言,其实只写过TCP的,而且是Linux、Windows、Android各个平台,但是UDP只是耳闻,没有实践。
- //UDP的客户端代码实现如下
- public static void main(String[] args) {
- try {
- //首先创建一个DatagramSocket对象
- DatagramSocket socket = new DatagramSocket(4567);
- //创建一个InetAddree
- InetAddress serverAddress =InetAddress.getByName("192.168.1.104");
- String str = "hello"; //这是要传输的数据
- byte data [] = str.getBytes(); //把传输内容分解成字节
- //创建一个DatagramPacket对象,并指定要讲这个数据包发送到网络当中的哪个、地址,以及端口号
- DatagramPacket packet = new
- DatagramPacket(data,data.length,serverAddress,4567);
- //调用socket对象的send方法,发送数据
- socket.send(packet);
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- //UDP的服务端代码实现如下:
- //创建一个DatagramSocket对象,并指定监听的端口号
- DatagramSocket socket = new DatagramSocket(4567);
- byte data [] = new byte[1024];
- //创建一个空的DatagramPacket对象
- DatagramPacket packet =newDatagramPacket(data,data.length);
- //使用receive方法接收客户端所发送的数据,
- //如果客户端没有发送数据,该进程就停滞在这里
- socket.receive(packet);
- String result = new
- String(packet.getData(),packet.getOffset(),
- packet.getLength());
- System.out.println("result--->" + result);
- //TCP客户端实现:
- //创建一个Socket对象,指定服务器端的IP地址和端口号
- Socket socket = new Socket("192.168.1.104",4567);
- //使用InputStream读取硬盘上的文件
- InputStream inputStream = new
- FileInputStream("f://file/words.txt");
- //从Socket当中得到OutputStream
- OutputStream outputStream = socket.getOutputStream();
- byte buffer [] = new byte[4*1024];
- int temp = 0 ;
- //将InputStream当中的数据取出,并写入到OutputStream当中
- while((temp = inputStream.read(buffer)) != -1){
- outputStream.write(buffer, 0, temp);
- }
- outputStream.flush();
- }
- //TCP服务器端实现:
- //声明一个ServerSocket对象
- ServerSocket serverSocket = null;
- try {
- //创建一个ServerSocket对象,并让这个Socket在4567端口监听
- serverSocket = new ServerSocket(4567);
- //调用ServerSocket的accept()方法,接受客户端所发送的请求,
- //如果客户端没有发送数据,那么该线程就停滞不继续
- Socket socket = serverSocket.accept();
- //从Socket当中得到InputStream对象
- InputStream inputStream = socket.getInputStream();
- byte buffer [] = new byte[1024*4];
- int temp = 0;
- //从InputStream当中读取客户端所发送的数据
- while((temp = inputStream.read(buffer)) != -1){
- System.out.println(new String(buffer,0,temp));
- }
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- serverSocket.close();
- }
上面的两个例子就非常简单粗暴,没有任何的滑头,Server端就是先指定监听的端口,然后就等待建立连接(对于UDP而言,没有这一步),其后就等待数据接收。Client端绑定Server的IP和Port,发送数据。
额,感觉困了...意欲就此停笔...反正AndroidSocket和JavaSocket还是基本很类似的,从上面的小例子中以小见大吧,基本的模式就是这样!发现那些洋洋洒洒几千子的技术贴真真是来之不易,以后我一定好好认认真真回帖,踏踏实实做人,bonnenuit, le monde.
- 关于Android Socket的总结
- 关于SOCKET的一些总结
- 关于socket的一些总结
- Android Socket通讯
- 转一篇很全的关于Java Socket…
- Android private socket…
- Android private socket…
- 关于socket编程的小总结
- Android WebView总结
- 关于Android Socket编程遇到的问题
- 关于android的socket练手小程序
- 关于Android中Socket的通信问题
- Android关于Socket通信异常的问题
- Android网络编程的Socket通信总结
- Android Intent 用法全面总结
- 关于 YII 学习 的文章 连接
- 关于socket通信和数据库的代码的总结
- 关于socket.shutdown的一个小的错误总结
- 获取设备的句柄
- 转:解读设计模式----简单工厂模式(…
- js 小数取整的函数
- 转:串口通讯,关于javax.comm的安…
- 关于Java串口编程
- 关于Android Socket的总结
- ADB server didn't ACK
- 转一篇很全的关于Java Socket…
- 转:finally块中的代码一定会执行…
- 转:Android ANR异常及其解决方式
- 关于NDK-R7配置正确但是编译报awk&…
- 升级SDK和ADT
- Android Resource目录拾遗
- Finalement——Hello from&nbsp…