Unity网络通讯学习

---部分截图来自 siki学院Unity网络通讯课程

Socket 

网络上的两个程序通过一个双向的通信连接实现数据交换,这个连接的一端称为一个 Socket ,Socket 包含了网络通信必须的五种信息

Socket 例子{ 

协议: TCP

本地: IP ,端口

远程: IP ,端口

}

可以通过ipconfig,netstat   -ano 查看 Ip 和端口

创建客户端连接服务端

客户端代码:

using System;
using System.Net.Sockets;namespace wangluo
{class Program{static void Main(string[] args){//创建一个Socket 需要using System.Net.Sockets;Socket tempClient = new Socket(AddressFamily.InterNetwork,SocketType.Stream, ProtocolType.Tcp);tempClient.Connect("127.0.0.1", 8888);}}
}

服务端代码:

using System;
using System.Net.Sockets;
using System.Net;namespace Server
{class Program{static void Main(string[] args){Socket tempServer = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);IPEndPoint tempEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8888);  //using System.Net;tempServer.Bind(tempEndPoint);  //绑定端口tempServer.Listen(0);  //监听,0表示挂起的队列无限长Console.WriteLine("服务端启动成功");Socket tempConnectClient = tempServer.Accept();Console.WriteLine("客户端连接成功:" + tempConnectClient);}}
}

先开启服务端再开启客户端 

客户端服务端互发信息

客户端代码:

using System;
using System.Net.Sockets;
using System.Text;namespace wangluo
{class Program{static void Main(string[] args){//创建一个Socket 需要using System.Net.Sockets;Socket tempClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);tempClient.Connect("127.0.0.1", 8888);//客户端向服务端发信息string tempSendInfo = Console.ReadLine();//将字符串转换成 bufferbyte[] tempSendData = Encoding.UTF8.GetBytes(tempSendInfo);//发送信息tempClient.Send(tempSendData);//接收来自服务端的信息byte[] tempReadBuffer = new byte[1024];tempClient.Receive(tempReadBuffer);string tempReadString = Encoding.UTF8.GetString(tempReadBuffer);Console.WriteLine("接收到服务端信息:" + tempReadString);}}
}

服务端代码:

using System;
using System.Net.Sockets;
using System.Net;
using System.Text;namespace Server
{class Program{static void Main(string[] args){Socket tempServer = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);IPEndPoint tempEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8888);  //using System.Net;tempServer.Bind(tempEndPoint);  //绑定端口tempServer.Listen(0);  //监听,0表示挂起的队列无限长Console.WriteLine("服务端启动成功");Socket tempConnectClient = tempServer.Accept();Console.WriteLine("客户端连接成功:" + tempConnectClient);byte[] tempReadBuffer = new byte[1024];tempConnectClient.Receive(tempReadBuffer);//将 byte 转换成字符串string tempReadString = Encoding.UTF8.GetString(tempReadBuffer);Console.WriteLine("接收到客户端信息:" + tempReadString);//服务端向客户端发信息string tempSendInfo = Console.ReadLine();byte[] tempSendData = Encoding.UTF8.GetBytes(tempSendInfo);tempConnectClient.Send(tempSendData);}}
}

封装一下代码:

客户端:

using System;
using System.Net.Sockets;
using System.Text;namespace wangluo
{class Program{static void Main(string[] args){//创建一个Socket 需要using System.Net.Sockets;Socket tempClient = CreateSocket();tempClient.Connect("127.0.0.1", 8888);Send(tempClient);Receive(tempClient);}static Socket CreateSocket(){return new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);}static void Send(Socket tempClient){//客户端向服务端发信息string tempSendInfo = Console.ReadLine();//将字符串转换成 bufferbyte[] tempSendData = Encoding.UTF8.GetBytes(tempSendInfo);//发送信息tempClient.Send(tempSendData);}static void Receive(Socket tempClient){//接收来自服务端的信息byte[] tempReadBuffer = new byte[1024];tempClient.Receive(tempReadBuffer);string tempReadString = Encoding.UTF8.GetString(tempReadBuffer);Console.WriteLine("接收到服务端信息:" + tempReadString);}}
}

 服务端:

using System;
using System.Net.Sockets;
using System.Net;
using System.Text;namespace Server
{class Program{static void Main(string[] args){Socket tempServer = CreateSocket();BindAndListen(tempServer);Socket tempConnectClient = Accept(tempServer);Receive(tempConnectClient);Send(tempConnectClient);}static Socket CreateSocket(){return new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);}static void BindAndListen(Socket pSocket){IPEndPoint tempEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8888);  //using System.Net;pSocket.Bind(tempEndPoint);  //绑定端口pSocket.Listen(0);  //监听,0表示挂起的队列无限长Console.WriteLine("服务端启动成功");}static Socket Accept(Socket pSocket){Socket tempConnectClient = pSocket.Accept();Console.WriteLine("客户端连接成功:" + tempConnectClient);return tempConnectClient;}static void Receive(Socket pSocket){byte[] tempReadBuffer = new byte[1024];pSocket.Receive(tempReadBuffer);//将 byte 转换成字符串string tempReadString = Encoding.UTF8.GetString(tempReadBuffer);Console.WriteLine("接收到客户端信息:" + tempReadString);}static void Send(Socket pSocket){//服务端向客户端发信息string tempSendInfo = Console.ReadLine();byte[] tempSendData = Encoding.UTF8.GetBytes(tempSendInfo);pSocket.Send(tempSendData);}}
}

Socket 代码解析:

AddressFamily: InterNetwork 使用IPv4    InterNetworkV6 使用IPv6

SocketType:

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录二刷 |二叉树 | 二叉搜索树的最小绝对差

代码随想录二刷 |二叉树 | 二叉搜索树的最小绝对差 题目描述解题思路 & 代码实现递归法迭代法 题目描述 530.二叉搜索树的最小绝对差 给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。 示例&#…

VUE element-ui实现表格动态展示、动态删减列、动态排序、动态搜索条件配置、表单组件化。

1、实现效果 1.1、文件目录 1.2、说明 1、本组件支持列表的表头自定义配置,checkbox实现 2、本组件支持列表列排序,vuedraggable是拖拽插件,上图中字段管理里的拖拽效果 ,需要的话请自行npm install 3、本组件支持查询条件动态…

【面试突击】注册中心面试实战

🌈🌈🌈🌈🌈🌈🌈🌈 欢迎关注公众号(通过文章导读关注:【11来了】),及时收到 AI 前沿项目工具及新技术 的推送 发送 资料 可领取 深入理…

软件测评中心▏性能测试之压力测试、负载测试的区别和联系简析

在如今的信息时代,软件已经成为人们日常工作和生活不可或缺的一部分。然而,随着软件的发展和应用范围的不断扩大,软件性能的优劣也成为了影响用户使用体验的重要因素。 软件性能测试即对软件在不同条件下的性能进行评估和验证的过程。通过模…

Wpf 使用 Prism 实战开发Day11

仓储(Repository)/工作单元(Unit Of Work)模式 仓储(rep):仓储接口定义了对实体类访问数据库及操作的方法。它统一管理数据访问的逻辑,并与业务逻辑层进行解耦。 简单的理解就是对访问数据库的一…

Tensorflow2.0笔记 - 修改形状和维度

本次笔记主要使用reshape,transpose,expand_dim,和squeeze对tensor的形状和维度进行操作。 import tensorflow as tf import numpy as nptf.__version__#tensor的shape和维数获取 #假设下面这个tensor表示4张28*28*3的图片 tensor tf.rando…

开发代码基础

首先安装驱动,在ARDUINO环境下安装,然后安装开发板,详见哔哩哔哩教程 1:接入点模式(也称 AP) 通过以下示例程序,NodeMCU将会建立一个名为taichi-maker的WiFI。您可以使用手机或电脑连接该WiFi…

Spark的内核调度

目录 概述 RDD的依赖 DAG和Stage DAG执行流程图形成和Stage划分 Stage内部流程 Spark Shuffle Spark中shuffle的发展历程 优化前的Hash shuffle 经过优化后的Hash shuffle Sort shuffle Sort shuffle的普通机制 Job调度流程 Spark RDD并行度 概述 Spark内核调度任务: 1…

U盘启动安装win11遇到缺少计算机所需的介质驱动程序问题

一、使用U盘制作启动盘遇到问题 下载了windows原版镜像,验证了md5,确保文件没有损坏。使用ultroiso制作u盘启动盘,开始安装后出现下图的报错: 在网上搜索解决方案,主要有以下几种: 安装的时候&#xff0c…

Java Swing 图书借阅系统 窗体项目 期末课程设计 窗体设计

视频教程: 【课程设计】图书借阅系统 功能描述: 图书管理系统有三个角色,系统管理员、图书管理员、借阅者; 系统管理员可以添加借阅用户; ​图书管理员可以添加图书,操作图书借阅和归还; 借…

最大公共子串

解题思路: 解题代码: UP主运用的方法很巧妙。厉害。

GitLab 502 Whoops, GitLab is taking too much time to respond. 解决

1、先通过gitlab-ctl restart进行重启,2分钟后看是否可以正常访问,为什么要2分钟,因为gitlab启动会有很多配套的服务启动,包括postgresql等 2、如果上面不行,再看gitlab日志,通过gitlab-ctl tail命令查看&…