通信217

`using System.Diagnostics;

using System.Net;

using System.Net.Sockets;

using System.Text;

namespace SocketComm

{

internal class Program

{

static void Main(string[] args)

{

Console.WriteLine("Hello, World!");

List clientList = new List();

复制代码
        #region Socket tcp 服务端
        //{
        //    Socket socket = new Socket(
        //        AddressFamily.InterNetwork,
        //        SocketType.Stream,
        //        ProtocolType.Tcp
        //        );
        //    socket.Bind(new IPEndPoint(IPAddress.Any, 9000));
        //    socket.Listen(1);
        //    Task.Run(() =>
        //    {
        //        while (true)
        //        { Socket client = socket.Accept();
        //        clientList.Add(client);
        //            Task.Run(() =>
        //            {
        //                while (true)
        //                {
        //                    byte[] buffer = new byte[1024];
        //                    client.Receive(buffer);
        //                    string msg = Encoding.UTF8.GetString(buffer);
        //                    Console.WriteLine("从客户端收到:" + msg);
        //                    msg += "-服务端发送";
        //                    client.Send(Encoding.UTF8.GetBytes(msg));
        //                }

        //            });
        //        }
        //    });
        //    //var state = socket.BeginAccept(new AsyncCallback(result =>
        //    //{
        //    //    Console.WriteLine(result.IsCompleted);
        //    //}
        //    //), null);
        //    //state.AsyncWaitHandle.WaitOne();
        //    Console.WriteLine("服务监听已启动...");

        //}
        #endregion

        #region Socket Tcp 客户端
        //{
        //    using (Socket socket = new Socket(
        //       AddressFamily.InterNetwork,
        //       SocketType.Stream,
        //       ProtocolType.Tcp))
        //    {
        //        socket.ReceiveTimeout = 5000;
        //        socket.Connect(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 9001));
        //        byte[] bytes = Encoding.UTF8.GetBytes("Request");
        //        socket.Send(bytes);

        //        byte[] buffer = new byte[1024];
        //        try
        //        { socket.Receive(buffer);
        //            string msg = Encoding.UTF8.GetString(buffer).Replace("\0", "");
        //            Console.WriteLine(Encoding.UTF8.GetString(buffer));
        //        }
        //        catch (Exception ex)
        //        {
        //            Console.WriteLine("接收超时");
        //            Console.WriteLine(ex.Message);
        //        }
        //    }
        //}
        #endregion

        #region Socket 断线重连
        {
            Socket socket = new Socket(
                AddressFamily.InterNetwork, SocketType.Stream,
                ProtocolType.Tcp);

            socket.Connect(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 9000));
            Console.WriteLine(socket.Connected);
            while (true)
            {
                Thread.Sleep(1000);
                bool state = !(!socket.Connected ||
                    (socket.Poll(1, SelectMode.SelectRead)
                    && socket.Poll(1, SelectMode.SelectWrite)
                    && (socket.Available == 0)));
                if (state)
                {
                    Console.WriteLine("连接正常");
                    //socket.Shutdown(SocketShutdown.Both);
                    //socket.Dispose();
                }
                else
                {
                    Console.WriteLine("连接断开");
                    socket = new Socket(
                        AddressFamily.InterNetwork,
                        SocketType.Stream,
                        ProtocolType.Tcp);
                    var result = socket.BeginConnect(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 9000), null, null);
                    bool s = result.AsyncWaitHandle.WaitOne(1000);
                    if (s)
                    {
                        Console.WriteLine("重新连接");
                    }
                    else
                    {
                        try
                        {
                            socket.EndConnect(result);
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine(ex.Message);
                        }
                        Console.WriteLine("重新连接失败");

                    }
                    //var result = socket.BeginConnect(new IPEndPoint(IPAddress.Parse("192.168.2.1"), 102),
                    //    new AsyncCallback(r =>
                    //    {
                    //        Console.WriteLine(r.AsyncState);
                    //        if (!r.IsCompleted)
                    //            socket.EndConnect(r);
                    //        Console.WriteLine("回调执行");
                    //    }), null);
                    //bool s = result.AsyncWaitHandle.WaitOne(1000);
                    //if (s)
                    //{
                    //    Console.WriteLine("重新连接");
                    //}
                    //else
                    //{
                    //    try
                    //    {

                    //    } catch (Exception ex) {
                    //        Console.WriteLine(ex.Message);
                    //    }
                    Console.WriteLine("重连失败");
                    }
                }
                #endregion
                Console.WriteLine("重连失败");
            }
        }
    } } 

`

