Datenaustausch VB 5

Hallo,

ich möchte folgendes versuchen zu realisieren nur leider habe ich keine idee wie ich da vorgehen soll.

ich habe ein programm was auf 2 verschiedenen rechnern laufen soll, sobald alle 2 programme gestartet sind, sollen sie miteinander kommunizieren, also das eine programm soll daten ins netz senden und dann dem anderen programm mitteilen das er die daten gesendet hat und was für welche, so das das 2 program darauf reagieren kann und dann erneut daten in das netz senden kann und dies dann den ersten program mitteilen so das das dann wieder diese daten weiterverarbeiten kann.
Hat jemand diesbezueglich eine idee wie man das realisieren könnte. ich dachte an einen udp chat aber der geht soviel ich weiss nur im netzwerk. gibt es da vielleicht eine möglichkeit die daten via icq oder msn zu senden, da diese programme auf beiden rechnern installiert sind? der datenaustausch zwischen den 2 programen muss relativ schnell erfolgen, so das es via mail nicht geht denn die zeit sollte >1 Sekunde betragen.
Ich bin für jede hilfe oder lösungsansatz dankbar, da ich absolut keine idee habe

Ciao Alex

WinSock
Hi,
das WinSock-Steuerelement sollte dir da gute Dienste leisten. Dort kannst du einfach die IP des anderen Rechners und einen Port angeben und dann Daten senden. Das entsprechende Steuerelement auf der anderen Seite wartet (listen) auf diesem Port und wertet die Infos aus.

Wie kommst du zu UDP? Das User Datagram Protokoll bietet einen Verbindungslosen Dienst an, du willst aber gerade genau zwischen zwei Prozessen möglichst fehlerfrei kommunizieren, dann ist doch eher TCP das Protokoll der Wahl… .

Leider habe ich kein Beispiel zur Hand, aber vielleicht findest du was was bei Google (bin ich mir sogar fast sicher…)…

Wenn du ICQ o.ä. benutzen willst, dann schau dir doch einfach die Steuerelemente an, die VB dazu bietet (Problem ist natürlich, dass die Daten dann wahrscheinlich als Text zu lesen sind, was nicht immer zu wünschen ist…).

Ralph

Hallo Ralf,

danke für deine rasche hilfe. ich habe mich nun hingesetzt und das versucht ueber das winsock steuerelement zu realisieren.
Ich habe den clienten geschrieben und den server. der quelltext für den server lautet:

Option Explicit

Dim connect As Boolean

Private Sub Command1_Click()
If Not connect Then
Winsock1.LocalPort = Text2.Text
Winsock1.Listen
Text4.Text = „listening…“
Command1.Caption = „&Trennen“
connect = True
Else
connect = False
Winsock1.Close
Command1.Caption = „&Connect“
Text4.Text = „Getrennt…“
End If
End Sub

Private Sub Winsock1_Connect()
Text4.Text = „Verbunden…“
End Sub

Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
Winsock1.LocalPort = Text2.Text
Winsock1.Accept requestID
End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim msg As String
Winsock1.GetData msg
Text1.Text = Text1.Text & msg & vbCrLf
End Sub

Private Sub Winsock1_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
MsgBox „Es ist ein unerwarteder Fehler aufgetreten!“ & Chr(13) & "Fehlernummer: " & Number & Chr(13) & "Fehlermeldung laut System: " & Description
connect = True
Call Command1_Click
End Sub

wenn ich nun beide programme starte und der client (port 5190) auf connect klickt dann springt er bei mir in die prozedur
Winsock1_ConnectionRequest was er auch soll aber dann bei dem aufruf
Winsock1.LocalPort = Text2.Text ( in text2.text) steht 5190 drinn
bekomme ich dann folgende fehlermeldung
40020 welche besagt ungültige operation für den aktuellen zustand
Weisst Du wo hier in der sache der fehler liegt?
Ich habe diesbezueglich noch keine Ahnung :frowning:
Ich hoffe du kannst mir weiterhelfen :smile:

Lg Alex

Hallo Anno74,

leider wird mir aus Deinem Programm nicht wirklich klar, wozu welches Steuerelement dient und welche Funktion es wahrnehmen soll.

In der normalen VB-Hilfe findet sich nachfolgende Beispiel-Anwendung zum Winsock-Steuerelement.

Eventuell kannst Du ja erst einmal diese Beispiel-Anwendung zum Laufen bringen und anschliessend Deinen Bedürfnissen anpassen.

Gruss
Thomas

So erstellen Sie einen TCP-Server

Erstellen Sie ein neues Standard-EXE-Projekt.

Ändern Sie den Namen des Standardformulars in ?frmServer?.

Ändern Sie die Beschriftung des Formulars in ?TCP-Server?.

