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; }
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); } }
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; }
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); } }