TCP传输数据

TCP客户端

using System;
using System.Collections;
using System.Collections.Generic;
using System.Net.Sockets;
using UnityEngine;public class TCPClient
{/// <summary>/// 客户端/// </summary>private TcpClient tcpClient;private NetworkStream stream;public TCPClient(string ip, int port){try{//初始化客户端tcpClient = new TcpClient(ip, port); // 连接到指定的服务器地址和端口stream = tcpClient.GetStream();// 开始接收数据byte[] buffer = new byte[1024];stream.BeginRead(buffer, 0, buffer.Length, new AsyncCallback(ReceiveCallback), buffer);}catch (Exception e){Debug.Log("错误Error: " + e.Message);}}/// <summary>/// 发送消息/// </summary>/// <param name="message"></param>public void Send(string message){if (stream == null){Debug.Log("Error: TCP connection is not established.");return;}byte[] data = System.Text.Encoding.UTF8.GetBytes(message);stream.Write(data, 0, data.Length);Debug.Log("Sent message: " + message);}int a;private void Update(){if (Input.GetKeyDown(KeyCode.Space)){Send("我是小偷" + a++);}}/// <summary>/// 接收消息/// </summary>/// <param name="ar"></param>private void ReceiveCallback(IAsyncResult ar){int bytesRead = stream.EndRead(ar);if (bytesRead == 0){return;}byte[] data = (byte[])ar.AsyncState;string message = System.Text.Encoding.UTF8.GetString(data, 0, bytesRead);Debug.Log("收到消息Received message: " + message);// 继续监听下一条消息stream.BeginRead(data, 0, data.Length, new AsyncCallback(ReceiveCallback), data);}public void SocketQuit(){if (tcpClient != null){tcpClient.Close();}}
}

TCP服务器

using System;
using System.Collections;
using System.Collections.Generic;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using UnityEngine;public class TCPServer
{/// <summary>/// 客户端/// </summary>private Socket socketClient;/// <summary>/// 服务器/// </summary>private Socket socketServer;/// <summary>/// 监听线程/// </summary>private Thread thread;private Thread r_thread;/// <summary>/// 开启服务器监听/// </summary>/// <param name="ip">ip</param>/// <param name="port">端口</param>public TCPServer(string ip, int port){socketServer = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);IPAddress iPAddress = IPAddress.Parse(ip);EndPoint endPoint = new IPEndPoint(iPAddress, port);socketServer.Bind(endPoint);socketServer.Listen(5);//监听连接thread = new Thread(ReceiveFromClient);thread.IsBackground = true;thread.Start(socketServer);}/// <summary>/// 监听连接的客户端/// </summary>/// <param name="obj"></param>private void ReceiveFromClient(object obj){try{Socket socketWatch = obj as Socket;while (true){socketClient = socketWatch.Accept();r_thread = new Thread(ReceiveMsg);r_thread.IsBackground = true;r_thread.Start(socketClient);}}catch (System.Exception e){Debug.Log(e.Message);}}/// <summary>/// 接收数据/// </summary>/// <param name="obj"></param>public void ReceiveMsg(object obj){Socket socket = obj as Socket;while (true){byte[] buffer = new byte[1024];int length = socket.Receive(buffer);if (length == 0){return;}byte[] dataCache = new byte[length];for (int i = 0; i < length; i++){//存储数据dataCache[i] = buffer[i];}string message = System.Text.Encoding.UTF8.GetString(dataCache);Debug.Log("收到消息Received message: " + message);}}public void Send(string sendStr){//清空发送缓存byte[] sendData = new byte[1024];//数据类型转换sendData = Encoding.UTF8.GetBytes(sendStr);//发送socketClient.Send(sendData, sendData.Length, SocketFlags.None);Debug.Log("Sent message: " + sendStr);}/// <summary>/// 关闭/// </summary>public void SocketQuit(){if (socketClient != null){socketClient.Close();}if (thread != null){thread.Interrupt();thread.Abort();}if (r_thread != null){r_thread.Interrupt();r_thread.Abort();}if (socketServer != null){socketServer.Close();}Debug.Log("关闭服务器");}
}

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

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