Zeichnen Sie ein Winsock-Steuerelement auf dem Formular, und ändern Sie dessen Namen in ?tcpServer?.

Fügen Sie zwei Textfeld-Steuerelemente (TextBox) zum Formular hinzu. Nennen Sie das erste ?txtSendData? und das zweite ?txtOutput?.

Fügen Sie den folgenden Code zum Formular hinzu.
Private Sub Form_Load()
’ Die LocalPort-Eigenschaft auf eine ganze
’ Zahl setzen. Dann die Listen-Methode aufrufen.
tcpServer.LocalPort = 1001
tcpServer.Listen
frmClient.Show ’ Das Client-Formular anzeigen.
End Sub

Private Sub tcpServer_ConnectionRequest _
(ByVal requestID As Long)
’ Prüfen, ob die State-Eigenschaft des
’ Steuerelements den Wert Closed (geschlossen)
’ hat. Falls nicht, die Verbindung schließen,
’ bevor die neue Verbindung akzeptiert wird.
If tcpServer.State sckClosed Then _
tcpServer.Close
’ Die Anforderung mit dem Parameter
’ requestID akzeptieren.
tcpServer.Accept requestID
End Sub

Private Sub txtSendData_Change()
’ Das Textfeld-Steuerelement namens txtSendData
’ enthält die zu sendenden Daten. Wenn der
’ Benutzer im Textfeld eine Eingabe macht, wird
’ die Zeichenfolge mit Hilfe der SendData-Methode
’ gesendet.
tcpServer.SendData txtSendData.Text
End Sub

Private Sub tcpServer_DataArrival _
(ByVal bytesTotal As Long)
’ Eine Variable für die eingehenden Daten deklarieren.
’ Die GetData-Methode aufrufen, und die
’ Text-Eigenschaft eines Textfelds namens
’ txtOutput mit den Daten belegen.
Dim strData As String
tcpServer.GetData strData
txtOutput.Text = strData
End Sub

Diese Prozedur erstellt eine einfache Server-Anwendung. Um das Szenario zu vervollständigen, müssen Sie jedoch auch eine Client-Anwendung erstellen.

So erstellen Sie einen TCP-Client

Fügen Sie zum Projekt ein neues Formular hinzu, und nennen Sie es ?frmClient?.

Ändern Sie die Beschriftung des Formulars in ?TCP-Client?.

Fügen Sie ein Winsock-Steuerelement zum Formular hinzu, und nennen Sie es ?tcpClient?.

Fügen Sie zwei Textfeld-Steuerelemente zum Formular hinzu. Nennen Sie das erste ?txtSend? und das zweite ?txtOutput?.

Zeichenen Sie ein Befehlsschaltfläche-Steuerelement (CommandButton) auf dem Formular, und nennen Sie es ?cmdConnect?.

Ändern Sie die Aufschrift des Befehlsschaltfläche-Steuerelements in ?Verbinden?.

Fügen Sie den folgenden Code zum Formular hinzu.
Wichtig Vergessen Sie nicht, den Wert der RemoteHost-Eigenschaft auf den Computernamen Ihres Computers zu setzen.

Private Sub Form_Load()
’ Das Winsock-Steuerelements heißt tcpClient.
’ Hinweis: um einen Remote-Host anzugeben,
’ können Sie die IP-Adresse (z.B. „121.111.1.1“)
’ oder den Computernamen des Computers
’ verwenden, wie hier gezeigt.
tcpClient.RemoteHost = „RemoteComputerName“
tcpClient.RemotePort = 1001
End Sub

Private Sub cmdConnect_Click()
’ Die Connect-Methode aufrufen, um einen
’ Verbindungsaufbau zu initiieren.
tcpClient.Connect
End Sub

Private Sub txtSendData_Change()
tcpClient.SendData txtSend.Text
End Sub

Private Sub tcpClient_DataArrival _
(ByVal bytesTotal As Long)
Dim strData As String
tcpClient.GetData strData
txtOutput.Text = strData
End Sub

Dieser Code erstellt eine einfache Client/Server-Anwendung. Um die beiden zusammen zu testen, führen Sie das Projekt aus, und klicken Sie auf ?Verbinden?. Geben Sie anschließend Text in das Textfeld txtSendData auf jedem Formular ein, und derselbe Text wird im Textfeld txtOutput des jeweils anderen Formulars angezeigt.

leicht abgeschwächt
Hallo,

Ich könnte mir vorstellen, daß das auch einfacher zu realisieren wäre mit Netzlaufwerken, hätte allerdings den Nachteil, daß beide Rechner aktiv nachsehen müßten, ob der jeweils andere etwas auf’s LW kopiert hat. Dafür kannst Du es sehr einfach programmieren.

Gruß

Gollum