csharp 复制代码
using System.Diagnostics;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;

namespace SocketComm
{
    internal class Program
    {
        static async Task Main(string[] args)
        {
            Console.WriteLine("Hello, World!");
            List<Socket> clientList = new List<Socket>();

            #region
            Socket client;
            Task.Run(async()=>
                {
                try
                {
                    int index = 0;
                    while (true)
                    {
                        index++;
                        await Task.Delay(1000);
                        client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                        var result = client.BeginConnect(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 6666), null, null
                            );
                        bool state = result.AsyncWaitHandle.WaitOne(1000);
                        if (client.Connected)
                        {
                            client.EndConnect(result);
                            Console.WriteLine($"{DateTime.Now.ToString("HH:mm:ss")}-{DateTime.Now.Microsecond.ToString("000")} " +
                                $"[{index.ToString("000")}] 链接成功");

                        }
                        else
                        {
                            Console.WriteLine($"{DateTime.Now.ToString("HH-mm-ss")}-{DateTime.Now.Millisecond.ToString("000")}" +
                                $"[{index.ToString("000")}] 链接失败");
                        }
                        client.Dispose();

                    }
                } catch (Exception ex) {
                    Console.WriteLine(ex.Message);
                }
            });
        }
            #endregion
        }
    }


csharp 复制代码
using System.Diagnostics;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;

namespace SocketComm
{
    internal class Program
    {
        static async Task Main(string[] args)
        {
            Console.WriteLine("Hello, World!");
            List<Socket> clientList = new List<Socket>();

            #region
            //    Socket client;
            //    Task.Run(async()=>
            //        {
            //        try
            //        {
            //            int index = 0;
            //            while (true)
            //            {
            //                index++;
            //                await Task.Delay(1000);
            //                client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            //                var result = client.BeginConnect(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 6666), null, null
            //                    );
            //                bool state = result.AsyncWaitHandle.WaitOne(1000);
            //                if (client.Connected)
            //                {
            //                    client.EndConnect(result);
            //                    Console.WriteLine($"{DateTime.Now.ToString("HH:mm:ss")}-{DateTime.Now.Microsecond.ToString("000")} " +
            //                        $"[{index.ToString("000")}] 链接成功");

            //                }
            //                else
            //                {
            //                    Console.WriteLine($"{DateTime.Now.ToString("HH-mm-ss")}-{DateTime.Now.Millisecond.ToString("000")}" +
            //                        $"[{index.ToString("000")}] 链接失败");
            //                }
            //                client.Dispose();

            //            }
            //        } catch (Exception ex) {
            //            Console.WriteLine(ex.Message);
            //        }
            //    });
            //}
            #endregion
            Socket socket=new Socket(AddressFamily.InterNetwork,SocketType.Stream, ProtocolType.Tcp);
            socket.Connect(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 6666));

            {
                string msg = "hello";
                byte[] data=Encoding.UTF8.GetBytes(msg);
                socket.Send(data, 0, data.Length, SocketFlags.None);
                byte[] buffer = new byte[1024 * 1024];
                Console.WriteLine("开始接收");
                socket.Receive(buffer);
                Console.WriteLine("接收完成");
            }
        }
    }
}
csharp 复制代码
select a.course_name,a.course_id,
b.is_growing,b.growing_rate,
c.platform_name
from courses a
left join play_record b
on a.course_id=b.course_id
left join platforms c
on b.platform_id=c.platform_id
order by a.course_id,c.platform_id





