Unity-UDP-客户端/服务器通信功能

这篇具有很好参考价值的文章主要介绍了Unity-UDP-客户端/服务器通信功能。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

UDP介绍

unity3d udp服务器,Unity,网络通信,unity,网络,Powered by 金山文档

这里简单实现客户端和服务器,复杂的实现需要和前几篇文章的TCP一样,管理多个链接过来的客户端,这里只有一个。需要自己封装类似listener来管理多个链接过来的设备,每次都缓存ReceiveAsync收到消息的中的RemoteEndPoint地址端口,统一管理发送接收消息。

https://zhidao.baidu.com/question/2203388361996423948.html
是这样的,UDP有一个保活时间,在P2P中,叫洞,如果这个洞没有一段时间内有数据通过,会关闭。
这个时间和特性是和你的NAT设备决定。

这也是为什么UDP不像TCP一样有Listener。

通信实现

namespace Server.Net
{
    internal class UDPServer
    {
        UdpClient udpClient;
        public void Start()
        {
            try
            {
                udpClient = new UdpClient(8899);
                Console.WriteLine("UDP Server 启动成功 8899");
                Receive();
            }
            catch (Exception e)
            {
                Console.WriteLine("UDP Server Error:" + e.Message);
            }
        }

        IPEndPoint remote;//临时用于保存连接的udp客户端
        private async void Receive()
        {
            while (udpClient != null)
            {
                try
                {
                    var result = await udpClient.ReceiveAsync();
                    remote = result.RemoteEndPoint;
                    var text = Encoding.UTF8.GetString(result.Buffer);
                    Console.WriteLine($"收到客户端发过来的数据:{text}");
                }
                catch (Exception e)
                {
                    Console.WriteLine("接收异常:" + e.Message);
                    udpClient.Close();
                    udpClient = null;
                }
            }
        }

        public async void Send(byte[] data)
        {
            int length = await udpClient.SendAsync(data, data.Length, remote);
            Console.WriteLine($"UDP Send:{length}");
        }
    }
}
#define UDP//在这里修改Server类型
    
namespace Server
{
    class Program
    {
        static void Main(string[] args)
        {
#if TCP
            Console.OutputEncoding = Encoding.UTF8;
            TCPServer tcpServer = new TCPServer();
            tcpServer.Start();
            while(true)
            {
                var str = Console.ReadLine();//监听用户输入,不写这句话运行测试会立刻跳出
            }
#elif UDP
            UDPServer server = new UDPServer();
            server.Start();
            while (true)
            {
                string text = Console.ReadLine();
                server.Send(Encoding.UTF8.GetBytes(text));
            }
#endif
        }
    }
}

Unity编写脚本Clinet_UDP,创建新Scene,随便找物体挂上去

public class Client_UDP : MonoBehaviour
{
    private UdpClient udpClient;
    // Start is called before the first frame update
    void Start()
    {
        udpClient = new UdpClient();
        Receive();
    }

    private async void Receive()
    {
        while (udpClient != null)
        {
            try
            {
                UdpReceiveResult result = await udpClient.ReceiveAsync();
                Debug.Log(Encoding.UTF8.GetString(result.Buffer));
            }
            catch (Exception e)
            {
                Debug.Log(e.Message);
                udpClient.Close();
                udpClient = null;
            }
        }
    }

    public async void Send(byte[] data)
    {
        if (udpClient != null)
        {
            try
            {
                int length = await udpClient.SendAsync(data, data.Length, "127.0.0.1", 8899);
                if (data.Length == length)
                {
                    Debug.Log("完整的发送");
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                udpClient.Close();
            }
        }
    }
    
    // Update is called once per frame
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.S))
        {
            Send(Encoding.UTF8.GetBytes("UDP Send Test"));
        }
    }
}

运行测试文章来源地址https://www.toymoban.com/news/detail-669988.html

unity3d udp服务器,Unity,网络通信,unity,网络,Powered by 金山文档

