久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 11729|回復(fù): 17
打印 上一主題 下一主題
收起左側(cè)

c#寫的tcp/ip服務(wù)端與客戶端源碼和資料下載

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:319065 發(fā)表于 2018-6-14 20:49 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
服務(wù)端運行界面:

客戶端云心界面:




全部資料51hei下載地址:
2、TCP_IP.rar (5.74 MB, 下載次數(shù): 358)


源碼預(yù)覽:
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;

  9. //添加的引用
  10. using System.Net;
  11. using System.Net.Sockets;
  12. using System.Threading;
  13. using System.IO;
  14. using System.Threading.Tasks;
  15. using System.Collections;

  16. namespace TCP_IP
  17. {
  18.     public partial class Form1 : Form
  19.     {
  20.         //socket
  21.         /*public Socket newclient;//新建socket連接口
  22.         public bool Connected;
  23.         public Thread myThread;
  24.         public delegate void MyInvoke(string str);
  25.         public IPEndPoint myIe;
  26.         public IPAddress myIp;
  27.         public int myPort;*/
  28.         public delegate void MyInvoke(string str);
  29.         MyTcpServer cMyTcpServer = new MyTcpServer();

  30.         MySession cMySession = new MySession();// { TcpSocket = cMyTcpServer.GetType() };
  31.         //send or receive
  32.         public byte[] myBy;//傳遞串口接收到的數(shù)據(jù)
  33.         public int myByLenth = 0;//串口接收到的數(shù)據(jù)長度
  34.         public string myStr;//串口接收的字符串
  35.         public bool receiveDtatFlag = false;

  36.         public bool myCloseForm = false;//防止窗口關(guān)閉時線程沒有關(guān)閉占用資源

  37.         public bool myThreadStop = true;
  38.         public int send_count = 0;
  39.         public int recv_count = 0;

  40.         public Form1()
  41.         {
  42.             InitializeComponent();
  43.         }
  44.         #region 窗體處理
  45.         private void Form1_Load(object sender, EventArgs e)//頁面加載
  46.         {
  47.             myCloseForm = false;
  48.             //checkBox1.Checked = true;
  49.             checkBox2.Checked = true;
  50.             checkBox3.Checked = true;
  51.             //checkBox4.Checked = true;
  52.             button1.Visible = false;

  53.             Thread myThread = new Thread(ReceiveMsg);//創(chuàng)建新線程
  54.             myThread.IsBackground = true;//線程后臺運行
  55.             myThread.Start();//啟動線程
  56.         }

  57.         private void Form1_FormClosing(object sender, FormClosingEventArgs e)//退出窗口處理
  58.         {
  59.             if (DialogResult.Yes == MessageBox.Show("程序正在使用中,確認(rèn)退出?", "確認(rèn)退出", MessageBoxButtons.YesNo))
  60.             {
  61.                 myCloseForm = true;
  62.                 this.Dispose();
  63.                 System.Environment.Exit(System.Environment.ExitCode);
  64.                 this.Close();
  65.                 e.Cancel = false;
  66.             }
  67.             else
  68.             {
  69.                 e.Cancel = true;
  70.             }
  71.         }

  72.         private void button1_Click(object sender, EventArgs e)//隱藏該窗口
  73.         {
  74.             this.Hide();
  75.         }
  76.         #endregion

  77.         #region 連接按鈕處理
  78.         public void myConnect()//開啟連接
  79.         {
  80.             //byte[] data = new byte[1024];
  81.             if (btnConnect.Text.Trim() == "啟動偵聽")
  82.             {
  83.                 btnConnect.Text = "斷開連接";
  84.                 this.pictureBox1.Image = Image.FromFile(Application.StartupPath + "\\green.png");//bin文件中
  85.                 txbServerIP.Enabled = false;
  86.                 txbServerPort.Enabled = false;
  87.                 cMyTcpServer.OpenServer(Convert.ToInt32(txbServerPort.Text.Trim()));               
  88.             }
  89.             else
  90.             {
  91.                 btnConnect.Text = "啟動偵聽";
  92.                 this.pictureBox1.Image = Image.FromFile(Application.StartupPath + "\\red.png");//bin文件中
  93.                 txbServerIP.Enabled = true;
  94.                 txbServerPort.Enabled = true;
  95.                 cMyTcpServer.CloseServer();
  96.             }

  97.             /*if (Connected == false)//沒有連接
  98.             {
  99.                 newclient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  100.                 myIp = IPAddress.Parse(txbServerIP.Text.Trim());
  101.                 myPort = Convert.ToInt32(txbServerPort.Text.Trim());
  102.                 myIe = new IPEndPoint(myIp, myPort);

  103.                 try
  104.                 {
  105.                     newclient.Connect(myIe);
  106.                     //btnConnect.Enabled = false;
  107.                     Connected = true;
  108.                     btnConnect.Text = "斷開連接";
  109.                     myThreadStop = true;
  110.                     this.pictureBox1.Image = Image.FromFile(Application.StartupPath + "\\green.png");//bin文件中
  111.                     txbServerIP.Enabled = false;
  112.                     txbServerPort.Enabled = false;
  113.                 }
  114.                 catch (SocketException e)
  115.                 {
  116.                     Connected = false;
  117.                     btnConnect.Text = "連接服務(wù)器";
  118.                     myThreadStop = false;
  119.                      this.pictureBox1.Image = Image.FromFile(Application.StartupPath + "\\red.png");//bin文件中
  120.                     txbServerIP.Enabled = true;
  121.                     txbServerPort.Enabled = true;
  122.                     MessageBox.Show("連接服務(wù)器失敗  " + e.Message);
  123.                     return;
  124.                 }

  125.                 //多線程處理

  126.                 //ThreadStart myThreaddelegate = new ThreadStart(ReceiveMsg);
  127.                 //myThread = new Thread(myThreaddelegate);

  128.                 Thread myThread = new Thread(ReceiveMsg);//創(chuàng)建新線程
  129.                 myThread.IsBackground = true;//線程后臺運行
  130.                 myThread.Start();//啟動線程
  131.             }
  132.             else
  133.             {
  134.                 Connected = false;
  135.                 btnConnect.Text = "連接服務(wù)器";
  136.                 this.pictureBox1.Image = Image.FromFile(Application.StartupPath + "\\red.png");//bin文件中
  137.                 if (myThread != null)
  138.                 {
  139.                     myThread.Abort();
  140.                     //Application.ExitThread();
  141.                 }
  142.                 myThreadStop = false;
  143.                 newclient.Disconnect(false);
  144.                 txbServerIP.Enabled = true;
  145.                 txbServerPort.Enabled = true;
  146.             }*/

  147.         }

  148.         private void btnConnect_Click(object sender, EventArgs e)//開啟連接
  149.         {
  150.             myConnect();
  151.         }
  152.         #endregion


  153.         ///////////////////數(shù)據(jù)多線程處理部分//////20170919////////////////////////////     
  154.         #region 真正使用的接收線程處理部分
  155.         public void ReceiveMsg()//接收處理線程部分
  156.         {
  157.             while (myThreadStop)
  158.             {
  159.                 string myRecvStrTemp = "";
  160.                 #region
  161.                 lock (cMyTcpServer.dic_ClientSocket)
  162.                 {
  163.                     foreach (var item in cMyTcpServer.dic_ClientSocket)
  164.                     {
  165.                         //cMySession = item.Value;//兩種方法都可以
  166.                         if (cMyTcpServer.dic_ClientSocket.TryGetValue(item.Key.ToString(), out cMySession) == true)
  167.                         {
  168.                             byte[] myReceByte = cMySession.GetBuffer(0,cMySession.m_Buffer.Count);//提取接收數(shù)據(jù)

  169.                             //數(shù)據(jù)處理
  170.                             if (myReceByte.Length > 0)
  171.                             {
  172.                                 StringBuilder builder = new StringBuilder();//避免在事件處理方法中反復(fù)的創(chuàng)建,定義到外面。
  173.                                 long received_count = 0;//接收計數(shù)                    
  174.                                 received_count += myReceByte.Length;//增加接收計數(shù)
  175.                                 builder.Clear();//清除字符串構(gòu)造器的內(nèi)容

  176.                                 myBy = myReceByte;
  177.                                 myByLenth = myReceByte.Length;
  178.                                 if (checkBox3.Checked)//接收時間顯示
  179.                                 {
  180.                                     if (chbRecvIpPort.Checked)//接收IP和端口顯示
  181.                                     {
  182.                                         myRecvStrTemp += DateTime.Now.ToString("yyyy-MM-dd") + " " + DateTime.Now.ToString(@"HH\:mm\:ss\:fff") + " " + cMySession.GetIp() + "\n";
  183.                                     }
  184.                                     else
  185.                                     {
  186.                                         myRecvStrTemp += DateTime.Now.ToString("yyyy-MM-dd") + " " + DateTime.Now.ToString(@"HH\:mm\:ss\:fff") + "\n";
  187.                                     }

  188.                                 }
  189.                                 else
  190.                                 {
  191.                                     if (chbRecvIpPort.Checked)//接收IP和端口顯示
  192.                                     {
  193.                                         myRecvStrTemp += cMySession.GetIp() + "\n";
  194.                                     }
  195.                                 }
  196.                                 //判斷是否是顯示為16禁止
  197.                                 if (checkBox1.Checked)
  198.                                 {
  199.                                     //依次的拼接出16進制字符串
  200.                                     foreach (byte b in myReceByte)
  201.                                     {
  202.                                         builder.Append(b.ToString("X2") + " ");//在此實例的結(jié)尾追加指定字符串的副本
  203.                                     }
  204.                                 }
  205.                                 else
  206.                                 {
  207.                                     //直接按ASCII規(guī)則轉(zhuǎn)換成字符串
  208.                                     builder.Append(Encoding.ASCII.GetString(myReceByte));
  209.                                 }
  210.                                 //追加的形式添加到文本框末端,并滾動到最后。
  211.                                 myRecvStrTemp += builder.ToString();
  212.                                 myStr = builder.ToString();//字符串輸出

  213.                                 if (checkBox2.Checked)//接收換行顯示
  214.                                 {
  215.                                     myRecvStrTemp += "\n";
  216.                                 }
  217.                                 try
  218.                                 {
  219.                                     if (receiveDtatFlag == true)//保存數(shù)據(jù)
  220.                                     {
  221.                                         string fName = saveFileDialog1.FileName;
  222.                                         FileStream fs = File.Open(fName, FileMode.Append);
  223.                                         StreamWriter sw = new StreamWriter(fs);

  224.                                         if (checkBox3.Checked)//接收時間顯示
  225.                                         {
  226.                                             sw.Write(DateTime.Now.ToString("yyyy-MM-dd") + " ");
  227.                                             sw.Write(DateTime.Now.ToString(@"HH\:mm\:ss\:fff") + "\n");
  228.                                         }
  229.                                         sw.Write(builder.ToString());
  230.                                         if (checkBox2.Checked)//接收換行顯示
  231.                                         {
  232.                                             sw.WriteLine("\n");

  233.                                         }
  234.                                         sw.Close();
  235.                                         fs.Close();
  236.                                     }
  237.                                 }
  238.                                 catch
  239.                                 {

  240.                                 }
  241.                                 recv_count += myReceByte.Length;//增加接收計數(shù)
  242.                             }                           
  243.                         }
  244.                         //cMySession = item.Value;//兩種方法都可以

  245.                     }
  246.                 }
  247.                 #endregion
  248.                 showMsg(myRecvStrTemp);
  249.             }
  250.         }
  251.         public void showMsg(string msg)//接收顯示處理部分
  252.         {
  253.             {
  254.                 //在線程里以安全方式調(diào)用控件
  255.                 if ((rtbReceiveMsg.InvokeRequired) || (txbRecvCount.InvokeRequired))
  256.                 {
  257.                     MyInvoke _myinvoke = new MyInvoke(showMsg);
  258.                     rtbReceiveMsg.Invoke(_myinvoke, new object[] { msg });
  259.                 }
  260.                 else
  261.                 {
  262.                     rtbReceiveMsg.AppendText(msg);//顯示部分
  263.                     txbRecvCount.Text = recv_count.ToString();
  264.                 }
  265.             }
  266.         }//*/

  267.         private void rtbReceiveMsg_TextChanged(object sender, EventArgs e)//接收窗處理
  268.         {
  269.             if (rtbReceiveMsg.Lines.Length > 8000)//大于8000行時清楚前面的
  270.             {
  271.                 int n = 500;
  272.                 int start = rtbReceiveMsg.GetFirstCharIndexFromLine(0);//第一行第一個字符索引
  273.                 int end = rtbReceiveMsg.GetFirstCharIndexFromLine(n);//第n行第一個字符索引
  274.                 rtbReceiveMsg.Select(start, end);//選中n行
  275.                 rtbReceiveMsg.SelectedText = "";//設(shè)置前n行為空

  276.             }
  277.             rtbReceiveMsg.Focus();
  278.             rtbReceiveMsg.Select(rtbReceiveMsg.TextLength, 0);
  279.         }

  280.         private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)//清除接收窗數(shù)據(jù)
  281.         {
  282.             rtbReceiveMsg.Text = "";
  283.             send_count = 0;
  284.             textBox4.Text = "";
  285.             txbRecvCount.Text = "";
  286.         }
  287.         #endregion              

  288.         #region 數(shù)據(jù)發(fā)送處理
  289.         private void btnMySendMessage_Click(object sender, EventArgs e)//發(fā)送數(shù)據(jù)
  290.         {
  291.             try
  292.             {
  293.                 if (checkBox5.Checked == true)
  294.                 {
  295.                     timer1.Enabled = true;
  296.                 }
  297.                 else
  298.                 {
  299.                     timer1.Enabled = false;
  300.                 }
  301.                 //string s = "";                    
  302.                 if (checkBox4.Checked)//十六進制發(fā)送
  303.                 {
  304.                     ArrayList al = cMyMathClass.Str16ToArrayList(rtbMySendMessage.Text);
  305.                     byte[] by = new byte[al.Count];
  306.                     int i = 0;
  307.                     foreach (string stmp in al)
  308.                     {
  309.                         by[i] += Convert.ToByte(stmp, 16);//將指定基的數(shù)字的字符串表示形式轉(zhuǎn)換為等效的 8 位無符號整數(shù)。
  310.                         i++;
  311.                     }
  312.                     //int mySendLenth = newclient.Send(by);
  313.                     lock (cMyTcpServer.dic_ClientSocket)
  314.                     {
  315.                         foreach (var item in cMyTcpServer.dic_ClientSocket)
  316.                         {
  317.                             cMyTcpServer.SendData(item.Key.ToString(), by);
  318.                         }
  319.                     }
  320.                     //serialPort1.Write(by, 0, i);//發(fā)送字節(jié)
  321.                     //s = Encoding.GetEncoding("Gb2312").GetString(by);//在派生類中重寫時,將指定字節(jié)數(shù)組中的所有字節(jié)解碼為一個字符串。。
  322.                 }
  323.                 else//ASCII發(fā)送
  324.                 {
  325.                     int m_length = rtbMySendMessage.Text.Trim().Length;
  326.                     byte[] data = new byte[m_length];
  327.                     data = Encoding.UTF8.GetBytes(rtbMySendMessage.Text);
  328.                     lock (cMyTcpServer.dic_ClientSocket)
  329.                     {
  330.                         foreach (var item in cMyTcpServer.dic_ClientSocket)
  331.                         {
  332.                             cMyTcpServer.SendData(item.Key.ToString(), data);
  333.                         }
  334.                     }
  335.                     //int mySendLenth = newclient.Send(data);

  336.                 }
  337.                 send_count++;
  338.             }
  339.             catch (Exception)
  340.             {
  341.                 MessageBox.Show("發(fā)送數(shù)據(jù)時發(fā)生錯誤!", "錯誤提示");
  342.             }            
  343.         }

  344.         private void timer1_Tick(object sender, EventArgs e)//定時發(fā)送
  345.         {
  346.             timer1.Interval = Convert.ToInt32(textBox1.Text);
  347.             try
  348.             {
  349.                 if (checkBox5.Checked == true)
  350.                 {                  
  351.                     if (checkBox4.Checked)//十六進制發(fā)送
  352.                     {
  353.                         ArrayList al = cMyMathClass.Str16ToArrayList(rtbMySendMessage.Text);
  354.                         byte[] by = new byte[al.Count];
  355.                         int i = 0;
  356.                         foreach (string stmp in al)
  357.                         {
  358.                             by[i] += Convert.ToByte(stmp, 16);//將指定基的數(shù)字的字符串表示形式轉(zhuǎn)換為等效的 8 位無符號整數(shù)。
  359.                             i++;
  360.                         }
  361.                         //int mySendLenth = newclient.Send(by);
  362.                         lock (cMyTcpServer.dic_ClientSocket)
  363.                         {
  364.                             foreach (var item in cMyTcpServer.dic_ClientSocket)
  365.                             {
  366.                                 cMyTcpServer.SendData(item.Key.ToString(), by);
  367.                             }
  368.                         }
  369.                         //serialPort1.Write(by, 0, i);//發(fā)送字節(jié)
  370.                         //s = Encoding.GetEncoding("Gb2312").GetString(by);//在派生類中重寫時,將指定字節(jié)數(shù)組中的所有字節(jié)解碼為一個字符串。。
  371.                     }
  372.                     else//ASCII發(fā)送
  373.                     {
  374.                         int m_length = rtbMySendMessage.Text.Trim().Length;
  375.                         byte[] data = new byte[m_length];
  376.                         data = Encoding.UTF8.GetBytes(rtbMySendMessage.Text);
  377.                         lock (cMyTcpServer.dic_ClientSocket)
  378.                         {
  379.                             foreach (var item in cMyTcpServer.dic_ClientSocket)
  380.                             {
  381.                                 cMyTcpServer.SendData(item.Key.ToString(), data);
  382.                             }
  383.                         }
  384.                         //int mySendLenth = newclient.Send(data);

  385.                     }
  386.                     send_count++;
  387.                 }
  388.             }
  389.             catch (Exception)
  390.             {
  391.                 MessageBox.Show("發(fā)送數(shù)據(jù)時發(fā)生錯誤!", "錯誤提示");
  392.             }            
  393.         }

  394.         private void checkBox5_CheckedChanged(object sender, EventArgs e)//自動發(fā)送區(qū)處理
  395.         {
  396.             if (checkBox4.CheckState == CheckState.Checked)//發(fā)送HEX顯示
  397.             {

  398.             }
  399.             else//發(fā)送ASCII顯示
  400.             {
  401.                 timer1.Enabled = false;
  402.             }
  403.         }

  404.         private void checkBox4_CheckedChanged(object sender, EventArgs e)//發(fā)送HEX區(qū)處理
  405.         {
  406.             string s = "";
  407.             if (checkBox4.CheckState == CheckState.Checked)//發(fā)送HEX顯示
  408.             {
  409.                 byte[] by = Encoding.GetEncoding("Gb2312").GetBytes(rtbMySendMessage.Text);
  410.                 rtbMySendMessage.Text = "";
  411.                 foreach (byte btmp in by)
  412.                 {
  413.                     s = "00" + string.Format("{0:X}", btmp);
  414.                     rtbMySendMessage.Text += s.Substring(s.Length - 2, 2);
  415.                     rtbMySendMessage.Text += " ";
  416.                 }
  417.             }
  418.             else//發(fā)送ASCII顯示
  419.             {
  420.                 ArrayList al = cMyMathClass.Str16ToArrayList(rtbMySendMessage.Text);
  421.                 byte[] by = new byte[al.Count];
  422.                 int i = 0;
  423.                 foreach (string stmp in al)
  424.                 {
  425.                     by[i] += Convert.ToByte(stmp, 16);
  426.                     i++;
  427.                 }
  428.                 rtbMySendMessage.Text = Encoding.GetEncoding("Gb2312").GetString(by);
  429.             }
  430.         }


  431.         #endregion

  432.         #region 數(shù)據(jù)保存處理
  433.         private void checkBox6_CheckedChanged(object sender, EventArgs e)//保存勾選
  434.         {
  435.             if (checkBox6.CheckState == CheckState.Checked)//選中
  436.             {
  437.                 receiveDtatFlag = true;
  438.             }
  439.             else
  440.             {
  441.                 receiveDtatFlag = false;
  442.             }


  443.         }

  444.         private void button4_Click(object sender, EventArgs e)//保存按鈕
  445.         {

  446.             saveFileDialog1.Filter = "文本文件(*.txt)|*.txt";
  447.             saveFileDialog1.FilterIndex = 1;
  448.             saveFileDialog1.FileName = "ReceiveData";
  449.             if (saveFileDialog1.ShowDialog() == DialogResult.OK)
  450.             {
  451.                 string fName = saveFileDialog1.FileName;
  452.                 FileStream fs = File.Open(fName, FileMode.Append);
  453.                 StreamWriter sw = new StreamWriter(fs);
  454.                 //sw.WriteLine(richTextBox1.Text);
  455.                 textBox3.Text = fName;
  456.                 sw.Close();
  457.                 fs.Close();
  458.             }
  459.         }
  460.         #endregion            

  461.         ////////////////////外部調(diào)用接口///////////////
  462.         #region 外部調(diào)用的發(fā)送接口
  463.         public void mySendDataHandle(string mySendDataIn)
  464.         {
  465.             try
  466.             {
  467.                 if (checkBox4.Checked)//十六進制發(fā)送
  468.                 {
  469.                     ArrayList al = cMyMathClass.Str16ToArrayList(rtbMySendMessage.Text);
  470.                     byte[] by = new byte[al.Count];
  471.                     int i = 0;
  472.                     foreach (string stmp in al)
  473.                     {
  474.                         by[i] += Convert.ToByte(stmp, 16);//將指定基的數(shù)字的字符串表示形式轉(zhuǎn)換為等效的 8 位無符號整數(shù)。
  475.                         i++;
  476.                     }
  477.                     //int mySendLenth = newclient.Send(by);
  478.                     lock (cMyTcpServer.dic_ClientSocket)
  479.                     {
  480.                         foreach (var item in cMyTcpServer.dic_ClientSocket)
  481.                         {
  482.                             cMyTcpServer.SendData(item.Key.ToString(), by);
  483.                         }
  484.                     }
  485.                     //serialPort1.Write(by, 0, i);//發(fā)送字節(jié)
  486.                     //s = Encoding.GetEncoding("Gb2312").GetString(by);//在派生類中重寫時,將指定字節(jié)數(shù)組中的所有字節(jié)解碼為一個字符串。。
  487.                 }
  488.                 else//ASCII發(fā)送
  489.                 {
  490.                     int m_length = rtbMySendMessage.Text.Trim().Length;
  491.                     byte[] data = new byte[m_length];
  492.                     data = Encoding.UTF8.GetBytes(rtbMySendMessage.Text);
  493.                     lock (cMyTcpServer.dic_ClientSocket)
  494.                     {
  495.                         foreach (var item in cMyTcpServer.dic_ClientSocket)
  496.                         {
  497.                             cMyTcpServer.SendData(item.Key.ToString(), data);
  498.                         }
  499.                     }
  500.                     //int mySendLenth = newclient.Send(data);

  501.                 }
  502.                 send_count++;

  503.             }
  504.             catch (Exception)
  505.             {
  506.                 MessageBox.Show("發(fā)送數(shù)據(jù)時發(fā)生錯誤!", "錯誤提示");
  507.             }
  508.         }//*/
  509.         #endregion
  510.     }
  511. }
