Решил переписать сервер с 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);
Событие на подключение
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");
}