Java中的网络编程中详细介绍了如何使用UDP和TCP建立网络连接和通信,这是不同与浏览器使用的http协议的。
基础
ip地址:定位一台主机
端口:定位一台主机上的某一个软件,同一个协议端口不能重复,不同协议端口可以相同,但最好不要
UDP协议:无连接,不保证可靠性,像寄快递一样,重点在包裹上
TCP协议:保持连接的协议,先建立连接,用一条管道连接两端,这条管道像是一条路,有两个不同的方向,所以两端都可以发送和接收信息
UDP
使用到的类:DatagramPacket,DatagramSocket,InetSocketAddress
DatagramPacket:一个包裹着信息的类,包含一个字节数组,一个地址信息,字节数组就是要发送的主要信息,地址就是要到达的主机和端口
DatagramSocket:相当于发送和接受信息包裹的快递员,可以发送Packet,也可以接收它,是阻塞式的,如果没有包裹就一直等待包裹的到来
InetSocketAddress:一个地址类,继承了SocketAddress,在DatagramPacket的构造器中有使用
使用方法:
发送端:
byte[] datas =new String("today is a good day").getBytes();
DatagramPacket dp=new DatagramPacket(datas,datas.length,new InetSocketAddress("localhost",9999));
DatagramSocket ds=new DatagramSocket(8888);
ds.send(dp);
接收端:
byte[] datas = new byte[1024];
DatagramPacket dp = new DatagramPacket(datas, datas.length);
DatagramSocket ds = new DatagramSocket(9999);
ds.receive(dp);
在实际使用时,如果想要达到双方不受限制的沟通,需要开启多个线程,两个人沟通就要四个线程,每人有一个接收线程和发送线程
TCP
TCP协议与UDP不同的是TCP协议分为客户端与服务器端,UDP协议两端是完全平等的,TCP中的服务器端要接收来自多个客户端的请求,一般情况下会给每一个客户端分配一个线程
使用到的类:Socket ,ServerSocket
Socket :Socket的作用是与服务器端建立连接,只要成功构建一个Socket 类的对象,就实现了与服务器的连接。可以将Socket理解为服务器与客户端的一条通路,可以返回输入输出流。
ServerSocket:ServerSocket的一个对象就是一个服务器,可以响应客户端的连接请求,但它只能同一时间保持与一个客户端的连接,所以需要在每一个客户端连接之后,将这个来连接交给一个新线程来执行
使用方法
服务器端:未使用多线程
ServerSocket server = new ServerSocket(4567);
Socket client = server.accept();//阻塞式的方法,等待客户端的连接
private DataOutputStream bo = new DataOutputStream(client.getOutputStream());
private DataInputStream bs = new DataInputStream(client.getInputStream());
客户端:
Socket client = new Socket("localhost", 4567);
DataOutputStream bo = new DataOutputStream(client.getOutputStream());
DataInputStream bs = new DataInputStream(client.getInputStream());