Android Socket网络编程

今天简单记录下,android下的socket网络编程,socket网络编程最为广泛的为TCP协议和UDP协议

一、基于TCP协议socket

      服务器端首先声明一个ServcerSocket对象,并指定端口号,然后调用ServerSocket的accept()方法接口客户端发送的数据,accepter()方法在没有接收到数据时,一直是阻塞状态,一旦接收到数据了,会通过inputStream 读取数据流。

      客户端创建Socket对象,指定服务器的IP地址和端口号,通过inputStream读取数据,获取服务器发出的数据,发送数据的时候,获取outPutStream (OutputStream outPutStream = socket.getOutPutStream() ),最后将要发送的数据写到outPutStream即可进行TCP协议的socket数据传输

二、基于UDP协议通信

    服务端(接收数据)流程

       1、服务器先创建一个DatagramSocket对象,并指点监听的端口

            DatagramSocket socket = new  DatagramSocket (8888);

   2、byte[]数据来接收数据

           byte data[] = new byte[1024];

      3、DatagramPackage以包的形式装在byte数组

        DatagramPacket packet = new DatagramPacket(data, data.length);

     4、使用DatagramPacket的receive方法接收发送方所发送的数据,是一个阻塞的方法

        packet.receive()

 5、 将接收到的数据发转化为字符串

   String result = new String(packet.getData(), packet.getOffset(), packet.getLength());

客户端(发送数据)流程

1、生成DatagramSocket对象,参数为端口号

      DatagramSocket socket = new  DatagramSocket (8888);

2、创建一个InetAddress对象,用于确定server客户端(数据接收方),参数为IP地址,如我的IP地址为192.168.1.103

     InetAddress serverAddress = InetAddress.getByName("192.168.127.181");

3、需要发送的数据转化为byte数组

  String sendData= "hello word";

  byte data[] = sendData.getBytes();

4、生成一个DatagramPacket对象,包含需要发送的byte数组,byte数组长度,已设置IP地址的serverAddress,和服务端一致的端口号(这里是8888)

    DatagramPacket packet = new DatagramPacket(data, data.length, serverAddress, 8888);

5、发送数据,调用DatagramSocket对象的send方法

   socket.send(packet);

 

三、TCP和UDP的区别

  1、TCP使用的是流的方式发送,UDP使用的是数据报的方式

  2、TCP基于连接协议,即客户端和服务器交换数据前,必须要建立一个TCP连接,才能传输数据,一个TCP连接需要进行三次握手,并且提供超时重发,丢弃重发数据,检验数据,保证数据从一端传到另一端。UDP用户数据包协议,只是把应用层数据包传给IP包,但不能保证数据到达目的,不用建立连接,所以传输数据快

6.TCP的三次握手

第一次:建立连接,客户端发送建立连接的请求报文给服务器。

第二次:服务器收到并返回确认数据报文,再把请求信息放到一个请求建立连接报文段中发送给客户端。

第三次:客户端收到并返回确认数据报文, 服务器和客户端均进入就绪状态。

7.TCP四次挥手

第一次:客户端发送请求关闭连接FIN报文给服务端

第二次:服务端确认并返回一个ACK,关闭receiver通道。客户端收到ACK后关闭send通道

第三次:服务端发出FIN给客户端请求关闭连接

第四次:客户端收到FIN并发回ACK等待2个MSL单位后关闭receiver通道,服务端收到ACK后关闭send通道
 

 

 

你可能感兴趣的:(Android Socket网络编程)