Ich Hab beim Server zwei Timer. Der eine Verbindet sich zum Client.
Unlogisch.
Ein Server erwartet auf einem bestimmten Port Verbindungsversuche, ein Client verbindet sich zu einem Server. Da es ja um Reverse Connection geht wäre es besser, wenn du diese Wörter (der Verstädnlichkeit zuliebe) durch "Master" und "Slave" oder "Master" und "Zombie" ersetzt.
Darüberhinaus kenne ich mich jetzt nicht mit .NET sockets aus, aber normalerweise sind Win-Sockets "blocking", das heißt, der Thread hängt solange, bis ein Ergebnis zurückgeliefert wurde, Timer sind also sinnlos. Stattdessen solltest du die Abfrage einfach mit einer Endlosschleife in einem seperaten Thread verpacken.
Zu deinem Punkt 2: kann eigtl. nicht sein, ich würde eher checken ob da ne Firewall zwischenhängt.
Ich bin wie gesagt kein .NET experte, aber so wie dein Code aussieht, hast du nicht viel Erfahrung mit der Socket-arbeit, ich würde mich mal im IntarWeb schlau machen, zum Beispiel da: http://www.eggheadcafe.com/articles/20020323.asp
oder natürlich da: http://msdn.microsoft.com/de-de/libr...ts.socket.aspx