Page 1 of 1

Проблема c wxSocketServer

Posted: Tue Jul 17, 2012 6:18 pm
by ANtlord
Добрый день, форумчане!
Решил переписать сервер с Qt на wxWidgets. Докопался, что тут есть некие wxSocketServer, wxSocketClient, wxSocketBase. Посмотрел на Qt-код, подумал, что то что надо! Почитал 18 главу Julian'a Smart'a, изучил примеры, которые в дистре wxWidgets находятся. По образу и подобию, создал просто сокет, который слушает порт и реагирует на команды от клиента строчкой "New command" в wxTextCtrl.

В итоге сервер слушает сокет и принимает подключения. Но реагирует только одну команду от клиента.

Я использую: wxWidgets 2.9.3, Arch linux (kernel 3.4), CodeBlocks 10.05, gcc 4.7

Код в конструкторе фрейма

Code: Select all

    wxIPV4address addr;
    addr.Hostname(_("localhost"));
    addr.Service(6667);

    Socket1 = new wxSocketServer(addr);

    Socket1->SetEventHandler(*this, SERVER_ID);
    Socket1->SetNotify(wxSOCKET_CONNECTION_FLAG);
    Socket1->Notify(true);

    Connect(SERVER_ID,wxEVT_SOCKET,(wxObjectEventFunction)&StilusServerFrame::OnServer);
    Connect(SOCKET_ID,wxEVT_SOCKET,(wxObjectEventFunction)&StilusServerFrame::OnSocket);
Socket1 экземпляр класса wxSocketServer, SERVER_ID = 666, SOCKET_ID = 100.

Событие на подключение

Code: Select all

void StilusServerFrame::OnServer(wxSocketEvent &e){
    wxSocketServer* pServerSocket = (wxSocketServer*) e.GetSocket();

    wxSocketBase *CurSocket1 = pServerSocket->Accept(false);
    CurSocket1->SetEventHandler(*this, SOCKET_ID);
    CurSocket1->SetNotify(wxSOCKET_INPUT_FLAG | wxSOCKET_LOST_FLAG| wxSOCKET_OUTPUT_FLAG);
    CurSocket1->Notify(true);
    *Text1<<wxT("New connect\n");
}
Событие на отправку команды

Code: Select all

void StilusServerFrame::OnSocket(wxSocketEvent &e){
    *Text1<<wxT("New command\n");
}

Re: Проблема c wxSocketServer

Posted: Wed Jul 18, 2012 5:39 am
by borr_1
Посмотри \samples\sockets

Что-то я вообще не увидел как ты хоть что-то отсылаешь.

Re: Проблема c wxSocketServer

Posted: Wed Jul 18, 2012 6:07 am
by ANtlord
Прошу прощения, забыл написать. Я тестирую сервер через telnet, а насчет примера, я его тоже смотрел.

Re: Проблема c wxSocketServer

Posted: Thu Jul 19, 2012 6:03 pm
by ANtlord
В общем надо делать в методе события "читать сокет" и все работает. Добавить надо следующее

Code: Select all

wxSocketBase *sock = e.GetSocket();
unsigned char c;
sock->Read(&c, 1);
*Text1<<wxT("new command\n");
РЕШЕНО!