相关文章

二.Winform使用Webview2在Demo1中实现地址简单校验

Winform使用Webview2在Demo1中实现地址简单校验 往期目录回顾添加对于的简单url验证提示通过上节和本节涉及到的函数有 往期目录 往期相关文章目录 专栏目录 回顾 通过一.Winform使用Webview2(Edge浏览器核心) 创建demo(Demo1)实现回车导航到指定地址 我们已经知道了解决资源…

HCIA-HarmonyOS设备开发认证-HarmonyOS简介

目录 前言目标一、HarmonyOS简介1.1、初识HarmonyOS1.2、HarmonyOS典型应用场景 二、HarmonyOS架构与安全2.1、HarmonyOS架构 前言 本章主要介绍HarmonyOS分布式操作系统的概念、关键技术与能力以及HarmonyOS典型的应用场景。 目标 学习完成本课程后&#xff0c;您将能够&…

Vue的指令

Vue的指令 Vue.js 中的指令是一些特殊的标记&#xff0c;用于在模板中指定如何将数据应用到 DOM。 下面是一些基本的 Vue 指令&#xff1a; v-bind: 动态绑定一个或多个属性&#xff0c;或一个组件 prop 到表达式&#xff0c;用于动态绑定 HTML 属性到表达式。常用于绑定 cla…

MySql必知必会

1.什么是BufferPool&#xff1f; Buffer Pool基本概念 Buffer Pool&#xff1a;缓冲池&#xff0c;简称BP。其作用是用来缓存表数据与索引数据&#xff0c;减少磁盘IO操作&#xff0c;提升效率。 Buffer Pool由缓存数据页(Page) 和 对缓存数据页进行描述的控制块 组成, 控制…

树莓派 Linux - 使用ngrok实现内网穿透

官网 &#xff1a;ngrok | Unified Application Delivery Platform for Developers 简单的注册一下即可 我这里的操作系统是kali Linux 选择linux 启动服务最好使用静态域名 把需要穿透的端口号配置为本地的端口号即可 参考视频 没有服务器&#xff0c;就不能上线网站了&am…

HYBBS 表白墙网站PHP程序源码 可封装成APP

源码介绍 PHP表白墙网站源码&#xff0c;可以做校园内的&#xff0c;也可以做校区间的&#xff0c;可封装成APP。告别QQ空间的表白墙吧。 安装PHP5.6以上随意 上传程序安装&#xff0c;然后设置账号密码&#xff0c;登陆后台切换模板手机PC都要换开启插件访问前台。 安装完…

k8s集群master节点的删除和重新加入

一、剔除master1节点 1&#xff09;删除master1节点 3台master下掉一个&#xff0c;剩下2个master运行基本也没问题。坚持个一两天问题不大。 kubectl drain paas-m-k8s-master-1 --delete-local-data --force --ignore-daemonsets kubectl delete node paas-m-k8s-master-12)…

刚学习的最长不递增子序列的新求法

P1020 [NOIP1999 提高组] 导弹拦截 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 在做这题的时候学到的 我看说是复杂度在O(nlogn)的算法才能通过这题 普通的办法就不行了&#xff08;之前写过&#xff09; 然后我去看题解&#xff0c;学了这种新的方法 网址如下&#x…

Unity 工厂方法模式(实例详解)

文章目录 在Unity中&#xff0c;工厂方法模式是一种创建对象的常用设计模式&#xff0c;它提供了一个接口用于创建对象&#xff0c;而具体的产品类是由子类决定的。这样可以将对象的创建过程与使用过程解耦&#xff0c;使得代码更加灵活和可扩展。 工厂模式的主要优点如下&…

深度学习笔记(九)——tf模型导出保存、模型加载、常用模型导出tflite、权重量化、模型部署

文中程序以Tensorflow-2.6.0为例 部分概念包含笔者个人理解&#xff0c;如有遗漏或错误&#xff0c;欢迎评论或私信指正。 本篇博客主要是工具性介绍&#xff0c;可能由于软件版本问题导致的部分内容无法使用。 首先介绍tflite: TensorFlow Lite 是一组工具&#xff0c;可帮助开…

