news 2026/3/3 8:30:33

VisionPro二开之网口通讯设计

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
VisionPro二开之网口通讯设计

CommunicateService

usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows.Forms;namespaceAOI外观检测软件.Communicate{/// <summary>/// 通讯服务类/// </summary>publicclassCommunicateService{// 单例模式:使类成为全局唯一的存在//优点1:方便使用//优点2:节省资源//单例模式://1. 私有静态变量(在第四步供外界使用),创建类的实例//2. 私有构造函数,确保外部无法直接实例化(确保是单个实例)//3. 确定供外界调用的代码资源//4. 公开静态属性,供外界使用(把第一步类的实例,开放出去)//5. 外界使用//1. 私有静态变量(在第四步供外界使用),创建类的实例// static 静态: 类 方法 等 (1)在程序启动之前就生成,(2)在程序结束之后,才会消失,(3)全局唯一的存在。privatestaticCommunicateServiceintance=newCommunicateService();//2. 私有构造函数,确保外部无法直接实例化(确保是单个实例)// private 修饰 就变成私有的 ,不允许外界调用,确保单例模式,唯一的特性privateCommunicateService(){}//4. 公开静态属性,供外界使用(把第一步类的实例,开放出去)// public static 构建了开发publicstaticCommunicateServiceInstance{get{returnintance;}}//3. 确定供外界调用的代码资源HttpServerserver=newHttpServer();/// <summary>/// 启动服务端/// </summary>/// <returns></returns>publicboolStart(stringip,intport){server.IP=ip;server.Port=port;if(server.Start()){returntrue;}else{returnfalse;}}/// <summary>/// 发送数据/// </summary>/// <param name="content"></param>publicvoidSend(stringcontent){server.SendMsg(content);}}}

HttpServer

usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Net;usingSystem.Net.Sockets;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows.Forms;usingAOI外观检测软件.Camera;namespaceAOI外观检测软件.Communicate{/// <summary>/// 服务端/// </summary>publicclassHttpServer{// Http-Server(服务端):// 1:创建socket()// 2:设置IP和端口// 3. 绑定ip和端口// 4:listen()监听,确定能连接多少个客户端// 5:accept()函数接受客户端的连接// 6:接受数据// 7: 发送数据// 8:终止连接。// 1:创建socket()publicSocketSocketSever;// 创建接受客户端的字典(就是成对放的数组),发送数据给客户端的时候要用publicDictionary<string,Socket>CurrentClientlist=newDictionary<string,Socket>();#region属性/// <summary>/// 服务IP/// </summary>publicstringIP{get;set;}/// <summary>/// 端口/// </summary>publicintPort{get;set;}#endregion/// <summary>/// 启动/// </summary>publicboolStart(){try{// 1:创建socket()SocketSever=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);// 2:设置IP和端口。IPEndPointipe=newIPEndPoint(IPAddress.Parse(IP),Port);try{// 3. 绑定ip和端口SocketSever.Bind(ipe);}catch(Exceptionex){MessageBox.Show("服务器开启失败:"+ex.Message);returnfalse;}// 4:listen(),确定能连接多少个客户端: 10 允许最多10个连接在队列中等待SocketSever.Listen(10);// 5.创建一个监听的线程Task.Run(newAction(()=>{AcceptClients();}));returntrue;}catch(Exceptionexp){MessageBox.Show("服务器开启失败:"+exp.Message);returnfalse;}}/// <summary>/// 监听客户端连接/// </summary>publicvoidAcceptClients(){while(true){// 5:accept()函数接受客户端的连接SocketsocketClient=SocketSever.Accept();stringclient=socketClient.RemoteEndPoint.ToString();// 将客户端保存起来CurrentClientlist.Add(client,socketClient);// 6:接受数据Task.Run(newAction(()=>{ReceiveMessage(socketClient);}));}}/// <summary>/// 监听接收客户端数据/// </summary>/// <param name="socketClient"></param>privatevoidReceiveMessage(SocketsocketClient){while(true){// 创建一个缓冲区byte[]buffer=newbyte[1024*1024*10];// 数据长度intlength=-1;stringclient=socketClient.RemoteEndPoint.ToString();try{length=socketClient.Receive(buffer);}catch(Exception){MessageBox.Show(client+"下线了");CurrentClientlist.Remove(client);break;}if(length>0){stringmsg=string.Empty;// 以utf8的格式接受msg=Encoding.UTF8.GetString(buffer,0,length);//MessageBox.Show("接受信息:"+msg);// 触发拍照(在上位机或者PLC发送这个通讯信息的时候,我们进行解析以后,进行拍照)CameraService.Instance.SnapImage();// 显示接受内容。需要使用Invoke,跨线程,跨UI//Invoke(new Action(() =>//{// rtb_Receive_server.AppendText(msg + "\n");//}));}else{MessageBox.Show(client+"下线了");CurrentClientlist.Remove(client);break;}}}/// <summary>/// 发送数据utf8/// </summary>/// <param name="sender"></param>/// <param name="e"></param>publicvoidSendMsg(stringContent){// 获取信息byte[]sendMsg=Encoding.UTF8.GetBytes(Content);// 对客户端发送信息foreach(variteminthis.CurrentClientlist){// 发送数据item.Value?.Send(sendMsg);}}}}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/2 10:55:16

SystemVerilog面向对象入门必看:零基础指南

从零开始掌握SystemVerilog面向对象编程&#xff1a;写给验证工程师的第一课你有没有遇到过这种情况——写一个简单的激励生成器&#xff0c;结果随着需求变化&#xff0c;代码越来越臃肿&#xff1b;改一处逻辑&#xff0c;其他测试全崩了&#xff1b;不同团队写的模块根本没法…

作者头像 李华
网站建设 2026/3/2 8:06:13

如何用Sambert-HifiGan为智能洗衣机生成洗涤建议

如何用Sambert-HifiGan为智能洗衣机生成洗涤建议 引言&#xff1a;让家电“会说话”——语音合成在智能洗衣机中的创新应用 随着智能家居生态的不断演进&#xff0c;用户对交互体验的要求已从“能用”升级为“好用、贴心”。传统洗衣机仅通过LED屏或APP提示操作流程&#xff0c…

作者头像 李华
网站建设 2026/2/27 18:18:59

提示工程架构师视角:AI与提示工程未来的商业价值与场景拓展

提示工程架构师视角&#xff1a;AI与提示工程未来的商业价值与场景拓展 一、引入&#xff1a;当AI遇到“听不懂话”的尴尬——从一个真实案例说起 凌晨1点&#xff0c;某零售企业的客服主管张丽盯着后台数据皱起眉头&#xff1a;AI客服的问题解决率又掉了5%。上周刚上线的“智能…

作者头像 李华
网站建设 2026/2/27 20:02:33

基于TCN-Transformer-BiLSTM混合深度学习模型的分类任务MATLAB代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。&#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室&#x1f447; 关注我领取海量matlab电子书和数学建模资料 &#x1f34…

作者头像 李华
网站建设 2026/3/1 10:44:58

aarch64内存管理单元(MMU)在云环境中的表现

aarch64内存管理单元&#xff08;MMU&#xff09;在云环境中的真实表现&#xff1a;从硬件机制到容器调度的深度透视一场悄然发生的基础设施变革你有没有注意过&#xff0c;最近几年越来越多的云服务器开始标榜“基于ARM架构”&#xff1f;不是手机&#xff0c;而是数据中心里的…

作者头像 李华
网站建设 2026/3/1 10:44:55

qt 可以在可以在子线程中,创建父对象在主线程中的对象吗

1.qt 可以在可以在子线程中&#xff0c;创建父对象在主线程中的对象吗在 Qt 中&#xff0c;不建议也不安全在子线程中创建一个其父对象&#xff08;parent&#xff09;位于主线程&#xff08;或其他不同线程&#xff09;的对象。这是因为 Qt 的对象树&#xff08;object tree&a…

作者头像 李华