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条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- CentOS7设置SWAP分区,小内存服务器的救世主
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS6,CentOS7官方镜像安装Oracle11G
- Hadoop3单机部署,实现最简伪集群
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS7安装Docker,走上虚拟化容器引擎之路