基于javasocket的自定义协议,实现android与服务器的长连接概要

上传人:今*** 文档编号:106322776 上传时间:2019-10-14 格式:DOCX 页数:49 大小:173.80KB
返回 下载 相关 举报
基于javasocket的自定义协议,实现android与服务器的长连接概要_第1页
第1页 / 共49页
基于javasocket的自定义协议,实现android与服务器的长连接概要_第2页
第2页 / 共49页
基于javasocket的自定义协议,实现android与服务器的长连接概要_第3页
第3页 / 共49页
基于javasocket的自定义协议,实现android与服务器的长连接概要_第4页
第4页 / 共49页
基于javasocket的自定义协议,实现android与服务器的长连接概要_第5页
第5页 / 共49页
点击查看更多>>
资源描述

《基于javasocket的自定义协议,实现android与服务器的长连接概要》由会员分享,可在线阅读,更多相关《基于javasocket的自定义协议,实现android与服务器的长连接概要(49页珍藏版)》请在金锄头文库上搜索。

1、基于Java Socket的自定义协议,实现Android与服务器的长连接(一)Socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口,通常也称作套接字。套接字之间的连接过程可以分为三个步骤:客户端请求,服务端回复收到,客户端收到服务端的回复,即三次握手。连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例完成所需的会话。作者:枚杉来源:segmentfault|2016-12-05 17:08收藏 分享 一、基础知识准备在正式给大家介绍自定义协议之前,我们先对网络传输和协议解析的相关知识点做一个

2、基本的介绍,尽管这些知识点我们在学校里学过,但难免会有所遗忘,这里先做一个简单的介绍,以便对后文的内容理解更加顺畅。1. 网络七层协议OSI的7层从上到下分别是:7 应用层、 6 表示层、 5 会话层、 4 传输层、 3 网络层、 2 数据链路层、 1 物理层;其中高层(即7、6、5、4层)定义了应用程序的功能,下面3层(即3、2、1层)主要面向通过网络的端到端的数据流。应用层常见的协议有:HTTP、FTP、SMTP等;常见的传输层有:TCP、UDP。本文主要是基于TCP自定义协议实现客户端与服务端的长连接。2. SocketSocket本质是编程接口(API),对TCP/IP的封装,TCP/

3、IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口,通常也称作套接字。套接字之间的连接过程可以分为三个步骤:客户端请求,服务端回复收到,客户端收到服务端的回复,即三次握手。连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例完成所需的会话。对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。3. 位(bit)、字节(byte)“位(bit)”是电子计算机中最小的数据单位。每一位的状态只能是0或1;“字节(Byte)”由8个二进制位构成(即1byte=8bit),它是存储空间的基本计量单位,它能表示到数值范围为0到255(

4、即2的8次方减1);4. 算术移位运算(符号位不变,低位补0) 左移运算:12,1的二进制位是1,向左移两位是100,转为十进制数即为4,所以12,7的二进制位是111,向右移两位是1,所以72的运算结果是1 。5. Java中各类型占字节数1. byte8位,1个字节2. boolean8位,1个字节3. char16位,2个字节4. short16位,2个字节5. int32位,4个字节6. float32位,4个字节7. double64位,8个字节8. long64位,8个字节6. Java中socket相关函数 Socket构造函数 o Socket(InetAddress addr

5、ess, int port)throws UnknownHostException, IOExceptiono Socket(InetAddress address, int port, InetAddress localAddress, int localPort)throws IOExceptiono Socket(String host, int port)throws UnknownHostException, IOExceptiono Socket(String host, int port, InetAddress localAddress, int localPort)throw

6、s IOExceptiono 还可以通过以下方式生成socket:SocketFactory.getDefault().createSocket(String address, String port) throws ConnectException Socket方法 o getInetAddress(); / 远程服务端的IP地址o getPort(); / 远程服务端的端口o getLocalAddress(); / 本地客户端的IP地址o getLocalPort(); / 本地客户端的端口o getInputStream(); / 获得输入流o getOutStream(); / 获得

7、输出流 Socket状态 o isClosed(); / 连接是否已关闭,若关闭,返回true;否则返回falseo isConnect(); / 如果曾经连接过,返回true;否则返回falseo isBound(); / 如果Socket已经与本地一个端口绑定,返回true;否则返回falseo 判断Socket的状态是否处于连接中1. booleanisConnected=socket.isConnected()&!socket.isClosed();/判断当前是否处于连接 ServerSocket构造函数 o ServerSocket()throws IOExceptiono Serv

8、erSocket(int port)throws IOExceptiono ServerSocket(int port, int backlog)throws IOExceptiono ServerSocket(int port, int backlog, InetAddress bindAddr)throws IOException 服务端接收客户端的连接请求: o Socket socket = serverSocket.accept();7. Java中常见流操作类 输入流 o InputStream 抽象类,描述流的输入o ByteArrayInputStream 从字节数组读取的输入

9、流o BufferedInputStream 缓冲输入流o FileInputStream 从文件读入的输入流o ObjectInputStream 对象输入流(所读写的对象必须实现Serializable接口)o DataInputStream 包含了读取Java标准数据类型的输入流 输出流 o OutputStream 抽象类,描述流的输入o ByteArrayOutputStream 写入字节数组的输出流o BufferedOutputStream 缓冲输出流o FileOutputStream 写入文件的输出流o ObjectOutputStream 对象输出流(所读写的对象必须实现S

10、erializable接口)o DataOutputStream 包含了写Java标准数据类型的输出流二、一个简单的socket连接例子注:先运行服务端代码的main函数,再运行客户端代码的main函数,即可看到打印连接成功1. 客户端1. .Socket;2. 3. /*4. *Createdbymeishanon16/12/1.5. */6. publicclassClient7. publicstaticvoidmain(Stringargs)throwsException8. booleanisConnected;9. Stringhost=127.0.0.1;10. intport=

11、1122;11. Socketsocket=null;12. try13. socket=SocketFactory.getDefault().createSocket(host,port);14. isConnected=true;15. System.out.println(连接成功!);16. catch(ConnectExceptione)17. isConnected=false;18. e.printStackTrace();19. System.out.println(连接失败!);20. 21. 22. if(!isConnected)23. return;24. 25. 26

12、. Thread.sleep(5000);27. 28. socket.close();29. System.out.println(断开连接!);30. 31. 2. 服务端1. importjava.io.IOException;2. .ServerSocket;3. .Socket;4. 5. /*6. *Createdbymeishanon16/12/1.7. */8. publicclassServer9. 10. privateintport=1122;11. privateServerSocketserverSocket;12. 13. publicServer()throwsE

13、xception14. serverSocket=newServerSocket(port,3);/显式设置连接请求队列的长度为315. System.out.println(服务器启动!);16. 17. 18. publicvoidservice()19. while(true)20. Socketsocket=null;21. try22. socket=serverSocket.accept();23. System.out.println(Newconnectionaccepted+socket.getInetAddress()+:+socket.getPort();24. catch(IOExceptione)25. e.printStackTrace();26. finally27. if(socket!=null)28.

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号