// Ожидание Broadcast пакетов новых пользователей private void ListenUDP() { var udpListener = new UdpClient(udp_port); udpListener.EnableBroadcast = true; while (true) { IPEndPoint host = null; var receivedData = udpListener.Receive(ref host); if (alive) { if (!host.Address.Equals(localIP)) { if (!isConnected(host.Address)) { var chatter = new ChatParticipant(); chatter.tcp_port = tcp_port; chatter.IPv4Address = host.Address; string message = Encoding.Unicode.GetString(receivedData); DisplayMessage(message, true); chatter.Connect(); chatter.SendMessage(" подключился!", username, localIP.ToString(), CONNECT); chatter.SendMessage(tbChat.Text, username, localIP.ToString(), SENDHISTORY); Chatters.Add(chatter); Task.Factory.StartNew(() => ListenChatter(Chatters[Chatters.IndexOf(chatter)])); } } } } }
// Ожидание подключений private void ListenForConnections() { tcpListener = new TcpListener(localIP, tcp_port); tcpListener.Start(); while (alive) { if (tcpListener.Pending()) { var chatter = new ChatParticipant(); chatter.tcpClient = tcpListener.AcceptTcpClient(); chatter.IPv4Address = ((IPEndPoint)chatter.tcpClient.Client.RemoteEndPoint).Address; chatter.stream = chatter.tcpClient.GetStream(); chatter.SendMessage(" подключился!", username, localIP.ToString(), CONNECT); Chatters.Add(chatter); Task.Factory.StartNew(() => ListenChatter(chatter)); } } tcpListener.Stop(); }