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


相关推荐
^Rocky16 分钟前
IT 疑难杂症诊疗室:复杂技术问题解决实录
运维·bug
Ivanqhz23 分钟前
Slope One 算法详解:与矩阵分解、共现矩阵的异同
java·服务器·网络·人工智能·深度学习
挖掘狂人38 分钟前
当生产环境"变慢",我用这套 perf + strace 30 分钟定位瓶颈
linux·运维·性能优化
Wang's Blog1 小时前
Java 项目实战: 外卖平台-数据库环境搭建与十一张表结构解析
java·服务器·redis
王六米。1 小时前
RAG知识库建设 文档解析 切分与索引如何衔接
服务器·前端·网络·企业数字化转型·智钳智能盒子
wuyk5552 小时前
【Socket 进阶之路】第 7 章 IO 多路复用 select & poll 完整实战|多 fd 监听、超时等待、优缺点横向对比
服务器·开发语言·网络·数据库·物联网
人工智能培训2 小时前
大语言模型:从语言理解到通用智能的跃迁
linux·服务器·前端·人工智能
东方护航数据恢复(深圳)2 小时前
本地小算力设备数据恢复经典案例实操全解_东方护航数据恢复深圳店
大数据·服务器·算法·ai·gpu算力
阿明63 小时前
Linux进程【Linux】
linux·运维·服务器
Android系统攻城狮3 小时前
Linux Gstreamer深度解析之gst_audio_resampler_update调用流程与实战(三十)
linux·运维·服务器·gstreamer音视频·音视频进阶