unity Sockets通信 使用UDP协议,设置客户端电脑网络配置,使用新线程获取数据,解决卡顿问题,

news2024/12/26 15:10:08

今天调试和服务器连接,发现始终获取不到服务器的数据,
电脑和服务器都在同一局域网,仍然获取不到,
下面是电脑环境配置,
第一步:
设置网络为专用网络,然后点击配置防火墙和安全设置,关闭防火墙
(点击所连接的wifi的属性)
在这里插入图片描述

第二步:设置出站 入站规则
点击高级设置,入站规则—创建:选择端口—选择UDP,所有本地端口,–允许连接—三个都勾选—起个名字如UDP连接
出站规则 和入站规则操作步骤一样

在这里插入图片描述

在这里插入图片描述

现在运行看看是否已经可以获取服务器数据了,

如果还未获取到,就需要设置自己的IP 地址为固定的了
在这里插入图片描述
然后点击详细信息,拍照记住IPV4地址、IPV4子网掩码。IPv4网关,然后关闭
点击属性
在这里插入图片描述

把刚才记录的东西 按下图以此填写设置,
在这里插入图片描述

//然后在Sockets 通信代码中 绑定的IP 使用自己的IP,
 IPAddress ipAddress = IPAddress.Parse("自己电脑的IP");

下面时UDP代码

using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using UnityEngine;
using UnityEngine.Rendering.Universal;
using UnityEngine.UI;



public class ClientHandlerUDP : MonoBehaviour
{
   

    IPAddress ipAddress;
    private const int Port = 服务器端口号;
    static Socket receiverSocket;
    static EndPoint remoteEndPoint;

