对于UDP和TCP两种网络传输方式,JAVA均进行了良好的封装,这里简单介绍一下:
一、UDP
1.1 客户端
UDP的传输通过使用DatagramSocke类的send函数进行DatagramPacket包的传输,具体流程如下:
DatagramSocket ds = new DatagramSocket(); //创建UDP的Socket
byte[] bys = "UDP传输文本".getBytes(); //创建输入信息
int length = bys.length; //获取信息长度
InetAddress address = InetAddress.getByName("192.168.1.106"); //获取地址信息
int port = 12345; //设置任意端口号
DatagramPacket dp = new DatagramPacket(bys, length,address,port);//创建dp包
ds.send(dp); //进行包发送
ds.close(); //释放Socket链接资源
dp包的创建需要四个传入参数:字节数组、字节长度、地址、端口号,执行完send函数后,如果服务器端开启接收消息,则会进行显示
由于采用UDP方式传输,无论服务器是否启动,均能进行发送且不报错
1.2 服务器端
DatagramSocket ds = new DatagramSocket(12345); //通过已知接口建立UDP链接Socket
byte[] bys = new byte[1024];
DatagramPacket dp = new DatagramPacket(bys,bys.length); //建立一个最简单的dp包
ds.receive(dp); //ds进行dp包接收
System.out.println(dp.getAddress().getHostAddress() + ":" + new String(dp.getData(),0,dp.getLength()));
ds.close();
接收时的dp包不再需要录入地址和端口,端口在Socket进行定义,ip会在收到文件后一并获得
二、TCP
2.1 客户端
TCP的传输通过Socket导出输出字符流进行写入,写入的同时即进行传输
Socket s = new Socket("192.168.1.106",8888); //创建发送地址IP及端口的Socket
OutputStream os = s.getOutputStream(); //创建Socket流
os.write("TCP传输".getBytes()); //直接写入记录,直接进行传输
s.close(); //释放资源
TCP的传输比UDP简单很多,在成功创建Socket的同时,JAVA虚拟机已经保证了链接的有效性,此时直接写入记录就能实现传输
同时,创建Socket的时候,服务器必须开启对应服务,监听端口,以保证建立有效地TCP连接
2.2 服务器端
要创建服务器,需要建立ServerSocket类,该类与发送Socket并不相同:
ServerSocket ss = new ServerSocket(8888); //创建监听Socket
Socket s =ss.accept(); //阻塞获取端口数据,据此创建Socket流
InputStream is = s.getInputStream(); //Socket导出IS流
byte[] bys = new byte[1024]; //创建接收字节数组
int len = is.read(bys); //从IS流中读取数据
System.out.println(s.getInetAddress().getHostAddress()+":"+new String(bys,0,len)); //打印数据
s.close(); //释放该条数据的资源
//ss.close(); 如果继续监听则不需要关闭监听Socket
与UDP类似,ServerSocket通过传入端口进行监控,不同的是:TCP使用acccpt函数,获取发送文件的Socket对象,并通过IS流进行数据导出,结束需要释放资源
而UDP只需要使用ds包获取数据