File tree Expand file tree Collapse file tree 1 file changed +29
-17
lines changed
src/BootstrapBlazor/Services/TcpSocket/DataPackage Expand file tree Collapse file tree 1 file changed +29
-17
lines changed Original file line number Diff line number Diff line change @@ -28,28 +28,40 @@ public override async Task ReceiveAsync(Memory<byte> data)
2828 // 处理上次粘包数据
2929 data = ConcatBuffer ( data ) ;
3030
31- // 拷贝数据
32- var len = length - _receivedLength ;
33- var segment = data . Length > len ? data [ ..len ] : data ;
34- segment . CopyTo ( _data [ _receivedLength ..] ) ;
35-
36- if ( data . Length > len )
31+ while ( data . Length > 0 )
3732 {
38- SlicePackage ( data , data . Length - len ) ;
39- }
33+ // 拷贝数据
34+ var len = length - _receivedLength ;
35+ var segment = data . Length > len ? data [ ..len ] : data ;
36+ segment . CopyTo ( _data [ _receivedLength ..] ) ;
4037
41- // 更新已接收长度
42- _receivedLength += segment . Length ;
38+ // 更新已接收长度
39+ _receivedLength += segment . Length ;
4340
44- // 如果已接收长度等于总长度则触发回调
45- if ( _receivedLength == length )
46- {
47- // 重置已接收长度
48- _receivedLength = 0 ;
49- if ( ReceivedCallBack != null )
41+ // 如果已接收长度等于总长度则触发回调
42+ if ( _receivedLength == length )
43+ {
44+ // 重置已接收长度
45+ _receivedLength = 0 ;
46+ if ( ReceivedCallBack != null )
47+ {
48+ await ReceivedCallBack ( _data ) ;
49+ }
50+ }
51+
52+ // 检查剩余长度是否大于总长度
53+ if ( data . Length >= segment . Length + length )
54+ {
55+ data = data [ segment . Length ..] ;
56+ continue ;
57+ }
58+
59+ // 缓存剩余数据
60+ if ( data . Length > len )
5061 {
51- await ReceivedCallBack ( _data ) ;
62+ SlicePackage ( data , data . Length - len ) ;
5263 }
64+ break ;
5365 }
5466 }
5567}
You can’t perform that action at this time.
0 commit comments