• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

C#网络TCP服务器端的实现

武飞扬头像
大浪淘沙胡
帮助1

1、实现代码

private const int BACK_LOG = 5;
        private Socket tcpServer;
        private Socket tcpClient1;
        private CancellationTokenSource cts = new CancellationTokenSource();
        private void btServerStart_Click(object sender, EventArgs e)
        {
            if (this.btServerStart.Text == "打开")
            {
                //Socket实例化
                tcpServer = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                //创建EndPoint
                EndPoint ep = new IPEndPoint(IPAddress.Parse(this.tbServerIPAddress.Text), int.Parse(this.tbServerPort.Text));
                try
                {
                    //绑定
                    tcpServer.Bind(ep);
                }catch(Exception ex)
                {
                    MessageBox.Show("服务器打开失败:"   ex.Message);
                    return;
                }
                MessageBox.Show("服务器打开成功");
                this.btServerStart.Text = "关闭";
                tcpServer.Listen(BACK_LOG);
                Task.Run(new Action(() =>
                {
                    ListenConnection();
                }));
            }
            else
            {
                tcpServer?.Close();
                this.btServerStart.Text = "打开";
            }
        }

        private void ListenConnection()
        {
            while (true)
            {
                Socket tcpClient = tcpServer.Accept();
                tcpClient1 = tcpClient;
                Task.Run(new Action(() =>
                {
                    ReceiveSource(tcpClient);
                }));
            }
        }

        private void ReceiveSource(Socket tcpClient)
        {
            while (!cts.IsCancellationRequested)
            {
                byte[] buffer = new byte[1024 * 10];
                int length = -1;
                try
                {
                    length = tcpClient.Receive(buffer, SocketFlags.None);
                }
                catch (Exception ex)
                {
                    break;
                }
                if (length > 0)
                {
                    byte[] result = new byte[length];
                    Buffer.BlockCopy(buffer, 0, result, 0, length);
                    ReceiveDataDisplay(result);
                }
            }
        }

        private void ReceiveDataDisplay(byte[] result)
        {
            string str = System.Text.Encoding.Default.GetString(result);
            if (tbServerReceiver.InvokeRequired)
            {
                MethodInvoker mi = delegate ()
                {
                    string str1 = tbServerReceiver.Text;
                    tbServerReceiver.Text = str1  Environment.NewLine   str;
                };
                tbServerReceiver.Invoke(mi);
            }
            else
            {
                string str1 = tbServerReceiver.Text;
                tbServerReceiver.Text = str1   "/n"   str;
            }
        }

        private void btServerSend_Click(object sender, EventArgs e)
        {
            if (tcpClient1.Connected)
            {
                string str = this.tbServerSender.Text;
                if (str.Length > 0)
                {
                    byte[] b = System.Text.Encoding.Default.GetBytes(str);
                    try
                    {
                        tcpClient1.Send(b);
                    }catch(Exception ex)
                    {
                        MessageBox.Show("发送失败");
                        return;
                    }
                }
                
            }
        }
学新通

2、运行效果
学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhghfcgf
系列文章
更多 icon
同类精品
更多 icon
继续加载