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

C#?Socket數(shù)據(jù)接收的三種實現(xiàn)方式

 更新時間:2022年07月22日 14:11:06   作者:Phil?Arist  
本文主要介紹了C#?Socket數(shù)據(jù)接收的三種實現(xiàn)方式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

Stream.Read 方法

當在派生類中重寫時,從當前流讀取字節(jié)序列,并將此流中的位置提升讀取的字節(jié)數(shù)。

語法

public abstract int Read(byte[] buffer, int offset, int count)

參數(shù)

  • buffer: 字節(jié)數(shù)組。此方法返回時,該緩沖區(qū)包含指定的字符數(shù)組,該數(shù)組的 offset 和 (offset + count -1) 之間的值由從當前源中讀取的字節(jié)替換。
  • offset: buffer 中的從零開始的字節(jié)偏移量,從此處開始存儲從當前流中讀取的數(shù)據(jù)。
  • count: 要從當前流中最多讀取的字節(jié)數(shù)。

返回值

讀入緩沖區(qū)中的總字節(jié)數(shù)。如果當前可用的字節(jié)數(shù)沒有請求的字節(jié)數(shù)那么多,則總字節(jié)數(shù)可能小于請求的字節(jié)數(shù),或者如果已到達流的末尾,則為零 (0)。

備注

此方法的實現(xiàn)從當前流中讀取最多的 count 個字節(jié),并將它們存儲在從 offset 開始的 buffer 中。流中的當前位置提升已讀取的字節(jié)數(shù);但是,如果出現(xiàn)異常,流中的當前位置保持不變。實現(xiàn)返回已讀取的字節(jié)數(shù)。僅當位置當前位于流的末尾時,返回值才為零。如果沒有任何可用的數(shù)據(jù),該實現(xiàn)將一直阻塞到至少有一個字節(jié)的數(shù)據(jù)可讀為止。僅當流中不再有其他的數(shù)據(jù),而且也不再需要更多的數(shù)據(jù)(如已關(guān)閉的套接字或文件尾)時,Read 才返回 0。即使尚未到達流的末尾,實現(xiàn)仍可以隨意返回少于所請求的字節(jié)。

之前一般采用如下方式進行數(shù)據(jù)接收:

int recv;//定義接收數(shù)據(jù)長度變量
            IPEndPoint ipEnd = new IPEndPoint(IPAddress.Parse(textBox1.Text), int.Parse(textBox2.Text));
            //接收端所監(jiān)聽的接口,ip也可以用IPAddress.Any
            Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            //初始化一個Socket對象
            socket.Bind(ipEnd);//綁定套接字到一個IP地址和一個端口上(bind());
            socket.Listen(10);
            while (true)
            {
                byte[] data = new byte[1024];//對data清零
                Socket clientSocket = socket.Accept(); //一旦接受連接,創(chuàng)建一個客戶端
                recv = clientSocket.Receive(data);
                if (recv == 0) //如果收到的數(shù)據(jù)長度小于0,則退出
                    break;
                string stringData = "0x" + BitConverter.ToString(data).Replace("-", " 0x").ToLower();
                                                                                                                  
                this.Invoke((EventHandler)delegate
                {
                    richTextBox1.Text += DateTime.Now.ToString("yy-MM-dd hh:mm:ss")  + stringData + "\n";
                });
            }

之前用的時候沒發(fā)現(xiàn)什么問題,但是今天在測試金屬門數(shù)據(jù)接收的時候發(fā)現(xiàn)會丟數(shù)據(jù),金屬門每隔十秒給我一次數(shù)據(jù),用上面這個差不多60秒才能收到一組數(shù)據(jù),針對以上問題,做了如下修改:

將數(shù)據(jù)接收放到 while (true),數(shù)據(jù)接收正常。

以下分別采用三種方式實現(xiàn)了數(shù)據(jù)的正常接收,代碼如下:

 測試:

 Task.Run(() => {}); 這個可以去掉;

到此這篇關(guān)于C# Socket數(shù)據(jù)接收的三種實現(xiàn)方式的文章就介紹到這了,更多相關(guān)C# Socket數(shù)據(jù)接收內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論