通信 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 小时前
十四.Linux——消息队列
linux·运维·开发语言
姜鱼问生7 小时前
Nginx 缓存命中率监控:从 X-Cache-Status 到实时统计
运维·nginx·缓存
Apipi*8 小时前
30天速通Linux 第六章信号及信号处理
linux·运维·信号处理
不像程序员的程序媛8 小时前
检测网络的命令mtr详解
网络
天启HTTP9 小时前
爬虫防封核心原理:IP轮换机制与风控规避逻辑
linux·服务器·网络·爬虫·tcp/ip
运维行者_9 小时前
网络性能监控怎么做?从自动发现到根因分析的4个环节
运维·服务器·网络·人工智能·支持向量机
此时不提桶,更待何时9 小时前
06-14-A-Kafka集群运维与迁移实战详解
运维·kafka
hz5678911 小时前
涉密视频会议设备配置指南:终端、音视频采集与配套设施选型
服务器·网络·数据库·安全·实时音视频·信息与通信·智能硬件
广州浮点FLOATLIC11 小时前
许可证服务器迁移后软件打不开:研发 IT 怎样定位连接问题
linux·服务器·数据库
优橙教育11 小时前
零基础学AI应用开发要多久?3个月能到什么水平
服务器·开发语言·网络·php