自学内容网 自学内容网

UDP-如何实现客户端与服务器端的通信(一对一、一对多、多对一、多对多之间的通信)

        Java中提供了DatagramSocket来实现这个功能

1.服务器端的程序
  • 创建Socket,监听6666端口
  • 读取来自客户端的“数据包”,创建数据包(通过DatagramPacket实现数据包的创建)
  • 接收数据包
  • 从数据包中,读取数据(通过recieve()接收数据send()发送给数据)

代码如下:

package com.ztt.udp.Demo01;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

public class UdpServer {
public static void main(String[] args) {
//创建Socket,监听6666端口
try (DatagramSocket serverSocket = new DatagramSocket(6666)) {
//读取来自客户端的数据包
//创建数据包
byte[] buff=new byte[1024];
DatagramPacket packet=new DatagramPacket(buff,buff.length);

//接收数据包
serverSocket.receive(packet);
System.out.println("读取完毕!");

//从数据包中,读取数据
byte[] data=packet.getData();
String strFormClient=new String(data);
System.out.println("来自客户端的信息:"+strFormClient);

if("天王盖地虎".equals(strFormClient)) {
packet.setData("宝塔镇河妖".getBytes());
}else {
packet.setData("哈哈哈哈哈哈哈".getBytes());
}
//反馈信息给客户端(发送数据包至客户端)
serverSocket.send(packet);

} catch (SocketException e) {

e.printStackTrace();
} catch (IOException e) {

e.printStackTrace();
}
}

}
2.客户端的程序 
  • 创建socket
  • 连接指定主机的端口(客户端使用clientSocket.connect()指定远程地址和端口)
  • 创建数据包
  • 发送数据包(通过recieve()接收数据send()发送给数据)

代码如下:

package com.ztt.udp.Demo01;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;

public class UdpClient {
public static void main(String[] args) {
//创建socket
try (DatagramSocket clientSocket = new DatagramSocket()) {
//连接指定主机的端口
clientSocket.connect(InetAddress.getByName("192.168.199.112"),6666);

//创建数据包
DatagramPacket packet=new DatagramPacket(new byte[1024],1024);
packet.setData("甜甜是甜甜".getBytes());//将数据放入数据包

//发送数据包
clientSocket.send(packet);

//等待接受反馈信息(等待接收来自服务端的数据包)
clientSocket.receive(packet);
byte[] data=packet.getData();
String strFormClient=new String(data);
System.out.println("来自服务端的信息:"+strFormClient);

} catch (SocketException e) {

e.printStackTrace();
} catch (UnknownHostException e) {

e.printStackTrace();
} catch (IOException e) {

e.printStackTrace();
}
}

}


原文地址:https://blog.csdn.net/m0_68041576/article/details/140448639

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!