Thread: [Opentnl-general] Finding the address of /this/ end of a connection
Brought to you by:
mark_frohnmayer,
s_alanet
From: Jeff D. <jd...@cs...> - 2005-04-30 19:28:27
|
Hi, NetConnection::getNetAddress() and NetConnection::getNetAddressString() both refer to the remote side; is there an easy way to get the address (IP:port) of /this/ side? Thanks! |
From: Mark F. <ma...@ga...> - 2005-04-30 19:44:05
|
Hey Jeff, The Socket::getInterfaceAddresses function gets the list of locally bindable addresses. - Mark Jeff Donner wrote: >Hi, > > NetConnection::getNetAddress() and NetConnection::getNetAddressString() >both refer to the remote side; is there an easy way to >get the address (IP:port) of /this/ side? > >Thanks! > > >------------------------------------------------------- >This SF.Net email is sponsored by: NEC IT Guy Games. >Get your fingers limbered up and give it your best shot. 4 great events, 4 >opportunities to win big! Highest score wins.NEC IT Guy Games. Play to >win an NEC 61 plasma display. Visit http://www.necitguy.com/?r=20 >_______________________________________________ >Opentnl-general mailing list >Ope...@li... >https://lists.sourceforge.net/lists/listinfo/opentnl-general > > |
From: Jeff D. <jd...@cs...> - 2005-04-30 21:58:22
|
> Jeff Donner wrote: >> NetConnection::getNetAddress() and NetConnection::getNetAddressString() >> both refer to the remote side; is there an easy way to >> get the address (IP:port) of /this/ side? Mark Frohnmayer wrote: > The Socket::getInterfaceAddresses function gets the list of > locally bindable addresses. Ok, thanks, but that doesn't give the port, which wouldn't distinguish between possibly many connections from the same machine. I've done the following and it works for what I need but, I'm a little surprised the information is not incorporated somehow into NetConnection. Oh well: From the example TestNetInterface::handleInfoPacket(...), (with couts added) in the client part ('this' end): cout << "ADDRESSES:" << endl; TNL::Vector<TNL::Address> addresses; TNL::Socket::getInterfaceAddresses(&addresses); for (int i = 0; i < addresses.size(); ++i) { cout << "address: " << addresses[i].toString() << endl; } TNL::Address b = getFirstBoundInterfaceAddress(); cout << "FIRST BOUND: " << b.toString() << endl; output: ADDRESSES: address: IP:192.168.0.8:0 FIRST BOUND: IP:192.168.0.8:33513 From the function, in the server part upon connection (remote end): cout << "CLIENT ADDRESS: " << address.toString() << endl; output: CLIENT ADDRESS: IP:192.168.0.8:33513 Of course, this probably wouldn't work if there were more than one connection to the server (which connection would be the first?) but it works for what I need. Thanks again, Jeff |
From: Mark F. <ma...@ga...> - 2005-04-30 23:26:20
|
>Ok, thanks, but that doesn't give the port, which wouldn't >distinguish between possibly many connections from the same >machine. > > All NetConnections on a NetInterface share the same port. To accurately determine the port for a NetInterface, you should use the NetInterface's getSocket() method, and then call getBoundAddress on the socket. This will give you at least an accurate port. The address may be Address::Any if it wasn't specified which hardware interface the NetInterface should bind to. So you can use the combination of Socket::getInterfaceAddresses and NetInterface::getSocket().getBoundAddress() to determine the port. |
From: Jeff D. <jd...@cs...> - 2005-05-01 01:06:34
|
Mark Frohnmayer wrote: > All NetConnections on a NetInterface share the same port. To accurately > determine the port for a NetInterface, you should use the NetInterface's > getSocket() method, and then call getBoundAddress on the socket. This > will give you at least an accurate port. The address may be > Address::Any if it wasn't specified which hardware interface the > NetInterface should bind to. So you can use the combination of > Socket::getInterfaceAddresses and > NetInterface::getSocket().getBoundAddress() to determine the port. |