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.mzph.cn/news/616808.shtml

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

相关文章

航天民芯一级代理-技术支持-一站式配单 MT9284-28J LED驱动芯片

描述 MT9284是一个升压转换器,设计用于从单电池锂离子电池中驱动多达7个系列的白色led。MT9284使用电流模式,固定频率结构来调节LED电流,它通过外部电流感应电阻来测量。MT9284包括低电压锁定、限流和热过载保护,以防止在输出过载…

ubuntu20.04 扩大交换空间swap

检查当前swap情况 free -msudo swapon --show关闭现有的swap sudo swapoff -a创建一个新的swap文件 sudo fallocate -l 32G /swapfile设定正确的权限 sudo chmod 600 /swapfile下面这个指令会把我们的空间变成可用的swap空间 sudo mkswap /swapfile启用swap文件 sudo swa…

冠军团队!第二届百度搜索创新大赛AI方案

Datawhale干货 作者:李柯辰,Datawhale成员 写在前面 大家好,我们是2023年第二届百度搜索创新大赛 赛道三——AI应用设计赛道的冠军团队——“肝到凌晨”,很高兴能与大家分享我们这次比赛的经验,同时也希望以后有机会可…

利用gulp工具对常规web项目进行压缩打包

前言 对于一个常规的web项目,如下项目目录 |- imgs | - img1.png | - img2.png |- js | - user.js | - utils.js |- css | - index.css | - user.css |- html | - user.html |- index.html可以使用各种构建工具(如webpack、gulp、grunt等)来…

Linux第29步_虚拟机连接(与主机断开连接)U盘选项为灰色解决方法

在WIN11中,虚拟机“连接(与主机断开连接)U盘”选项为灰色,解决方法如下: 1、关闭虚拟机电源,得到下面的界面: 2、根据上述提示,找到虚拟机所在磁盘 3、配置文件属性见下图: 4、使用记事本打开…

基于stm32f4的蓝牙控制小车

1. 引言 蓝牙的创始人是瑞典爱立信公司,蓝牙技术是一种无限数据与语音通信的开放性全球规范,它以低成本的近距离无线连接为基础,为固定与移动设备通信环境建立一个特别连接。手机之间通过蓝牙实现数据共享成为常理,将手机变为遥…

共融共生:智慧城市与智慧乡村的协调发展之路

随着科技的飞速发展和全球化的不断深入,智慧城市和智慧乡村作为现代社会发展的重要组成部分,正逐渐成为人们关注的焦点。然而,在追求经济发展的过程中,城乡发展不平衡的问题也日益凸显。因此,如何实现智慧城市与智慧乡…

【设计模式-04】Factory工厂模式

简要描述 简单工厂静态工厂工厂方法 FactoryMethod 产品维度扩展 抽象工厂 产品一族进行扩展Spring IOC 一、工厂的定义 任何可以产生对象的方法或类,都可以称之为工厂单例也是一种工厂不可咬文嚼字,死扣概念为什么有了new之后,还要有工厂&am…

oracle 12c pdb expdp/impdp 数据导入导出

环境 (源)rac 环境 byoradbrac 系统版本:Red Hat Enterprise Linux Server release 6.5 软件版本:Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit byoradb1:172.17.38.44 byoradb2:172.17.38.45 (目的&am…

轻松上手Linux文件操作:五种方法教你创建文件

轻松上手Linux文件操作:五种方法教你创建文件 一、引言二、使用touch命令创建文件三、使用文本编辑器创建文件四、使用echo命令创建文件五、使用cat命令创建文件六、使用重定向符号创建文件七、总结 一、引言 本文介绍五种在Linux系统中创建文件的方法,…

公共用例库计划--个人版(三)导出Excel功能

1、任务概述 本次计划的核心任务是开发一个,个人版的公共用例库,旨在将各系统和各类测试场景下的通用、基础以及关键功能的测试用例进行系统性地归纳整理,并以提高用例的复用率为目标,力求最大限度地减少重复劳动,提升…

网络层协议及IP编址与IP路由基础华为ICT网络赛道

目录 4.网络层协议及IP编址 4.1.网络层协议 4.2.IPv4地址介绍 4.3.子网划分 4.4.ICMP协议 4.5.IPv4地址配置及基本应用 5.IP路由基础 5.1.路由概述 5.2.静态路由 5.3.动态路由 5.4.路由高阶特性 4.网络层协议及IP编址 4.1.网络层协议 IPv4(Internet Protocol Versi…

Pygame程序的屏幕显示

不同对象的绘制与显示过程 在Pygame中,需要将所有需要在屏幕上显示的内容都绘制在一个display surface上。该Surface通常称为screen surface,它是pygame.display.set_mode()函数返回的Surface对象。 在绘制不同对象时,可以使用不同的绘制方…

AI绘画软件Stable Diffusion模型/Lora/VAE文件存放位置

型下载说明(下载模型后输入对应参数即可生成) 建议直接去civitai.com找模型,如果无法找到可以在幕后模型区找也可以去, 下载好后放入对应的文件夹。进入127.0.0.1:7680 左上角刷新即可看到新的模型。 模型种类 大模型 大模型特…

计算机找不到msvcr100.dll的多种解决方法分享,轻松解决dll问题

msvcr100.dll作为系统运行过程中不可或缺的一部分,它的主要功能在于提供必要的运行时支持,确保相关应用程序能够顺利完成编译和执行。因此,当操作系统或应用程序在运行阶段搜索不到该文件时,自然会导致各类依赖于它的代码无法正常…

C语言基础语法跟练 day3

31、不使用累计乘法的基础上&#xff0c;通过移位运算&#xff08;<<&#xff09;实现2的n次方的计算。 #include <stdio.h> int main() {int i 0;scanf("%d",&i);printf("%d",1<<i);return 0; } 32、问题&#xff1a;一年约有 3.…

c#多线程中使用SemaphoreSlim

SemaphoreSlim是一个用于同步和限制并发访问的类&#xff0c;和它类似的还有Semaphore&#xff0c;只是SemaphoreSlim更加的轻量、高效、好用。今天说说它&#xff0c;以及如何使用&#xff0c;在什么时候去使用&#xff0c;使用它将会带来什么优势。 代码的业务是&#xff1a…

档案数字化怎样快速整理资料

对于机构和组织来说&#xff0c;档案数字化是一个重要的信息管理和保护措施。要快速整理资料进行档案数字化&#xff0c;可以遵循以下步骤&#xff1a; 1. 准备工具和设备&#xff1a;确保有一台计算机、扫描仪和相关软件。 2. 分类和组织资料&#xff1a;先将资料分类&#xf…

代码随想录Day.31 | 455. 分发饼干、376. 摆动序列、53. 最大子序和

455. 分发饼干 1. LeetCode链接 455. 分发饼干 - 力扣&#xff08;LeetCode&#xff09; 2. 题目描述 3. 解法 贪心法&#xff0c;首先想到的是&#xff0c;局部最优&#xff1a;让每个孩子尽可能拿能拿到的最小饼干尺寸。为了方便查找&#xff0c;这就要求至少饼干尺寸是从…

MySQL的Windows系统安装

一、MySQL的Windows系统安装 1、下载MySQL安装包 打开如下链接地址&#xff0c;下载安装包 2、安装并配置 双击下载好的安装包进行安装&#xff0c;出现如下界面&#xff1a; 选择【 Full 】选项&#xff0c;然后单击【 Next 】按钮。 出现如下界面&#xff0c;单击【 Execute…