UDP网络套接字编程:
关于套接字编程这部分看了很久没有懂,最后看了一个大佬的文章才懂了,在这里分享一下我的理解。
首先:
java.net.DatagramSocket: 此类表示用来发送和接收数据报包的套接字。
构造方法:
DatagramSocket() 构造数据报套接字并将其绑定到本地主机上任何可用的端口。
DatagramSocket(int port, InetAddress laddr) 创建数据报套接字,将其绑定到指定的本地地址。
常用的方法:
-
send(DatagramPacket p) 从此套接字发送数据报包。
-
receive(DatagramPacket p)从此套接字接收数据报包。
-
close() 关闭此数据报套接字。
-
java.net.DatagramPacket:此类表示数据报包。
构造方法:
- DatagramPacket(byte[] buf, int offset, int length, InetAddress address, int port)构造数据报包,用来将长度为 length 偏移量为 offset 的包发送到指定主机上的指定端口号。
- DatagramPacket(byte[] buf, int length, InetAddress address, int port)构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。
- DatagramPacket(byte[] buf, int length)构造 DatagramPacket,用来接收长度为 length 的数据包。
以下为UDP客户端基本写法:
package 套接字编程;
import java.io.IOException;
import java.net.*;
/**
* Create with Darcula IDEA
* Description:
*/
public class UDPClient {
public static void main(String[] args) {
try {
//1.创建数据报套接字
DatagramSocket datagramSocket = new DatagramSocket(8888);
//2.创建数据报包用于封装数据和目标地址
String str = "hello";
//将字符串数组转换为字节的数组
byte[] content = str.getBytes();
DatagramPacket datagramPacket = new DatagramPacket(content, content.length, InetAddress.getLocalHost(), 9999);
//3.调用send方法进行发送数据
datagramSocket.send(datagramPacket);
//4.释放资源
datagramSocket.close();
}catch (SocketException e){
e.printStackTrace();
}catch(UnknownHostException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
}
}
以下为UDP服务端基本写法:
package 套接字编程;
import javax.security.sasl.SaslException;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
/**
* Create with Darcula IDEA
* Description:
*/
public class UDPServer {
public static void main(String[] args) {
try {
//1.创建数据报套接字
DatagramSocket socket = new DatagramSocket(9999);
//2.创建一个数据报包
byte[] content = new byte[1024];
DatagramPacket datagramPacket = new DatagramPacket(content, content.length);
//3.调用receive方法接受数据包
socket.receive(datagramPacket);
//4.从数据报包中获取数据
byte[] data = datagramPacket.getData();//获取数据报包中的数据
int length = datagramPacket.getLength();
int port = datagramPacket.getPort();
InetAddress ip = datagramPacket.getAddress();
System.out.println("内容:" + new String(data, 0, length));
System.out.println("数据长度:" + length);
System.out.println("发送方的端口号:" + port);
System.out.println("发送方的ip地址:" + ip);
//5.释放资源
socket.close();
}catch(SocketException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
}
}
还有一篇是用UDP实现简单的聊天功能:
https://blog.csdn.net/qq_44330050/article/details/106157504