    Thread thread;
    public void Start()
    {

         设置服务器IP和端口

        string json = CreatFile(Application.streamingAssetsPath + "/IP", "IP.json");//IP地址放到了一个json文件里,方便在其他电脑上配置
        IPClass ip = JsonUtility.FromJson<IPClass>(json);
        
         ipAddress = IPAddress.Parse(ip.ip);
        Debug.Log($"IP和端口号,ip{ip.ip},,,端口号:{Port}");

        StartUpd();


    }
    public void StartUpd()
    {

        IPEndPoint localEndPoint = new IPEndPoint(ipAddress, Port);
        remoteEndPoint = new IPEndPoint(IPAddress.Any, 0);
        try
        {
            Debug.Log("创建UDP Socket");
            // 创建UDP Socket
            receiverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);


            Debug.Log($"绑定IP和端口号");
            // 将Socket绑定到本地IP和端口
            receiverSocket.Bind(localEndPoint);
            thread = new Thread(ThreadUpdate);//使用新线程,可以有效防止 获取数据时 运行太卡的问题,
            thread.Start();

            Debug.Log("UDP接收器已启动,等待接收消息...");



        }
        catch (Exception ex)
        {
            Debug.Log(string.Format("发生异常: {0}", ex.Message));
        }
    }


    bool isThreadRunning = true;
    public void ThreadUpdate()
    {
        if (isThreadRunning)
        {
            Debug.Log("线程开启");
            while (true)
            {
                byte[] buffer = new byte[1024];
                Debug.Log("准备接收消息");
                int bytesRead = receiverSocket.ReceiveFrom(buffer, ref remoteEndPoint);

                string message = Encoding.ASCII.GetString(buffer, 0, bytesRead);

                Debug.Log(string.Format("接收到来自 {0} 的消息: {1}", remoteEndPoint.ToString(), message));
               
                Thread.Sleep(1000);
            }
        }

    }
    // 关闭新线程
    private void StopThread()
    {
        // 在主线程中修改标志变量的值
        isThreadRunning = false;
        if (thread == null) return;
        // 等待新线程结束
        thread.Abort();
    }
    public void OnDisable()
    {
        StopThread();
    }
    private string CreatFile(string filePath, string fileName)
    {
        string fullPath = Path.Combine(filePath, fileName);
        if (!Directory.Exists(filePath))
        {
            Directory.CreateDirectory(filePath);
        }
        if (!File.Exists(fullPath))
        {
            FileStream fs1 = new FileStream(fullPath, FileMode.Create);
            fs1.Flush();
            fs1.Close();
        }

        byte[] byets = File.ReadAllBytes(fullPath);
        return Encoding.UTF8.GetString(byets);
    }
}
[Serializable]
public class IPClass
{
    public string ip;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/602996.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Unity——2D小游戏笔记整理

【每日一句&#xff1a;清晨和夜晚都请用尽全力去生活】 目录 一、环境搭建 二、人物 三、相机跟随人物移动 四、平铺精灵 五、血条跟随敌人行走 六、脚本逻辑 【玩家行走方法】 【玩家跳跃方法】 【改变玩家血量值方法】 【创建玩家子弹方法】 【主角血量&#xff…

《计算机网络——自顶向下方法》精炼——3.7(1)

少而好学,如日出之阳;壮而好学,如日中之光;志而好学,如炳烛之光。——刘向 文章目录 拥塞控制方法ATM ABR拥塞控制 TCP拥塞控制TCP拥塞控制算法的实现慢启动拥塞避免快速恢复总结 拥塞控制方法 在上一篇文章中&#xff0c;我们介绍了在数据传输过程中出现的问题。本节将简要介…

Bitbucket 的SSH keys 突然无法识别 -> Permission denied (publickey)问题

Bitbucket 的SSH keys 突然无法识别 -> Permission denied (publickey)问题 用了几年的SSH keys突然出现Permission denied (publickey)问题&#xff0c;如下图所示&#xff1a; 1、首先排查项目权限问题&#xff0c;确认其他账号可更新代码&#xff0c;排除 2、排除SSH k…

【软件测试】白盒测试与黑盒测试

白盒测试与黑盒测试 测试用例定义生成的基本准测设计步骤作用测试数据和测试用例的区别 黑盒测试定义优点缺点黑盒测试的实施过程等价类划分法边界值分析法错误推测法因果图判定表判定表例题 白盒测试介绍覆盖程度基本路径覆盖程序流程图简化成控制流图计算圈复杂度导出测试用例…

chatGPT 学习笔记

学习笔记&#xff1a;chatGPT chatGPT 概述 什么是 chatGPT &#xff1f;(要说明定义、来源、功能和特点) ChatGPT 是 OpenAI 开发的一个大型预训练语言模型&#xff0c;它基于 GPT-3.5 模型&#xff0c;可以在对话中生成类似人类的文本响应&#xff0c;简称对齐。它使用自监…

基于节点分层的配网潮流前推回代方法【IEEE33节点】(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

java的UDP(一)

文章目录 1. 简介2. UDP客户端3. UDP服务器4. DatagramPacket类 1. 简介 Java中的UDP实现分为两个类&#xff1a;DatagramPacket和DatagramSocket。DatagramPacket类将数据字节填充到UDP包汇总&#xff0c;这称为数据报&#xff0c;由你来解包接收的数据报。DatagramSocket可以…

2023北京大学首席营销官CMO高级研修班简介

【课程背景】自 2022 年以来&#xff0c;营销新趋势呈现以下变化&#xff1a;消费渠道多元化&#xff0c;社会化媒体 成为信息主要渠道&#xff0c;流量红利消失&#xff0c;数字营销成当下主流&#xff1a;元宇宙数字营销成热点&#xff1b;私域运营更受品牌重视&#xff1b;国…

MySQL主存复制

介绍 配置-主库master 第一步&#xff1a;修改MySQL数据库的配置文件/etc/my.cnf [mysqld] log-binmysql-bin #[必须]启用二进制日志 server-id100 #[必须]服务器唯一id第二部&#xff1a;重启MySQL服务 systemctl restart mysqld第三步&#xff1a;登录MySQL操作&#x…

Talk预告 | 新加坡国立大学张傲:10%成本定制类 GPT-4 多模态大模型

本期为TechBeat人工智能社区第502期线上Talk&#xff01; 北京时间06月01日(周四)20:00&#xff0c;新加坡国立大学在读博士生 — 张傲的Talk将准时在TechBeat人工智能社区开播&#xff01; 他与大家分享的主题是: “10%成本定制类 GPT-4 多模态大模型 ”&#xff0c;届时将介…

RemoteSensing投稿流程

RemoteSensing投稿流程&#xff0c;底部有官网地址和word模板 RemoteSensing投稿流程&#xff0c;遇到的坑RemoteSensing期刊官网地址&#xff0c;模板 RemoteSensing投稿流程&#xff0c; ##3.16 Submit &#xff08;第一次提交&#xff09; 3.17 Under review &#xff08;正…

中核浦原一号数字员工诞生,实在智能为智能制造再添强大引擎

头戴博士帽&#xff0c;脚踩喷气引擎&#xff0c;身披“科技蓝”披风&#xff0c;今年的全国科技工作者日&#xff0c;一位硬“核”数字员工正式诞生&#xff01; 这就是由上海中核八所科技有限公司&#xff08;下称中核八所&#xff09;人工智能研发中心为上海中核浦原有限公司…

网工内推 | 上海网工专场,NP认证,朝九晚六,多次调薪机会

01 上海伍贤信息技术股份有限公司 &#x1f537;招聘岗位&#xff1a;网络工程师 &#x1f537;职责描述&#xff1a; 1、在网络基础设施方面提供日常支持&#xff0c;例如&#xff0c;WIFI、局域网、视频会议等。 2、协助管理亚太地区的网络安全服务&#xff08;防火墙/代理/…

CVE-2023-33246 Apache RocketMQ 命令注入漏洞复现及分析

CVE-2023-33246 Apache RocketMQ 命令注入漏洞复现及分析 0x0.威胁情报&#xff1a; 漏洞编号CVE编号CVE-2023-33246漏洞评估危害评级高危漏洞类型RCE公开程度PoC已公开利用条件1.在受影响版本内威胁类型远程利用情报在野利用无漏洞活跃度中影响产品产品名称Apache RocketMQ受…

代码随想录算法训练营第二十四天| 回溯理论基础 、77. 组合

理论基础 回溯通常隐藏在递归函数的下面&#xff0c;递归和回溯是相辅相成的&#xff0c;通常来说 回溯函数就是指递归函数。 回溯法其实是一个纯暴力的搜索&#xff0c;有些问题只能依靠回溯法将所有的结果搜出来。 例如&#xff1a; 组合问题&#xff1a;N个数里面按一定规…

【VictoriaMetrics】VictoriaMetrics单机版数据删除

在使用vm的过程中,我们会遇到需要删除不必要的数据,那vm是如何操作数据删除的呢? VictoriaMetrics通过发送HTTP请求到http://<victoriametrics-addr>:8428/api/v1/admin/tsdb/delete_series?match=<timeseries_selector_for_delete> 其中<timeseries_sele…

npm+模块加载机制

1.npm与包 1.什么是包 Node.js中的第三方模块又叫做包。 就像电脑和计算机指的是相同的东西&#xff0c;第三方模块和包指的是同一个概念&#xff0c;只不过叫法不同。 2.包的来源 不同于Node,js中的内置模块与自定义模块&#xff0c;包是由第三方个人或团队开发出来的&am…

Android 应用弹出悬浮窗

Android开发者经常遇到应用想弹出悬浮窗的操作&#xff0c;而且有可能还想要高层级弹窗&#xff0c;就像ipone的浮标touch一样。android当然也有类似的悬浮图标&#xff0c;比如前些年我们的流量监控提醒。 这里我们忽略UI美学&#xff0c;简单记录一下&#xff1a; 1、基本使…

mac os 安装rz/sz

说明&#xff1a;使用rz sz实现终端的文件传输&#xff0c;该命令主要使用场景为 macos中通过堡垒机登陆后无法使用ftp工具传输文件。 工具&#xff1a;iTerm2、lrzsz、homebrew 以及两个脚本文件&#xff08;iterm2-recv-zmodem.sh、iterm2-send-zmodem.sh&#xff09; …

基于确定有穷自动机(DFA算法)实现敏感词过滤

1.DFA算法简介 DFA(Deterministic Finite Automaton) 是一种非递归自动机&#xff0c;也称为确定有穷自动机。它是通过event和当前的state得到nextstate&#xff0c;即eventstatenextstate。 确定&#xff1a;状态以及引起状态转换的事件都是可确定的。 有穷&#xff1a;状态以…