C#实现ClientWebSocket请求服务端,接收完所有返回值,解决接收数据不全

csharp 复制代码
        private  async Task ConnectWebSocketAsync(Uri serverUri)
        {
            using (ClientWebSocket client = new ClientWebSocket())
            {
                await client.ConnectAsync(serverUri, CancellationToken.None);
               // Console.WriteLine("Connected to WebSocket server.");
                AddTextToRichTextBox1("Connected to WebSocket server.", Color.Green);
                // 发送数据到服务器  
              //  string messageToSend = "Hello, WebSocket server!";

                string messageToSend = GetNewtaken();

                byte[] bytesToSend = Encoding.UTF8.GetBytes(messageToSend);
                await client.SendAsync(new ArraySegment<byte>(bytesToSend), WebSocketMessageType.Text, true, CancellationToken.None);
              //  Console.WriteLine($"Sent: {messageToSend}");
                AddTextToRichTextBox1($"Sent: {messageToSend}", Color.Green);
                // 接收来自服务器的数据  
                byte[] buffer = new byte[1024 * 4];
                WebSocketReceiveResult result = await client.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);
                string messageReceived = Encoding.UTF8.GetString(buffer, 0, result.Count);
               // Console.WriteLine($"Received: {messageReceived}");
                AddTextToRichTextBox1($"Received: {messageReceived}", Color.Green);


                JObject jo_tacken = (JObject)JsonConvert.DeserializeObject(messageReceived);

                string token = "";
                string groups = "";


                string token_str2 = jo_tacken["status"].ToString();
                if (token_str2.Equals("0"))
                {
                    token = jo_tacken["data"][0]["token"].ToString();
                    groups = jo_tacken["data"][0]["groups"][0]["groupid"].ToString();

                    company_connected = true;

                    AddTextToRichTextBox1("本地人脸机设备IP:" + company_face_device_ipAddress + "  端口号:" + company_face_device_port + "连接成功!", Color.Red);
                    LabelTitle("本地人脸");

                    //注册公司人脸成功


                    AddTextToRichTextBox1("获取Token成功:"+ token, Color.Red);



                }
                else
                {
                    AddTextToRichTextBox1("获取Token失败:" + token, Color.Red);
                    AddTextToRichTextBox1("本地人脸设备IP:" + company_face_device_ipAddress + "  端口号:" + company_face_device_port + "连接失败!", Color.Red);
                    LabelTitleFail("连接本地人脸失败!");
                }


                string pageNo = "" + 1;
                // string SizeRow = "" + pageSize;
                string SizeRow = "1000";
                DateTime selectedDate1 = DateEdit1.DateTime;
                DateTime selectedDate2 = DateEdit2.DateTime;
                string startTime = selectedDate1.ToString("yyyy-MM-dd HH:mm:ss");
                string endTime = selectedDate2.ToString("yyyy-MM-dd HH:mm:ss");


                string messageToSend2 = GetGroupStr(token, groups, pageNo, SizeRow, startTime, endTime);
                //  Person[] people = GetFaceInfoByGroup(data[0], company_organization_no, pageNo, SizeRow, startTime, endTime);

                //再发送
                string messageToSend2 = GetNewtaken();
                ------------
                //byte[] bytesToSend2 = Encoding.UTF8.GetBytes(messageToSend2);


                //await client.SendAsync(new ArraySegment<byte>(bytesToSend2), WebSocketMessageType.Text, true, CancellationToken.None);
                  Console.WriteLine($"Sent: {messageToSend}");
                //AddTextToRichTextBox1($"Sent2: {messageToSend2}", Color.Green);
                 接收来自服务器的数据  4KB缓冲区  1024 * 4
                //byte[] buffer2 = new byte[1024 * 900000];
                //WebSocketReceiveResult result2 = await client.ReceiveAsync(new ArraySegment<byte>(buffer2), CancellationToken.None);


                //string messageReceived2 = Encoding.UTF8.GetString(buffer2, 0, result2.Count);
                 Console.WriteLine($"Received: {messageReceived}");
                //AddTextToRichTextBox1($"Received2: {messageReceived2}", Color.Green);
                //------------
                // 使用StreamReader逐行读取响应内容
                //using (Stream stream = await response.Content.ReadAsStreamAsync(), reader = new StreamReader(stream))
                //{
                //    while (!reader.EndOfStream)
                //    {
                //        string line = await reader.ReadLineAsync();
                //        Console.WriteLine(line);
                //    }
                //}
                // 关闭连接  
                // await client.CloseAsync(WebSocketCloseStatus.NormalClosure, "Closing", CancellationToken.None);
                // Console.WriteLine("WebSocket connection closed.");

               // string messageToSend2 = GetNewtaken();
               
                byte[] bytesToSend2 = Encoding.UTF8.GetBytes(messageToSend2);


                //string messageToSend2 = "Your command here";
                //byte[] bytesToSend2 = Encoding.UTF8.GetBytes(messageToSend2);
                await client.SendAsync(new ArraySegment<byte>(bytesToSend2), WebSocketMessageType.Text, true, CancellationToken.None);
                AddTextToRichTextBox1($"Sent: {messageToSend2}", Color.Green);
                // 接收来自服务器的数据
                StringBuilder receivedMessage = new StringBuilder();
                byte[] buffer2 = new byte[1024*4]; // 4KB 缓冲区
                WebSocketReceiveResult result2;

                do
                {
                    result2 = await client.ReceiveAsync(new ArraySegment<byte>(buffer2), CancellationToken.None);
                    if (result2.Count > 0)
                    {
                        string partialMessage = Encoding.UTF8.GetString(buffer2, 0, result2.Count);
                        receivedMessage.Append(partialMessage);
                    }
                } while (!result2.EndOfMessage);

                string messageReceived2 = receivedMessage.ToString();
                AddTextToRichTextBox1($"Received2:", Color.Green);
                AddTextToRichTextBox1(messageReceived2, Color.Green);


                AddTextToRichTextBox1("WebSocket connection closed.", Color.Green);
            }
        }

        public void TestRequest()
        {
           // Uri serverUri = new Uri("wss://example.com/websocket"); // 替换为你的WebSocket服务器URI  
            Uri serverUri = new Uri("ws://192.168.1.1:8080"); // 替换为你的WebSocket服务器URI  
            Task.Run(() => ConnectWebSocketAsync(serverUri)).GetAwaiter().GetResult();
        }
