public frClient() { InitializeComponent(); this.Padding = new Padding(1); txbNhapIP.Visible = true; txbNhapIP.Text = CaiDat.Server; sender = new NguoiGui() { Address = CaiDat.Server, Port = CaiDat.Port, Tcp = CaiDat.TcpServer }; t = new Thread(Listening); t.Start(); }
/// <summary> /// Lắng nghe các client kết nối đến /// </summary> void Listening() { while (_running) { try { TcpClient client = tcpListen.AcceptTcpClient(); lstClient.Add(client); NguoiGui sender = conversation.ThemClient(client); sender.call = new NguoiGui.CallBack(RefreshWeb); // Khi sender thực hiện delegate nó sẽ gọi lại Refresh Web // Tạo 1 thread mới để lắng nghe client này Thread clientThread = new Thread(new ParameterizedThreadStart(HandleClient)); clientThread.Start(client); LoadListSender(); } catch { } } }
/// <summary> /// Lắng nghe từng client /// </summary> /// <param name="client"></param> void HandleClient(object client) { TcpClient tcpclient = (TcpClient)client; NguoiGui sender = conversation.GetSender(tcpclient); TinNhan mes; NetworkStream ns = tcpclient.GetStream(); StreamReader sr = new StreamReader(ns); string s; while (tcpclient.Connected) { try { s = sr.ReadLine(); if (s != null) { if (s == CaiDat.MarkSendFile) // Nếu gửi file { s = DoReciveFile(sr); } mes = new TinNhan() { Content = s, Sender = sender, Time = DateTime.Now }; conversation.ThemTinNhan(mes); RefreshWeb(); continue; } } catch { } // Ko nhận được dữ liệu nữa có nghĩa là nó ngắt kết nối rồi RemoveClient(tcpclient); Thread.CurrentThread.Abort(); } }