Проблема c wxSocketServer Topic is solved

Это русская секция форума wxWidjets. В этой секции вы можете обсуждать любые вопросы, связанные с wxWidgets на вашем родном языке.
Post Reply
ANtlord
In need of some credit
In need of some credit
Posts: 8
Joined: Fri Jun 29, 2012 4:41 pm

Проблема c wxSocketServer

Post by ANtlord » Tue Jul 17, 2012 6:18 pm

Добрый день, форумчане!
Решил переписать сервер с 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");
}

borr_1
Super wx Problem Solver
Super wx Problem Solver
Posts: 362
Joined: Wed Mar 07, 2007 8:10 am
Location: Russia, Shakhty

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

Post by borr_1 » Wed Jul 18, 2012 5:39 am

Посмотри \samples\sockets

Что-то я вообще не увидел как ты хоть что-то отсылаешь.
WinXP SP3, wx-2.8.10, MinGW-4.4.1, gdb-7.1.2, eclipse

ANtlord
In need of some credit
In need of some credit
Posts: 8
Joined: Fri Jun 29, 2012 4:41 pm

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

Post by ANtlord » Wed Jul 18, 2012 6:07 am

Прошу прощения, забыл написать. Я тестирую сервер через telnet, а насчет примера, я его тоже смотрел.

ANtlord
In need of some credit
In need of some credit
Posts: 8
Joined: Fri Jun 29, 2012 4:41 pm

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

Post by ANtlord » Thu Jul 19, 2012 6:03 pm

В общем надо делать в методе события "читать сокет" и все работает. Добавить надо следующее

Code: Select all

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

Post Reply