On Tuesday, 4 February 2014 at 22:31:53 UTC, Dicebot wrote:
>On Tuesday, 4 February 2014 at 20:19:14 UTC, TheFlyingFiddle wrote:
>I'm setting up a simple local network enabling me to connect phones to the computer through the local wi-fi. The simplest way i could think of to make this work without relying on an external server was to simply broadcast the ip and port to all machines in the network.(Btw by server i mean my / my project groups windows boxes).
So well the problem is that i need a way for the phones to find running servers on the LAN.
I think it is close to impossible to do in portable way. Most reliable approach is to get list of all configured network interfaces via posix functions (or via system
call as least resort), filter out "lo" and broadcast message for every such interface. I think you can also filter only wireless interfaces that way relatively easily too.
Apologies that I am bumping a post that is 9 years old, but I recently had to do this and thought this may help beginners. In a way it's a hack as suggested from the second post, that you can connect to a known ip address (e.g. google) from a socket and then see the endpoints with the local and remote addresses.
import std.stdio;
import std.socket;
void GetIP(){
// A bit of a hack, but we'll create a connection from google to
// our current ip.
// Use a well known port (i.e. google) to do this
auto r = getAddress("8.8.8.8",53); // NOTE: This is effetively getAddressInfo
writeln(r);
// Create a socket
auto sockfd = new Socket(AddressFamily.INET, SocketType.STREAM);
// Connect to the google server
import std.conv;
const char[] address = r[0].toAddrString().dup;
ushort port = to!ushort(r[0].toPortString());
sockfd.connect(new InternetAddress(address,port));
// Obtain local sockets name and address
writeln(sockfd.hostName);
writeln("Our ip address : ",sockfd.localAddress);
writeln("the remote address: ",sockfd.remoteAddress);
// Close our socket
sockfd.close();
}
```