復(fù)制代碼


評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏7 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:390264 發(fā)表于 2018-9-13 13:04 | 只看該作者
太需要了    謝謝分享
回復(fù)

使用道具 舉報

板凳
ID:73991 發(fā)表于 2018-9-17 15:58 | 只看該作者
厲害,沒想到在這找到了。。。。CDSN下載都是要積分,這里好多了
回復(fù)

使用道具 舉報

地板
ID:462523 發(fā)表于 2019-1-5 16:04 | 只看該作者
感謝分享,需要這樣的精神,謝謝
回復(fù)

使用道具 舉報

5#
ID:468315 發(fā)表于 2019-1-16 13:16 | 只看該作者
感謝分享,已經(jīng)下載了,正在學(xué)習(xí)中,最近剛好手頭上要做一個硬件與服務(wù)器連接測試,走的也是TCP協(xié)議的,太實用了
回復(fù)

使用道具 舉報

6#
ID:48097 發(fā)表于 2019-3-4 14:10 | 只看該作者
學(xué)習(xí)一下
回復(fù)

使用道具 舉報

7#
ID:332109 發(fā)表于 2019-6-3 14:37 | 只看該作者
感謝分享,已經(jīng)下載了~~
回復(fù)

使用道具 舉報

8#
ID:565614 發(fā)表于 2019-6-18 13:10 | 只看該作者
沒有積分能發(fā)一份給我嗎/?新手學(xué)習(xí)中
回復(fù)