到了这里,关于Unity-UDP-客户端/服务器通信功能的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 网络编程六--UDP服务器客户端

    UDP(User Datagram Protocol)称为用户数据报协议,是一种无连接的传输协议。 UDP的主要应用在即使丢失部分数据,也不影响整体效果的场景。例实时传输视频或音频时,即使丢失部分数据,也不会影响整体效果,只是会有轻微的画面抖动或杂音。 UDP服务器/客户端不像TCP那样,交

    2024年02月15日
    浏览(49)
  • day-04 基于UDP的服务器端/客户端

    UDP套接字具有以下特点: 无连接性 :UDP是一种无连接的协议,这意味着在发送数据之前,不需要在发送方和接收方之间建立连接。每个UDP数据包都是独立的,它们可以独立地发送和接收,而不需要维护连接状态。 不可靠性 :UDP是一种不可靠的协议,这意味着它不提供数据传

    2024年02月11日
    浏览(47)
  • 【网络编程】实现UDP/TCP客户端、服务器

    需要云服务器等云产品来学习Linux的同学可以移步/--腾讯云--/--阿里云--/--华为云--/官网,轻量型云服务器低至112元/年,新用户首次下单享超低折扣。   目录 一、UDP 1、Linux客户端、服务器 1.1udpServer.hpp 1.2udpServer.cc 1.3udpClient.hpp 1.4udpClient.cc 1.5onlineUser.hpp 2、Windows客户端 二、T

    2024年02月06日
    浏览(61)
  • 使用Netty构建TCP和UDP服务器和客户端

    Netty是一个基于Java NIO实现的网络通信框架,提供了高性能、低延迟的网络通信能力。使用Netty构建TCP和UDP服务器和客户端非常简单,下面是一个简单的示例代码: 构建TCP服务器 构建TCP客户端 构建UDP服务器 构建UDP客户端   上述示例代码中,分别定义了一个TCP服务器、TCP客户

    2024年02月16日
    浏览(49)
  • 【网络编程】网络套接字&udp通用服务器和客户端

    端口号(port)是传输层协议的内容: 端口号是一个2字节16位的整数(uint16) 端口号用来标识主机上的一个进程 IP地址+port能够标识网络上的某一台主机和某一个进程 一个端口号只能被一个进程占用 此处我们先对TCP(Transmission Control Protocol 传输控制协议) 有一个直观的认识,后面再

    2024年02月16日
    浏览(214)
  • 【网络原理】使用Java基于UDP实现简单客户端与服务器通信

    我们用Java实现UDP数据报套接字编程,需要借用以下API来实现 网络编程, 本质上是要操作网卡. 但是网卡不方便直接操作. 在操作系统内核中, 使用了一种特殊的叫做 “socket” 这样的文件来抽象表示网卡. 因此进行网络通信, 势必需要先有一个 socket 对象. DatagramSocket 是UDP Socket,

    2024年03月11日
    浏览(59)
  • 【网络编程】基于UDP数据报实现回显服务器/客户端程序

    个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【网络编程】【Java系列】 本专栏旨在分享学习网络编程的一点学习心得,欢迎大家在评论区交流讨论💌 前言 我们如果想让应用程序进行网络通信的话,就需要调用传

    2024年02月04日
    浏览(54)
  • UDP数据报网络编程(实现简单的回显服务器,客户端)

           回显服务器表示客户端发的是啥,服务器就返回啥,主要是为了熟悉UDP数据报网络编程的基本步骤         对于程序的所有分析都写到了代码上 当我们用idea实现了上面的代码后可以通过idea如何开启多个客户端(一个代码开启多个客户端运行)来检验多个客户端向

    2024年02月13日
    浏览(62)
  • 《TCP/IP网络编程》阅读笔记--基于UDP的服务器端/客户端

    目录 1--TCP和UDP的主要区别 2--基于 UDP 的数据 I/O 函数 3--基于 UDP 的回声服务器端/客户端 4--UDP客户端Socket的地址分配 5--UDP存在数据边界 6--UDP已连接与未连接的设置 ① TCP 提供的是可靠数据传输服务,而 UDP 提供的是不可靠数据传输服务; ② UDP 在结构上比 TCP 更简洁,其不会

    2024年02月09日
    浏览(61)
  • 【Java网络编程】基于UDP-Socket 实现客户端、服务器通信

    ​ 哈喽,大家好~我是你们的老朋友: 保护小周ღ   本期为大家带来的是网络编程的 UDP Socket 套接字,基于 UDP协议的 Socket 实现客户端服务器通信 ,Socket 套接字可以理解为是,传输层给应用层提供的一组 API,如此程序,确定不来看看嘛~~ 本期收录于博主的专栏 : JavaEE_保

    2024年02月02日
    浏览(70)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包