欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#聯(lián)合VisionPro實現TCP/IP通信詳解

 更新時間:2024年02月27日 08:51:56   作者:郭貝貝同學  
TCP/IP(傳輸控制協(xié)議/互聯(lián)網協(xié)議)是一組用于在網絡上進行通信的通信協(xié)議,本文主要為大家詳細介紹了C#如何聯(lián)合VisionPro實現TCP/IP通信,希望對大家有所幫助

TCP/IP(傳輸控制協(xié)議/互聯(lián)網協(xié)議)是一組用于在網絡上進行通信的通信協(xié)議。它是互聯(lián)網和許多局域網的基礎,為計算機之間的數據傳輸提供了可靠性、有序性和錯誤檢測。在軟件開發(fā)中,TCP/IP 通信通常用于實現網絡應用程序之間的數據交換。

基于 TCP/IP 的通信通常涉及以下幾個步驟:

1、建立連接: 通信雙方通過套接字(socket)建立連接。在 C# 中,你可以使用 TcpClient 類來創(chuàng)建一個 TCP 客戶端,并使用 TcpListener 類來創(chuàng)建一個 TCP 服務器端。

2、發(fā)送和接收數據: 一旦連接建立,通信雙方可以通過套接字發(fā)送和接收數據。在 C# 中,你可以使用 NetworkStream 類來發(fā)送和接收數據。

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;//監(jiān)聽
    public Socket SocketAccept;//綁定客戶端
    public Socket socket;//和客戶端通信

    #region 開啟監(jiān)聽
    Thread t1;//監(jiān)聽
    Thread t2;//接收

    //開啟監(jiān)聽(監(jiān)聽的是客戶端的鏈接)
    private void button1_Click(object sender, EventArgs e) {
      //實例化socket對象
      //參1:綁定一個ip地址,參2:數據流的格式,參3:協(xié)議
      ServerSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
      //準備ip對象綁定ip地址
      IPAddress ip = IPAddress.Parse(textBox1.Text);
      //創(chuàng)建端口號
      int port = Convert.ToInt32(textBox2.Text);
      //把輸入的ip和端口傳入到連接中,嘗試鏈接
      IPEndPoint iPEndPoint = new IPEndPoint(ip, port);
      try {
        //開啟服務器的時候很容易報錯,所有做異常處理
        ServerSocket.Bind(iPEndPoint);
        //開啟監(jiān)聽(參數是監(jiān)聽的數量)
        ServerSocket.Listen(5);
        //禁用按鈕,避免重復監(jiān)聽
        button1.Enabled = false;
        //監(jiān)聽是持續(xù)的,所以要在分線程中進行
        t1 = new Thread(Listen);
        //設置成后臺線程
        t1.IsBackground = true;
        //分線程中開始對socket監(jiān)聽
        t1.Start(ServerSocket);
      } catch (Exception ex) {
        MessageBox.Show(ex.Message);
      }
    }

    private void Listen(object o) {
      SocketAccept = o as Socket;
      try {
        //因為要持續(xù)監(jiān)聽,所以用了while循環(huán)
        while (true) {
          //阻塞線程,直到有客戶端進來的時候才會往下執(zhí)行
          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) {
          //定義字節(jié),接收數據
          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

    //發(fā)送消息
    private void sendBtn_Click(object sender, EventArgs e) {
      //首先獲取要發(fā)送的消息
      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的接收和發(fā)送
        socket.Shutdown(SocketShutdown.Both);
        socket.Close();
        t2.Abort();
      }
      ServerSocket.Close();
      SocketAccept.Close();
      t1.Abort();
      //打開監(jiān)聽的按鈕
      button1.Enabled = true;
    }
  }
}

TCP客戶端代碼展示

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Windows.Forms;

namespace _5_TCP客戶端 {
  public partial class Form1 : Form {
    public Form1() {
      InitializeComponent();
    }

    //描述套字節(jié)對象
    public Socket clientSoket;
    public Socket socket;//和客戶端通信
    //創(chuàng)建一個線程。
    Thread t1;//接收消息

    //服務器鏈接
    private void conecBtn_Click(object sender, EventArgs e) {
      //初始化socket對象
      clientSoket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
      //綁定IP
      IPAddress ip = IPAddress.Parse(ipTxt.Text);
      int port = Convert.ToInt32(portTxt.Text);
      //形成連接點
      IPEndPoint iPEndPoint = new IPEndPoint(ip, port);
      //嘗試與遠程主機鏈接
      try {
        clientSoket.Connect(iPEndPoint);
        AddMsg(DateTime.Now.ToString("HHmmss:") + "鏈接服務器");
        AddMsg("\r\n");
        conecBtn.Enabled = false;

        //開啟監(jiān)聽
        t1 = new Thread(Receive);
        t1.IsBackground = true;
        t1.Start(clientSoket);
      } catch (Exception ex) {
        MessageBox.Show("錯誤消息:" + ex.Message);
      }
    }

