Simpler iRC client mit wxWidgets?
-
Hallo,
Ich versuche ein Simplen client zu erstellen der sich zu "irc.quakenet.org" verbindet, was auch funktioniert... nur komme ich nicht "online".. er sendet alles ohne probleme, aber nichts passiert..
Grüße
code:
void MainDialog::OnSendData(wxCommandEvent & event) { wxString nicks = wxGetTextFromUser( _("Enter your nickname:"), _("Nick:"), _("nevused")); wxString users = wxGetTextFromUser( _("Enter your identd:"), _("User:"), _("test")); wxString names = wxGetTextFromUser( _("Enter your name:"), _("name:"), _("test")); wxString emails = wxGetTextFromUser( _("Enter your e-mail:"), _("Mail:"), _("test")); wxString send; send.Printf("NICK %s\r\nUSER %s %s %s :%s\r\n", nicks, users, names, emails, names); const wxChar *send_data = send.c_str(); unsigned char sendlen = (unsigned char) ((wxStrlen(send_data) +1) * sizeof(wxChar)); appSocket->SetFlags(wxSOCKET_WAITALL); appSocket->Write(send_data, sendlen); ShowLog(appSocket->Error() ? _("Nick: Failed") : _("Nick: Worked")); ShowLog(send_data); }
-
Dann schau dir mal das IRC Protokoll was genauer an.
Sehe da keinen Fehler in deinem Code von der wx/C++ Seite her.
-
phlox81 schrieb:
Dann schau dir mal das IRC Protokoll was genauer an.
Sehe da keinen Fehler in deinem Code von der wx/C++ Seite her.Hallo, danke für deine Antwort. Hatte heute ein bisschen zeit und du hattest recht. Das sollte eig so gehen..
"NICK nickhere"
Dann empfängt man ein:
"PING nummer" worauf man mit "PONG nummer" antworten muss, und dann danach "USER ident etc etc: ident"Funktioniert immernoch nicht, obwohl es in der selben Reiehnfolge per telnet funktioniert. Das zweite problem ist, dass er mir irgendwelche komischen chars anzeigt, hier 'n auschnitt.
NOTICE AUTH :*** Looking up your hostname
ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ // wtf?NOTICE AUTH :*** No ident response
ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ // wtf?Code dafür:
void MainDialog::OnReceiveData(wxSocketBase *sock) { #define MAX_MSG_SIZE 256 wxString display; wxChar *buf = new wxChar[MAX_MSG_SIZE]; wxUint32 len; len = sock->Read(buf, MAX_MSG_SIZE * sizeof(wxChar)).LastCount(); display.Printf(_("%s"), buf); ShowLog(display); delete[] buf; #undef MAX_MSG_SIZE }
ShowLog macht nichts besonderes.
void MainDialog::ShowLog(const wxString & notice) { wxString log; log << notice; logWindow->AppendText(_(notice)); logWindow->AppendText(_("\n")); }
-
Du musst die Nachricht noch mit einem \0 terminieren afaik. wxSocket hat dafür eine Methode LastCount http://docs.wxwidgets.org/stable/wx_wxsocketbase.html#wxsocketbaselastcount
-
phlox81 schrieb:
Du musst die Nachricht noch mit einem \n terminieren afaik. wxSocket hat dafür eine Methode LastCount http://docs.wxwidgets.org/stable/wx_wxsocketbase.html#wxsocketbaselastcount
Hi, so klappt es.
memset(buf, '\0', sizeof(char)*MAX_MSG_SIZE);
Danke, jetzt muss ich nurnoch herausfinden wieso ich nicht komplett online komme. ^^