当前位置: 首页 > news >正文

电商网站建设流程怎么用手机自创游戏

电商网站建设流程,怎么用手机自创游戏,扬州做网站公司哪家好,wordpress文章模板如何修改概述 实现一个UDP代理服务器,它监听一个指定的端口,将接收到的UDP数据包转发到目标主机,并将目标主机的响应转发回原始客户端。使用线程池来异步处理响应,并使用日志记录器来记录不同级别的日志信息。 源代码 import java.io.I…

 概述

实现一个UDP代理服务器,它监听一个指定的端口,将接收到的UDP数据包转发到目标主机,并将目标主机的响应转发回原始客户端。使用线程池来异步处理响应,并使用日志记录器来记录不同级别的日志信息。

源代码

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.nio.charset.StandardCharsets;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import java.util.logging.Level;
import java.util.logging.Logger;public class UDPProxy {private final int listenPort;private final String targetHost;private final int targetPort;private final Map<DatagramSocket, DatagramPacket> downPacketCache = new ConcurrentHashMap<>();private final ThreadPoolExecutor executor = new ThreadPoolExecutor(8, 16,60L, TimeUnit.SECONDS, new LinkedBlockingQueue<>(200), new ThreadPoolExecutor.CallerRunsPolicy());private static final Logger logger = Logger.getLogger("UDPProxy");public UDPProxy(int listenPort, String targetHost, int targetPort) {this.listenPort = listenPort;this.targetHost = targetHost;this.targetPort = targetPort;//设置日志级别logger.setLevel(Level.INFO);}public void start() {try (DatagramSocket thisSocket = new DatagramSocket(listenPort)) {byte[] receiveData = new byte[4096];logger.warning("UDP Proxy started, listening on port " + listenPort);Map<InetAddress, DatagramSocket> upSocketCache = new ConcurrentHashMap<>();while (true) {DatagramPacket upPacket = new DatagramPacket(receiveData, receiveData.length);thisSocket.receive(upPacket);byte[] data = upPacket.getData();int length = upPacket.getLength();InetAddress clientAddress = upPacket.getAddress();logger.warning("[UP] Size:" + length + ",from" + clientAddress + ":" + upPacket.getPort());logger.info("[UP] Packet:" + new String(data, 0, length, StandardCharsets.UTF_8));// Forward the packet to the target hostInetAddress targetAddress = InetAddress.getByName(targetHost);DatagramPacket sendPacket = new DatagramPacket(data, length, targetAddress, targetPort);DatagramSocket upSocket = upSocketCache.get(clientAddress);if (upSocket == null) {upSocket = new DatagramSocket();upSocketCache.put(clientAddress, upSocket);downPacketCache.put(upSocket, upPacket);upSocket.send(sendPacket);responseListener(thisSocket, upSocket);} else {upSocket.send(sendPacket);}}} catch (IOException e) {logger.log(Level.SEVERE, "Error in UDPProxy", e);}}private void responseListener(DatagramSocket thisSocket, DatagramSocket upSocket) {executor.execute(() -> {while (true) {byte[] downData = new byte[4096];DatagramPacket downPacket = new DatagramPacket(downData, downData.length);byte[] data = downPacket.getData();InetAddress downPacketAddress;try {upSocket.receive(downPacket);downPacketAddress = downPacket.getAddress();int length = downPacket.getLength();logger.warning("[DOWN] Size:" + length + ",From" + downPacketAddress + ":" + downPacket.getPort());logger.info("[DOWN] Packet:"+ new String(data, 0, length, StandardCharsets.UTF_8));DatagramPacket datagramPacket = downPacketCache.get(upSocket);if (datagramPacket != null) {datagramPacket.setData(data);thisSocket.send(datagramPacket);}} catch (IOException e) {logger.log(Level.SEVERE, "Error in responseListener", e);}}});}public static void main(String[] args) {if (args.length != 3) {logger.warning("Usage: java UDPProxy <listenPort> <targetHost> <targetPort>");System.exit(1);}int listenPort = Integer.parseInt(args[0]);String targetHost = args[1];int targetPort = Integer.parseInt(args[2]);UDPProxy proxy = new UDPProxy(listenPort, targetHost, targetPort);proxy.start();}
}

代码启动

java UDPProxy <listenPort> <targetHost> <targetPort>

  • listenPort:代理服务器监听的端口。

  • targetHost:目标主机的地址。

  • targetPort:目标主机的端口。

 java UDPProxy 12681 192.168.18.76 6666

代码剖析

类和成员变量

  1. 成员变量

    • listenPort:代理服务器监听的端口。

    • targetHost:目标主机的地址。

    • targetPort:目标主机的端口。

    • downPacketCache:用于缓存下行数据包的映射。

    • executor:用于处理响应监听的线程池。

    • logger:用于日志记录的Logger对象。

构造方法

  • 构造方法

    • 初始化listenPorttargetHosttargetPort

    • 设置日志级别为INFO

start方法

  • start方法

    • 创建一个DatagramSocket实例,监听指定的端口。

    • 无限循环接收传入的UDP数据包。

    • 将接收到的数据包转发到目标主机。

    • 使用upSocketCache缓存每个客户端的DatagramSocket实例。

    • 调用responseListener方法监听目标主机的响应。

responseListener方法

  • responseListener方法

    • 使用线程池异步处理目标主机的响应。

    • 接收目标主机的响应数据包。

    • downPacketCache中获取原始客户端的数据包,并将响应数据包发送回原始客户端。

main方法

  • main方法

    • 解析命令行参数,创建UDPProxy实例并启动代理服务器。

http://www.yayakq.cn/news/74960/

相关文章:

  • 性价比高的seo网站优化wordpress 被挂
  • 如何制作外贸网站 wordpress东莞娱乐场所最新通知
  • 网站在线优化工具wordpress头部信息
  • wordpress怎么删除预建网站做网站好还是做程序员好
  • 青海兴远建设工程有限公司网站推广网站怎么建设
  • 网站后台管理系统开发怎么减少wordpress网站cpu占用
  • 网站营销单页怎么做济南网站制作工具
  • 哪些网站可以用gif做头像建网站的软件
  • 开源的网站后台程序怎么选择佛山网站设计
  • 重复建设政务网站网站策划书包括哪几个步骤
  • 医院网站建设需要多少钱销售外包合同
  • 信阳市住房建设局网站开发手机app难吗
  • 北京网站seo费用网站策划书免费
  • 交流平台网站怎么做不了做一份网站的步zou
  • 爬虫 wordpress吉林网络优化多少钱
  • 搜索引擎中注册网站拼多多一键铺货软件
  • 做科技汽车的视频网站有哪些十大电商代运营公司
  • 贵州公司网站开发万能站工具的企业网站系统
  • 设计素材网站推荐ppt做得好的企业网站
  • 有知道做网站的吗上海网站建设 网站制作
  • 兰州做网站公司有哪些公司网页设计价格多少
  • 公司网站的重要性专业做网站哪家好
  • 做毕业设计个人网站任务书完整开发网站需要什么
  • 番禺低价网站建设注册公司的好处和坏处
  • 网站建设技术教程做视频网站的备案要求吗
  • 假如做网站推广如何推广适合女生的长久职业
  • 建设网站的目标客户群wordpress 获取category
  • 怎么导入网站源码wordpress 文章太多
  • 织梦网站会员中心模板朝阳区seo搜索引擎优化怎么样
  • 网站怎么没有排名哪个网站做美食自媒体更好