VisionPro C# written job scripts to implement TCP server listening

The code has been added in the script, actually operating this content, then you need to complete the previous content: Write QV code to identify QuickBuild project, this article adds code in the job configuration, complete code as follows:

using System;
using System.Net;
using System.Text;
using System.Net.Sockets;
using System.Threading;
using System.Windows.Forms;
using System.Collections.Generic;
using Cognex.VisionPro;
using Cognex.VisionPro.QuickBuild;


public class UserScript : CogJobBaseScript
{
  //The collection can be viewed in an array, the length of the collection can become, and its element is an object type.
  //Specify a collection of data types when the generic collection
  private object _lock=new object();

  //Define generic sets of NetworkStream
  private List<NetworkStream>_streams = new List<NetworkStream>();

  //Define TCPClient's generic collection
  private List<TcpClient>_clients = new List<TcpClient>();

  //Server-side monitor object
  private TcpListener _listener;

  //Connection thread
  private Thread _connectionThread;

  //Define THREAD generic collection
  private List<Thread> _threads=new List<Thread>();

  //Total data length
  private long _totalBytes;

  //Operation
  private CogJob MyJob;

#region "When an Acq Fifo Has Been Constructed and Assigned To The Job"
  // This function is called when a new fifo is assigned to the job.  This usually
  // occurs when the "Initialize Acquisition" button is pressed on the image source
  // control.  This function is where you would perform custom setup associated
  // with the FIFO.
  public override void AcqFifoConstruction(Cognex.VisionPro.ICogAcqFifo fifo)
  {
  }
#endregion

#region "When an Acquisition is About To Be Started"
  // Called before an acquisition is started for manual and semi-automatic trigger
  // models.  If "Number of Software Acquisitions Pre-queued" is set to 1 in the
  // job configuration, then no acquisitions should be in progress when this
  // function is called.
  public override void PreAcquisition()
  {
    // To let the execution stop in this script when a debugger is attached, uncomment the following lines.
    // #if DEBUG
    // if (System.Diagnostics.Debugger.IsAttached) System.Diagnostics.Debugger.Break();
    // #endif

  }
#endregion

#region "When an Acquisition Has Just Completed"
  // Called immediately after an acquisition has completed.
  // Return true if the image should be inspected.
  // Return false to skip the inspection and acquire another image.
  public override bool PostAcquisitionRefInfo(ref Cognex.VisionPro.ICogImage image,
                                                  Cognex.VisionPro.ICogAcqInfo info)
  {
    // To let the execution stop in this script when a debugger is attached, uncomment the following lines.
    // #if DEBUG
    // if (System.Diagnostics.Debugger.IsAttached) System.Diagnostics.Debugger.Break();
    // #endif

    return true;
  }
#endregion

#region "When the Script is Initialized"
  //Perform any initialization required by your script here.
  public override void Initialize(CogJob jobParam)
  {
    //DO NOT REMOVE - Call the base class implementation first - DO NOT REMOVE
    base.Initialize(jobParam);

    //Copy the current job to myjob
    MyJob = jobParam;

    //Turn on thread
    StartThreading();
  }
#endregion

  //Turn on the thread to implement the port listener of the server
  private void StartThreading()
  {
    try
    {
      _totalBytes = 0;

      //_ConnectionthRead object instantiation
      _connectionThread = new System.Threading.Thread(new ThreadStart(ConnectToClient));

      //Thread background
      _connectionThread.IsBackground = true;

      //Thread start running
      _connectionThread.Start();
    }
    catch(Exception ex)
    {
      MessageBox.Show("Thread start failed");
    }
  }

  //Connect to the client
  private void ConnectToClient()
  {
    try
    {
      //Start listening 6001 port
      _listener = new TcpListener(IPAddress.Any, 6001);

      _listener.Start();
    }
    catch(SocketException se)
    {
      MessageBox.Show("Server monitors failed" + se.Message);

      StopServer();

      return;
    }

    //Listening to the client's connection request
    try
    {
      for(;;)
      {
        //Waiting for the client's connection request
        TcpClient client = _listener.AcceptTcpClient();

        //Create a thread to start receiving client data
        Thread t = new Thread(new ParameterizedThreadStart(ReceiveDataFromClient));

        //Thread background
        t.IsBackground = true;

        //Thread priority
        t.Priority = ThreadPriority.AboveNormal;

        //Thread name
        t.Name = "Handle Client";

        //Turn on thread
        t.Start(client);

        //Add thread objects to generic collection
        _threads.Add(t);

        //Add the client to the generic collection
        _clients.Add(client);
      }
    }
    catch(SocketException ex)
    {
      MessageBox.Show("Socket error" + ex.Message);
    }
    catch(Exception ex)
    {
      MessageBox.Show("Error" + ex.Message);
    }
  }

  //Accept the data from the client
  public void ReceiveDataFromClient(object clientObject)
  {
    //Define TCPCLIENT objects and assign
    TcpClient client = clientObject as TcpClient;

    //Define NetworkStream objects and assign values
    NetworkStream netStream = null;

    try
    {
      //Get the network data stream of the client
      netStream = client.GetStream();
    }
    catch(Exception ex)
    {
      if(netStream != null) netStream.Close();
      MessageBox.Show("Error" + ex.Message);
      return;
    }

    if(netStream.CanRead)
    {
      //Add the data stream to the _streams generic collection
      _streams.Add(netStream);
      try
      {
        byte[] receiveBuffer = new byte[512];
        int bytesReceived;

        //Loop read the data from the client
        while((bytesReceived = netStream.Read(receiveBuffer, 0, receiveBuffer.Length)) > 0)
        {
          if(Encoding.ASCII.GetString(receiveBuffer, 0, bytesReceived) == "s")
          {
            MyJob.RunContinuous();
            //Messagebox.show ("Accepted data:" + encoding.ascii.getstring (ReceiveBuffer, 0, BytesReceive);
          }

          if(Encoding.ASCII.GetString(receiveBuffer, 0, bytesReceived) == "e")
          {
            MyJob.Stop();
            //Messagebox.show ("Accepted data:" + Encoding.ASCII.GetString (ReceiveBuffer, 0, BytesReceived);
          }
        }
      }
      catch(Exception ex)
      {
        MessageBox.Show("Error" + ex.Message);
      }
    }
  }

  //Stop server
  private void StopServer()
  {
    if(_listener != null)
    {
      //Turn off TCP listening
      _listener.Stop();

      //Waiting for server thread interrupt
      _connectionThread.Join();

      //Close all client network data streams
      foreach(NetworkStream s in _streams)
        s.Close();

      //Clear _Streams generic collection
      _streams.Clear();

      //Turn off client connection
      foreach(TcpClient client in _clients)
        client.Close();

      //Clear the contents of _clients generics
      _clients.Clear();

      //Waiting for all client threads interrupt
      foreach(Thread t in _threads)
        t.Join();

      //Clear the contents of the _threads generic collection
      _threads.Clear();

    }
  }
}

Need a super terminal: HypertRM, this Baidu can download, after all, is a course of buying, although not expensive, but sharing is a bit wrong, so do not share the terminal and how to connect. Forgive me.

Effect: The effect of "S" after the super terminal interface is entered as follows:

image
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,884评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,212评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,351评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,412评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,438评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,127评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,714评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,636评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,173评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,264评论 3 339
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,402评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,073评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,763评论 3 332
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,253评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,382评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,749评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,403评论 2 358

推荐阅读更多精彩内容