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

Unity网络开发记录(一):实现最简单的unity客户端和服务器通信

服务端

案例通过Socket网络套接字实现Tcp网络通讯

打开VS,新建一个项目

C#服务端整体流程依旧遵从socket开发的基本步骤,和其它语言下的socket开发一样,例如c++

  1. 新建socket对象
  2. 向socket对象绑定协议簇、传输格式、协议类型
  3. 新建一个能存储ip地址以及端口号的对象
  4. socket对象绑定ip地址以及端口号
  5. socket对象开启监听
  6. socket对象持续进行监听连接请求,如有新连接,返回客户端与服务端之间通信的socket对象(此过程阻塞,直到有新连接)
  7. 建立连接,此时可以进行信息的收发
  8. 切断通讯关闭socket

补充一下前置知识,在Tcp传输下,会经历三报文握手建立连接,四报文挥手释放连接。三报文握手防止以失效的连接请求重新传到服务端,四报文挥手之后要等待2MSL,确保此过程中的报文全部失效,并防止释放请求确实报文丢失,及时重传。Tcp传输具有无差错,不丢失,不重复,不乱序的特点,适合长连接的游戏

传输信息使用UTF-8编码

服务端代码:

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;namespace C_NetWorke
{internal class Program{static void Main(string[] args){Socket tcpSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);try{IPEndPoint ip = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8080);tcpSocket.Bind(ip);}catch (Exception){return;                }tcpSocket.Listen(1024);Socket clientSocket = tcpSocket.Accept();clientSocket.Send(Encoding.UTF8.GetBytes("你好,我是服务端"));byte[] buffer = new byte[1024];int num = clientSocket.Receive(buffer);if (clientSocket.RemoteEndPoint != null){Console.WriteLine($"收到来次{clientSocket.RemoteEndPoint.ToString()},发来的消息:{Encoding.UTF8.GetString(buffer, 0, num)}");}clientSocket.Shutdown(SocketShutdown.Both);clientSocket.Close();Console.ReadLine();}}
}

客户端

  1. 新建socket对象
  2. 向socket对象绑定,和服务端一样
  3. 启动连接,申请向服务器建立连接
  4. 连接成功,可以收发数据
  5. 切断通讯,关闭socket

在unity中新建一个脚本

using System.Collections;
using System.Collections.Generic;
using UnityEngine;using System;
using System.Net;
using System.Net.Sockets;
using System.Text;public class Class5 : MonoBehaviour
{private void Start(){Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);IPEndPoint ipPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8080);try{socket.Connect(ipPoint);}catch (SocketException e){if (e.ErrorCode == 10061)print("服务器拒绝链接");elseprint("链接出错" + e.ErrorCode);return;}socket.Send(Encoding.UTF8.GetBytes("你好,我是客户端"));byte[] buffer = new byte[1024];int num = socket.Receive(buffer);if (socket.RemoteEndPoint != null){print($"收到来次{socket.RemoteEndPoint.ToString()},发来的消息:{Encoding.UTF8.GetString(buffer, 0, num)}");}socket.Shutdown(SocketShutdown.Both);socket.Close();}}

启动服务器后,再运行unity,发现连接成功,此时完成了网络通讯的初步搭建


http://www.mrgr.cn/news/36810.html

相关文章:

  • Spring Boot框架在甘肃非遗文化网站设计中的运用
  • DCGAN生成人脸图片
  • (已解决)torch.load的时候发生错误ModuleNotFoundError: No module named ‘models‘
  • 负载箱在各领域的作用
  • 12.系统架构分析师应该懂的项目管理知识
  • 刷题学习日记 (1) - SWPUCTF
  • MAXON燃烧备件适用于哪些工业领域和燃烧系统
  • Windows系统下批量重命名文件的两种实现方法
  • 什么是大语言模型,一句话解释
  • 软件测试标准流程(思维导图版)
  • K8s Calico替换为Cilium,以及安装Cilium过程(鲁莽版)
  • vscode【实用插件】Markdown Preview Enhanced 预览 .md 文件
  • HarmonyOS NEXT 全面升级:华为引领智能生态的未来
  • su 命令:一键切换用户身份、提高su命令安全性的建议
  • 《数据结构与算法之美》学习笔记五之队列
  • Redis 篇-深入了解在 Linux 的 Redis 网络模型结构及其流程(阻塞 IO、非阻塞 IO、IO 多路复用、异步 IO、信号驱动 IO)
  • 喜迎开业,卤香四溢——嘴尚绝东北大卤成都店开业活动大放送
  • 如何查看电脑的虚拟内存信息?
  • 机器学习和深度学习的区别
  • java 解析excel