C#服务器端与客户端的通信(服务器端)

Tcp协议+socket


1.服务器端开始监听

//通过winform窗口输入的服务器ip地址和端口号

 myip = IPAddress.Parse(textBox1.Text);
 myport = Int32.Parse(textBox2.Text);

//将ip地址和 端口号放入终端

myserver = new IPEndPoint(myip, myport);

//服务器端开始监听

TcpListener  listener = new TcpListener(myServer);

//服务器端可以接受50个客户端连入

 listener.Start(50);
  control = true;

//调用线程
  Thread thread = new Thread(new ThreadStart(Accepttargett));
  thread.Start();


//在服务器端写一个事件,用于客户端登陆

 private void Accepttargett()
        {
            while (control)
            {
                try
                {
                    ClientSock = listener.AcceptSocket();
                }
                catch
                {
                    continue;
                }
                //接受到信息
                Byte[] bta = new Byte[1024];
                int p = ClientSock.Receive(bta, bta.Length, 0);
                string name = System.Text.Encoding.Default.GetString(bta, 0, p);
                //登陆链接时做的操作
                 int a = name.IndexOf("-");
                    //substring的用法:(起始位,截取个数)
                    string name1 = name.Substring(3, a-3);
                    string Pwd = name.Substring(a + 1, p - a - 1);

//调用自己写的数据库操作语句判断接收到的用户名和密码是否正确
                    xyhsql xyh = new xyhsql();
                    bool userlevel = xyh.CheckUser(name1, Pwd);
                    if (userlevel == true)
                    {
                        //如果真确则发送true到用户端 
                       bta = System.Text.Encoding.Default.GetBytes("true".ToCharArray());
                     ClientSock.Send(bta);

//因为服务器允许50个客户端连入,所以再针对每个连入用户创建线程和socket对应操作

                    Thread thread = new Thread(new ParameterizedThreadStart(targett1));
                    thread.Start(ClientSock);
                    }
                    else
                    {
                        //如果不正确则发送false到用户端
                        bta = System.Text.Encoding.Default.GetBytes("false".ToCharArray());
                        ClientSock.Send(bta);
                    }
                   
                }
            }


//事件,用户处理每个用户的操作,

 private void  targett1(object sock)
        {
            Socket workSocket = (Socket)sock;
           // Byte[] bta = new Byte[4096];
            string sta;
            int k;

//当该工作线程是与对应的用户连接这的时候进入循环去接收用户发送来的信息
            while(workSocket.Connected)
            {
                Byte[] bta = new Byte[4096];
                try
                {
                    //接收到的字符数
                    k = workSocket.Receive(bta, bta.Length, 0);
                }
                catch 
                {
                    break;
                }

//接受到的信息前三个用于判断用户进行的操作
                if(k>3)
                {
                    sta = System.Text.Encoding.Default.GetString(bta, 0, k);
                    //如果是查询余额的操作
                    if (sta.Substring(0,3)=="***")
                    {
                        string cxid = sta.Substring(3, sta.Length - 3);
                        string strsql = "SELECT * FROM admin where uname='" + cxid + "'";
                        DataSet ds= xyhsql.Query(strsql);
                        if(ds.Tables[0].Rows.Count!=0)
                        {
                            string stc = ds.Tables[0].Rows[0]["uyue"].ToString();
                            bta = System.Text.Encoding.Default.GetBytes(stc.ToCharArray());
                            workSocket.Send(bta);
                        }
                        continue;
                    }
                    //存钱操作
                    else if(sta.Substring(0, 3) == "ins")
                    {
                     
                        int a = sta.IndexOf("-");
                        string cxid = sta.Substring(3, a - 3);
                        int money = int.Parse(sta.Substring(a+1, sta.Length - a-1));
                        bool xyh = cq(cxid, money);
                        if (xyh == true)
                        {
                            bta = System.Text.Encoding.Default.GetBytes("true".ToCharArray());
                            ClientSock.Send(bta);
                        }
                        else
                        {
                            bta = System.Text.Encoding.Default.GetBytes("false".ToCharArray());
                            ClientSock.Send(bta);
                        }
                    }
                    //取钱操作
                    else if (sta.Substring(0, 3) == "get")
                    {
                        int a = sta.IndexOf("-");
                        string cxid = sta.Substring(3, a - 3);
                        int money = int.Parse(sta.Substring(a + 1, sta.Length - a - 1));
                        bool xyh = qq(cxid, money);
                        if (xyh==true)
                        {
                            bta = System.Text.Encoding.Default.GetBytes("true".ToCharArray());
                            ClientSock.Send(bta);
                        }
                        else
                        {
                            bta = System.Text.Encoding.Default.GetBytes("false".ToCharArray());
                            ClientSock.Send(bta);
                        }
                    }
                    //转账操作
                    else if (sta.Substring(0, 3) == "zhz")
                    {
                        int a = sta.IndexOf("-");
                        int b = sta.IndexOf("+");
                        string cxid1 = sta.Substring(3, a - 3);
                        string cxid2 = sta.Substring(a + 1, b - a - 1);
                        int money = int.Parse(sta.Substring(b + 1, sta.Length - b - 1));
                        bool xyh1 = qq(cxid1, money);
                        bool xyh2 = cq(cxid2, money);
                        if(xyh1==true&&xyh2==true)
                        {
                            bta = System.Text.Encoding.Default.GetBytes("true".ToCharArray());
                            ClientSock.Send(bta);
                        }
                        else
                        {
                            bta = System.Text.Encoding.Default.GetBytes("false".ToCharArray());
                            ClientSock.Send(bta);
                        }
                    }
                    //用户退出
                    else if(sta.Substring(0,3)=="out")
                    {
                        string q = sta.Remove(0, 3);
                        Offline(q);
                        continue;
                    }
                }
            }
            Thread.Sleep(200);
        }

猜你喜欢

转载自blog.csdn.net/tzc_xyh/article/details/73057211