Ergebnis 1 bis 5 von 5
  1. #1
    Anfänger
    Registriert seit
    11.08.2010
    Beiträge
    7

    Standard Winsock Problem

    Hallo ich bin neu gier Grüße euch alle.

    ich habe folgendes Problem:
    ich sende ein MSGBOX | Hallo vom Client
    es kommt hier noch richtig an:
    Code:
    procedure TServer.Connect;
      var
        Buffer: Array[0..8192] Of AnsiChar;
        iRecv: Integer;
      Begin
        if (WSAStartup($0202, wsaData) <> 0) then
        begin
       
          Writeln('Unable to start winsock, unable to continue');
          Readln;
       
          Exit;
        end;
        Close := False;
        repeat
       
          //Prepare a listen socket to be used for our connection
          //and declare its host/port information
          hSocket := Socket(AF_INET, SOCK_STREAM, 0);
          Addr.sin_family   := AF_INET;
          Addr.sin_port     := htons(hPort);
          Addr.sin_addr.S_addr := INET_ADDR(PAnsiChar(GetIPFromHost(hHost)));
       
          Writeln('Connecting to ' + GetIPFromHost(hHost));
       
          //Attempt the connection using our socket
          if (Winsock.Connect(hSocket, Addr, SizeOf(Addr)) = 0) then
          begin
       
            Writeln('Connected to host');
       
            //Notify our connected client of the connection and send
            //our information
            SendData('ADDNEW|' + UserName + '|' + CompName + '|' + 'Awaiting commands');
       
            //Attempt to receive data from our socket.
            ZeroMemory(@Buffer, SizeOf(Buffer));
            iRecv := Recv(hSocket, Buffer, SizeOf(Buffer), 0); 
            while ((iRecv > 0) and (iRecv <> INVALID_SOCKET)) do     // <-----------Im Buffer ist alles ok
            begin
              ReceiveData(hSocket, @Buffer);      // <-----------Im Buffer ist alles ok
              ZeroMemory(@Buffer, SizeOf(Buffer));
              iRecv := Recv(hSocket, Buffer, SizeOf(Buffer), 0);
            end;
    Und dann der Fehler wo ich nicht weis woran es liegt:
    Code:
    procedure TServer.ReceiveData(Socket: TSocket; Buffer: PByte);
      var
        Data: AnsiString;
        strArr: TDynStringArray;
      begin
       
        //Convert our data to a AnsiString and trim it
        Data := AnsiString(Buffer);
        Data := Trim(Data);    // <-----------Im Buffer Sind nurnoch Fragezeichen
       
        if Length(Data) > 0 then begin     // <-----------in Data Sind die Fragezeichen
       
        //Setup our dynamic array structure
        StrArr := Explode('|', Data);    // <-----------in Data Sind die Fragezeichen
       
        //Display incoming message (if strArr[0] = 'MSGBOX')
        if StrArr[0] = 'MSGBOX' then begin
         MessageBox(0,PChar(StrArr[1]),'Winsock Example',MB_OK + MB_ICONINFORMATION);
        end;
    Und die Fragezeichen gehen so durch Explode durch und am ende bei ZeroMemory(@Buffer, SizeOf(Buffer)); ist die Nachricht wieder richtig zusehen im Buffer was ist da dazwischen was falsch ist kann mir da jemand helfen???
    ich kann auch den kompletten Text posten bei belieben oder auch das Ganze Projekt auf mein Server hochladen und als Download anbieten mit Client und allem eben.
    Geändert von ProfessorBass (12.08.2010 um 17:37 Uhr)

  2. #2

    Registriert seit
    17.06.2009
    Beiträge
    559

    Standard

    Benutzt du Delphi2009 bzw. 2010?
    Falls ja, könnte es ein Unicode-Problem sein.
    Ändere mal
    Code:
    procedure TServer.ReceiveData(Socket: TSocket; Buffer: PByte);
    in
    Code:
    procedure TServer.ReceiveData(Socket: TSocket; Buffer: ansistring);
    Und übergib ReceiveData direkt den Buffer und keinen Zeiger.
    Dann könnte es funktionieren.

    Ansonsten lad am besten mal das ganze Projekt hoch oder lass es mir per PM zukommen, dann schau ich es mir mal genauer an.

  3. #3
    Anfänger
    Registriert seit
    11.08.2010
    Beiträge
    7

    Standard

    Ok gut jetzt war ja wiedermal was billiges *gg*
    vielen dank echt Cool von dir.

    nur da tritt ein weiteres Problem auf meine Frage ist wieso kann ich nicht bei
    MessageBox(0,PChar(StrArr[1]),'Winsock Example',MB_OK + MB_ICONINFORMATION)

    aus dem PChar ein PAnsiChar machen das kann doch nicht sein ja ich habe 2009 und baue das Projekt um das es läuft mit Unicode aber ich check mit dem Unicode wohl nicht so durch
    keine Ahnung bin ich zu doof *gg*

  4. #4

    Registriert seit
    17.06.2009
    Beiträge
    559

    Standard

    Weil MessageBox einen PWideChar erwartet. Dies würde also zu einem Typkonflikt führen.
    Korrekt müsste es so aussehen (dann erscheint auch keine Warnung vom Compiler mehr):
    Code:
    MessageBox(0,PChar(String(StrArr[1])),'Winsock Example',MB_OK + MB_ICONINFORMATION)
    (Ich bin jetzt davon ausgegangen, dass StrArr ein Array of AnsiString ist)

    Edit:
    Wenn du unbedingt die Ansi-Funktionen verwenden möchtest, kannst du auch so etwas wie MessageBoxA nehmen, dann funktioniert es auch mit PAnsiChar.
    Davon würde ich dir allerdings abraten, denn wenn du dein Programm Unicode kompatibel machen möchtest, musst du dich auch danach richten.
    Deshalb ist es auch eigentlich nicht nötig, in deinem Code überall AnsiString zu benutzen, damit nimmst du dir ja wieder all die Vorteile der Unicode-Strings.
    Geändert von inout (13.08.2010 um 22:37 Uhr)

  5. #5
    Anfänger
    Registriert seit
    11.08.2010
    Beiträge
    7

    Standard

    Ok na klar supi cool Danke vielmals...
    Unicode zeug dahanna *gg*
    verdammt geil

Ähnliche Themen

  1. Problem bei winsock
    Von aKiller47 im Forum C, C++
    Antworten: 1
    Letzter Beitrag: 16.12.2008, 22:44
  2. [.Net][F]Winsock VB.net
    Von KAS im Forum .NET Sprachen - Techniken
    Antworten: 4
    Letzter Beitrag: 17.10.2008, 22:50
  3. [H]VB6 Winsock[C]
    Von HackCombot im Forum VisualBasic
    Antworten: 19
    Letzter Beitrag: 09.09.2008, 20:58
  4. [VB6] Schneller Login über Winsock "Problem"
    Von ProCelSioR im Forum VisualBasic
    Antworten: 0
    Letzter Beitrag: 22.08.2008, 23:33
  5. Winsock - VB6 & VB.net
    Von Pekel im Forum VisualBasic
    Antworten: 8
    Letzter Beitrag: 11.08.2008, 22:24

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •