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

Unity与java后端UDP通信

1. unity客户端代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Net.Sockets;
using System.Net;
using System.Threading;
using System.Text;
using System;public class Udp : MonoBehaviour
{static Socket client; // clientstatic Thread reciveThread;static Thread sendThread;static EndPoint server;void Start(){server = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8800);client = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);client.Bind(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 6666));//绑定端口号和IPreciveThread = new Thread(ReciveMsg);//开启接收消息线程reciveThread.Start();sendThread = new Thread(()=>SendMsg("hello, first time"));//开启发送消息线程sendThread.Start();}// Update is called once per framevoid Update(){if (Input.GetKeyDown(KeyCode.M)) {String msg = "time:" + Time.deltaTime;SendMsg(msg);}}void OnDestroy() {client.Close();}/// <summary>/// 向特定ip的主机的端口发送数据报/// </summary>static void SendMsg(String msg){client.SendTo(Encoding.UTF8.GetBytes(msg), server);}/// <summary>/// 接收发送给本机ip对应端口号的数据报/// </summary>static void ReciveMsg(){while (true){Thread.Sleep(100);EndPoint point = new IPEndPoint(IPAddress.Any, 0);//用来保存发送方的ip和端口号byte[] buffer = new byte[1024];int length = client.ReceiveFrom(buffer, ref point);//接收数据报string message = Encoding.UTF8.GetString(buffer,0,length);Debug.Log(message);}}
}

2. java服务端代码:

package cn.com.zh.udp;import cn.com.zh.qmcq.All;import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;public class UDPServer {public static void main(String[] args) throws IOException {/** 接收客户端发送的数据*///1.创建服务器端DatagramSocket,指定端口DatagramSocket socket=new DatagramSocket(8800);//2.创建数据报,用于接收客户端发送的数据byte[] data =new byte[1024];//创建字节数组,指定接收的数据包的大小System.out.println("****服务器启动,等待客户端连接****");int count=1;while(true) {DatagramPacket packet = new DatagramPacket(data, data.length);socket.receive(packet);InetAddress address = packet.getAddress();  // 接收到哪个ip发来的数据int port = packet.getPort();    // 对方使用哪个端口发送的if (All.clientMap.containsKey(address.getHostAddress()+"_"+port)) {System.out.println("客户端已经存在");continue;}All.clientMap.put(address.getHostAddress()+"_"+port, null);UDPServerThread serverThread = new UDPServerThread(packet, socket);serverThread.start();System.out.println("客户端数量:" + count++);}}
}

3.维护每个客户端连接

package cn.com.zh.udp;import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;public class UDPServerThread extends Thread{DatagramPacket packet;DatagramSocket socket;public UDPServerThread(DatagramPacket packet, DatagramSocket socket) {super();this.packet = packet;this.socket = socket;}@Overridepublic void run(){try {//获取客户端信息byte[] data = packet.getData();String info1 = new String(data, 0, packet.getLength());System.out.println("我是服务器,客户端说:" + info1);//响应客户端InetAddress address = packet.getAddress();  // 接收到哪个ip发来的数据int port = packet.getPort();    // 对方使用哪个端口发送的while (true) {// TODO do businessThread.sleep(3000);byte[] data1 = ("欢迎您!" + System.currentTimeMillis()).getBytes();DatagramPacket packet1 = new DatagramPacket(data1, data1.length, address, port);socket.send(packet1);}}catch (IOException e) {e.printStackTrace();} catch (InterruptedException e) {throw new RuntimeException(e);}}
}

http://www.lryc.cn/news/224833.html

相关文章:

  • vue3 - swiper插件 实现PC端的 视频滑动功能(仿抖音短视频)
  • 简述SVM
  • 【DevOps】Rundeck以及Jenkins
  • 数字滤波器分析---零极点分析
  • HarmonyOS应用开发-网络请求与web组件
  • 频次最高的38道selenium面试题及答案
  • 利用MSF设置代理
  • 模型剪枝算法——L1正则化BN层的γ因子
  • 11.9 知识总结(三板斧、全局配置文件、静态文件的配置、request对象等)
  • CSS 外边距、填充、分组嵌套、尺寸
  • Exploration by random network distillation论文笔记
  • Ubuntu22.04配置Go环境
  • Zabbix深入解析与实战
  • 怎么用电脑开发安卓app?能外包吗?
  • 1-前端基本知识-HTML
  • 磁盘的分区、格式化、检验与挂载 ---- fdisk,mkfs,mount
  • Solr搜索参数详解
  • Flink(三)【运行时架构】
  • conda添加清华镜像源
  • 「Verilog学习笔记」求两个数的差值
  • 微头条项目实战:通过postman测试登录验证请求
  • ARCGIS SERVER WMS、WFS服务添加过滤条件
  • 2013年108计网
  • 【数据结构】单链表OJ题(一)
  • 2023年云计算发展趋势浅析
  • [极客大挑战 2019]Http1
  • C 语言 for循环
  • 浅谈数据结构之链表
  • 封装一个 虚拟列表渲染 组件
  • Spring中@Bean标注的方法是如何创建对象呢?