1. 程式人生 > >C#伺服器端與客戶端通訊(客戶端)

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);
                }
            }
        }