Gdzieś tydzień temu zakończyłem temat o wysyłaniu wiadomości do wszystkich połączonych klientów.. Ok dzięki wam nauczyłem się jak robić metody xD. Ucze się i ucze wiec nie miejcie pretensji.. Przez kilka dni dałem sobie troche spokoju z C# i dzisiaj znów daje czadu, no ale cóż, myślałem, że poradze se z tą listą.. Coś wspominaliście o sortowaniu.. Odpalałem tą listę petlą for, ale dupa.. Pomożcie, aby wiadomość, która dostała sie do servera, to ten wysłał do wszystkich klientów...
class Program
{
static class ProgramHead
{
public static class Server
{
public static Socket listener = null;
public static List<ReadyToListen> MAX_CLIENTS = new List<ReadyToListen>();
public static void Start()
{
listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint ip = new IPEndPoint(IPAddress.Any, 5000);
listener.Bind(ip);
listener.Listen(10);
Console.WriteLine("Server Started ;)");
while (true)
{
Socket klient = listener.Accept();
byte[] buffername = new byte[256];
int bytesReceive;
bytesReceive = klient.Receive(buffername);
IPEndPoint klientIP = (IPEndPoint)klient.RemoteEndPoint;
Console.WriteLine("[connect] " + Encoding.UTF8.GetString(buffername, 0, bytesReceive) + " połączył się z serverem [{0}:{1}]",klientIP.Address,klientIP.Port);
new ReadyToListen(klient);
ProgramHead.Server.MAX_CLIENTS.Add(new ReadyToListen(new Socket(new SocketInformation()))); // przy działaniu tej pętli wyskakuje warning lub error
}
}
}
}
class ReadyToListen
{
Socket klientSocket = null;
public ReadyToListen(Socket klient)
{
klientSocket = (Socket)klient;
Thread oh = new Thread(new ThreadStart(ListenClient));
oh.Start();
}
private void ListenClient()
{
byte[] message = new byte[256];
int bytesReceive;
while (true)
{
bytesReceive = 0;
try
{
bytesReceive = klientSocket.Receive(message);
}
catch
{
Console.WriteLine("Client disconnected");
break;
}
string tekst = Encoding.UTF8.GetString(message, 0, bytesReceive);
Console.WriteLine(tekst);
byte[] SendPacket = Encoding.UTF8.GetBytes(tekst);
// tutaj miała być pętla, no ale MAX_CLIENTS jest w innej classie (Server)
klientSocket.Send(SendPacket); // tutaj stare jeszcze, do jednego klienta
}
}
}