bool wxGISLocalClientConnection::Connect(void) { if(m_bIsConnected) return true; wxString sHost(HOST); unsigned short nPort(PORT); unsigned short nTimeOut(TIMEOUT); wxGISAppConfig oConfig = GetConfig(); if(oConfig.IsOk()) { sHost = oConfig.Read(enumGISHKCU, wxString(wxT("wxGISCommon/tasks/host")), sHost); nPort = oConfig.ReadInt(enumGISHKCU, wxString(wxT("wxGISCommon/tasks/port")), nPort); nTimeOut = oConfig.ReadInt(enumGISHKCU, wxString(wxT("wxGISCommon/tasks/timeout")), nTimeOut); } //start conn IPaddress addr; addr.Hostname(sHost); addr.Service(nPort); // Create the socket wxSocketClient* pSock = new wxSocketClient(wxSOCKET_WAITALL | wxSOCKET_BLOCK | wxSOCKET_REUSEADDR); m_pSock = pSock; m_pSock->SetEventHandler(*this, SOCKET_ID); m_pSock->Notify(true); m_pSock->SetNotify(wxSOCKET_CONNECTION_FLAG|wxSOCKET_LOST_FLAG); m_pSock->SetTimeout(nTimeOut); pSock->Connect(addr, false); m_bIsConnecting = true; return CreateAndRunThreads(); }
/*! * Create server listening on socket * Subscribes to connection events with ID SERVER_ID */ void GdbServerWindow::createServer() { // Create the address IPaddress listenAddr; listenAddr.Service(shared->getGdbServerPort()); listenAddr.Hostname(_("localhost")); serverAddr = getAddr(listenAddr); closeServer(); // Create the socket serverSocket = new wxSocketServer(listenAddr, wxSOCKET_NOWAIT); // We use IsOk() here to see if the server is really listening if (!serverSocket->IsOk()) { statusTextControl->AppendText(_("ERROR: Could not create server at the specified port !\n")); return; } string bdmSerialNumber = shared->getBdmSerialNumber(); if (bdmSerialNumber.length() > 0) { if (shared->getBdmMatchRequired()) { statusTextControl->AppendText(_("Using required USBDM interface S/N = \'")+wxString(bdmSerialNumber.c_str(), wxConvUTF8)+_("\'\n")); } else { statusTextControl->AppendText(_("Using preferred USBDM interface S/N = \'")+wxString(bdmSerialNumber.c_str(), wxConvUTF8)+_("\'\n")); } } else { statusTextControl->AppendText(_("Using any suitable USBDM interface\n")); } IPaddress addrReal; if (!serverSocket->GetLocal(addrReal) ) { statusTextControl->AppendText(_("ERROR: couldn't get the address we bound to\n")); } else { serverAddr = getAddr(addrReal); wxString s; s.Printf(_("Server created @%s\n"), (const char *)serverAddr.c_str()); statusTextControl->AppendText(s); } // Setup the event handler and subscribe to connection events serverSocket->SetEventHandler(*this, SERVER_ID); serverSocket->SetNotify(wxSOCKET_CONNECTION_FLAG); serverSocket->Notify(true); serverState = listening; UpdateStatusBar(); }
bool wxGISLocalNetworkPlugin::CreateListenSocket(void) { IPaddress LocalAddress; // For the listening LocalAddress.Service(m_nPort); // port on which we listen for clients bool bIsAddrSet = false; if(m_sAddr.IsEmpty()) { bIsAddrSet = LocalAddress.AnyAddress(); } else { bIsAddrSet = LocalAddress.Hostname(m_sAddr); } if(!bIsAddrSet) { wxLogError(_("wxGISLocalNetworkPlugin: Invalid address - %s"), m_sAddr.c_str()); return false; } m_listeningSocket = new wxSocketServer(LocalAddress, wxSOCKET_WAITALL|wxSOCKET_REUSEADDR); m_listeningSocket->SetEventHandler(*this, TCP_SERVER_ID); m_listeningSocket->SetNotify(wxSOCKET_CONNECTION_FLAG); m_listeningSocket->Notify(true); if (!m_listeningSocket->IsOk()) { wxLogError(_("wxGISLocalNetworkPlugin: Could not listen at the specified port! Port number - %d"), m_nPort); //wxLogError(wxString(_("Cannot bind listening socket"))); return false; } wxLogMessage(_("Server listening at port %d, waiting for connections"), m_nPort); return true; }