⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 server.cs

📁 这是一个C#写的QQ聊天工具,大家可以看看怎么样,发表一个意见
💻 CS
字号:
using System;
using System.Drawing;
using System.Collections.Generic;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Net.Sockets;
using System.IO;
using System.Net;
using System.Threading;

namespace SQServer
{
    public partial class Server : Form
    {
        private TcpListener objTcpListener;
        private List<TcpClient> sockets = new List<TcpClient>();
        private NetworkStream objNetworkStream;
        private StreamReader objStreamReader;
        private StreamWriter objStreamWriter;

        public Server()
        {
            InitializeComponent();
        }

        private void Server_Load(object sender, EventArgs e)
        {
            Server.CheckForIllegalCrossThreadCalls = false;     
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //获取本地的IP地址组
            IPAddress[] ips = Dns.GetHostAddresses(Dns.GetHostName());
            //建立了一个侦听端口
            objTcpListener = new TcpListener(ips[0], 7788);
            //开始侦听
            objTcpListener.Start();
            MessageBox.Show("服务器已启动");




            Thread thread = new Thread(new ThreadStart(this.StartServer));

            thread.Start();
        }



        private void StartServer()
        {
            
            while (true)
            {
                //等待客户端连接过来,是阻塞状态
                TcpClient tc = objTcpListener.AcceptTcpClient();  
                sockets.Add(tc);
                //获得和本地侦听端口通讯的远方电脑的IP地址和端口
                IPEndPoint ipe = (IPEndPoint)tc.Client.RemoteEndPoint; 

                this.listBox1.Items.Add(ipe.Address.ToString() + ":" + ipe.Port.ToString());

                

            }

        }

        public string Reader(TcpClient tc)
        {
            //从连接好的连接中获取一个流
            objNetworkStream = tc.GetStream();
            //根据流,构造了一个文本读取器
            objStreamReader = new StreamReader(objNetworkStream);
            string str = null;
           
            
            //显示收到的数据

            while (objStreamReader.Peek() > 0)
            {
                //读取一行信息
                str += objStreamReader.ReadLine();
            }
            //objStreamReader.Close();
            return str;
        }

        public void Writer(TcpClient tc,string str)
        {
            //从连接好的连接中获取一个流
            objNetworkStream = tc.GetStream();
            //根据网络数据流构造一个文本写入器
            objStreamWriter = new StreamWriter(objNetworkStream);
            objStreamWriter.WriteLine(str);
            objStreamWriter.Flush();
            //objStreamWriter.Close();

        }

        private void Reader()
        {
            for (int j = sockets.Count - 1; j > -1; j--)
            {
                if (!sockets[j].Connected)
                {
                    sockets.RemoveAt(j);
                    continue;
                }
                if (sockets[j].Available > 0)
                {
                    string str = Reader(sockets[j]);
                    //IPEndPoint ipe = (IPEndPoint)sockets[j].Client.RemoteEndPoint;
                    Management(sockets[j],str);
                 }

            }

        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            Reader();
        }

        private void Management(TcpClient tc, string str)
        {
            string[] split = str.Split(':');
            if(split[0].Equals("0000")){
                Writer(tc,Registation(split));
            }
        }

        private string Registation(string[] strs)
        {
            MessageBox.Show("用户名" + strs[1] + "\r\n用户密码" + strs[2] + "\r\n头像" + strs[3]);
            return "注册成功!";
        }


    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -