目录
一、UDP协议
1、UDP协议发送数据
(1)步骤
- 创建发送数据的DatagramSocket对象
- 创建将数据打包的DatagramPacket对象
- 调用DatagramSocket对象的方法将数据发送
(2)代码示例
public class sendDemo_02 {
public static void main(String[] args) throws IOException {
//创建发送端的Socket对象(DatagramSocket)
DatagramSocket ds = new DatagramSocket();
//创建数据,并将数据打包
//DatagramPacket (byte[] bytes ,int length,InetAddress address,int port)
//上一行注释为:构造一个数据包,发送长度为length的数据包到指定主机上的指定端口号
byte[] bytes = "hello,UDP,Im coming".getBytes();
//int length=bytes.length;
//InetAddress address = InetAddress.getByName("192.168.80.1");
//int port=10023;
//DatagramPacket dp =new DatagramPacket(bytes,length,address,port);
//调用DatagramSocket的方法发送数据
//上面代码可以优化为:
DatagramPacket dp = new DatagramPacket(bytes, bytes.length, InetAddress.getByName("192.168.80.1"), 10023);
//发送数据包
ds.send(dp);
//关闭发送端
ds.close();
}
2、UDP协议接收数据
(1)步骤
- 创建接收端的DatagramSocket对象
- 创建一个数据包,用于接收数据
- 调用DatagramSocket对象的方法接收数据
- 解析数据包,把数据在控制台显示
- 关闭接收端
(2)代码示例
public static void main(String[] args) throws IOException {
//创建接收端的DatagramSocket对象,参数是发送端的端口号
DatagramSocket ds = new DatagramSocket(10023);
//创建一个数据包,用于接收数据
byte[] bytes = new byte[1024];//创建一个字节数组,用于存入读出的数据
DatagramPacket dp = new DatagramPacket(bytes, bytes.length);//把数组放入数据包中
//调用DatagramSocket对象的方法接收数据
ds.receive(dp);
//解析数据包,把数据在控制台显示
byte[] datas = dp.getData();
// int getLength() 返回所发送数据的或所接受数据的真实长度
int len = dp.getLength();
String dataString = new String(datas, 0, len);
System.out.println("数据是:" + dataString);
//关闭接收端
ds.close();
}
二、TCP协议
1、TCP协议发送数据
(1)步骤
- 创建客户端的Socket对象
- 获取OutputStream输出流,写数据
- 释放资源
(2)代码示例
public static void main(String[] args) throws IOException {
//创建客户端的Socket对象
//Socket(InetAddress address,int port) 第一个参数为主机名或IP地址,第二个参数为端口号
//Socket s = new Socket(InetAddress.getByName("192.168.80.1"),10023); 可优化为:
Socket s = new Socket("192.168.80.1", 10023);
//获取输出流,写数据
OutputStream os = s.getOutputStream();
os.write("hello,TCP,Im coming".getBytes());
//释放资源
s.close();
}
2、TCP协议接收数据
(1)步骤
- 创建服务器端的ServerSocket对象
- accept() 监听客户端连接,返回一个Socket对象
- 获取InputStream输入流,读数据
- 释放资源
(2)代码示例
public class receiveDemo_02 {
public static void main(String[] args) throws IOException {
//创建服务器端的ServerSocket对象,参数为接收端的端口号
ServerSocket ss = new ServerSocket(10023);
//Socket accept() 监听客户端连接
Socket s = ss.accept();
//获取InputStream输入流,读数据
InputStream is = s.getInputStream();
byte[] bys = new byte[1024];//创建一个字节数组,用于存入读出的数据
int len = is.read(bys);
String data = new String(bys, 0, len);
System.out.println("数据是:" + data);
//释放资源
ss.close();
}
}