C((zhi)Tcp/Udpプロトコルを使用するコードの例

6201 ワード

マルチスレッドを使用して、ソケットキーチームに依頼します。
個人はビデオに合わせて作った小さな練習をします。興味のある人は行ってみてもいいです。初心者にとってはいいです。
接続:https://www.bilibili.com/video/BV1bZ4y1W74q?p=3&t=358
コードを多く言わないでください。  総合動画の中の理解は何が間違っていますか?

public partial class Form1 : Form
  {
    public Form1()
    {
      InitializeComponent();
      myAddOnlieDelegate = AddOnlie;
      myAddTextDelegate = AddTexr;
    }
 
    private void AddTexr(string str)
    {
      //         
      txt_centext.AppendText(str);
    }
 
    /// <summary>
    ///     
    /// </summary>
    /// <param name="str"></param>
    /// <param name="bl"></param>
    private void AddOnlie(string str, bool bl)
    {
      if (bl)
      {
        //   true   listbox.Item      
        listOne.Items.Add(str);
      }
      else
      {
        //    
        listOne.Items.Remove(str);
      }
    }
 
 
 
    //   Socket
    Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    //  
    Thread thread = null;
    //   
    Dictionary<string, Socket> Dic = new Dictionary<string, Socket>();
    //  
    delegate void MyAddOnlieDelegate(string str,bool bl);
    delegate void MyAddTextDelegate(string str);
    MyAddOnlieDelegate myAddOnlieDelegate;
    MyAddTextDelegate myAddTextDelegate;
    private void button1_Click(object sender, EventArgs e)
    {
      #region      IP         
      //  IP
      IPAddress IP = IPAddress.Parse(txt_IP.Text.Trim());
      // IP      IPEndPoint 
      IPEndPoint IEnd = new IPEndPoint(IP,int.Parse(txt_port.Text.Trim()));
      try
      {
        // socket    
        socket.Bind(IEnd);
        MessageBox.Show("       !");
      }
      catch (Exception ex)
      {
        //     return  
        MessageBox.Show("       " + ex.Message);
        return;
      }
      //socket             
      socket.Listen(10);
      #endregion
      #region         
      //                         
      thread = new Thread(ListenConnectingl);
      //         
      thread.IsBackground = true;
      //    
      thread.Start();
      //             
      button1.Enabled = false;
      #endregion
    }
 
    /// <summary>
    ///             
    /// </summary>
    private void ListenConnectingl()
    {
      //         
      while (true)
      {
        //      Socket  :                    Socket
        Socket socketConnect = socket.Accept();
        //          skt     
        string skt = socketConnect.RemoteEndPoint.ToString();
        Dic.Add(skt, socketConnect);
        Invoke(myAddOnlieDelegate, skt, true);
        //                               
        Thread thr = new Thread(ReceiveMsg);
        thr.IsBackground = true;
        thr.Start(socketConnect);
        
      }
    }
    /// <summary>
    ///                       vs              vs      object                 
    /// </summary>
    /// <param name="socketConnect"></param>
    private void ReceiveMsg(object socketConnect)
    {
      //as:      object   Socket
      Socket so = socketConnect as Socket;
      while (true)
      {
        byte[] arr = new byte[1024 * 1024 * 2];
        //      
        int Length = -1;
        //try
        //{
          //Receive      int                
          Length = so.Receive(arr);
        //}
        //catch (Exception)
        //{
 
        //  //              
        //  string str = so.RemoteEndPoint.ToString();
        //  Dic.Remove(str);
        //  //     
        //  //Invoke(myAddTextDelegate, str+"   ");
        //  Invoke(myAddOnlieDelegate, str, false);
        //  break;
        //}
        
        //  if    
        if (Length == 0)
        {
          //              
          string str = so.RemoteEndPoint.ToString();
          Dic.Remove(str);
          //     
          Invoke(myAddOnlieDelegate, str, false);
          break;
        }
        else
        {
          //        byte   string
          string str = Encoding.UTF8.GetString(arr);
          Invoke(myAddTextDelegate, str+Environment.NewLine);
 
        }
      }
    }
    /// <summary>
    ///              
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void button2_Click(object sender, EventArgs e)
    {
      //      
      string str=txt_gocentext.Text.Trim();
      byte[] bt = Encoding.UTF8.GetBytes(str);
      ///
      if (listOne.SelectedItems.Count == 0)
      {
        MessageBox.Show("         ");
      }
      else
      {
        foreach (String item in listOne.SelectedItems)
        {
          //send      socket 
          Dic[item].Send(bt);
          string Msg = "[  ]" + item + " " + str+ System.Environment.NewLine;
          //          
          Invoke(myAddTextDelegate, Msg+ Environment.NewLine);
        }
      }
    }
 
    private void button3_Click(object sender, EventArgs e)
    {
      Form2 form2 = new Form2();
      form2.Show();
    }
  }
以上はTcp/Udpプロトコルを使用したC萼の詳細なコードです。他の関連記事に注目してください。