public static void send_message(member_chat user) { List<Socket> list; //пишем другим if (Console.ReadKey().Key == ConsoleKey.Enter) { Console.Write(user.name + ": "); string msg = Console.ReadLine(); list = new List<Socket>(user.clients); //только те что на запись, напишем себе и им if (list.Count > 0) Socket.Select(null, list, null, 200); foreach (Socket socket in list) { try { StreamWriter msgs = new StreamWriter(new NetworkStream(socket)); msgs.WriteLine(user.name + ": " + msg); msgs.Flush(); } catch (Exception) { Console.WriteLine("Один из пользователей покинул чат"); user.clients.Remove(socket); } } } }
public static void receive_message(member_chat user) { List<Socket> list = new List<Socket>(user.clients); if (list.Count > 0) Socket.Select(list, null, null, 200);//проверяем те, с которых ещё можно читать foreach (Socket socket in list) { string msg = new StreamReader(new NetworkStream(socket)).ReadLine(); List<Socket> list2 = new List<Socket>(user.clients);//напишет всем своим клиентам if (list2.Count > 0) Socket.Select(null, list2, null, 200);//только те, что на запись foreach (Socket socket1 in list2) { try { if (socket1 != socket) { StreamWriter msgs = new StreamWriter(new NetworkStream(socket1)); msgs.WriteLine(msg); msgs.Flush(); } } catch (Exception) { Console.WriteLine("Один из пользователей покинул чат"); user.clients.Remove(socket1); } } //напишем и себе Console.WriteLine(msg); } }
public static void send_message(member_chat user) { List <Socket> list; //пишем другим if (Console.ReadKey().Key == ConsoleKey.Enter) { Console.Write(user.name + ": "); string msg = Console.ReadLine(); list = new List <Socket>(user.clients); //только те что на запись, напишем себе и им if (list.Count > 0) { Socket.Select(null, list, null, 200); } foreach (Socket socket in list) { try { StreamWriter msgs = new StreamWriter(new NetworkStream(socket)); msgs.WriteLine(user.name + ": " + msg); msgs.Flush(); } catch (Exception) { Console.WriteLine("Один из пользователей покинул чат"); user.clients.Remove(socket); } } } }
public static void user_connect(member_chat user) { if (user.listener.Poll(100, SelectMode.SelectRead))//можно ли читать с сокета { Socket socket = user.listener.Accept(); user.clients.Add(socket); } }
public void Exchangeofinformation(member_chat user) { while (true) { ChatUserConnect.user_connect(user); ChatReceiveMessage.receive_message(user); ChatSendMessage.send_message(user); ChatReceiveMessage.receive_message(user); }//выход производится непосредственно закрытием чата, сокеты закрываются также }
public static void receive_message(member_chat user) { List <Socket> list = new List <Socket>(user.clients); if (list.Count > 0) { Socket.Select(list, null, null, 200); //проверяем те, с которых ещё можно читать } foreach (Socket socket in list) { string msg = new StreamReader(new NetworkStream(socket)).ReadLine(); List <Socket> list2 = new List <Socket>(user.clients);//напишет всем своим клиентам if (list2.Count > 0) { Socket.Select(null, list2, null, 200); //только те, что на запись } foreach (Socket socket1 in list2) { try { if (socket1 != socket) { StreamWriter msgs = new StreamWriter(new NetworkStream(socket1)); msgs.WriteLine(msg); msgs.Flush(); } } catch (Exception) { Console.WriteLine("Один из пользователей покинул чат"); user.clients.Remove(socket1); } } //напишем и себе Console.WriteLine(msg); } }