    //封裝一個顯示數據的方法
    private void AddMsg(string msg) {
      textBox4.BeginInvoke(new Action<string>(str => {
        textBox4.Text += str;
      }), msg);
    }

    //封裝一個接收消息的方法
    private void Receive(object o) {
      //當前聊天的對象
      Socket clientSocket = o as Socket;
      while (true) {
        try {
          //把字節(jié)轉成string
          byte[] buffer = new byte[1024 * 1024 * 2];
          int r = clientSocket.Receive(buffer);
          if (r == 0) {
            break;
          }
          string msg = Encoding.Default.GetString(buffer);
          AddMsg("接收到的消息:" + msg);
          AddMsg("\r\n");
        } catch (Exception ex) {
          MessageBox.Show(ex.Message);
        }
      }
    }

    //發(fā)送消息
    private void sendMsg_Click(object sender, EventArgs e) {
      byte[] buffer = new byte[1024 * 1024 * 2];
      string str = textBox3.Text;
      //轉碼
      buffer = Encoding.Default.GetBytes(str);
      //發(fā)
      try {
        clientSoket.Send(buffer);
        AddMsg(str);
        AddMsg("\r\n");
        textBox3.Clear();
      } catch (Exception ex) {
        MessageBox.Show(ex.Message);
      }
    }

    //斷開連接
    private void button2_Click(object sender, EventArgs e) {
      if (clientSoket != null) {
        //禁掉socket的接收和發(fā)送
        clientSoket.Shutdown(SocketShutdown.Both);
        clientSoket.Close();
        t1.Abort();
      }
      t1.Abort();
      //打開監(jiān)聽的按鈕
      conecBtn.Enabled = true;
    }
  }
}

以上就是C#聯(lián)合VisionPro實現TCP/IP通信詳解的詳細內容,更多關于C# TCP/IP通信的資料請關注腳本之家其它相關文章!

相關文章

  • C#將PPT文件轉換成PDF文件

    C#將PPT文件轉換成PDF文件

    今天小編就為大家分享一篇關于C#將PPT文件轉換成PDF文件,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • c# 遍歷獲取所有文件的示例代碼

    c# 遍歷獲取所有文件的示例代碼

    這篇文章主要介紹了c# 遍歷獲取所有文件的示例代碼,幫助大家更好的理解和學習python,感興趣的朋友可以了解下
    2020-12-12
  • 詳解WPF如何顯示具有層級關系的數據

    詳解WPF如何顯示具有層級關系的數據

    這篇文章主要為大家詳細介紹了在WPF中如何顯示具有層級關系的數據,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-04-04
  • 一個進程間通訊同步的C#框架引薦

    一個進程間通訊同步的C#框架引薦

    這篇文章主要介紹了一個進程間通訊同步的C#框架,代碼具有相當的穩(wěn)定性和可維護性,隨著.NET的開源也會被注入更多活力,推薦!需要的朋友可以參考下
    2015-07-07
  • Unity PC版Log的具體位置介紹

    Unity PC版Log的具體位置介紹

    這篇文章主要介紹了Unity PC版Log的具體位置介紹,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • C#泛型語法詳解

    C#泛型語法詳解

    本文詳細講解了C#中的泛型語法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • C# wpf 實現窗口任意區(qū)域點擊拖動

    C# wpf 實現窗口任意區(qū)域點擊拖動

    在wpf要實現此功能簡單形式還是比較容易的,但是有一些細節(jié)需要專門處理,比如與按鈕的點擊事件沖突問題,解決事件沖突問題后拖動的靈敏度,可復用性等,這篇文章主要介紹了C# wpf 實現窗口任意區(qū)域點擊拖動,需要的朋友可以參考下
    2024-03-03
  • Quartz.Net使用方法詳解

    Quartz.Net使用方法詳解

    本文詳細講解了Quartz.Net的使用方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12
  • Unity UGUI的Image圖片組件使用詳解

    Unity UGUI的Image圖片組件使用詳解

    這篇文章主要為大家介紹了Unity UGUI的Image圖片組件使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • c# 模擬線性回歸的示例

    c# 模擬線性回歸的示例

    這篇文章主要介紹了c# 模擬線性回歸的示例,幫助大家利用c#進行機器學習,感興趣的朋友可以了解下
    2020-10-10

最新評論