相关推荐
呆呆虫1213 分钟前
用 orjson 加速 SerpBase 响应解析:基准对比与注意事项
开发语言·php
心疼你的一切40 分钟前
Python自动发邮件实战定时发报表
大数据·开发语言·python
Wang's Blog2 小时前
Java 项目实战:交友项目 - 用户体系集成总结
java·开发语言·交友
中科三方2 小时前
IPv6检测常见问题:AAAA记录检测不通过是什么原因?
开发语言·php
caimouse3 小时前
MonoDevelop 编译用户应用程序时调用的是哪个编译器
c#
沫璃染墨3 小时前
从零入门计算机网络系列(十一):HTTP协议进阶——从重定向原理到GET/POST与Fiddler抓包
linux·服务器·开发语言·网络·c++·tcp/ip·html
刚入门的大一新生3 小时前
Linux-线程互斥
java·开发语言
香芋芋圆4 小时前
iD-editor 详解|OSM官方在线编辑器,基于D3.js的轻量地图编辑器
开发语言·javascript·编辑器
小熊恋旧4 小时前
Python 面向对象编程:方法、属性、继承与多态详解
开发语言·python
云边云科技_云网融合4 小时前
面向汽车零部件制造业场景的解决方案 | 70 秒:一台车下线的时间里,藏着五张网
开发语言·汽车·php