通信 29 socket

socket

csharp 复制代码
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<Socket> clientList = new List<Socket>();

            #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
            Console.ReadLine();
        }
    }
}
csharp 复制代码
// 问题代码
Task.Run(() => { /* 同步Accept循环 */ }); // 方式1:后台线程同步Accept
var state = socket.BeginAccept(...); // 方式2:异步BeginAccept
state.AsyncWaitHandle.WaitOne(); // 这会阻塞主线程
csharp 复制代码
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<Socket> clientList = new List<Socket>();

            #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);
                                msg = msg.Replace("\0", "");
                                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
        }
    }
}
csharp 复制代码
            #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

winform

csharp 复制代码
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<Socket> clientList = new List<Socket>();

            #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);
                                msg = msg.Replace("\0", "");
                                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
        }
    }
}


csharp 复制代码
// 1. 创建Socket对象
using (Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp))
{
    // 2. 设置接收超时为5秒
    socket.ReceiveTimeout = 5000;
    
    // 3. 连接到服务器(127.0.0.1:9001)
    socket.Connect(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 9001));
    
    // 4. 准备要发送的数据并发送
    byte[] bytes = Encoding.UTF8.GetBytes("Request");
    socket.Send(bytes);
    
    // 5. 准备接收缓冲区并尝试接收响应
    byte[] buffer = new byte[1024];
    try
    {
        // 这里会阻塞等待,最多等待5秒
        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);
    }
} // 6. using语句结束,自动关闭连接

winform

csharp 复制代码
List<int> yearMonths=listDate.Where(d=>
            DateTime.Parse(d).Year==year).Select(d=>
            DateTime.Parse(d).Month).Distinct().ToList();


相关推荐
志栋智能15 小时前
超自动化巡检:驱动运维团队从操作走向优化
运维·服务器·自动化
乌托邦的逃亡者15 小时前
Dockerfile的配置和使用
linux·运维·docker·容器
小此方15 小时前
Re:Linux系统篇(三)指令篇 · 二:十二个高频指令精讲+重定向操作+“一切皆文件“深入理解
linux·运维·服务器
花无缺就是我16 小时前
2026年最新内网穿透有哪些方案,详细列举
网络·电信专线
用户14010567751916 小时前
线上接口偶发超时,最后发现是 conntrack 打满:一次网络故障排查实战
运维
以太浮标16 小时前
华为eNSP模拟器综合实验之- 主机没有配置缺省网关时,通过路由式Proxy ARP实现通信(arp-proxy enable)
运维·网络·网络协议·华为·智能路由器·信息与通信
时空自由民.16 小时前
蓝牙协议栈知识和网络协议栈知识对比
网络·arm开发·网络协议
REDcker16 小时前
Linux disown命令详解 后台作业脱管与终端退出
linux·运维·chrome
cyber_两只龙宝16 小时前
【Oracle】Oracle之SQL的转换函数和条件表达式
linux·运维·数据库·sql·云原生·oracle