Socket通信Demo(Unity客户端和C#)

新建一个Unity项目新建脚本编写客户端

using System.Net.Sockets;
using System.Net;
using System;
using System.Text;public class Client : MonoBehaviour
{private Socket socket;//定义用来存消息的容器private byte[] buffer = new byte[1024];// Start is called before the first frame updatevoid Start(){//参数: IPV4协议, 套接字的传输类型(流式传输), socket传输协议(TCP)socket = new Socket(AddressFamily.InterNetwork,SocketType.Stream ,ProtocolType.Tcp);  //连接服务器: 服务器IP, 服务器端口号socket.Connect("127.0.0.1", 6666);  //连接完成//连接成功调用接收方法异步接收消息StartReceive();//连接成功发送消息Send();}//接收消息void StartReceive(){socket.BeginReceive(buffer,0,buffer.Length,SocketFlags.None,ReceiveCallback,null);}//接收消息的回调方法(作为参数传递的函数)void ReceiveCallback(IAsyncResult iar){//接收返回消息长度int len = socket.EndReceive(iar);//接收为0代表终止连接if (len == 0){return;}//解析bufferstring str = Encoding.UTF8.GetString(buffer, 0, len);Debug.Log(str);//解析完在执行接收方法 StartReceive();}void Send(){socket.Send(Encoding.UTF8.GetBytes("服务器你好,我是客户端!"));}// Update is called once per framevoid Update(){}
}

创建一个空物体挂载客户端脚本

 新建一个窗体应用编写服务端

using System.Net.Sockets;
using System.Net;
using System;
using System.Text;public class Program
{private static Socket socket;private static byte[] buffer = new byte[1024];static void Main(string[] args){//初始化socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//绑定socket.Bind(new IPEndPoint(IPAddress.Any, 6666));//监听:  挂起的连接队列最大长度 —— 同时处理连接请求的最大数,超出最大数会排队等待socket.Listen(0);StartAccept();Console.Read(); //阻塞住让程序不会结束}//开始应答static void StartAccept(){//开始异步应答连接   参数: 回调函数,objectsocket.BeginAccept(AcceptCallback, null);}static void AcceptCallback(IAsyncResult iar){//异步接受传入的连接尝试,并创建新的 Socket 来处理远程主机通信。Socket client = socket.EndAccept(iar);//开始接收StartReceive(client);//重新开始应答StartAccept();}//接收消息static void StartReceive(Socket client){//开始从连接的 Socket 中异步接收数据client.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, ReceiveCallback, client);}//回调函数static void ReceiveCallback(IAsyncResult iar){Socket client = iar.AsyncState as Socket;//结束接收返回消息长度int len = client.EndReceive(iar);//接收为0代表终止连接if (len == 0){return;}//解析bufferstring str = Encoding.UTF8.GetString(buffer, 0, len);Console.WriteLine(str);//解析完在执行接收方法 StartReceive(client);}
}

先运行服务端然后运行客户端

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

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

相关文章

八股文打卡day27——数据库(4)

面试题:讲一下事务的隔离级别? 我的回答: 因为事务之间的隔离性,造成了一些问题,比如说:脏读、不可重复读和幻读(虚读)。 1.什么叫脏读? 就是一个事务读取到了另一个事…

使用GraaVIM打包Linux平台本地镜像

1.创建实例,在WindTerm上面连接云服务器 2.安装Lrzsz文件上传工具 yum install lrzsz 3.上传打好的jar包 lrz 使用ls命令查看是否上传成功 3.安装gcc等环境 sudo yum install gcc glibc-devel zlib-devel 4.下载安装配置Linux下的GraaVIM、native-image 下载链…

RocketMQ入门指南:从零开始学习分布式消息队列技术

RocketMQ 1. MQ介绍1.1 为什么要用MQ1.2 MQ的优点和缺点1.3 各种MQ产品的比较 2. RocketMQ快速入门2.1 准备工作2.1.1 下载RocketMQ2.2.2 环境要求 2.2 安装RocketMQ2.2.1 安装步骤2.2.2 目录介绍 2.3 启动RocketMQ2.4 测试RocketMQ2.4.1 发送消息2.4.2 接收消息 2.5 关闭Rocke…

一个简单的回调函数

回调是一种常见的编程模式&#xff0c;其中一个函数被传递给另一个函数&#xff0c;以便在某个事件发生时执行。以下是一个简单的C回调的例子&#xff0c;其中一个函数接受一个回调函数作为参数&#xff0c;并在特定条件下调用它&#xff1a; #include <iostream>// 定义…

模板不存在:./Application/Home/View/OnContact/Index.html 错误位置

模板不存在:./Application/Home/View/OnContact/Index.html 错误位置FILE: /home/huimingdedhpucixmaihndged5e/wwwroot/ThinkPHP123/Library/Think/View.class.php  LINE: 110 TRACE#0 /home/huimingdedhpucixmaihndged5e/wwwroot/ThinkPHP123/Library/Think/View.class.php(…

案例分析04篇:一篇文章搞定软考设计模式(2024年软考高级系统架构设计师冲刺知识点总结)

设计模式 设计模式篇在软考中也经常考到,尤其是定义部分,要背下来;其中创建型模式、结构型模式、行为型模式要结合顺口溜背下来。 1.1 设计模式的定义 设计模式是一套被反复使用、多人知晓、经过分类的经验总结。 设计模式可理解为对某一类问题的通用解决方案。例如工厂模式…

接收服务端请求,WebSocket 并非唯一选择!(含:ChatGPT 流推送原理解析)

前端训练营&#xff1a;1v1私教&#xff0c;终身辅导计划&#xff0c;帮你拿到满意的 offer。 已帮助数百位同学拿到了中大厂 offer。欢迎来撩~~~~~~~~ Hello&#xff0c;大家好&#xff0c;我是 Sunday。 说到推送数据&#xff0c;大家可能首先想到的是 WebSocket。 事实上&…

STM32利用标准库的方式输出PWM(proteus仿真)

首先打开proteus仿真软件&#xff0c;绘制电路图&#xff1a; 其中示波器的添加很简单的&#xff0c;看图&#xff1a; 再来看看咱们最后程序的效果&#xff1a; 下面就是程序代码了&#xff0c;新建两个文件PWM.c和PWM.h文件&#xff0c;所属关系如图&#xff1a; 整个的编程思…

LCR 120. 寻找文件副本(数组)

设备中存有 n 个文件&#xff0c;文件 id 记于数组 documents。若文件 id 相同&#xff0c;则定义为该文件存在副本。请返回任一存在副本的文件 id。 示例 1&#xff1a; 输入&#xff1a;documents [2, 5, 3, 0, 5, 0] 输出&#xff1a;0 或 5提示&#xff1a; 0 ≤ docum…

蓝桥杯刷题(三)

一、P8752 [蓝桥杯 2021 省 B2] 特殊年份&#xff08;洛谷&#xff09; 题目描述 今年是 2021 年&#xff0c;2021 这个数字非常特殊, 它的千位和十位相等, 个位比百位大 1&#xff0c;我们称满足这样条件的年份为特殊年份。 输入 5 个年份&#xff0c;请计算这里面有多少个…

VBA_NZ系列工具NZ02:VBA读取PDF使用说明

我的教程一共九套及VBA汉英手册一部&#xff0c;分为初级、中级、高级三大部分。是对VBA的系统讲解&#xff0c;从简单的入门&#xff0c;到数据库&#xff0c;到字典&#xff0c;到高级的网抓及类的应用。大家在学习的过程中可能会存在困惑&#xff0c;这么多知识点该如何组织…

亚马逊店铺解决和预防订单下滑的技巧

1. 保持账号的良好表现。不要销售侵权产品&#xff0c;发货要及时&#xff0c;能有追踪号的就带可查询追踪号&#xff0c;能发FBA的就通过FBA发货。 2. 持续做好产品优化工作&#xff0c;及时留意大环境的变化和平台政策变动。遇到编辑权限受限&#xff0c;可开case咨询或申请…

LeetCode.2129. 将标题首字母大写

&#x1f354;题目 2129. 将标题首字母大写 &#x1f35f;分析 这道题目描述的很清晰&#xff0c;我们只需要将给定的字符串按照空格划分成字符串数组 str&#xff0c;然后判断 str[i] 的长度如果 <2 &#xff0c;则将 str[i] 转为小写&#xff0c;如果 str[i] 的长度 &g…

habitat中的坑(一):训练模型的时候找不到数据

在habitat中训练一个模型需要指定配置文件&#xff0c;&#xff08;根据目前的学习&#xff09;一般要指定两个yaml文件&#xff1a; 一个是训练的配置文件一个是任务的配置文件 举例如下&#xff1a; import random import numpy as np from habitat_baselines.common.base…

JVM 面试题

1、什么情况下会发生栈内存溢出。 栈内存溢出通常发生在以下几种情况中&#xff1a; 函数递归调用过深&#xff1a; 当函数递归调用自身且没有合适的退出条件时&#xff0c;每次递归调用都会在栈上分配一个新的栈帧来存储局部变量、返回地址等信息。如果递归层次过多&#xff…

JavaSpringBoot的@Value设置默认值,用冒号:

JavaSpringBoot的Value设置默认值,用冒号: JavaSpringBoot的Value设置默认值,用冒号: 如 Value("${property001:默认值} ABC abc &#x1f446;&#x1f447;&#x1f448;&#x1f449; Hello World 你好世界")private Object property001;public Object getPrope…

[数据集][图像分类]棉花叶子病害分类数据集2293张4类别

数据集类型&#xff1a;图像分类用&#xff0c;不可用于目标检测无标注文件 数据集格式&#xff1a;仅仅包含jpg图片&#xff0c;每个类别文件夹下面存放着对应图片 图片数量(jpg文件个数)&#xff1a;2293 分类类别数&#xff1a;4 类别名称:["diseased_cotton_leaf"…

Pinia基本使用示例

1. 定义Store【src\stores\counter.ts】。 (1). 组合式API写法。 import { ref, computed } from vue import { defineStore } from pinia export const useCounterStore defineStore(counter, () > {const count ref(0)const doubleCount computed(() > count.value…

基于多源信息融合的巡飞弹对地目标识别与毁伤评估

源自&#xff1a;系统仿真学报 作者&#xff1a;徐艺博 于清华 王炎娟 郭策 冯世如 卢惠民 摘 要 面向利用多枚巡飞弹对地面高防御移动目标进行打击的任务场景&#xff0c;提出一种基于多源信息融合的巡飞弹对地移动目标识别与毁伤评估方法。基于IoU判定实现红外图像与可…

E2697A 安捷伦高阻抗适配器

181/2461/8938描述: E2697A高阻抗适配器允许将需要高阻抗输入的探头&#xff08;例如无源探头、电流探头&#xff09;连接到Infiniium 54850、80000和90000系列高性能示波器。E2697A高阻抗适配器扩展了Agilent Infiniium高性能示波器的功能&#xff0c;使其成为电源、逆变器、…