通信 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();


相关推荐
小洁忘了怎么分身1 小时前
多样本空间转录组 Harmony 整合与标签转移指南
网络·r语言·生信分析
微三云 - 廖会灵 (私域系统开发)2 小时前
抖店 OPC 自动化运营系统架构与商业代理分控体系完整解析
运维·系统架构·自动化
G31135422732 小时前
大模型不可用时,业务还能不能继续:企业需要设计降级方案
大数据·服务器·数据库·人工智能·深度学习
办公室马主任3 小时前
华南机械加工企业选MES服务商怎么选?
大数据·运维·人工智能·制造
小陈同学!!3 小时前
防火墙双机热备实验
运维·服务器
tianyuanwo3 小时前
DevOps主机管理员视角:企业级Linux主机权限管理策略与实践
linux·服务器·devops
三言老师4 小时前
CentOS8 Firewalld 高级规则中级实操教程
linux·运维·服务器·网络·centos
Promise微笑4 小时前
露点仪:康高特朝露(冷镜)vs 进口密析尔 、肖氏,怎么选?
运维
rcms152702692184 小时前
TEL 3308-000065-13 印刷电路板
网络
xywww1685 小时前
Claude Opus 5 企业使用怎么选:场景分层、成本测算和接入风险清单
网络