Hier ist der Code dass, ich geschrieben habe. Alles funktioniert auch, aber die Performance ist trotzdem nicht berauschend. Wenn ich z.B. einen anderen Fenster über meinen(für Server) verschiebe bleiben die Spuren drauf, weil die Grafikarte es nicht schafft UI mitzuzeichnen, weil die Schleife im Hintergrund läuft.
Frage: Kann ich noch was im Code verbessern?
//Server definieren.
ArrayList liste = new ArrayList();
TcpListener listener = new TcpListener(1111);
listener.Strart();
//Thread für den Lauscher
Thread thr = new Thread(new ThreadStart(listen));
thr.Start();
//Laucht am Port.
void listen()
{
while(true)
{
TcpClient client = listener.AcceptTcpListener();
liste.Add(new MyClient(client));
}
}
Ich möchte einen Server schreiben, der nicht in einer Scheife oder in Thread auf Clients wartet sondern Ereignisbasierend(sonst belaste ich den CPU unnötig).
Was kann ich da machen?
ArrayList liste = new ArrayList();
TcpListener listener = new TcpListener(1111);
listener.Strart();
while(true) //Diese Schleife durch einen Ereigniss ersetzen
{
TcpClient client = listener.AcceptTcpListener();
liste.Add(new MyClient(client));
}
Ich kriege eine Exception, die mir sagt das ein Assemblyverweis fehlt.
Also habe ich die ensprechende DLL-Datei dem Framework hinzufügt, das machei ch mit, z.B.: regasm Indy.Sockets.dll
Trotzdem kann der Visual .NET disen Namespace(using Indy.Sockets) nicht finden, obwohl es in WINDOWS/Assembly eingetragen ist?
Ich habe kleines Problem, und zwar:
Mein Microsoft Visual C# .NET, kann den Namensraum "System.Windows" nicht finden, der Compiler spuckt diesen fehler aus:
"Der Typ oder Namespacename 'Windows' ist in der Klasse oder dem Namespace 'System' nicht vorhanden (fehlt ein Assemblyverweis?)".
Beim Project3 werden die Verbindungen mit dem Clients per Threads gesteuert.
Damit ich es richtig verstehe heißt es, dass dadurch mehere Clients parallel mit dem Server kommunizieren können!?!?
In dem Code von dem Beispiel, wird der in einer while(!tc.IsAlive)-Schleife gewartet bis der Thread aktiv ist, was heißt es genauer(warten bis ein anderer fertig ist?)?
while ( true )
{
this.clientsock = serverSocket.Accept();
if ( this.clientsock.Connected )
{
Thread tc = new Thread(new ThreadStart(listenclient));
tc.Start();
//warten bis Thread aktiv ist?!!?!?!?!?!?!
while (!tc.IsAlive);
}
}
Ich habe eine Frage das erstmal, teilweise mit Prgrammiertechnik zutun hat. Aber ist es realistisch einen ProxyServer in C# zu programmieren, das die Endbenutzer in einem Thread verwaltet(in/out)?
Alle Antworten sind hier willkommen, wie von theoretischen Seite(Netzwerksicht) aber auch die, die programmiertechnik in C# betreffen.