tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
1
ZUGRIFFE
525
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    ErrorMaker ErrorMaker ist offline Grünschnabel
    Registriert seit
    Jun 2011
    Beiträge
    1
    Hallo zusammen

    Ich programmiere schon seit einiger Zeit mit Visual Basic 6.0 (auch wenn die Sprache ein wenig überholt ist).

    Nun habe ich mir eine ein C++ Client geschrieben und möchte mit meinem VB6 Server kommunizieren.

    Für den C++ Client habe ich folgende Socket Klasse verwendet: http://www.adp-gmbh.ch/win/misc/sockets.html

    Der C++ Client sieht so aus:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    
          try {
            SocketClient s(local_ip.c_str(), 12345);
     
            s.SendLine("ToVB");
     
            string l = "";
            while (1) {
              l = s.ReceiveLine();
              log_to_file("%s\n",l.c_str());
              if (l.empty()) break;
            }
            log_to_file("%s\n",l.c_str());
          } 
          catch (const char* s) {
            log_to_file("%s\n",s);
          } 
          catch (std::string s) {
            log_to_file("%s\n",s.c_str());
          } 
          catch (...) {
            log_to_file("%s\n","unhandled exception");
          }

    Der VB6 Server sieht so aus:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    
    'Listening
    Private Sub Listening_Click()
    SckServer.CloseSck
    SckServer.LocalPort = 12345
    SckServer.Listen
    MsgBox "Listening: " & GetSocketState(SckServer.State)
    End Sub
     
    Private Sub SckServer_ConnectionRequest(ByVal requestID As Long)
    SckServer.CloseSck
    MsgBox "SckServer ConnectionRequest"
    SckServer.Accept (requestID)
    MsgBox "SckServer ConnectionRequest: " & GetSocketState(SckServer.State)
    End Sub
     
    Private Sub SckServer_DataArrival(ByVal bytesTotal As Long)
    Dim tmp As String
    SckServer.GetData tmp
    MsgBox tmp
    If InStr(tmp, "ToVB") Then
    MsgBox "Sending"
    SckServer.SendData ("ToDLL")
    End If
    End Sub

    Geplant ist, dass der C++ Client dem VB6 Server den String "ToVB" schickt und dieser dem VB6 Server "ToDLL" zurückschickt.

    Von C++ zu VB6 funktioniert dies auch einwandfrei, ich erhalte die MessageBox mit dem "ToVB" String. Jedoch bleibt mir der C++ Client hängen wenn ich "ToDLL" zurückschicke.

    Ich habe ausserdem mit Erfolg (erhielt Antwort vom Google Server ohne hängen zu bleiben) folgendes mit dem C++ Client probiert um zu prüfen ob es an meinem VB6 Server Programm liegt:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    
          try {
                      SocketClient s("www.google.com", 80);
     
                      s.SendLine("GET / HTTP/1.0");
                      s.SendLine("Host: www.google.com");
                      s.SendLine("");
     
            string l = "";
            while (1) {
              l = s.ReceiveLine();
              log_to_file("%s\n",l.c_str());
              if (l.empty()) break;
            }
            log_to_file("%s\n",l.c_str());
          } 
          catch (const char* s) {
            log_to_file("%s\n",s);
          } 
          catch (std::string s) {
            log_to_file("%s\n",s.c_str());
          } 
          catch (...) {
            log_to_file("%s\n","unhandled exception");
          }

    Nun frage ich mich, ob es nicht möglich ist, einen einfachen String von VB6 zu C++ über die Socket Klasse zu senden.



    Vielen Dank im Voraus für jegliche Hilfe

    - ErrorMaker
     

  2. #2
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.169
    Hi.

    Wenn du die ReceiveLine Methode verwendest, wird versucht eine Zeile vom Server zu Lesen, d.h. bis ein \n kommt.

    Sende von deinem VB Programm "toDLL" & vbLf. (oder schließe die Verbindung vom Server)

    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

Ähnliche Themen

  1. Was ist ein Socket?
    Von benija im Forum Netzwerke
    Antworten: 5
    Letzter Beitrag: 15.06.08, 16:37
  2. Antworten: 2
    Letzter Beitrag: 30.01.08, 10:24
  3. Antworten: 2
    Letzter Beitrag: 29.01.08, 14:59
  4. Server Socket und Client Socket
    Von spiderman21 im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 2
    Letzter Beitrag: 23.10.07, 17:00
  5. Server Socket und Client Socket
    Von spiderman21 im Forum Netzwerke
    Antworten: 1
    Letzter Beitrag: 22.10.07, 01:48