Exemplo n.º 1
0
std::string NetworkSocket::debugString() const {
	if(!isOpen()) return "Closed";
	std::string ret = TypeStr(m_type) + "/" + StateStr(m_state);
	{
		std::string localStr = "INVALIDLOCAL";
		NetworkAddr addr;
		if(nlGetLocalAddr(m_socket->sock, getNLaddr(addr)) != NL_FALSE)
			NetAddrToString(addr, localStr);
		else {
			localStr = "ERRORLOCALADDR(" + GetLastErrorStr() + ")";
			ResetSocketError();
		}
		ret += " " + localStr;
	}
	if(m_state == NSS_CONNECTED) {
		ret += " connected to ";
		std::string remoteStr = "INVALIDREMOTE";
		NetworkAddr addr;
		if(nlGetRemoteAddr(m_socket->sock, getNLaddr(addr)) != NL_FALSE)
			NetAddrToString(remoteAddress(), remoteStr);
		else {
			remoteStr = "ERRORREMOTEADDR(" + GetLastErrorStr() + ")";
			ResetSocketError();
		}
		ret += remoteStr;
	}
	return ret;
}
Exemplo n.º 2
0
void mainServerLoop(NLsocket sock)
{
    NLsocket    client[MAX_CLIENTS];
    NLint       clientnum = 0;
    NLbyte      string[NL_MAX_STRING_LENGTH];

    memset(client, 0, sizeof(client));

    while(1)
    {
        NLint   i;
        NLbyte  buffer[128];

        /* check for a new client */
        NLsocket newsock = nlAcceptConnection(sock);

        if(newsock != NL_INVALID)
        {
            NLaddress   addr;

            nlGetRemoteAddr(newsock, &addr);
            client[clientnum] = newsock;
            printf("Client %d connected from %s\n", clientnum, nlAddrToString(&addr, string));
            clientnum++;
        }
        else
        {
            if(nlGetError() == NL_SYSTEM_ERROR)
            {
                printErrorExit();
            }
        }
        /* loop through the clients and read the packets */
        for(i=0;i<clientnum;i++)
        {
            if(nlRead(client[i], buffer, sizeof(buffer)) > 0)
            {
                NLint j;

                buffer[127] = 0; /* null terminate the char string */
                printf("Client %d sent %s\n", i, buffer);
                for(j=0;j<clientnum;j++)
                {
                    if(i != j)
                        nlWrite(client[j], buffer, strlen(buffer));
                }
            }
        }
        sleep(0);
    }
}
Exemplo n.º 3
0
NetworkAddr NetworkSocket::remoteAddress() const {
	NetworkAddr addr;
	
	if(!isOpen()) {
		errors << "NetworkSocket::remoteAddress: socket is closed" << endl;
		return addr;
	}
	
	if(nlGetRemoteAddr(m_socket->sock, getNLaddr(addr)) == NL_FALSE) {
		errors << "NetworkSocket::remoteAddress: cannot get remote address" << "(" << debugString() << "): " << GetLastErrorStr() << endl;
		ResetSocketError();
		return addr;
	}
	
	return addr;
}
Exemplo n.º 4
0
static void mainTestLoop(NLsocket sock)
{
    while(1 == 1)
    {
        NLbyte      buffer[100];
        NLbyte      string[NL_MAX_STRING_LENGTH];
        NLaddress   addr;
        char        hello[] = "Hello";

        nlWrite(sock, (NLvoid *)hello, (NLint)sizeof(hello));

        while(nlRead(sock, (NLvoid *)buffer, (NLint)sizeof(buffer)) > 0)
        {
            nlGetRemoteAddr(sock, &addr);
            buffer[99] = (NLbyte)0;
            printf("received %s from %s, packet #%d\n", buffer, nlAddrToString(&addr, string), nlGetInteger(NL_PACKETS_RECEIVED));
        }
        sleep(1);
    }
}