C# socket TCP 通信

Server:

复制代码
void Main()
{
    var maxWaitingRequest = 10;
    var localSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    localSocket.Bind(new IPEndPoint(IPAddress.Any, 40000));
    localSocket.Listen(maxWaitingRequest);
    while (true)
    {
        var remoteSocket = localSocket.Accept();
        var remoteIP = (IPEndPoint)remoteSocket.RemoteEndPoint;
        Console.WriteLine("A new connection from {0}:{1} at {2}", remoteIP.Address.ToString(), remoteIP.Port.ToString(), DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
        ThreadPool.QueueUserWorkItem(acceptedConnectionHandler, remoteSocket);
    }
}

static void acceptedConnectionHandler(object p)
{
    var remoteSocket = (Socket)p;
    remoteSocket.Send(System.Text.Encoding.Default.GetBytes("Hi client!"));
    
    var data = new List<byte>();
    var dataBlock = new byte[1024];
    while (true)
    {
        var read = remoteSocket.Receive(dataBlock);
        data.AddRange(dataBlock.Take(read));
        if (read <= dataBlock.Length && data.Count > 0)
        {
            Console.WriteLine(System.Text.Encoding.Default.GetString(data.ToArray()));
            data.Clear();
        }
    }
}
复制代码

Client:

复制代码
void Main()
{
    var localSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    var localEP = new IPEndPoint(IPAddress.Any, 20000);
    localSocket.Bind(localEP);
    localSocket.Connect(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 40000));
    ThreadPool.QueueUserWorkItem(connectedConnectionHandler,localSocket);
    while(true)
        Thread.Sleep(100);
}

public static void connectedConnectionHandler(object p)
{
    var localSocket = (Socket)p;
    var data = new List<byte>();
    var dataBlock = new byte[1024];
    while (true)
    {
        var read = localSocket.Receive(dataBlock);
        data.AddRange(dataBlock.Take(read));
        if (read <= dataBlock.Length && data.Count > 0)
        {
            Console.WriteLine(System.Text.Encoding.Default.GetString(data.ToArray()));
            data.Clear();
            localSocket.Send(System.Text.Encoding.Default.GetBytes("Hi server!"));
        }
    }
}
复制代码

 

posted on   空明流光  阅读(315)  评论(0编辑  收藏  举报

编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
历史上的今天:
2019-12-10 javascript 访问 webservice
2017-12-10 xamarin android 报错 Could not load assembly 'Xamarin.Android.Support.v7.AppCompat
2016-12-10 VS2010 中 Entity Framework 多数据库并存方法
2015-12-10 C#访问非托管内存
2013-12-10 c# 获取 webbrowser 完整 cookie

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示