[足式机器人]Part2 Dr. CAN学习笔记- 最优控制Optimal Control Ch07-1最优控制问题与性能指标

本文仅供学习使用 本文参考&#xff1a; B站&#xff1a;DR_CAN Dr. CAN学习笔记 - 最优控制Optimal Control Ch07-1最优控制问题与性能指标

LINUX常用工具之性能分析工具推荐

一、CPU性能分析工具 性能指标 工具 说明 用法举例&#xff1a; 平均负载 Top Uptime Uptime&#xff1a;最简单&#xff1b; Top&#xff1a;提供了更全的指标&#xff08;平均负载、运行队列、整体的CPU使用率以及每个进程状态和CPU使用率&#xff09; Top&#xff1a…

Spring+SprinMVC+MyBatis注解方式简易模板

SpringSprinMVCMyBatis注解方式简易模板代码Demo GitHub访问 ssm-tpl-anno 一、数据准备 创建数据库test&#xff0c;执行下方SQL创建表ssm-tpl-cfg /*Navicat Premium Data TransferSource Server : 127.0.0.1Source Server Type : MySQLSource Server Version :…

opendrive-经纬度投影坐标转横轴墨卡托投影坐标

xodr的geoReference标签介绍 经纬度投影 xodr文件projlatlong&#xff0c;说明需要使用经纬度投影代表x,y,z <geoReference>projlatlong ellpsWGS84 datumWGS84</geoReference>xodr文件projtmerc&#xff0c;说明需要使用横轴墨卡托投影(将经纬度投影转为墨卡托投…

【优化技术专题】「性能优化系列」针对Java对象压缩及序列化技术的探索之路

针对Java对象压缩及序列化技术的探索之路 序列化和反序列化为何需要有序列化呢&#xff1f;Java实现序列化的方式二进制格式 指定语言层级二进制格式 跨语言层级JSON 格式化类JSON格式化&#xff1a;XML文件格式化 序列化的分类在速度的对比上一般有如下规律&#xff1a;Java…

选择排序(二)——堆排序(性能)与直接选择排序

目录 一.前言 二.选择排序 2.1 堆排序 2.2选择排序 2.2.1 基本思想 2.2.2直接选择排序 三.结语 一.前言 本文给大家带来的是选择排序&#xff0c;其中选择排序中的堆排序在之前我们已经有过详解所以本次主要是对比排序性能&#xff0c;感兴趣的友友可移步观看堆排&#…

世微AP5179 60V高端电流采样降压恒流驱动器 LED车灯备用灯信号灯

产品描述 AP5179是一款连续电感电流导通模式的降压恒流源&#xff0c;用于驱动一颗或多颗串联LED输入电压范围从 5 V 到 60V&#xff0c;输出电流 可达 2.0A 。根据不同的输入电压和 外部器件&#xff0c; 可以驱动高达数十瓦的 LED。 内置功率开关&#xff0c;采用高端电流采样…

python实现带刷新的文本进度条

进度条已执行的部分使用“**”&#xff0c;未执行的部分使用“--”&#xff0c;用print&#xff08;&#xff09;来完成 使用到的函数&#xff1a; time.sleep(),作用是在程序执行过程中暂停一段时间&#xff0c;即会使程序暂停指定的秒数&#xff0c;然后再继续执行后面的代…

【Unity学习笔记】Unity TestRunner使用

转载请注明出处&#xff1a;&#x1f517;https://blog.csdn.net/weixin_44013533/article/details/135733479 作者&#xff1a;CSDN|Ringleader| 参考&#xff1a; Input testingGetting started with Unity Test FrameworkHowToRunUnityUnitTest如果对Unity的newInputSystem感…

C: CRC16,CRC32 计算代码

说明&#xff1a;CRC16/MODBUS ,CRC32 计算代码 推荐个在线CRC计算网站 http://www.ip33.com/crc.html 1&#xff1a;计算 CRC32 算法代码&#xff1a; //计算CRC32的算法代码&#xff1a; uint32_t crc32(uint8_t *data, uint32_t length) {uint32_t crc 0xFFFFFFFF;uint3…