C#与VisionPro联合开发——TCP/IP通信

TCP/IP(传输控制协议/互联网协议)是一组用于在网络上进行通信的通信协议。它是互联网和许多局域网的基础,为计算机之间的数据传输提供了可靠性、有序性和错误检测。在软件开发中,TCP/IP 通信通常用于实现网络应用程序之间的数据交换。

基于 TCP/IP 的通信通常涉及以下几个步骤:
1、建立连接: 通信双方通过套接字(socket)建立连接。在 C# 中,你可以使用 TcpClient 类来创建一个 TCP 客户端,并使用 TcpListener 类来创建一个 TCP 服务器端。
2、发送和接收数据: 一旦连接建立,通信双方可以通过套接字发送和接收数据。在 C# 中,你可以使用 NetworkStream 类来发送和接收数据。
3、关闭连接: 在通信完成后,通信双方可以通过关闭套接字来断开连接,释放资源。

在这里插入图片描述
在这里插入图片描述

代码展示

using System;
using System.Net;
//引入支持socket的命名空间
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Windows.Forms;namespace TCPIP通信 {public partial class Form1 : Form {public Form1() {InitializeComponent();}//声明socket需要支持的对象public Socket ServerSocket;//监听public Socket SocketAccept;//绑定客户端public Socket socket;//和客户端通信#region 开启监听Thread t1;//监听Thread t2;//接收//开启监听(监听的是客户端的链接)private void button1_Click(object sender, EventArgs e) {//实例化socket对象//参1:绑定一个ip地址,参2:数据流的格式,参3:协议ServerSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//准备ip对象绑定ip地址IPAddress ip = IPAddress.Parse(textBox1.Text);//创建端口号int port = Convert.ToInt32(textBox2.Text);//把输入的ip和端口传入到连接中,尝试链接IPEndPoint iPEndPoint = new IPEndPoint(ip, port);try {//开启服务器的时候很容易报错,所有做异常处理ServerSocket.Bind(iPEndPoint);//开启监听(参数是监听的数量)ServerSocket.Listen(5);//禁用按钮,避免重复监听button1.Enabled = false;//监听是持续的,所以要在分线程中进行t1 = new Thread(Listen);//设置成后台线程t1.IsBackground = true;//分线程中开始对socket监听t1.Start(ServerSocket);} catch (Exception ex) {MessageBox.Show(ex.Message);}}private void Listen(object o) {SocketAccept = o as Socket;try {//因为要持续监听,所以用了while循环while (true) {//阻塞线程,直到有客户端进来的时候才会往下执行socket = SocketAccept.Accept();//表示有客户端进来了,需要显示到textBox上面AddMsg(DateTime.Now.ToString("yyyy-mmddHHMMSS") + ":" + socket.RemoteEndPoint + "链接成功");//换行操作AddMsg("\r\n");//开启第二个线程,用来检测客户端传递过来的消息t2 = new Thread(Receive);t2.IsBackground = true;t2.Start(socket);}} catch (Exception ex) {MessageBox.Show(ex.Message);}}//接收消息的方法private void Receive(object obj) {socket = obj as Socket;try {while (true) {//定义字节,接收数据byte[] buffer = new byte[1024 * 1024 * 2];int r = socket.Receive(buffer);if (r == 0) {break;}string msg = Encoding.Default.GetString(buffer);AddMsg("他说:" + msg);AddMsg("\r\n");}} catch (Exception ex) {MessageBox.Show(ex.Message);}}private void AddMsg(string msg) {//异步处理,否则没办法刷新uirichText.BeginInvoke(new Action<string>(str => {richText.Text += msg;}), msg);}#endregion//发送消息private void sendBtn_Click(object sender, EventArgs e) {//首先获取要发送的消息string str = sendText.Text;byte[] buffer = Encoding.Default.GetBytes(str);try {socket.Send(buffer);AddMsg("我说:" + str);AddMsg("\r\n");sendText.Clear();} catch (Exception ex) {MessageBox.Show(ex.Message);}}//关闭客户端private void button2_Click(object sender, EventArgs e) {if (socket != null) {//禁掉socket的接收和发送socket.Shutdown(SocketShutdown.Both);socket.Close();t2.Abort();}ServerSocket.Close();SocketAccept.Close();t1.Abort();//打开监听的按钮button1.Enabled = true;}}
}

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

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

相关文章

latex笔记总结

目录 latex基本语法latex双列单列相互转换公式对齐方法表格格式问题latex设置图片 latex基本语法 在LaTeX中如何使用波浪号 latex双列单列相互转换 单栏&#xff1a;\documentclass[journal,11pt,draftclsnofoot,onecolumn]{IEEEtran} 双栏&#xff1a;\documentclass[journ…

利用Socket.io实现实时通讯功能

在当今快节奏的社交和工作环境中&#xff0c;实时通讯已经变得至关重要。无论是在线游戏的即时交流&#xff0c;还是团队协作中的实时消息传递&#xff0c;都需要强大的实时通讯功能来支持。而在前端开发中&#xff0c;利用Socket.io这一强大的工具库&#xff0c;实现实时通讯功…

自定义Chrome的浏览器开发者工具DevTools界面的字体和样式

Chrome浏览器开发者工具默认的字体太小&#xff0c;想要修改但没有相关设置。 外观——字体可以自定义字体&#xff0c;但大小不可以调整。 github上有人给出了方法 整理为中文教程&#xff1a; 1.打开浏览器开发者工具&#xff0c;点开设置——实验&#xff0c;勾上红框设…

五、使用脚手架

五、使用脚手架 5.1 简单的实现 创建一个 School 组件 <template> <div><h2>学校名称&#xff1a;{{name}}</h2><h2>学校地址&#xff1a;{{address}}</h2> </div> </template><script> export default {name: "S…

猜字谜|构建生成式 AI 应用实践(一)

在 2023 亚马逊云科技 re:Invent 之后&#xff0c;细心的开发者们也许已经发现有一个很有趣的动手实验&#xff1a;开发一款可部署的基于大语言模型的字谜游戏&#xff1a; 该款游戏使用了文生图模型为玩家提供一个未知的提示词&#xff0c;玩家需要根据模型生成的图像来猜测该…

众安保险基于Apache SeaTunnel的生产应用实践

*> 文&#xff5c;曾力 众安保险大数据开发高级专家 编辑整理&#xff5c; 曾辉* 前言 众安保险从2023年4月就开始了数据集成服务的预研工作&#xff0c;意在通过该服务解决当前数据同步场景下的两大痛点&#xff0c;服务化能力薄弱和无分布式同步能力。我们对多种开源数据…

新鲜出炉:小巧优雅的 css-in-js库StyledFc

StyledFc 一个简单的运行时css-in-js库&#xff0c;用于封装react组件 零依赖非常小&#xff0c;< 3kb.运行时生成css支持css变量支持类似less的嵌套css样式支持props动态css支持typescript 在线演示 | Github 安装 pnpm add styledfc # or npm install styledfc # or …

matplotlib绘图初步

文章目录 绘制曲线图完整流程图像属性 绘制曲线图 matplotlib是python中最常用的可视化库&#xff0c;提供了不同坐标系下的二十余种常用图像&#xff0c;并且提供了动态图像绘制的方法&#xff0c;可以满足科学计算中的绝大多数可视化需求。而在matplotlib中&#xff0c;绝大…

HTML5和CSS3提高

一、HTML5的新特性 增加了一些新的标签&#xff0c;新的表单&#xff0c;新的表单属性&#xff0c;IE9以上版本的浏览器才支持 注意&#xff1a; 这些语义化标准主要针对搜索引擎的 新标签可以使用多次 在IE9中需要把这些元素转化为块级元素 新增的多媒体标签 主要包含两个…

iOS面试:3.Object-C相关

一、OC 是动态类型语言吗&#xff1f;OC 是强类型语言吗&#xff1f;为什么&#xff1f; Objective-C (OC) 是一种动态类型语言&#xff0c;同时也是一种强类型语言。 动态类型语言&#xff1a; 在动态类型语言中&#xff0c;变量的类型是在运行时确定的&#xff0c;而不是在编…

PPT复制粘贴后背景变没了怎么处理

目录 1.问题描述&#xff1a;2.解决方法&#xff1a;小结&#xff1a; 1.问题描述&#xff1a; 把一个ppt中的一张ppt粘贴到另一个ppt中&#xff0c;背景变没了&#xff0c;如下所示&#xff1a; 复制&#xff1a; 粘贴&#xff1a; 2.解决方法&#xff1a; 粘贴完后点击 保…

vscode 如何连接 WSL (不能通过 IP 地址连接)

来源&#xff1a;https://www.cnblogs.com/wxdblog/p/17234342.html vscode (remote-ssh) 连接 WSL 不能使用 IP地址 连接&#xff0c;需要安装 WSL 扩展才行

React18源码: task任务调度和时间分片

任务队列管理 调度的目的是为了消费任务&#xff0c;接下来就具体分析任务队列是如何管理与实现的 在 Scheduler.js 中&#xff0c;维护了一个 taskQueue, 任务队列管理就是围绕这个 taskQueue 展开 // Tasks are stored on a min heap var taskQueue - []; var timerQueue …

yolov9目标检测报错AttributeError: ‘list‘ object has no attribute ‘device‘

最近微智启软件工作室在运行yolov9目标检测的detect.py测试代码时&#xff0c;报错&#xff1a; File “G:\down\yolov9-main\yolov9-main\detect.py”, line 102, in run pred non_max_suppression(pred, conf_thres, iou_thres, classes, agnostic_nms, max_detmax_det) Fil…

Linux奇技淫巧之-使用setarch 禁止地址空间随机化

先来看这样一个代码&#xff1a; #include <stdio.h> #include <stdlib.h> #include <unistd.h>int main() {int *p (int*)malloc(sizeof(int));*p 0;while(1){printf("[%d]addr: %p, value: %d\n", getpid(), p, *p);*p *p 1;sleep(1);}retu…

猫头虎分享已解决Bug || ValueError: Data cardinality is ambiguous ‍

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

gem5学习(25):用于异构SoC的片上网络模型——Garnet2.0

目录 一、Invocation 二、Configuration 三、Topology 四、Routing 五、Flow Control 六、Router Microarchitecture 七、Buffer Management 八、Lifecycle of a Network Traversal 九、Running Garnet2.0 with Synthetic Traffic 官网教程&#xff1a;gem5: Garnet 2…

使用Python制作进度条有多少种方法?看这一篇文章就够了!

前言 偶然间刷到一个视频&#xff0c;说到&#xff1a;当程序正在运算时&#xff0c;会有一个较长时间的空白期&#xff0c;谁也不知道程序运行的进度如何&#xff0c;不如给他加个进度条。 于是我今个就搜寻一下&#xff0c;Python版的进度条都可以怎么写&#xff01; 送书…

多线程和并发

线程 进程&#xff1a;在操作系统中运行的程序&#xff0c;一个进程可以包含多个线程 程序就是指令和数据的有序集合&#xff0c;静态概念 进程就是执行程序的一次执行过程&#xff0c;动态概念系统资源分配的单元 一个进程中包含多个线程&#xff0c;一个进程至少包含一个线…

大蟒蛇(Python)笔记(总结,摘要,概括)——第9章 类

目录 9.1 创建和使用类 9.1.1 创建Dog类 9.1.2 根据类创建实例 9.2 使用类和实例 9.2.1 Car类 9.2.2 给属性指定默认值 9.2.3 修改属性的值 9.3 继承 9.3.1 子类的_init_()方法 9.3.2 给子类定义属性和方法 9.3.3 重写父类中的方法 9.3.4 将实例用作属性 9.3.5 模拟实物 9.…