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

客户端登陆界面

先定义三个窗口级变量(全局变量)

private TcpClient client;
        private NetworkStream stream;
        private bool control = false;

//ip地址与端口号要与服务器端在监听的一样

           IPAddress myip = IPAddress.Parse("127.0.0.1");

            int myport = 8686;
            IPEndPoint myserver=new IPEndPoint(myip,myport);
            client = new TcpClient();
            client.Connect(myserver);
            string strsql ="!!!" +textBox1.Text+"-"+textBox2.Text;
            byte[] bta = System.Text.Encoding.Default.GetBytes(strsql.ToCharArray());

//client是tcp连接时的标记,需要在跳转页面时将client传到另外一个界面           

 stream = client.GetStream();

//写入流

            stream.Write(bta, 0, bta.Length);

//清空流,并强制发送

            stream.Flush();
            control = true;
            //不在客户端使用线程的方法
              while (control)
            {
                Byte[] sta = new Byte[4096];
                int p, q;
               if (stream.DataAvailable)//表示有信息可以接收
               {
                   p = stream.Read(sta, 0, 4096);
                   string s1 = System.Text.Encoding.Default.GetString(sta, 0, p);
                   if (s1 == "true")//执行登陆操作
                   {
                            hei = true;

                            control = false;

//将tcp连接的用静态类传值

                        ctzh.client = client;
                   }
                   else
                   {
                        MessageBox.Show("账号或密码错误!");
                        return;
                   }
               }
              

            }



//跳转入新界面后

先定义三个全局变量

 private TcpClient client;
private NetworkStream stream;
 private bool control = false;


//标记tcp连接对象

client = ctzh.client;

//发送信息给服务器端

string msg = "***" + this.Tag;
            Byte[] bta = new Byte[1024];
            bta = System.Text.Encoding.Default.GetBytes(msg.ToCharArray());
            try
            {
                stream = client.GetStream();
                stream.Write(bta, 0, bta.Length);
                stream.Flush();
                control = true;

//开启一个线程去接收服务器端发回的信息
                Thread thread = new Thread(new ThreadStart(targett));
                 thread.Start();
            }
            catch(Exception ex)
            {
                MessageBox.Show(ex.Message);
            }

//接受信息的事件,并在事件中处理接收到的信息

private void targett()
        {
            while (control)
            {
                Byte[] bta = new Byte[4096];
                try
                {
                    int p, q;
                    if (stream.DataAvailable)//表示有信息可以接收
                    {
                        p = stream.Read(bta, 0, 4096);

//将接收到的信息转化成string的类型,用于显示或者赋值等等操作
                        string s1 = System.Text.Encoding.Default.GetString(bta, 0, p);
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
        }


猜你喜欢

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