Java 模拟基于UDP的Socket通信
效果图:
多线程服务器
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
public class UDPMutiThreadServer implements Runnable {
DatagramPacket datagramPacket; //数据报包
byte[] data1; //存放数据的变量
public UDPMutiThreadServer(DatagramPacket datagramPacket,byte[] data1) {
this.datagramPacket = datagramPacket;
this.data1=data1;
}
public static void main(String[] args) throws SocketException {
int count=0; //用于统计客户端数量
DatagramSocket datagramSocket = new DatagramSocket(1234);
System.out.println("```````服务器已经启动,等待客户端发送数据````````");
while (true) {
/**
* 创建数据报包,用于保存收发的数据,需要定义数据包的大小和长度
*/
byte[] data = new byte[1024];
DatagramPacket datagramPacket = new DatagramPacket(data,data.length);
try {
datagramSocket.receive(datagramPacket);
} catch (IOException e) {
e.printStackTrace();
}
if (datagramPacket.getLength() > 0) {
new Thread(new UDPMutiThreadServer(datagramPacket,data)).start();
count++;
System.out.println("客户端的数量为:" + count);
}
}
}
@Override
public void run() {
// byte[] data=new byte[1024];
String info = new String(data1,0,datagramPacket.getLength());
System.out.println("我是服务器,客户端发送的信息是:"+ info);
/**
* 响应客户端数据
*
* 从接收的数据包中获取客户端的地址和端口
*/
InetAddress address = datagramPacket.getAddress();
int port = datagramPacket.getPort();
//定义响应数据
byte[] data2 = "服务器已经收到你的信息,谢谢!".getBytes();
//用DatagramPacket把要发送的数据进行打包
DatagramPacket datagramPacket1 = new DatagramPacket(data2,data2.length,address,port);
//用datagramSocket把数据包发送给客户端
try {
DatagramSocket datagramSocket= new DatagramSocket();
datagramSocket.send(datagramPacket1);
} catch (IOException e) {
e.printStackTrace();
}
}
}
客户端
import java.io.IOException;
import java.net.*;
public class UDPClient {
public static void main(String[] args) throws IOException {
/**
* 向服务器发送数据
*
* 定义服务器地址,端口号和数据
*/
InetAddress address = InetAddress.getByName("localhost");
int port=1234;
byte[] data ="我是:admin123,密码:123456546".getBytes();
/**
* 定义一个DatagramPacket,把要发送的数据时行打包
*/
DatagramPacket datagramPacket = new DatagramPacket(data,data.length,address,port);
/**
* 定义一个DatagramSocket,用于发送和接收数据
*/
DatagramSocket datagramSocket = new DatagramSocket();
datagramSocket.send(datagramPacket);
/**
* 接收服务器发送的数据
*/
//定义数据包的容量
byte[] daaa= new byte[1024];
DatagramPacket datagramPacket1 = new DatagramPacket(daaa,daaa.length);
//用DatagramSocket接收数据
datagramSocket.receive(datagramPacket1);
//读取数据包的内容
String info = new String(daaa,0,datagramPacket1.getLength());
System.out.println("我是客户端,你说:"+info);
datagramSocket.close();
}
}
单线程服务器
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
public class UDPServer {
public static void main(String[] args) throws IOException {
/**
* 接收客户端数据
*
* 创建服务器端的Socket,用于收发数据,需要指定端口
*/
DatagramSocket datagramSocket = new DatagramSocket(1234);
/**
* 创建数据报包,用于保存收发的数据,需要定义数据包的大小和长度
*/
byte[] data = new byte[1024];
DatagramPacket datagramPacket = new DatagramPacket(data,data.length);
System.out.println("```````服务器已经启动,等待客户端发送数据````````");
/**
* 用Socket收取从客户端发来的数据,并保存在Packet数据报包中
*/
datagramSocket.receive(datagramPacket);
String info = new String(data,0,datagramPacket.getLength());
System.out.println("我是服务器,客户端发送的信息是:"+ info);
/**
* 响应客户端数据
*
* 从接收的数据包中获取客户端的地址和端口
*/
InetAddress address = datagramPacket.getAddress();
int port = datagramPacket.getPort();
//定义响应数据
byte[] data2 = "服务器已经收到你的信息,谢谢!".getBytes();
//用DatagramPacket把要发送的数据进行打包
DatagramPacket datagramPacket1 = new DatagramPacket(data2,data2.length,address,port);
//用datagramSocket把数据包发送给客户端
datagramSocket.send(datagramPacket1);
}
}

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
Java 模拟基于TCP的Socket通信
效果图: 单线程服务器 多线程服务器 客户端模拟 多线程服务器代码 import java.io.*; import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket; public class MutiThreadServer implements Runnable { Socket socket; public MutiThreadServer(Socket socket) { this.socket = socket; } public static void main(String[] args) throws IOException { int count=0; ServerSocket serverSocket = new ServerSocket(1234); System.out.println("listening"); while (true){ Socket socket1 = serverSocket.accept(); System.out.println("c...
-
下一篇
十分钟上线-函数计算&Laravel的那些事儿
前言 这篇文章是十分钟上线-函数计算玩转 WordPress的姊妹篇,有关函数计算的优势,php runtime 运行php 框架原理等相关内容可以先预览十分钟上线-函数计算玩转 WordPress,本文假设您已经理解函数计算 php runtime, vpc, nas, 自定义域名等相关内容的基础上,我们通过将github上一个star很高的larvel入门博客教程Learn-Laravel-5项目移植到在函数计算上, 展示函数计算环境驱动laravel的能力,实现 laravel web 项目 serverless 化。 案例体验入口: 体验地址:http://rayzhang.mofangdegisn.cn 后台登录:http://rayzhang.mofangdegisn.cn/admin 账号:fc-larvel-test@163
相关文章
文章评论
共有0条评论来说两句吧...