Сбой wxSocket wxWidgets - PullRequest
       3

Сбой wxSocket wxWidgets

1 голос
/ 22 июня 2011

Может ли кто-нибудь привести простой пример того, как использовать запись wxSockets, потому что каждый раз, когда я пытаюсь использовать ее для записи в соединение, у меня появляется окно, в котором появляется эта программа, перестает работать дерьмо, и единственное, что я делаюиспользует wxSocketBase :: Write.Или кто-нибудь знает, почему он не работает?

Я даже пытался жестко закодировать буфер, который должен быть записан примерно так:

wxSocketClient * sockConn = new wxSocketClient();

wxString url = "localhost";
wxIPV4address addr;
addr.Hostname(url);
addr.Service(6667);


sockConn->Connect(addr);


wxString test = wxT("testing");
    sockConn->Write(test.mb_str(), wxStrlen(test));



sockConn->Close();
delete sockConn;`

И каждый раз, когда я звоню, пишитепросто выходит из строя

Также есть простой способ заставить wxString работать с wxSocket, или это должно быть легко после того, как я выясню, что здесь происходит?

Сейчас это намного прощепросто используйте winsock, чтобы делать все это, и вот почему у меня есть wxWidgets, я получил его, чтобы облегчить жизнь.

Ответы [ 4 ]

2 голосов
/ 28 октября 2011

Может кто-нибудь привести простой пример использования записи wxSockets?

Да, я могу:

#include <wx/wx.h>
#include <wx/socket.h>
#include <iostream>

int main () {
  wxInitialize();
  wxSocketClient * sockConn = new wxSocketClient(wxSOCKET_WAITALL);
  wxString url = wxT("localhost");
  wxIPV4address addr;
  addr.Hostname(url);
  addr.Service(6667);
  if(!sockConn->Connect(addr, true)) {
    std::cout << "Connect failed\n";
    return 1;
  }
  wxString test = wxT("testing\n");
  sockConn->Write(test.mb_str(), wxStrlen(test));
  sockConn->Close();
  delete sockConn;
  wxUninitialize();
  return 0;
}
0 голосов
/ 22 июня 2011

Я думаю, вы, возможно, неправильно используете wxString :: mb_str ().

Документы дают нам следующее:

wxString :: mb_str const char * mb_str (wxMBConv & conv) const

const wxCharBuffer mb_str (wxMBConv & conv) const

Возвращает многобайтовое (строка C) представление строки.В сборке Unicode конвертирует с использованием метода cWC2MB conv и возвращает wxCharBuffer.В сборке ANSI эта функция аналогична c_str.Макрос wxWX2MBbuf определен как правильный тип возвращаемого значения (без const).

Это подсказывает мне, что вы должны написать что-то вроде

wxMBConv conv;
sockConn->Write(test.mb_str(conv), wxStrlen(test));
0 голосов
/ 08 июля 2011
std::string test("testing");
sockConn->Write(test.c_str(), test.length);

Проще использовать std :: string вместо wxString.

0 голосов
/ 22 июня 2011

Я не думаю, что вы должны использовать wxSocketBase. Вы должны использовать либо wxSocketClient или wxSocketServer. Вот простой пример wxSocketClient

// connect to a server on the same machine, listening on port 3000
wxSocketClient mySocket;
wxIPV4address addr;
addr.Hostname(L"localhost");
addr.Service(3000);
mySocket.Connect(addr,true) );   // should check return for success

// write something
char sentence[100];
sprintf(sentence,"$SDDBT,%5.1f,0,0,,0*00\x13\n",depth/10.0);
mySocket.Write(sentence,strlen(sentence));

Глядя на код, который вы разместили, я бы расследовал несколько вещей.

Во-первых, вы должны проверить возврат из Connect (), чтобы убедиться, что вы действительно получаете соединение.

Во-вторых, вы используете юникод или многобайтовую сборку? Tt смотрит на меня, как будто это может быть Unicode

...