csharp 复制代码
            this.DataContext = new FirstPageViewModel();





这么做的根本原因是数据库的存储格式和界面展示的需求不匹配。

数据库返回的是"扁平"表格,每行是一个课程在一个平台的数据。

但界面展示需要"分层"结构,每个课程一个卡片,里面包含它在所有平台的汇总图表和列表。

所以这个循环的作用就是进行数据转换,把数据库的"行数据"重新组织成界面的"课程对象",让数据能正确地显示在饼图和数据列表里。

通信协议


好的,我来为你详细解释 AutoResetEvent的作用以及这段异步代码的执行逻辑。

AutoResetEvent 是什么?

简单比喻:十字路口的红绿灯

想象一个十字路口:

new AutoResetEvent(false):红灯亮起,所有车辆(线程)都要停车等待

WaitOne():停车等待绿灯(如果当前是红灯就阻塞,如果是绿灯就直接通过,通过后自动变回红灯)

Set():把红灯变成绿灯,让一辆等待的车通过

关键特性:"自动重置"​ - 当一辆车通过后(一个线程被释放),信号灯会自动变回红灯,所以一次只能通过一辆车。

一句话解释,什么是SOCKET tcp客户端

Socket TCP客户端就像是打电话时的拨号方,主动连接到服务器的指定地址和端口,通过建立好的稳定"电话线"(TCP连接)来可靠地发送请求和接收响应。

一句话解释:什么是异步读写,什么是同步处理

一句话解释:同步处理就像排队打电话,必须等对方接听说完才能挂断;异步读写就像发微信,发送后可以去干别的,收到回复再处理。

一句话解释:代码干嘛

这段代码是在演示TCP客户端与服务器通信的两种方式:先同步发送"Hello"并阻塞等待回复,然后准备(但未执行)异步发送接收的代码框架。

简单说就是:连接服务器 → 同步发消息 → 等回复 → 准备异步框架(但没运行)

一句话解释:异步发送数据

异步发送数据就像寄信时不守在邮筒旁等回信,而是投递后继续做其他事,等邮差把回信送到家里再处理。

一句话解释:同步处理就像排队打电话,必须等对方接听说完才能挂断;异步读写就像发微信,发送后可以去干别的,收到回复再处理。

一句话解释:粘包、分包

粘包就是多个数据包粘在一起被一次收到,分包就是一个数据包被拆成多次收到。

这段被注释的代码演示了如何通过自定义协议头(序号1字节+协议名"zx"2字节+数据长度2字节)来解决TCP粘包分包问题,客户端按此格式打包发送10条"Hello"消息,服务器端按此格式解析接收的数据。

相关推荐
Qinana7 小时前
从数据包旅程到首屏渲染:深入理解 TCP/IP 如何决定你的 Web 性能
前端·tcp/ip·浏览器
茶杯梦轩4 天前
从零起步学习RabbitMQ || 第二章:RabbitMQ 深入理解概念 Producer、Consumer、Exchange、Queue 与企业实战案例
服务器·后端·消息队列
blasit6 天前
笔记:Qt C++建立子线程做一个socket TCP常连接通信
c++·qt·tcp/ip
YuMiao6 天前
gstatic连接问题导致Google Gemini / Studio页面乱码或图标缺失问题
服务器·网络协议
Sinclair9 天前
简单几步,安卓手机秒变服务器,安装 CMS 程序
android·服务器
Rockbean10 天前
用40行代码搭建自己的无服务器OCR
服务器·python·deepseek
茶杯梦轩10 天前
CompletableFuture 在 项目实战 中 创建异步任务 的核心优势及使用场景
服务器·后端·面试
海天鹰11 天前
【免费】PHP主机=域名+解析+主机
服务器
DianSan_ERP11 天前
电商API接口全链路监控:构建坚不可摧的线上运维防线
大数据·运维·网络·人工智能·git·servlet
呉師傅11 天前
火狐浏览器报错配置文件缺失如何解决#操作技巧#
运维·网络·windows·电脑