網站首頁 編程語言 正文
Stream.Read 方法
當在派生類中重寫時,從當前流讀取字節序列,并將此流中的位置提升讀取的字節數。
語法:
public abstract int?Read(byte[] buffer,?int?offset,?int?count)
參數:
- buffer: 字節數組。此方法返回時,該緩沖區包含指定的字符數組,該數組的?offset?和 (offset?+?count?-1) 之間的值由從當前源中讀取的字節替換。
- offset:?buffer?中的從零開始的字節偏移量,從此處開始存儲從當前流中讀取的數據。
- count: 要從當前流中最多讀取的字節數。
返回值:
讀入緩沖區中的總字節數。如果當前可用的字節數沒有請求的字節數那么多,則總字節數可能小于請求的字節數,或者如果已到達流的末尾,則為零 (0)。
備注:
此方法的實現從當前流中讀取最多的?count?個字節,并將它們存儲在從?offset?開始的?buffer?中。流中的當前位置提升已讀取的字節數;但是,如果出現異常,流中的當前位置保持不變。實現返回已讀取的字節數。僅當位置當前位于流的末尾時,返回值才為零。如果沒有任何可用的數據,該實現將一直阻塞到至少有一個字節的數據可讀為止。僅當流中不再有其他的數據,而且也不再需要更多的數據(如已關閉的套接字或文件尾)時,Read?才返回 0。即使尚未到達流的末尾,實現仍可以隨意返回少于所請求的字節。
之前一般采用如下方式進行數據接收:
int recv;//定義接收數據長度變量
IPEndPoint ipEnd = new IPEndPoint(IPAddress.Parse(textBox1.Text), int.Parse(textBox2.Text));
//接收端所監聽的接口,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(); //一旦接受連接,創建一個客戶端
recv = clientSocket.Receive(data);
if (recv == 0) //如果收到的數據長度小于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";
});
}
之前用的時候沒發現什么問題,但是今天在測試金屬門數據接收的時候發現會丟數據,金屬門每隔十秒給我一次數據,用上面這個差不多60秒才能收到一組數據,針對以上問題,做了如下修改:
將數據接收放到 while (true),數據接收正常。
以下分別采用三種方式實現了數據的正常接收,代碼如下:
?測試:
?Task.Run(() => {}); 這個可以去掉;
原文鏈接:https://blog.csdn.net/qq_41872328/article/details/125638945
相關推薦
- 2022-11-23 linux下解決?git?clone每次都要輸入用戶名密碼問題(推薦)_linux shell
- 2022-04-04 webpack-loader: url-loader
- 2022-08-30 C語言中定義與聲明有哪些區別_C 語言
- 2022-12-21 Oracle聯機日志文件與歸檔文件詳細介紹_oracle
- 2022-06-20 基于C#實現語音識別功能詳解_C#教程
- 2022-08-15 gin框架中使用websocket發送消息及群聊
- 2022-03-14 Linux磁盤格式化和掛載(linux服務器硬盤掛載步驟)
- 2022-08-18 win10同網段/跨網段訪問虛擬機samba服務器的過程記錄_服務器其它
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支