Exemple #1
0
    virtual int ReadData(int fd)
    {
        int err = 0;
        int clientFd = -1;
        std::string ip;
        int port = 0;

        do {
            err = mListenSocket->Accept(clientFd, ip, port);
            if (0 != err) {
                break;
            }

            TcpSocket *clientSocket = new TcpSocket();
            err = clientSocket->Create(clientFd);
            if (0 != err) {
                break;
            }
            
            debug_log("accpeter accept client " << ip << ":" << port);
            clientSocket->SetAddr(ip, port);

            AcceptContext *ctx = new AcceptContext(clientSocket);
            mNetService->Enqueue(ctx);
            OperContext::DecRef(ctx);

        } while(0);

        return 0;
    }
void c_communication(c_serveur& sett)
{
    TcpSocket svr;
    svr.connect(sett.c_ip,55001);
    c_infoPlayer<<c_pseudo;
    svr.send(c_infoPlayer);



    cout<<"Communication lancee"<<endl;
    while(c_connected)
        {
            c_attendre.lock();
            svr.send(c_sortant);
            c_sortant.clear();
            c_sortant<<false<<"";
            c_attendre.unlock();
            bool a;
            string b;
            if(svr.receive(c_entrant) == Socket::Done)
            {
                //system("cls");
                c_entrant>>a>>b;
                if(!a)
                c_msgsRecus = b;

            }
            else
            {
Exemple #3
0
void client()
{
	TcpSocket socket;
	Socket::Status status = socket.connect(IpAddress::getLocalAddress(), DH_PORT);
	
	if (status != Socket::Status::Done)
	{
		perror("connection to server failed");
		return;
	}
	
	mpz_t secret;
	CurveRef curve = client_receive_curve(socket);
	PointRef p = client_create_key(socket, curve, secret);
	client_send_key(socket, p);
	PointRef remoteKey = client_receive_key(socket);
	PointRef sharedSecret = PointCreateMultiple(remoteKey, secret, curve);
	
	char *desc = PointCreateDescription(sharedSecret);
	cout << "Secret: " << desc << endl;
    free(desc);
	
    mpz_clear(secret);
    CurveDestroy(curve);
    PointDestroy(p);
    PointDestroy(remoteKey);
    PointDestroy(sharedSecret);
	
	socket.disconnect();
}
Exemple #4
0
void TcpSocketServer::broadcast(DataToSend* data)
{
	if (data == NULL) return;

	if (data->getType() != DataToSend::DS_READER)
	{
		for (Clients::iterator itr = _clients.begin(), end = _clients.end(); itr != end; ++itr)
		{
			TcpSocket* client = *itr;
			client->send(data);
		}
	}
	else
	{
		Ref<StreamReader> reader = data->getReader();
		ASSERT_THROW(reader->isSeekable(), EX_NOT_SUPPORTED);

		size_t pos = reader->tell();

		for (Clients::iterator itr = _clients.begin(), end = _clients.end(); itr != end; ++itr)
		{
			reader->seek(pos);
			TcpSocket* client = *itr;
			client->send(data);
		}
	}
}
Exemple #5
0
void* dabInputSlipThread(void* args)
{
    dabInputSlipData* data = (dabInputSlipData*)args;
    TcpSocket* client;

    while ((client = data->server->accept()) != NULL) {
        int size = 0;
        etiLog.log(info, "SLIP server got a new client.\n");

#ifdef _WIN32
        WaitForSingleObject(data->semWrite, INFINITE);
                WaitForSingleObject(data->semQueue, INFINITE);
#else
        sem_wait(&data->semWrite);
        sem_wait(&data->semQueue);
#endif
        UdpPacket* packet = data->packets[data->nbPackets];
#ifdef _WIN32
        ReleaseSemaphore(data->semQueue, 1, NULL);
#else
        sem_post(&data->semQueue);
#endif

        while ((size = client->read(packet->getData(), packet->getSize()))
                    > 0) {
            packet->setLength(size);
#ifdef _WIN32
            WaitForSingleObject(data->semQueue, INFINITE);
#else
            sem_wait(&data->semQueue);
#endif
            data->nbPackets++;
#ifdef _WIN32
            ReleaseSemaphore(data->semQueue, 1, NULL);
#else
            sem_post(&data->semQueue);
#endif
            
#ifdef _WIN32
            WaitForSingleObject(data->semWrite, INFINITE);
            WaitForSingleObject(data->semQueue, INFINITE);
#else
            sem_wait(&data->semWrite);
            sem_wait(&data->semQueue);
#endif
            packet = data->packets[data->nbPackets];
#ifdef _WIN32
            ReleaseSemaphore(data->semQueue, 1, NULL);
#else
            sem_post(&data->semQueue);
#endif
        }
        etiLog.log(info, "SLIP server client deconnected.\n");
        client->close();
    }
    etiLog.log(error, "SLIP thread can't accept new client (%s)\n",
            inetErrDesc, inetErrMsg);

    return NULL;
}
Exemple #6
0
//======================================================================================
TcpSocket* TcpSocket::Accept() {
	struct sockaddr_in sa;
	socklen_t len = sizeof(sa);
	Log.i(SOCK_TAG, "TcpSocket::Accept m_iSocket=%u", m_iSocket);
	int ret = accept(m_iSocket, (struct sockaddr*) &sa, &len);
	if (-1 == ret){
		Log.e(SOCK_TAG, "TcpSocket::Accept -1!");
		return NULL;
	}
	if (0 == ret) {
		Log.e(SOCK_TAG, "TcpSocket::Accept 0!");
		return NULL;
	}

	TcpSocket *pNew = new TcpSocket(m_pSelector);
	pNew->m_iSocket = ret;
	//pNew->m_ip = ntohl(sa.sin_addr.s_addr);
	//pNew->m_iPort = ntohs(sa.sin_port);
	pNew->m_ip = sa.sin_addr.s_addr;
	pNew->m_iPort = sa.sin_port;
	pNew->m_bConnected = true;
	pNew->m_iLastRecvTime = SelectorEPoll::getInstance().m_iHaoMiao;
	pNew->setTimeout(m_iTimeout);
	pNew->SetNBlock();
	Log.i(SOCK_TAG, "TcpSocket accept %s:%u", ip2str(pNew->m_ip), pNew->m_iPort);
	return pNew;
}
        void run()
        {
            TcpSocket socket;
            socket.connect("127.0.0.1", mPort);

            T::Send(socket, mValue);
        }
Exemple #8
0
int onHeadersComplete(http_parser *parser)
{   
    TcpSocket *socket = static_cast<TcpSocket*>(parser->data);
#ifndef NO_LOG
    sLog(LogEndpoint::LogLevel::DEBUG) << " === parsed header ====";
    const QHash<QString, QSharedPointer<QString>> &headers = socket->getHeader().getHeaderInfo();

    QHash<QString, QSharedPointer<QString>>::const_iterator i = headers.constBegin();
    while (i != headers.constEnd())
    {
        sLog(LogEndpoint::LogLevel::DEBUG) << i.key() << *(i.value().data());
        ++i;
    }
    sLog(LogEndpoint::LogLevel::DEBUG) << " === ============= ====";
    sLogFlush();
#endif
    QWeakPointer<QString> host = socket->getHeader().getHeaderInfo("Host");

    if (!host.isNull())
    {
        socket->getHeader().setHost(*host.data());
    }

    return 0;
}
/**
 *函数介绍:有请求连接,新建一个socket
 *输入参数:int socketId,新建socket的SocketDescriptor
 *返回值:无
 */
void TcpServer::incomingConnection(int socketId)
{
    TcpSocket *socket = new TcpSocket(socketId,this);
	//设置socket描述符
    socket->setSocketDescriptor(socketId);
	//写入系统日志
	//Global::systemLog->append(tr("网络通信服务端有新的连接请求"), QString(tr("服务端接收新的连接请求,socket描述符 = %1.")).arg(socketId), SystemLog::INFO);

    qDebug()<<"服务端有新的连接,socketDescriptor:"<<socket->socketDescriptor();
    //新建了一个socket连接
    addServerSocket(socketId);


    //获得客户端数据
    connect(socket, SIGNAL(haveReadDataSignal(QByteArray,int)), this, SLOT(getClientMessage(QByteArray,int)));
	//信号槽:跟踪服务端Socket状态
    connect(socket,SIGNAL(stateChanged(QAbstractSocket::SocketState)),this,SLOT(getServerSocketState(QAbstractSocket::SocketState)));
    //信号槽:服务端socket出现错误
    connect(socket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(serverSocketError(QAbstractSocket::SocketError)));

    //与客户端断开某socket连接,服务端状态发生改变
    connect(socket, SIGNAL(disconnectedBeforeDeleteSignal(int)), this, SLOT(removeServerSocket(int)));
    //与客户端断开连接,输出服务器当前连接
    //connect(socket, SIGNAL(disconnectedBeforeDeleteSignal(int)), this, SLOT(getAllConnection()));	
	//与客户端连接上后,输出服务器当前连接
    //connect(socket, SIGNAL(connectedForServerSignal(int)), this, SLOT(getAllConnection()));
    //与客户端连接上后,输出服务器当前连接
    //connect(socket, SIGNAL(connectedForServerSignal(int)), this, SLOT(addServerSocket(int)));

}
Exemple #10
0
int FileService::on_connect(Socket *socket)
{
	TcpSocket * tcpsock = dynamic_cast<TcpSocket *> (socket);
    tcpsock->set_recv_buffer_size(1000 * 1024);

//dlog1("FileServer new connection %s %d \n", socket->remote_addr.get_ip().c_str(), socket->remote_addr.get_port());
	return FSM_END;
}
Exemple #11
0
void TcpSocketServer::broadcast(const void* data, size_t size)
{
	for (Clients::iterator itr = _clients.begin(), end = _clients.end(); itr != end; ++itr)
	{
		TcpSocket* client = *itr;
		client->send(data, size);
	}
}
Exemple #12
0
 bool Accept(TcpSocket& clientSocket) const
 {
     clientSocket.Close();
     InetAddr& clientAddr = clientSocket.Addr();
     int connFd = accept(m_Fd, (struct sockaddr*)&clientAddr.m_Addr, &clientAddr.m_AddrLen);
     clientSocket.m_Fd = connFd;
     return connFd != -1;
 }
void ChooseConnectionDlg::on_actionCreateTcpClient_triggered()
{
    TcpSocket * port = sConMgr2.createTcpSocket();
    port->setName(tr("New TCP client"));
    port->setHost("localhost");
    port->setPort(80);
    this->focusNewConn(port);
}
        void run()
        {
            TcpSocket socket;
            socket.connect("127.0.0.1", mPort);

            TcpInt32TestSender::Send(socket, mIntValue);
            TcpStringTestSender::Send(socket, mStringValue);
            TcpFloatTestSender::Send(socket, mFloatValue);
            TcpBoolTestSender::Send(socket, mBoolValue);
        }
Exemple #15
0
BOOL WINAPI SkylarkApp::CtrlCHandlerRoutine(__in  DWORD dwCtrlType)
{
	LOG("Ctrl+C handler");
	TheApp().quit = true;
	Cout() << "Ctrl + C\n";
	TcpSocket h;
	h.Connect("127.0.0.1", TheApp().port);
	h.Put("quit");
	return TRUE;
}
Exemple #16
0
void SkylarkApp::Quit()
{
	quit = true;
#ifdef PLATFORM_POSIX
	Broadcast(SIGTERM);
#endif
	TcpSocket s;
	s.Timeout(100);
	s.Connect("127.0.0.1", port);
}
Exemple #17
0
bool readLinesFromClientTest(const int linesize=TcpSocket::DEFAULT_MAX_MSG){
    cout << "Starting readLinesFromClientTest(" << linesize << ") ...\n";
    string message("Passaro verde abandona ninho. \nEscuto!\n");

    pid_t child;
    // client code
    if ((child=fork())==0){
        try {
            TcpSocket toServer;
            cout << "  Forked child waiting a bit\n";
            sleep(1);
            cout << "  Forked child connecting to server\n";
            toServer.connect("127.0.0.1",LOCALPORT);
            cout << "  Forked child connected: " << toServer << endl;
            cout << "  Forked child sending to server\n";
            toServer.writeline(message);
            cout << "  Forked child closing connection to server\n";
            toServer.close();
            cout << "  Forked child exiting\n";
            exit(0);
        } catch (std::exception& e) {
            cout << "  Forked child exception: " << e.what() << endl;
            exit(-1);
        }
        return false; // for clarity
    }

    // server code
    TcpSocket* connectedSocket;
    try {
        TcpSocket serverSocket;
        connectedSocket = bindListenAccept(LOCALPORT, serverSocket);
        std::string clientmessage;
        cout << "  Reading one (at most " << linesize << " chars long) line from client\n";

        // Read a line
        connectedSocket->setMaxReceive(linesize);
        while ((*connectedSocket) >> clientmessage);
        if (clientmessage.empty())
            throw std::runtime_error("clinet message is empty");

        cout << "  Read: \"" << clientmessage << "\"\n";
        if (!(clientmessage.compare(message) == 0)){
            
            throw std::runtime_error("Messages dont match");
        }
        checkChild(child);
        serverSocket.close();
        connectedSocket->close();
        cout << "Done!\n";
        delete connectedSocket;
        return true;
    } catch (std::exception& e) {
        cout << "  Server exception: " << e.what() << endl;
        cout << "Failed!\n";
        checkChild(child, true);
        delete connectedSocket;
        return false;
    }
}
Exemple #18
0
String Request(const String& r)
{
	TcpSocket s;
	if(!s.Connect(CommandLine().GetCount() ? CommandLine()[0] : "127.0.0.1", 3214)) {
		Cout() << "Unable to connect to server!\n";
		SetExitCode(1);
		return Null;
	}
	s.Put(r + '\n');
	return s.GetLine();
}
Exemple #19
0
int main()
{

	socket.receive(recvChar, 1024, received);
	cout << recvChar << endl;

	Socket::Status status = socket.connect("localhost", 10006);
	socket.send(sendChar, 1024);

	return 0;
}
Exemple #20
0
bool TcpSocketServer::update()
{
	if (!isValid())
		return false;

	sockaddr_in clientAddr = { 0 };
	socklen_t addrLen = sizeof(clientAddr);
	SOCKET accepted = ::accept(_handle, (sockaddr*)&clientAddr, &addrLen);

	if (accepted != INVALID_SOCKET)
	{
		String peerAddr = inet_ntoa(clientAddr.sin_addr);
		uint16 peerPort = clientAddr.sin_port;

		TcpSocket* client = _listener ? _listener->onAccept(this, accepted, peerAddr, peerPort) : NULL;

		if (client == NULL)
		{
			::closesocket(accepted);
			LOG(0, "++ ServerSocket: '%s: %d' refused\n", peerAddr.c_str(), peerPort);
		}
		else
		{
			LOG(0, "++ ServerSocket: '%s: %d' accepted\n", peerAddr.c_str(), peerPort);
			_clients.insert(client);
		}
	}
	else
	{
		int err = getLastError();
		if (err != ERR_WOULD_BLOCK)
			return error("Listen", err);
	}

	for (Clients::iterator itr = _clients.begin(), end = _clients.end(); itr != end; )
	{
		TcpSocket* client = *itr;
		if (!client->update())
		{
			if (_listener) _listener->onDisconnected(this, client);
			_clients.erase(itr++);
		}
		else
		{
			++itr;
		}
	}

	if (_listener) _listener->onUpdate();

	return true;
}
Exemple #21
0
bool sendReceiveObjectTest(){
    cout << "sendReceiveObjectTest() ...\n";

    Object tosend('c', 34, true, "cinco");

    pid_t child;
    // client code
    if ((child=fork())==0){
        try {
            TcpSocket toServer;
            cout << "  Forked child waiting a bit\n";
            sleep(1);
            cout << "  Forked child connecting to server\n";
            toServer.connect("127.0.0.1",LOCALPORT);
            cout << "  Forked child connected: " << toServer << endl;
            cout << "  Forked child sending to server\n";
            toServer.write(reinterpret_cast<char *>(&tosend), sizeof(Object));
            cout << "  Forked child closing connection to server\n";
            toServer.close();
            cout << "  Forked child exiting\n";
            exit(0);
        } catch (std::exception& e) {
            cout << "  Forked child exception: " << e.what() << endl;
            exit(-1);
        }
        return false; // for clarity
    }
    // server code
    TcpSocket* connectedSocket;
    try {
        TcpSocket serverSocket;
        connectedSocket = bindListenAccept(LOCALPORT, serverSocket);
        std::string clientmessage;
        cout << "  Reading one object from client\n";

        // Read the object
        Object received;
        int len = connectedSocket->read(reinterpret_cast<char *>(&received), sizeof(Object));
        cout << "  Read: " << len << " bytes from " << *connectedSocket << endl;
        if (!(tosend.compare(received) == 0))
            throw std::runtime_error("objects dont match");
        cout << "  Server read " << received << endl;
        
        checkChild(child);
        serverSocket.close();
        connectedSocket->close();
        cout << "Done!\n";
        delete connectedSocket;
        return true;
    } catch (std::exception& e) {
        cout << "  Server exception: " << e.what() << endl;
        cout << "Failed!\n";
        checkChild(child, true);
        delete connectedSocket;
        return false;
    }
}
Exemple #22
0
/**
 *函数介绍:回复客户端数据
 *输入参数:回复数据QByteArray result,套接字描述符 descriptor
 *返回值:无
 */
void TcpServer::replyClientMessage(QByteArray result,int descriptor)
{
    TcpSocket *serverSocket;
    if(descriptor!=-1)
    {
        //获得服务端套接字
        serverSocket = getServerSocket(descriptor);
        //发送数据
        if(serverSocket)
			serverSocket->sendMessage(result);
		qDebug()<<"正在回复数据。。。。。。";
    }
}
Exemple #23
0
void Worker::discardClient()
{
    TcpSocket* socket = static_cast<TcpSocket*>(sender());
#ifndef NO_LOG
    qDebug() << "thread id" << thread()->currentThreadId();
    qDebug() << "release socket" << socket << socket->m_id;
    //qDebug() << "finish serving client inside" << m_name;
    sLog() << m_name << "finished request.";
    sLogFlush();
#endif
    socket->deleteLater();
    m_idleSemaphore.release();
}
    bool Accept(TcpSocket& connection, bool blocking = true) const
    {
      if (!IsListening())
      {
        throw std::runtime_error("TcpSocket.Accept - Called on a socket that does not have listening mode enabled");
      }

      auto newSocket = SOCKET(0);
      auto address = sockaddr_in();
      auto tryAgain = bool();

      do
      {
        tryAgain = false;
        if (!Winsock::Accept(socket, address, newSocket))
        {
          switch (WSAGetLastError())
          {
          case WSAEWOULDBLOCK:
            //if (!IsBlocking())
            //{
            //  throw std::runtime_error("TcpSocket.Accept - Received would-block error for non-blocking socket");
            //}
            return false;

          case WSAECONNRESET:
            tryAgain = true;
            break;

          default:
            return false;
          }
        }
      } while (tryAgain);

      if (connection.IsOpen())
      {
        connection.Close();
      }

      connection.socket = newSocket;
      connection.isListening = false;

      if (!Winsock::IoctlSocket(connection.socket, blocking))
      {
        throw std::runtime_error("TcpSocket.Accept - Unable to set blocking mode on new connection");
      }
      connection.isBlocking = blocking;

      return true;
    }
Exemple #25
0
void Worker::newSocket(qintptr socket)
{
    //qDebug() << m_name << " is handling a new request; thread id" << thread()->currentThreadId();

    TcpSocket* s = new TcpSocket(this);
    s->m_id = static_cast<unsigned int>(rand());
    connect(s, SIGNAL(readyRead()), this, SLOT(readClient()));
    connect(s, SIGNAL(disconnected()), this, SLOT(discardClient()));
    s->setSocketDescriptor(socket);
    s->setTimeout(1000*60*2);
#ifndef NO_LOG
    sLog() << m_name << " receive a new request from ip:" << s->peerAddress().toString();
#endif
}
Exemple #26
0
bool SocketTest::tcpSocketTest()
{
    SimpleServer server;
    server.start();
    System::Sleep(500);
    TEST_ASSERT(server.start_flag)
    TEST_ASSERT_MSG(server.bind_flag, server.msg.text())
    TEST_ASSERT_MSG(!server.aborted, server.msg.text())
    // create tcp socket
    TcpSocket client;
    client.connect(TCP_TEST_HOST, TCP_TEST_PORT);
    TEST_ASSERT(client.getRemoteAddress().getPort() == TCP_TEST_PORT);
    client.send(TEST_MESSAGE1);
    TEST_ASSERT_MSG(!server.aborted, server.msg.text())
    System::Sleep(100);
    TEST_ASSERT_MSG(!server.aborted, server.msg.text())    
    TEST_ASSERT(server.msg1_flag)
    // test if something is already running on a port
    Socket psocket;
    TEST_THROWS(psocket.bind(TCP_TEST_PORT), Net::Errors::SocketException);
    
    String in;
    client.readUntil(in, '!');
    TEST_ASSERT(in == TEST_MESSAGE2);
    client.readUntil(in, '.', 2000);
    TEST_ASSERT_MSG(in == TEST_MESSAGE3, in.text());
    client.readUntil(in, '!', 2000);
    TEST_ASSERT(in == TEST_MESSAGE4);
    client.readUntil(in, "#@", 2000);
    TEST_ASSERT(in == TEST_MESSAGE5);
    return true;
}
int main(void) {
    TcpSocket servSocket;
    servSocket.create();
    servSocket.connect("127.0.0.1", 9999);
    Message msg;
    msg.add("type", "login");
    msg.add("user", "root");
    msg.add("pwd", "root");

    servSocket << msg;

    servSocket.close();
    return 0;
}
void ProtocolSender::sendPackage(const TcpSocket& tcpSocket, const Data& data) 
		const {
	int dataLength = data.getLength();
	char digits = Math::countDigits(dataLength); 
	// Primero envio los digitos de la longitud.
	Data digitsData(&digits, 1);
	tcpSocket.sendData(digitsData);
	// Ahora la longitud en si misma convirtiendo esta a char*.
	stringstream ss;
	ss << dataLength;
	Data length(ss.str().c_str(), (int)digits); // No se envia el '\0'
	tcpSocket.sendData(length);
	// Finalmente, los datos.
	tcpSocket.sendData(data);
}
Exemple #29
0
/**
 * Process all received connection from socket.
 *
 * \param fd opened tcp socket server kfile context.
 *
 */
void tcpsocket_serverPoll(KFile *fd)
{
	TcpSocket *socket = TCPSOCKET_CAST(fd);

	if (!socket->sock)
		socket->sock = netconn_accept(socket->server_sock);

	if (!socket->sock)
	{
		LOG_ERR("Unable to connect with client\n");
		return;
	}

	socket->handler(fd);
}
int test_tcp_srv()
{
    int ret;
    char buf[128] = {0};

    TcpSocket tcp_srv;

    // open
    tcp_srv.open();
    tcp_srv.setReuseAddr(1);
    tcp_srv.show();

    // bind
    if (tcp_srv.bind(SocketIpv4Address("0.0.0.0", 8888)) < 0) {
        perror("bind");
        return -1;
    }
    tcp_srv.show();

    // listen
    if (tcp_srv.listen() < 0) {
        perror("listen");
        return -1;
    }
    tcp_srv.show();

    // accept    
    TcpSocket *sock = tcp_srv.accept();
    sock->show();

    while(1) {
        
        ret = sock->recvMsg(buf, sizeof(buf));

        if (ret == 0) {
            fprintf(stdout, "close the fd[%d]\n", sock->getSocketFd());
            break;
        } else if (ret < 0) {
            perror("read");
            break;
        }
        printf("ret: %d buf: %s\n", ret, buf);   
    }

    tcp_srv.close();

    return 0;
}