今天简单记录下,android下的socket网络编程,socket网络编程最为广泛的为TCP协议和UDP协议
服务器端首先声明一个ServcerSocket对象,并指定端口号,然后调用ServerSocket的accept()方法接口客户端发送的数据,accepter()方法在没有接收到数据时,一直是阻塞状态,一旦接收到数据了,会通过inputStream 读取数据流。
客户端创建Socket对象,指定服务器的IP地址和端口号,通过inputStream读取数据,获取服务器发出的数据,发送数据的时候,获取outPutStream (OutputStream outPutStream = socket.getOutPutStream() ),最后将要发送的数据写到outPutStream即可进行TCP协议的socket数据传输
服务端(接收数据)流程
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通道