实现一个简单的服务端接收客户端输入的信息然后在服务端显示
方法签名 | 方法说明 |
---|---|
DatagramSocket(int port,InetAddress laddr) | 创建一个数据报套接字,绑定到指定的本地址 |
DatagramSocket(SocketAddress bindaddr) | 创建一个数据报套接字,绑定到指定的本地套接字地址 |
void bind(SocketAddress addr) | 将此DatagramSocket绑定到特定的地址和端口 |
void connect(InetAddress address, int port) | 将套接字连接到此套接字的远程地址 |
void receive(DatagramPacket p) | 从此套接字接收数据报包 |
void close() | 关闭此数据报套接字 |
void send(DatagramPacket p) | 从此套接字发送数据报包 |
UdpServer.java:
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketAddress;
import java.net.SocketException;
// 实现一个简单的服务端接收客户端输入的信息然后在服务端显示
public class UdpServer{
// 定义 udp 端口号
public static final int PORT=30000;
// 每个数据报最大为 4k
private static final int DATA_LEN=4096;
// 接收网络数据的字节数组
byte[] buff_in=new byte[DATA_LEN];
// 以指定字节数组创建准备接受数据的 DatagramPacket 对象
private DatagramPacket packet_in=new DatagramPacket(buff_in,buff_in.length);
// 定义一个用于发送的 DatagramPacket 对象
private DatagramPacket packet_out;
public void start() throws SocketException {
try(DatagramSocket socket=new DatagramSocket(PORT)){
// 客户端输入的英文单词
String word=null;
// 获取客户端对象,通过该对象将数据写给对方,否则没有目的地
SocketAddress address=null;
// 返回给客户端的数据
byte[] reviceData=null;
System.out.println("服务端启动了......");
while(true){
// 获取 socket 中的数据,然后将数据封装到 packet_in 中
socket.receive(packet_in);
// 获取客户端输入的数据
buff_in=packet_in.getData();
// 将 byte数组转换为字符串,需要去掉后面的空格
word=new String(buff_in,0,buff_in.length).trim();
System.out.println("客户端输入的是:"+word);
address=packet_in.getSocketAddress();
// 检查退出条件
if("down".equals(word)){
reviceData="服务器