/* -- FUNCTION: initializeServer -- -- DATE: September 23, 2011 -- -- REVISIONS: -- -- DESIGNER: Karl Castillo -- -- PROGRAMMER: Karl Castillo -- -- INTERFACE: void initalizeServer(int* port, int* socket) -- port - the port the client will listen on -- socket - the socket that will hold the new socket -- -- RETURNS: void -- -- NOTES: -- This function will create the socket, set reuse and listen for any incoming -- connections from the server. */ void initalizeServer(int* port, int* socket) { int sock = 0; // Create a TCP socket if ((sock = tcpSocket()) == -1) { systemFatal("Cannot Create Socket!"); } // Allow the socket to be reused immediately after exit if (setReuse(&sock) == -1) { systemFatal("Cannot Set Socket To Reuse"); } // Bind an address to the socket if (bindAddress(port, &sock) == -1) { systemFatal("Cannot Bind Address To Socket"); } // Set the socket to listen for connections if (setListen(&sock) == -1) { systemFatal("Cannot Listen On Socket"); } if((*socket = acceptConnection(&sock)) == -1) { systemFatal("Cannot Accept on Socket"); } close(sock); }
/* -- FUNCTION: initializeServer -- -- DATE: March 12, 2011 -- -- REVISIONS: September 22, 2011 - Added some extra comments about failure and -- a function call to set the socket into non blocking mode. -- -- DESIGNER: Luke Queenan -- -- PROGRAMMER: Luke Queenan -- -- INTERFACE: void initializeServer(int *listenSocket, int *port); -- -- RETURNS: void -- -- NOTES: -- This function sets up the required server connections, such as creating a -- socket, setting the socket to reuse mode, binding it to an address, and -- setting it to listen. If an error occurs, the function calls "systemFatal" -- with an error message. */ void initializeServer(int *listenSocket, int *port) { // Create a TCP socket if ((*listenSocket = tcpSocket()) == -1) { systemFatal("Cannot Create Socket!"); } // Allow the socket to be reused immediately after exit if (setReuse(&(*listenSocket)) == -1) { systemFatal("Cannot Set Socket To Reuse"); } // Bind an address to the socket if (bindAddress(&(*port), &(*listenSocket)) == -1) { systemFatal("Cannot Bind Address To Socket"); } // Set the socket to listen for connections if (setListen(&(*listenSocket)) == -1) { systemFatal("Cannot Listen On Socket"); } }
bool ProtocolTCPServer::init_derived() { if (!initbase()) return false; if (!setListen(backlog)) { HAGGLE_ERR("Could not set listen mode on socket\n"); } return true; }
bool ProtocolRFCOMMServer::init_derived() { if (!initbase()) return false; if (!setListen(backlog)) { closeSocket(); HAGGLE_ERR("Could not set socket to listening mode\n"); return false; } return true; }
/** * @brief 关闭设备 */ BOOL USBControl::closeDevice() { //先清空,也方便唤醒满的情况 Global::S_CCycleBuffer->clearBuffer(); //先停止监听 setListen(USBThread::STOP_TAG); //退出run函数 usbThread->quit(); if (usbThread->isRunning()) { usbThread->wait(); } //关闭USB设备 return CloseHandle(m_hDevice); }
Server::Server(QWidget *parent) : QDialog(parent), ui(new Ui::Server) { ui->setupUi(this); QList<QHostAddress> ipAddressesList = QNetworkInterface::allAddresses(); ui->lineEditIP->setText(ipAddressesList.at(0).toString()); ui->lineEditPort->setValidator(new QIntValidator(1, 65535, this)); tcpServer = new QTcpServer(this); QObject::connect(tcpServer, SIGNAL(newConnection()), this, SLOT(acceptConnection())); QObject::connect(ui->pushButtonClear, SIGNAL(clicked()), this, SLOT(clearText())); QObject::connect(ui->pushButtonSend, SIGNAL(clicked()), this, SLOT(sendClient())); QObject::connect(ui->pushButtonQuit, SIGNAL(clicked()), this, SLOT(close())); QObject::connect(ui->pushButtonListen, SIGNAL(clicked()), this, SLOT(setListen())); }
TCPServerSocket::TCPServerSocket(const std::string &localAddress, unsigned short localPort, int queueLen): Socket(SOCK_STREAM, IPPROTO_TCP) { setLocalAddressAndPort(localAddress, localPort); setListen(queueLen); }
TCPServerSocket::TCPServerSocket(unsigned short localPort, int queueLen): Socket(SOCK_STREAM, IPPROTO_TCP) { setLocalPort(localPort); setListen(queueLen); }
void main(void){ WSADATA wsaData; SOCKET listeningSocket; SOCKET newConnection; struct sockaddr_in serverAddr, tempAddr; struct sockaddr_storage clientAddr; int clientAddrLen; int port = 5150; int returnValue, tempAddrLen; char dataBuffer[666], ansiBuffer[666]; // Инициализация Winsock версии 2.2 if ((returnValue = WSAStartup(MAKEWORD(2, 2), &wsaData)) != 0){ myprintf("WSAStartup ошибка %s\n", encodeWSAGetLastError(returnValue)); return; } /////////////////////////////////////////////////////////////////////////////////////////////////// // Создаём новый TCP сокет для приёма запросов на соединение от клиентов. listeningSocket = getSocket(AF_INET, SOCK_STREAM, IPPROTO_TCP); // Заполняем struct sockaddr_in serverAddr, которая скажет функции bind, что мы хотим // слушать соединения на всех интерфейсах (INADDR_ANY), используя порт 5150. // Мы преобразуем порядок байт из системного в сетевой (htons и htonl) serverAddr.sin_family = AF_INET; serverAddr.sin_port = htons(port); serverAddr.sin_addr.s_addr = htonl(INADDR_ANY); // bind привязывает адресную информацию, определённую в serverAddr к сокету listeningSocket bindSocket(listeningSocket, serverAddr); // Сокет пасивный для прослушивания (приёма) TCP соединений. Длина очереди запросов на соединение = 5 setListen(listeningSocket, 5); tempAddrLen = sizeof(tempAddr); getsockname(listeningSocket, (struct sockaddr *)&tempAddr, &tempAddrLen); myprintf("Локальный адрес:%s и порт:%d \n", inet_ntoa(tempAddr.sin_addr), ntohs(tempAddr.sin_port)); tempAddrLen = sizeof(tempAddr); getpeername(listeningSocket, (struct sockaddr *)&tempAddr, &tempAddrLen); myprintf("Удалённый адрес:%s и порт:%d \n", inet_ntoa(tempAddr.sin_addr), ntohs(tempAddr.sin_port)); myprintf("Ожидаем соединение на порту %d.\n", port); // Принимаеи новое соединение, когда оно возникнет clientAddrLen = sizeof(clientAddr); clientAddr.__ss_align = 0; newConnection = accepting(listeningSocket, &clientAddr, clientAddrLen); getsockname(newConnection, (struct sockaddr *)&tempAddr, &tempAddrLen); myprintf("Локальный адрес:%s и порт:%d сокета сервера\n", inet_ntoa(tempAddr.sin_addr), ntohs(tempAddr.sin_port)); getpeername(newConnection, (struct sockaddr *)&tempAddr, &tempAddrLen); myprintf("Удаленный адрес:%s и порт:%d сокета клиента\n", inet_ntoa(tempAddr.sin_addr), ntohs(tempAddr.sin_port)); // Далее мы можем снова ожидать на сокете listeningSocket новые соединения снова вызывая accept // и/или начать передавать и принимать данные на сокете newConnection. // Для простоты остановим прослушивание, закрывая сокет listeningSocket. // Можно начнинать приём и предачу данных на сокете newConnection. closesocket(listeningSocket); myprintf("Ждём данные для получения..\n"); /*if ((returnValue = recv(newConnection, dataBuffer, sizeof(dataBuffer), 0)) == SOCKET_ERROR){ myprintf("Ошибка recv %s\n", encodeWSAGetLastError(WSAGetLastError())); closesocket(newConnection); WSACleanup(); exit(1); }*/ if ((returnValue = recv(newConnection, u1.c, sizeof(u1), 0)) == SOCKET_ERROR){ myprintf("Ошибка recv %s\n", encodeWSAGetLastError(WSAGetLastError())); closesocket(newConnection); WSACleanup(); exit(1); } // Делаем из полученных данных строку на С //dataBuffer[returnValue] = '\0'; //OemToChar(dataBuffer, ansiBuffer); int offset = 0, result1=1, result2=1; printf("%e", u1.d); //int operationIndex = switchOperation(ansiBuffer, &offset); /*if (operationIndex == -1){ myprintf("Получено %d байтов в сообщении %s\n", returnValue, ansiBuffer); myprintf("\nОбратная передача сообщения...\n"); returnValue = sendMessage(newConnection, ansiBuffer, strlen(ansiBuffer)); myprintf("Передано %d байтов.\n", returnValue); } else{ BOOL flagAnswer = FALSE; int answer = 0; myprintf("%s\n", ansiBuffer); switch (operationIndex) { case 0: myprintf("Принята команда <qs> на закрытие...\n"); break; case 1: if (getNumber(ansiBuffer, offset, &result1, &result2)) flagAnswer = TRUE; answer = result1 + result2; myprintf("%d\n", answer); break; case 2: if (getNumber(ansiBuffer, offset, &result1, &result2)) flagAnswer = TRUE; answer = result1 - result2; myprintf("%d\n", answer); break; case 3: if (getNumber(ansiBuffer, offset, &result1, &result2)) flagAnswer = TRUE; answer = result1 * result2; myprintf("%d\n", answer); break; case 4: if (getNumber(ansiBuffer, offset, &result1, &result2)) if (result2 != 0){ flagAnswer = TRUE; answer = result1 / result2; myprintf("%d\n", answer); }else myprintf("Деление на 0!\n"); break; default: break; } if (flagAnswer){ myprintf("\nОбратная передача сообщения...\n"); char temp[666]; _itoa_s(answer, temp, 666, 10); returnValue = sendMessage(newConnection, temp, strlen(temp)); myprintf("Передано %d байтов.\n", returnValue); } }*/ myprintf("Закрываем соединение с клиентом.\n"); closesocket(newConnection); WSACleanup(); system("pause"); }
void QQmlWebSocketServer::closed() { setListen(false); }
TCPServerSocket::TCPServerSocket(unsigned short localPort, int queueLen) throw(ClassException<Socket>) : Socket(SOCK_STREAM, IPPROTO_TCP) { setLocalPort(localPort); setListen(queueLen); }