zoukankan      html  css  js  c++  java
  • 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!"));
            }
        }
    }
  • 相关阅读:
    [ssh] 通过ssh私钥生成公钥的方法
    [redis] hiredis-vip 简单使用
    [redis] redis cli的学习记录
    [ovs] 编写openflow流表的文档指引
    [iptables] 如何用iptables管理桥接模式下的设备
    [qemu][kvm] 在kvm嵌套kvm的虚拟机里启动kvm加速
    [qemu] 差分盘使用
    [yum] yum加速
    [ovs] openvswitch 从源码编译安装
    [qemu] qemu从源码编译安装
  • 原文地址:https://www.cnblogs.com/nanfei/p/14115747.html
Copyright © 2011-2022 走看看