通信 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 天前
微型导轨从精密制造到智能集成的跨越
大数据·运维·科技·机器人·自动化·制造
啃玉米的艺术家1 天前
UART实验
网络
biubiubiu07061 天前
Vibe Coding
运维
思为无线NiceRF1 天前
UWB电子围栏方案:一体化设计,宠物防走失+训导双突破
网络
加密棱镜1 天前
掘金 2026 网安市场:从合规驱动到创新驱动的投资机遇
网络
学不完的1 天前
ZrLog 高可用架构监控部署指南(Prometheus + Grafana)
linux·运维·架构·负载均衡·grafana·prometheus·ab测试
北京智和信通1 天前
可视・可管・可靠:智和信通赋能清华某院构建新一代监控运维平台
运维·网络监控·网管软件·信创运维·高校网络运维·高校网管
Sean‘1 天前
AKS 集群离线部署 kube-state-metrics 文档
运维·docker·容器
liucan20121 天前
nginx服务器实现上传文件功能_使用nginx-upload-module模块
服务器·前端·nginx
cyclejune1 天前
5 个本地 AI Agent 自动化工作流实战
运维·人工智能·自动化·clawdbot·openclaw