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) {
      //异步处理,否则没办法刷新ui
      richText.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;
    }
  }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

YOLOv5算法进阶改进(17)— 添加BiFormer注意力机制 | 提升小目标检测精度

前言:Hello大家好,我是小哥谈。本文主要通过对YOLOv5模型添加Bifommer注意力机制为例,让大家对于YOLOv5模型添加注意力机制有一个深入的理解,通过本文你不仅能够学会添加Biformer注意力机制,同时可以举一反三学会其他的注意力机制的添加。🌈 前期回顾: YOLOv5算法进…

2024Node.js零基础教程(小白友好型),nodejs新手到高手,(八)NodeJS入门——http模块

一念心清净&#xff0c;处处莲花开。 055_http模块_网页资源加载基本过程 哈喽&#xff0c;大家好&#xff0c;这一课节我们来介绍一下网页资源加载的基本过程。首先先强调一点&#xff0c;这个内容对于我们后续学习非常非常的关键&#xff0c;所以大家务必要将其掌握。 首先先…

hbuilderx创建、运行uni-app

创建uni-app 在点击工具栏里的文件 -> 新建 -> 项目&#xff1a; 选择uni-app类型&#xff0c;输入工程名&#xff0c;选择模板&#xff0c;点击创建&#xff0c;即可成功创建。 uni-app自带的模板有 Hello uni-app &#xff0c;是官方的组件和API示例。还有一个重要模…

人人都是项目管理者,项目管理的基础入门

一、教程描述 本套教程旨在系统介绍项目管理的方法论&#xff0c;帮助大家认识、熟悉、体验、思考项目管理&#xff0c;全面掌握项目管理的流程与方法&#xff0c;快速成长为时代紧缺型的项目管理人才。本套项目管理入门教程&#xff0c;大小805.40M&#xff0c;共有13个文件。…

智慧农业—农业资源数据中心

综述 农业资源数据中心建设的目标是将大量的农业生产信息通过采集、清洗、核准后实现统一存储、统一管理,实现数据的共享和集中管理,保障数据的安全,也为数据的挖掘分析提供决策分析创造条件。 农业资源数据中心的数据架构如下图所示: (1)农业专家数据库。主要收录国内、…

三步实现SpringBoot全局日志记录,整合Echarts实现数据大屏

&#x1f680; 注重版权&#xff0c;转载请注明原作者和原文链接 小袁博客&#xff1a;https://boke.open-yuan.com/小袁博客后台&#xff1a;https://boke.open-yuan.com/back-manager/更多项目内容关注小红书&#x1f50d;OpenYuan开袁 http://xhslink.com/I9zNaC有需求可以在…

vue 手势解锁功能

效果 实现 <script setup lang"ts"> const canvasRef ref<HTMLCanvasElement>() const ctx ref<CanvasRenderingContext2D | null>(null) const width px2px(600) const height px2px(700) const radius ref(px2px(50))const init () > …

【AI链接】 大模型语言模型网站链接

目录 GPT类1. chatgpt2. GROP3. Google AI Studio4. Moonshot AI (国内) 解读论文类&#xff1a;1. txyz 编程辅助插件&#xff1a;1. Fitten Code GPT类 1. chatgpt https://chat.openai.com/ 2. GROP https://groq.com/ 3. Google AI Studio https://aistudio.google…

计算机网络:思科实验【3-集线器与交换机的区别、交换机的自学习算法】

&#x1f308;个人主页&#xff1a;godspeed_lucip &#x1f525; 系列专栏&#xff1a;Cisco Packet Tracer实验 本文对应的实验报告源文件请关注微信公众号程序员刘同学&#xff0c;回复思科获取下载链接。 实验目的实验环境实验内容集线器与交换机的区别交换机的自学习算法…

南京观海微电子----Verilog基础(一)——数据类型、运算符

1. 数据类型 1.1 常量 整数&#xff1a;整数可以用二进制b或B&#xff0c;八进制o或O&#xff0c;十进制d或D&#xff0c;十六进制h或H表示&#xff0c;例如&#xff0c;8’b00001111表示8位位宽的二进制整数&#xff0c;4’ha表示4位位宽的十六进制整数。 X和Z&#xff1a;X…