使用道具 舉報

9#
ID:350791 發(fā)表于 2019-8-27 09:54 | 只看該作者
正在學(xué)習(xí)TCP協(xié)議,內(nèi)容很好
回復(fù)

使用道具 舉報

10#
ID:609989 發(fā)表于 2019-9-10 17:00 | 只看該作者
666謝謝啊
回復(fù)

使用道具 舉報

11#
ID:625667 發(fā)表于 2019-10-24 17:20 | 只看該作者
樓主好人,謝謝分享
回復(fù)

使用道具 舉報

12#
ID:625667 發(fā)表于 2019-10-24 17:21 | 只看該作者
不過話說回來了,C#社區(qū)開源確實跟Java沒法比,找個稍微有用的就是買,GitHub也沒有,哎
回復(fù)

使用道具 舉報

13#
ID:384552 發(fā)表于 2019-10-31 15:59 | 只看該作者
太厲害的,謝謝
回復(fù)

使用道具 舉報

14#
ID:663815 發(fā)表于 2019-12-14 15:44 | 只看該作者
厲害,找了很久!!
回復(fù)

使用道具 舉報

15#
ID:544352 發(fā)表于 2020-1-4 13:50 | 只看該作者
源碼規(guī)范合理,該有的都有了
回復(fù)

使用道具 舉報

