[wxWidgets] Socket



  • Jetzt bin ich doch wieder hier gelandet. 😉
    Erst mal Code:

    wxSocketClient* m_socket = new wxSocketClient();
    m_socket->SetFlags(wxSOCKET_NONE);
    m_socket->SetTimeout(1); //ohne das hängt er für 10 min
    
    if(!m_socket->Connect(addr, true)){
      m_text->AppendText(_("\nConnection failed.\n"));
      return;
    }
    
    m_socket->Read(buffer, 2048);
    len = m_socket->LastCount();
    for(int i=0; i<len; ++i)
      m_text->AppendText(wxString::Format(wxT("%c"), buffer[i]));
    
    m_socket->Write("HELO", 4);
    
    m_socket->Read(buffer, 2048);
    len = m_socket->LastCount();
    for(int i=0; i<10; ++i)
      m_text->AppendText(wxString::Format(wxT("%c"), buffer[i]));
    

    Dazu zwei Fragen:

    1. wie kann es sein, dass sich das Programm beim zweiten Read aufhängt? Auf HELO muss der smpt-Server ja antworten. (und tut er auch laut telnet)

    2. warum funzt wxString::Format(wxT("%s"), buffer) nicht (es kommen tolle 4Ecke raus) aber das umständliche for() Konstrukt schon?


  • Mod

    Hm, vielleicht nicht direkt.
    Hast du einen Socketeventhandler eingerichtet?



  • Nein, hab ich nicht. Das soll später mal in einen eigenen Thread rein und ich finde in einem Fall, wo man auf einen bestimmten Befehl eine bestimmte Antwort erwartet, Events etwas unpraktisch.


  • Mod

    Hm, ist aber durchaus üblich, zumindest bei wxSocket.
    Evtl. liest du dir mal die wxSocket FAQ durch.

    Ansonsten müsste auch msg += buffer funktionieren.
    Warum er sich beim Read aufhängt, müsstest du mit dem debugger klären, so direkt seh ich da keinen Fehler,
    ausser das der SMTP Server evtl. erst nach dem Read sendet.


Anmelden zum Antworten