VS通过TCPIP与visionpro通讯

news2024/9/25 19:21:09

效果图

 服务器端

visionpro配置服务器端,配置端口号、需要发送的数据等

 客户端

vs编写代码接收数据

主要是复制的例程,到时候编写的时候可以借鉴。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Net.Sockets;
using System.Net;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace myTCPIPApp
{
    public partial class Form1 : Form
    {
        // Used for thread safe GUI update
        private delegate void UpdateString(string text);

        private TcpClient _client;

        // Thread that is responsible for identifying client connection requests.
        private Thread _connectionThread;
        private long _totalBytes; // record the total number of bytes received

        // Used to log the received data from server
        private StreamWriter _write;

        // When the server is not running from the same machine,
        // change Dns.GetHostName() to the target server name.
        private string hostname = Dns.GetHostName();
        public Form1()
        {
            InitializeComponent();
        }

        private void ConnectButton_Click(object sender, EventArgs e)
        {
            if (ConnectButton.Text == "Connect")
            {
                ConnectToServer();
            }
            else
            {
                StopClient();
            }
        }

        private void ConnectToServer()
        {
            try
            {
                ConnectButton.Text = "Stop";
                //_totalBytes = 0;
                // There is only one connection thread that is used to connect clients.
                _connectionThread = new System.Threading.Thread(new ThreadStart(ReceiveDataFromServer));
                _connectionThread.IsBackground = true;
                _connectionThread.Priority = ThreadPriority.AboveNormal;
                _connectionThread.Name = "Handle Server";
                _connectionThread.Start();
                PortNumberBox.Enabled = false;
            }
            catch (Exception ex)
            {
                MessageBox.Show(this, ex.Message, "QuickBuild Client Sample");
            }
        }

        private void StopClient()
        {
            if (this.InvokeRequired)
            {
                // StopClient can be called after
                // client is closed
                if (ConnectButton.Text != "Connect")
                    this.BeginInvoke(new MethodInvoker(StopClient));
                return;
            }
            Cursor.Current = Cursors.WaitCursor;

            // Change to listen mode
            ConnectButton.Text = "Connect";

            if (_client != null)
            {
                // Close the connection
                _client.Close();

                // Wait for the thread to terminate.
                _connectionThread.Join();
            }

            PortNumberBox.Enabled = true;

            Cursor.Current = Cursors.Default;
        }

        private void ReceiveDataFromServer()
        {
            try
            {
                // Create TcpClient to initiate the connection to the server.
                _client = new TcpClient(hostname,
                  Int32.Parse(PortNumberBox.Value.ToString()));
            }
            catch (SocketException ex)
            {
                //DisplayError(ex.Message);
                return;
            }

            NetworkStream netStream = null;

            try
            {
                netStream = _client.GetStream();
            }
            catch (Exception ex)
            {
                // a bad connection, couldn't get the NetworkStream
                //DisplayError(ex.Message);
                return;
            }
            // Make sure we can read the data from the network stream
            if (netStream.CanRead)
            {
                try
                {
                    // Receive buffer -- should be large enough to reduce overhead.
                    byte[] receiveBuffer = new byte[512];
                    int bytesReceived;                    // Received byte count
                                                          // Read data until server closes the connection.
                    while ((bytesReceived = netStream.Read(receiveBuffer, 0, receiveBuffer.Length)) > 0)
                    {
                        if (_write != null)
                            _write.Write(Encoding.ASCII.GetString(receiveBuffer, 0, bytesReceived));

                        UpdateGUI(Encoding.ASCII.GetString(receiveBuffer, 0, bytesReceived));
                    }
                }
                catch (Exception ex)
                {
                    // Ignore if the error is caused during shutdown
                    // since the stream and client will be closed
                    //if (ConnectButton.Text != "Connect")
                        //DisplayError(ex.Message);
                }
            }

            StopClient();
        }

        private void UpdateGUI(string s)
        {
            if (OutputTextBox.InvokeRequired)
                OutputTextBox.BeginInvoke(new UpdateString(UpdateGUI), new object[] { s });
            else
            {
                if (OutputTextBox.TextLength >= OutputTextBox.MaxLength)
                    OutputTextBox.Text = "";
                OutputTextBox.AppendText(s);
                _totalBytes += s.Length;
                //TotalBytesLabel.Text = _totalBytes.ToString();
            }
        }
    }
}

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

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

相关文章

使用 `nmcli` 在 CentOS 8 上添加永久路由

CentOS 8 使用 NetworkManager 作为默认的网络管理工具,因此我们可以使用 nmcli 工具来实现相同的目标。使用 nmcli 可以更加直观地管理路由,并且更符合 CentOS 8 的默认网络管理方式。 以下是使用 nmcli 在 CentOS 8 上添加永久路由的步骤:…

类加载机制——双亲委派机制

类加载器分类 类加载器 类加载器(英文:ClassLoader)负责加载 .class 字节码文件,.class 字节码文件在文件开头有特定的文件标识。ClassLoader 只负责 .class 字节码文件的加载,至于它是否可以运行,则由 E…

【论文阅读】基于深度学习的时序异常检测——TimesNet

系列文章链接 参考数据集讲解:数据基础:多维时序数据集简介 论文一:2022 Anomaly Transformer:异常分数预测 论文二:2022 TransAD:异常分数预测 论文三:2023 TimesNet:基于卷积的多任…

《乡村振兴战略下传统村落文化旅游设计》浙江新华书店已售罄!

《乡村振兴战略下传统村落文化旅游设计》浙江新华书店已售罄!

CTF Stegano练习之隐写初探

今天要介绍的是CTF练习中的Stegano隐写题型 。做隐写题的时候,工具是很重要的,接下来介绍一些工具。 1、TrID TrID是一款根据文件二进制数据特征进行判断的文件类型识别工具。虽然也有类似的文件类型识别工具,但是大多数都是使用硬编码的识…

11个点告诉你 如何用Docker+jenkins 运行 python 自动化

一、实现思路 在 Linux 服务器安装 docker 创建 jenkins 容器 根据自动化项目依赖包构建 python 镜像(构建自动化 python 环境) 运行新的 python 容器,执行 jenkins 从仓库中拉下来的自动化项目 执行完成之后删除容器 二、环境准备 Linux 服务器一台(我的是 C…

面向数据科学家和分析师的统计基础

推荐:使用 NSDT场景编辑器助你快速搭建可编辑的3D应用场景 “统计学是科学的语法。 卡尔皮尔逊 统计学在数据科学和数据分析中的重要性不容低估。统计提供了查找结构和提供更深入数据见解的工具和方法。统计学和数学都喜欢事实,讨厌猜测。了解这两个重要…

网络安全(黑客)零基础入门

导语 什么是 Web 安全?我又该如何入门学习它呢?学习过程中又应注意哪些问题呢?... 或许你的心中有着这样的疑问、不过别着急,本文会为你一一解答这些问题。 正文 定义 Web 安全,顾名思义便是由保障 Web 应用能够持续…

微信私域更好玩了

之前分享过,“小绿书”“公众号文章转音频”等内测中或悄悄已升级的功能。 其实,微信还在内测很多新功能,只是没公开 今天,小编又发现新升级 就是『附近』功能 增加了一个本地生活的入口,这里面是短视频和图文 展示…

IoTDB 1.x 开启外部访问

对于部署的IoTDB数据库,如果需要局域网内其他设备进行访问的处理。 1、防火墙开放端口 无论windows还是liunx都需要你将6667默认的端口加入防火墙中,否则肯定是无法访问端口 2、修改配置文件 对conf/iotdb-datanode.properties文件中的 修改为本机的…

Oracle DB 安全性 : TDE HSM TCPS Wallet Imperva

• 配置口令文件以使用区分大小写的口令 • 对表空间进行加密 • 配置对网络服务的细粒度访问 TCPS 安全口令支持 Oracle Database 11g中的口令: • 区分大小写 • 包含更多的字符 • 使用更安全的散列算法 • 在散列算法中使用salt 用户名仍是Oracle 标识…

Python入门02

0目录 1.容器操作(序列操作) 2.函数 3.模块 1.容器操作(序列操作) 列表的基本操作 定义一个列表[] 访问列表(打印或者通过下标和索引) 新增元素 Append(在末尾) 指定位置新增元素 Insert 删除&…

【算法篇C++实现】算法的时间、空间复杂度

文章目录 🚀一、算法的概念🚀二、算法的特征1.可行性2.确定性3.有穷性4.输入5.输出 🚀三、算法的评价1.正确性2.可读性3.健壮性 🚀四、算法的复杂度⛳(一)时间复杂度1、时间复杂度的概念2、大O的渐进表示法…

多线程案例(4)-线程池

文章目录 多线程案例四四、线程池 大家好,我是晓星航。今天为大家带来的是 多线程案例-线程池 相关的讲解!😀 多线程案例四 四、线程池 线程池是什么 虽然创建线程 / 销毁线程 的开销 想象这么一个场景: 在学校附近新开了一家…

MyBatis查询数据库之四(动态SQL -- if、trim、where、set、foreach 标签)

目录 动态SQL 一、 标签 二、标签 三、标签 四、标签 五、标签 动态SQL 动态 SQL 是 MyBatis 的强大特性之一,使用动态 SQL 并非一件易事,但借助可用于任何 SQL 映射语句中的强大的动态 SQL 语言,MyBatis 显著地提升了这一特性的易用性。…

【脚踢数据结构】链表(2)

(꒪ꇴ꒪ ),Hello我是祐言QAQ我的博客主页:C/C语言,Linux基础,ARM开发板,软件配置等领域博主🌍快上🚘,一起学习,让我们成为一个强大的攻城狮!送给自己和读者的一句鸡汤🤔&…

Effective Java笔记(29)优先考虑泛型

一般来说 ,将集合声 明参数化,以及使用 JDK 所提供的泛型方法,这些都不太困难 。编写自己的泛型会比较困难一些,但是值得花些时间去学习如何编写 。 以简单的(玩具)堆校实现为例 : // Object -…

【OpenGauss源码学习 —— 执行算子(SeqScan算子)】

执行算子(SeqScan算子) 执行算子概述扫描算子SeqScan算子ExecInitSeqScan函数InitScanRelation函数ExecSeqScan函数 总结 声明:本文的部分内容参考了他人的文章。在编写过程中,我们尊重他人的知识产权和学术成果,力求遵…

IoTDB1.X windows运行失败问题的处理

在windows运行 IoTDB1.x时 会出现如图所示的问题 为什么会出现这样的问题?java没有安装还是未调用成功,我是JAVA8~11~17各种更换都未能解决问题,最后对其bat文件进行查看,发现在conf\datanode-env.bat、conf\confignode-env.bat这…

拆解与重构:慕云游首页组件化设计

目录 前言1 项目准备1.1 创建项目目录1.2 搭建项目开发环境 2 项目组件化2.1 在当前环境启动原有项目2.2 顶部组件2.3 幻灯片组件2.3.1 功能实现2.3.2 加载中组件2.3.3 结构和样式2.3.4 使用Ajax获取数据 2.4 机酒自由行组件2.5 拆分余下的css文件 3 项目完善4 源码 前言 在现代…