Github 2024-02-21 开源项目日报 Top10

根据Github Trendings的统计&#xff0c;今日(2024-02-21统计)共有10个项目上榜。根据开发语言中项目的数量&#xff0c;汇总情况如下&#xff1a; 开发语言项目数量Python项目8非开发语言项目1TypeScript项目1 gpt4free 语言模型集合改进计划 创建周期&#xff1a;300 天开…

Excel的中高级用法

单元格格式&#xff0c;根据数值的正负分配不同的颜色和↑ ↓ 根据数值正负分配颜色 2-7 [蓝色]#,##0;[红色]-#,##0 分配颜色的基础上&#xff0c;根据正负加↑和↓ 2↑-7↓ 其实就是在上面颜色的代码基础上加个 向上的符号↑&#xff0c;或向下的符号↓ [蓝色]#,##0↑;[红色…

vivo 基于 StarRocks 构建实时大数据分析平台,为业务搭建数据桥梁

在大数据时代&#xff0c;数据分析和处理能力对于企业的决策和发展至关重要。 vivo 作为一家全球移动互联网智能终端公司&#xff0c;需要基于移动终端的制造、物流、销售等各个方面的数据进行分析以满足业务决策。 而随着公司数字化服务的演进&#xff0c;业务诉求和技术架构有…

动态规划课堂1-----斐波那契数列模型

目录 动态规划的概念&#xff1a; 动态规划的解法流程&#xff1a; 题目: 第 N 个泰波那契数 解法&#xff08;动态规划&#xff09; 代码&#xff1a; 优化&#xff1a; 题目&#xff1a;最小花费爬楼梯 解法&#xff08;动态规划&#xff09; 解法1&#xff1a; 解…

【QT 5 +Linux下软件生成+qt软件生成使用工具+学习他人文章+第一篇:使用linuxdeployqt软件生成】

【QT 5 Linux下软件生成qt软件生成使用工具学习他人文章第一篇&#xff1a;使用linuxdeployqt软件生成】 1、前言2、实验环境3、自我学习总结-本篇总结1、新手的疑问&#xff0c;做这件事的目的2、了解工具&#xff1a;linuxdeployqt工具3、解决相关使用过程中问题 4、参照文章…

5分钟轻松帮你EasyRecovery恢复女朋友照片

相信有不少男性电脑玩家都会将女朋友的照片存放在电脑硬盘之内&#xff0c;作为珍贵的收藏和回忆。但是在某些时候&#xff0c;如果我们错误地删除了这些照片&#xff0c;或者由于系统问题导致其中的照片丢失&#xff0c;那么我们怎么找回女朋友的照片&#xff1f;这个问题就足…

进程的学习

进程基本概念: 1.进程: 程序&#xff1a;存放在外存中的一段数据组成的文件 进程&#xff1a;是一个程序动态执行的过程,包括进程的创建、进程的调度、进程的消亡 2.进程相关命令: 1.top 动态查看当前系统中的所有进程信息&#xff08;根据CPU占用率排序&#xf…

微芒计划-简洁方便的效率待办管理工具【免费】

&#x1f632;微芒计划-简洁方便的效率待办管理工具【免费】 下载地址 &#x1f4dd;我的待办 快速添加待办任务&#xff0c;快速查看任务进度&#xff0c;摘要等。新增标签&#xff0c;分类&#xff0c;更好管理待办任务。 ☀️OKR目标管理 OKR让抽象的企业战略明确为上下对…

✅技术社区项目—Session/Cookie身份验证识别

session实现原理 SpringBoot提供了一套非常简单的session机制&#xff0c;那么它又是怎么工作的呢? 特别是它是怎么识别用户身份的呢? session又是存在什么地方的呢? 核心工作原理 借助cookie中的 JESSIONID 来作为用户身份标识&#xff0c;这个数据相同的&#xff0c;认…

车载电子电器架构 —— OEM基础技术概念开发流程

车载电子电器架构 —— 基础技术概念开发 我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 屏蔽力是信息过载时代一个人的特殊竞争力&#xff0c;任何消耗…