核心代碼
public TcpClient TcpClient; // TCP連接 StreamReader ClientReader; // 網絡流 讀數據 StreamWriter ClientWriter; // 網絡流 寫數據 NetworkStream Stream; // 網絡流 Thread Thd; void GetMessage() // 接收服務器傳的數據 { if (Stream != null && Stream.DataAvailable) { rtxChatInfo.AppendText(DateTime.Now.ToString()); rtxChatInfo.AppendText(" 服務器說:\n"); rtxChatInfo.AppendText(ClientReader.ReadLine() + "\n"); //下拉框 rtxChatInfo.SelectionStart = rtxChatInfo.Text.Length; rtxChatInfo.Focus(); rtxSendMessage.Focus(); } } void GetConn() // 連接函數 { CheckForIllegalCrossThreadCalls = false; while (true) { try { var tex = txtServerIp.Text; var par = int.Parse(txtPort.Text.Trim()); TcpClient = new TcpClient(txtServerIp.Text, int.Parse(txtPort.Text.Trim())); Stream = TcpClient.GetStream(); ClientReader = new StreamReader(Stream); ClientWriter = new StreamWriter(Stream); txtServerIp.Enabled = false; btnConnect.Enabled = false; this.Text = "客戶端 " + "正在與" + txtServerIp.Text.Trim() + "連接……"; return; } catch { txtServerIp.Enabled = true; btnConnect.Enabled = true; this.Text = "連接失敗……"; //MessageBox.Show("連接失敗!", "錯誤", MessageBoxButtons.OK, MessageBoxIcon.Error); } } } private void btnConnect_Click(object sender, EventArgs e) // 連接按鈕 執行 { // 開始監聽 代碼 if (txtServerIp.Text.Trim() == "") // 服務器IP { MessageBox.Show("請輸入服務器IP", "客戶端信息", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } else { Thd = new Thread(new ThreadStart(GetConn));// 先執行 連接函數 ,在執行現場啟動,新線程 Thd.Start();// 線程啟動 } }
TcpListener Listener; // 監聽 public Socket SocketClient; // NetworkStream NetStream; // 網絡流 StreamReader ServerReader; // 服務器 讀 StreamWriter ServerWriter; // 服務器 寫 Thread Thd; // 線程 public void BeginLister() // 打開服務器 子函數 { while (true) { try { IPAddress[] Ips = Dns.GetHostAddresses(""); // 本機 IP地址 定義 string GetIp = "127.0.0.1"; //Ips[0].ToString(); // 獲取到IP 地址 Listener = new TcpListener(IPAddress.Parse(GetIp), 5000); // 監聽 Listener.Start(); // 開始監聽 CheckForIllegalCrossThreadCalls = false; btnBeginServer.Enabled = false;// 開始服務器 按鍵控件使能關閉 // MessageBox.Show("服務器已經開啟!", "服務器消息", MessageBoxButtons.OK, MessageBoxIcon.Information); this.Text = "服務器 已經開啟……"; SocketClient = Listener.AcceptSocket();//接受掛起----監聽到的Socket NetStream = new NetworkStream(SocketClient); // 網絡流 ServerWriter = new StreamWriter(NetStream); ServerReader = new StreamReader(NetStream); if (SocketClient.Connected) // 監聽 ScoketClient { MessageBox.Show("客戶端連接成功!", "服務器消息", MessageBoxButtons.OK, MessageBoxIcon.Information); } } catch { }// 不做處理 繼續測試監聽 } } private void GetMessage() // 獲取消息 { if (NetStream != null && NetStream.DataAvailable) // 網絡流 非空 或者數據可用 { rtxChatInfo.AppendText(DateTime.Now.ToString()); rtxChatInfo.AppendText(" 客戶端說:\n"); rtxChatInfo.AppendText(ServerReader.ReadLine() + "\n"); //下拉框 rtxChatInfo.SelectionStart = rtxChatInfo.Text.Length; rtxChatInfo.Focus(); rtxSendMessage.Focus(); } } private void tmrGetMess_Tick(object sender, EventArgs e) // 定時器 執行函數 { GetMessage(); }