基于TCP协议和UDP协议的原生Socket通信

前言

上一篇基础知识回顾中我们提到Socket套接字只是一个API,单独的Socket是没有任何作用的,基于一定的协议,比如TCP,UDP协议,才能使得数据畅通传输。

安卓Socket网络编程基础知识回顾

基于TCP协议的Socket编程

既然是基于TCP,那么就有他的一套代码逻辑体系,我们只需要在Socket API的帮助下,使用TCP协议,就可以进行一个完整的基于TCP协议的Socket网络编程了。

主要API
Socket,客户端相关
1,构造方法
Socket(String host,int port)
创建一个流套接字并将其连接到指定主机上的指定端口号,即就是连接到host主机上的port端口上的。
2,getInputStream()
拿到此套接字的输入流,收到的数据就在这里。
3,getOutputStream()
返回此套接字的输出流,要发送的数据放到这里

ServerSocket,服务器端相关
1,构造方法
ServerSocket(int port)
创建服务器端的监听port端口的套接字
2,Socket accept()
侦听并接受到此套接字的连接,此方法在连接传入之前一直阻塞,服务端通过这个方法拿到与客户端建立的端到端连接的Socket。

基于TCP编程的例子
服务器端:这里使用eclipse新建一个Server.java来处理服务器端逻辑。
客户端:使用AndroidStudio新建一个Client.java文件。
然后先运行服务器,此时服务器端会一直处于挂起状态,然后再运行手机上的程序,从手机上发送一段内容到服务器端,服务器成功接收然后再给客户端发一个响应信息。

基于UDP协议的Socket编程

UDP:User Datagram Protocol 用户数据包协议,关键点在于数据包,主要就是把数据打包然后丢给目标,而不管目标是否接收到数据。

主要流程:发送者打包数据(DatagramPacket),然后通过DatagramSocket发送,接收者收到数据包解开数据。

主要API:
DatagramPacket,用来包装发送的数据
1,发送数据时的构造方法
DatagramPacket(byte[] buf,int length,SocketAddress address)
DatagramPacket(byte[] buf,int length,InetAddress address,int port)
用来将长度为length的包发送到指定主机上的指定端口号,length参数必须小于等于buf.length。
2,接收数据时的构造方法
DatagramPacket(byte[] buf,int length)
用来接收长度为length的数据包。

DatagramSocket
1,构造方法
DatagramSocket()
DtaagramSocket(int port)
创建数据报套接字并将其绑定到本地主机上的指定端口(或者任何可用端口),套接字将被绑定到通配符地址,IP地址由内核来选择。
2,发送数据
send(DatagramPacket p)
从此套接字发送数据包,DatagramPacket包含的信息指示:将要发送的数据,其长度,远程主机的ip地址和远程主机的端口号。
3,接收数据
receive(DatagramPacket p)
从此套接字接收数据包,当此方法返回时,DatagramPacket的缓冲区填充了接收的数据,数据报包也包含发送方的IP地址和发送方机器上的端口号。

猜你喜欢

转载自blog.csdn.net/gpf1320253667/article/details/87895312