vb.net + Sockets

Spy

Ray Magini
ID: 65650
L
20 April 2006
219
12
Ich habe folgendes Problem:
Ich habe ein Programm, geschrieben in VB6 (Source als Visual Studio6 Projekt). In dem Programm werden 3 Sockets benötigt. In der 6er konnte man sich einfach ein Socket-Element auf die Fläche ziehen und schon war die hälfte fertig. Nun soll das ganze erweitert und auf .NET-Stand gebracht werden (Visual Studio 2005). Das Problem: VS2005 unterstützt die alten Sockets bzw das "alte Socket-management" nicht. Hat da jemand ne Idee, wie bzw ob, ich möglichst unkomplziert die alte Funktionsweise wieder herstellen kann?
 
Hallo,

Ich weiß nicht wie es sich mit den alten Sockets aus Vb 6 verhält, aber in VB.net musst du die ganze Sache anderst angehen.

Der Server braucht einen Thread worin er nach Clients lauscht ( Dim tcpListener As New TcpListener(portNumber) ) und einen Thread worin er nach ankommenden Daten lauscht.

Der Client muss nun zum Server connecten ( Dim tcpClient As New System.Net.Sockets.TcpClient() ) und dannach braucht auch der Client einen Thread worin er die ankommenden Daten vom Server abholen kann.

Gruß

MonkeyDRuffy
 
Soweit, so einfach. Das Problem: Auf den alten 6er Elementen konnte man Funktionen ablegen (so, wie es bei einem butten die button_click gibt kann man bei den Winsocks z.b. ein Winsock_ConnectionRequest festlegen). Da das Programm, um das es später gehen wird, etwa 70000 Zeilen Code hat und dementsprechenden Aufwand erfordern würde, wenn man alles komplett neu machen müsste, wäre es natürlich vortteilhaft, wenn man diese Elemente importieren könnte. Mit einem Winsock-Element ist mir das schon gelungen, wenn ich dagegen 3 benutze bekomme ich folgende Fehlermeldung

"Fehler beim Erstellen des Formulars. Weitere Informationen finden Sie in Exception.InnerException. Fehler: Eine Ausnahme vom Typ System.Windows.Forms.AxHost+InvalidActiveXStateException wurde ausgelöst.."

... in der ersten Zeile, die Hilfe sagt mir natürlich nichts :ugly:
 
Hallo,

Also wie gesagt, ich weiß nicht wie es sich mit dem Winsock verhält. Aber grob wie es mit den System.Net.Socket funktioniert.

Ich habe mir damals eine Klasse geschrieben, welche einen Server und einen Client beinhaltet hat und habe dann bei den verschiedenen Ereignissen Events ausgelöst. z.B. "wenn ein Client connected" ist oder "wenn ein Disconnect stattgefunden hat" oder was auch immer.

Somit hättest du dann wieder diese Ereignisse die du verwerten kannst. Wie du sagtest mit dem Button, welcher dir ein Ereignis zur Verfügung stellt, so würde dir deine Klasse diese Ereignisse zur Verfügung stellen.

Gruß

MonkeyDRuffy

*Rechtschreib Edit*
 
Ist soweit ja richtig, es ist nur ziemlich übel den Code komplett umzustricken, die vordefinierten Funktionen haben ja alles, wenn man so will, automatisch gemacht. Jetzt wiederum müsste ich überall dort, wo eben so eine Funktion nötig wäre, diese auch im Quelltext "verlinken" (ich hoffe es wird klar, was ich meine). Deswegen wär es klasse, wenn ich noch mit den alten Objekten arbeiten könnte.
 
Wenn das Programm wirklich so komplex ist, dass du es nicht umbauen kannst, würde ich an deiner Stelle das Socket-Control aus VB6 für .Net nachbauen. Ist halt ein bisschen Gefrickel, aber wenn du es fertig hast musst du wenigstens nicht mehr alles überarbeiten. Außerdem sparst du dir das Interop.

Allerdings solltest du dir überlegen, ob es sich nicht lohnt, das Programm "neu" zu schreiben. Das Konvertieren von VB6 auf .Net ist nicht so toll - das Ergebnis ist ein unwartbares Programm mit viel Spaghetti-Code. Je nachdem, wie oft du Änderungen an dem Programm vornehmen musst, rate ich dir also von der Vb6->.Net Konvertierung ab. Oder machst du eine pure Compiler-Migration in einem Programm, dass eh nie wieder angefasst wird?
 
Garnicht gemerkt, dass hier noch was kam.

Die Sockets funktionieren offenbar doch, leider gab es beim migrieren Probleme, die vorher bei vb6 nicht aufgetreten sind, bei .net aber zum sofortigen Absturz führen (Syntaktisch war alles in Ordnung, deswegen hab ich mich mit der Fehlersuche schwer getan).
Gibt jetzt nurnoch kleinere Probleme, aber das ist soweit ok. Bei dem großen Programm (das hier war ja nur zum testen) werd ich mir erstmal angucken, welchen Code (oder Kot^^) VS generiert und dann überlegen, was sinnvoll ist.
Danke für eure Ideen.