通信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"消息,服务器端按此格式解析接收的数据。

相关推荐
公子烨1 小时前
脏页“幽灵”的捕获与处理
服务器
深信达沙箱1 小时前
终端沙箱数据防泄密方案
网络·安全
键盘鼓手苏苏1 小时前
Flutter for OpenHarmony:dart_ping 网络诊断的瑞士军刀(支持 ICMP Ping) 深度解析与鸿蒙适配指南
开发语言·网络·flutter·华为·rust·harmonyos
独行soc2 小时前
2026年渗透测试面试题总结-26(题目+回答)
android·网络·安全·web安全·渗透测试·安全狮
拍客圈2 小时前
Discuz搜索报错
服务器·网络·安全
w***29853 小时前
Knife4j文档请求异常(基于SpringBoot3,查找原因并解决)
java·服务器·数据库
郝学胜-神的一滴3 小时前
深入理解TCP连接的优雅关闭:半关闭状态与四次挥手的艺术
linux·服务器·开发语言·网络·tcp/ip·程序人生
hoududubaba8 小时前
ORAN压缩之块浮点压缩
网络·网络协议
砚边数影10 小时前
运营商网管系统重构:如何解决海量投诉数据下的“查询延迟”与“写入瓶颈”?
网络·数据库·时序数据库·kingbase·kingbasees·数据库平替用金仓·金仓数据库