socket中已经更新了TCP,接下来我们学习UDP,对于UDP来说,按照我个人的理解,就是一种不可靠无连接的网络传输协议,UDP中文翻译过来是用户数据报协议,这样对应我们的socket编程来说呢,我们java特地提供了DatagramPacket这个类来存储我们的信息.我们先写下UDP客户端的demo
package com.iommc;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.Socket;
import java.net.SocketException;
import java.net.UnknownHostException;
public class UDPClient {
/**
* UDP客户端
* @throws IOException
*/
public static void main(String[] args) throws IOException {
//1.定义服务器的地址,端口号,数据
InetAddress address = InetAddress.getByName("localhost");
int port = 8800;
byte[] data = "用户名:Amon;密码:123".getBytes();
//2.创建数据包,包含发送的信息
DatagramPacket datagramPacket = new DatagramPacket(data,data.length,address,port);
//3.创建socket对象
DatagramSocket datagramSocket = new DatagramSocket();
//4.向服务器发送数据
datagramSocket.send(datagramPacket);
/*
* 接受服务端的响应
*/
//1.创建数据包用于接受服务端
byte[] data1 = new byte[1024];
DatagramPacket datagramPacket2 = new DatagramPacket(data1, data1.length);
//2.接受服务端返回的数据
datagramSocket.receive(datagramPacket2);
//3.读取数据
String reply = new String(data1,0,data1.length);
System.out.print("我是客服端,服务端说: "+reply);
//4.关闭资源
datagramSocket.close();
}
}
对于客户端呢,我们首先定义我们的端口号,地址,数据,相当于邮东西时,要写地址和邮的什么东西,然后调用DatagramPacket类,相当于打包,再利用DatagramScoket的send方法邮寄出去,这个socket相当于快递公司,然后对于服务端的响应呢,实际与服务的的响应是是类似的,我们创建的一个存储区域,,然后指定这个存储区域来接受我们接收到的包裹,也就是利用DatagramPacket方法,最后快递公司socket会接受寄件人的包裹,放到我们事先制定好的区域当中.
package com.iommc;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class UDPServer {
/**
* UDP服务端
* @throws IOException
*/
public static void main(String[] args) throws IOException {
//1.创建服务器socket,指定端口为8800
DatagramSocket datagramSocket = new DatagramSocket(8800);
byte[] data1 = new byte[1024];
DatagramPacket datagramPacket = new DatagramPacket(data1, data1.length);
//2.接受服务端返回的数据
datagramSocket.receive(datagramPacket);
//3.读取数据
String reply = new String(data1,0,data1.length);
System.out.print("我是服务端,客户端说: "+reply);
/*
* 向客户端响应数据
*/
int port = datagramPacket.getPort();
InetAddress address = datagramPacket.getAddress();
byte[] data2 = "欢迎".getBytes();
DatagramPacket datagramPacket1 = new DatagramPacket(data2,data2.length,address,port);
datagramSocket.send(datagramPacket1);
datagramSocket.close();
}
}
我们接下来再说说服务端,服务端不论是从响应和传递信息,都是与客户端相反的过程,首先我们寻要定义端口号,相当于只能在这个端口号,才能接受到包裹,我们申明一部分空间,用来保存包裹接受后的存放位置,然后利用datagramSocket的receive方法,接受从客户端传来的包裹.,对于向客户端响应数据来说.我们既然知道从哪个端口发送过来的包裹,那我们还要继续他们家的快递线路,所以getPort,然后填个寄件地址,也是原来的邮件地址,然后把信息放到包裹中,一个send方法,就把包裹邮寄出去了,最后不要忘记关掉我们的socket,就是不要让快递哥再等着了:D