This question seems like something very obvious to ask, and yet I spent more than an hour trying to find an answer.
First I host and wait for someone to connect. Then, from another instance of the application, I try to connect with a socket – for the constructor, I use InetAddress, port. The port is always right, and everything works if I use “localhost” for the address. However, if I type my IP (the one I got from Googling “what is my ip”), I get an IOException. I even sent the application to someone else, gave him my IP, and it didn’t work.
The aim of the application is to connect two computers. It’s in Java. Here is the relevant code.
Server:
ServerSocket serverSocket = new ServerSocket(port);
Socket clientSocket = serverSocket.accept();
Client:
InetAddress a = InetAddress.getByName(ip);
Socket s = new Socket(a, port);
I don’t get past that. Obviously, the values of int port and String ip are taken from text fields.
Edit: the purpose of my application is to connect two non-local computers.
As mentionned by Greg Hewgill, if you are behind a NAT Device (Router, etc…) you will have to do some Port Forwarding.
Basically, your public IP Address that you get from using “What is my IP” from google is your public IP Address, but since you are using a router with multiple computers connected to it, there is a protocol that maps multiple computers to a single public address called NAT.
What you’ll need to do is tell your router to forward the incoming packets on a certain port to a certain computer.
The way to do this is highlighted in this article http://www.wikihow.com/Port-Forward