通信(Socket)

这里写图片描述

这里写图片描述

代码部分:
Client:

        Socket sClient;
        private void txtConnect_Click(object sender, EventArgs e)
        {
            sClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            sClient.Connect(txtIp.Text, int.Parse(txtPort.Text));
            txtMsg.Text += "连接成功\r\n";

            Thread t = new Thread(() =>
            {
                byte[] bs = new byte[1024];
                while (true)
                {
                    int len = sClient.Receive(bs);
                    txtMsg.Invoke(new Action<string>((msg) =>
                    {
                        txtMsg.Text += msg + "\r\n";
                    }), Encoding.UTF8.GetString(bs, 0, len));
                }
            });
            t.IsBackground = true;
            t.Start();
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            sClient.Send(new byte[] {
                (byte)2
            });
            sClient.Shutdown(SocketShutdown.Both);
            sClient.Dispose();
            sClient.Close();
        }

        private void btnSend_Click(object sender, EventArgs e)
        {
            //byte[] bs = new[]
            //{
            //    (byte)0
            //};
            byte[] bs = new byte[1024];
            bs[0] = 0;
            byte[] bs2 = Encoding.UTF8.GetBytes(txtSend.Text);
            Array.Copy(bs2, 0, bs, 1, bs2.Length);
            sClient.Send(bs);
        }

        private void btnSP_Click(object sender, EventArgs e)
        {
            byte[] bs = new[]
            {
                (byte)1
            };
            sClient.Send(bs);
        }

Server:

        Dictionary<string, Socket> dicClient = new Dictionary<string, Socket>();
        private void btnStart_Click(object sender, EventArgs e)
        {
            Socket sServer = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            sServer.Bind(new IPEndPoint(IPAddress.Parse(txtIp.Text), int.Parse(txtPort.Text)));
            sServer.Listen(10);
            txtMsg.Text += "启动成功\r\n";

            //启动新线程,用于接收客户端请求。
            Thread tAccept = new Thread(() =>
            {
                int index = 0;
                while (true)
                {
                    Socket sClient = sServer.Accept();
                    index++;
                    string key = "用户" + index;
                    dicClient.Add(key, sClient);
                    lbClient.Invoke(new Action<string>((clientName) =>
                    {
                        lbClient.Items.Add(clientName);
                    }), key);

                    Thread tReceive = new Thread(() =>
                    {
                        byte[] bs = new byte[1024];
                        while (true)
                        {
                            int len = sClient.Receive(bs);
                            if (bs[0] == 1)
                            {
                                //闪屏
                                Point old = this.Location;
                                Random r = new Random();
                                for (int i = 0; i < 10; i++)
                                {
                                    this.Invoke(new Action(() =>
                                    {
                                        this.Location = new Point(old.X + r.Next(-10, 10), old.Y + r.Next(-10, 10));
                                    }));
                                    Thread.Sleep(100);
                                    this.Invoke(new Action(() =>
                                    {
                                        this.Location = new Point(old.X + r.Next(-10, 10), old.Y + r.Next(-10, 10));
                                    }));
                                    Thread.Sleep(10);
                                }
                            }
                            else if (bs[0] == 0)
                            {
                                //文本
                                txtMsg.Invoke(new Action<string>((msg) =>
                                {
                                    txtMsg.Text += "\r\n"+msg;
                                }), sClient.RemoteEndPoint + ":" + Encoding.UTF8.GetString(bs, 1, len - 1));
                            }
                            else if (bs[0] == 2)
                            {
                                break;
                            }
                        }
                    });
                    tReceive.IsBackground = true;
                    tReceive.Start();
                }
            });
            tAccept.IsBackground = true;
            tAccept.Start();
        }

        private void btnSend_Click(object sender, EventArgs e)
        {
            Socket client = dicClient[lbClient.SelectedItem.ToString()];
            client.Send(Encoding.UTF8.GetBytes(txtSend.Text));
        }
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下 4载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值