16#
ID:711047 發(fā)表于 2020-3-18 17:51 | 只看該作者
這個太棒了,謝謝樓主
回復(fù)

使用道具 舉報

17#
ID:967451 發(fā)表于 2021-9-22 10:46 | 只看該作者
這個太棒了,謝謝樓主
回復(fù)

使用道具 舉報

18#
ID:1003226 發(fā)表于 2022-2-23 12:26 | 只看該作者
CDSN下載都是要積分,這里好多了
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美一区二区在线观看 | 日韩第1页 | 国产在线小视频 | 天天干免费视频 | 午夜播放器在线观看 | 伊人网综合在线观看 | 一区二区三区四区国产 | 天天影视网天天综合色在线播放 | 91成人在线视频 | 亚洲欧美日韩精品久久亚洲区 | 国产 欧美 日韩 一区 | 午夜一区二区三区视频 | 国产一二区免费视频 | 国产91精品久久久久久久网曝门 | 在线婷婷| 久久久久一区二区三区 | 国产欧美日韩综合精品一区二区 | 在线观看中文字幕 | 91看片网址 | 国产1区在线 | 日韩成人在线观看 | 亚洲免费在线 | 一级做a爰片性色毛片视频停止 | 国产精品18久久久久久久 | 欧美videosex性极品hd | 国产综合久久 | 五月婷婷激情网 | 在线亚洲免费视频 | 九九久久精品 | 久久久久亚洲国产| 精品日韩一区 | 91短视频网址 | 欧美亚州综合 | 欧美成人精品欧美一级 | 亚洲精品一区二区 | 精品二区| 久久精品网 | 在线中文字幕视频 | 中文字幕久久精品 | 四虎在线播放 | 日本不卡一区二区三区在线观看 |