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