Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I send data between two computers over the internet

Tags:

java

sockets

I have been struggling with this for the entire day now, I hope somebody can help me with this.

My problem is fairly simple: I wish to transfer data (mostly simple commands) from one PC to another over the internet.

I have been able to achieve this using sockets in Java when both computers are connected to my home router. I then connected both computers to the internet using two different mobile phones and attempted to transmit the data again. I used the mobile phones as this provides a direct route to the internet and if I use my router I have to set up port forwarding, at least, that is how I understand it.

I think the problem lies in the method that I set up the client socket. I used:

Socket kkSocket = new Socket(ipAddress, 3333);

where ipAddress is the IP address of the computer running the server. I got the IP address by right-clicking on the connection, status, support. Is that the correct IP address to use or where can I obtain the address of the server? Also, is it possible to get a fixed name for my computer that I can use instead of entering the IP address, as this changes every time I connect to the internet using my mobile phone?

Alternatively, are there better methods to solving my problem such as using http, and if so, where can I find more information about this?

EDIT: Would it be possible to have the server program running on a server on the internet somewhere. My original server would then be a client that send information to this server. This server would then pass this information to my original client and vice versa. That way, the IP address of my computer won't matter, as I only need to know the address of the server hosted somewhere on the web. Does this seem like a better solution? Where do I begin implementing such a solution?

Thanks!

like image 592
Kritz Avatar asked Feb 26 '11 15:02

Kritz


People also ask

How can I share files between two computers over the Internet?

To share a file or folder over a network in File Explorer, do the following: Right-click (or long-press) a file, and then select Show more options > Give access to > Specific people. Select a user on the network to share the file with, or select Everyone to give all network users access to the file.

What is the fastest way to transfer data between two computers?

Use Cloud Storage to Transfer Files from PC to PC. Another fastest way to transfer files from PC to PC is Cloud Storage. Multiple Cloud Storage platforms like Google Drive, Dropbox, and OneDrive help users share the files between PCs conveniently.

Can you transfer data directly between computers?

You can transfer files from one PC to another PC easily using cloud storage services like OneDrive or Dropbox. You can also copy files to an intermediate storage device like a USB flash drive, or external hard drive, then move the device to the other PC and transfer the files to their final destination.


3 Answers

When you connected to the server that serves StackOverflow, did you type in the IP address? It's 64.34.119.12, if that jogs your memory.

You probably didn't. You probably typed "stackoverflow.com". There's a huge, complex, clever, and in some ways, poorly implemented system called DNS that translates sensible and human-readable names into IP addresses.

One problem with DNS, though, is you need a "static IP", which is exactly what it sounds like: an IP address that doesn't change, which is exactly what you don't have.

So, what can you do?

  1. You can buy a static IP account from your ISP (pretty expensive)
  2. You can use some proxy out in the Internet (a machine that does have a static IP and is willing to bounce your packets back and forth -- I'm not aware of any service that does this for you; you could write one and put it up on Amazon Web Services or Google App Engine, both of which would be free at your level of usage, but they'd be slow, since every packet trying to cross your living room would have have to go via some data-center in Virginia).
  3. You can keep doing what you're doing, looking in the net-configuration of your machine.
  4. You could speed (3) up a little by having your server program look up its own IP address and print it out where you could see it and type it into the server by hand.
  5. You can use DynDNS, as Sergey mentioned (this is the "right" solution, in that it's very general, it just might be a little complicated to set up)
  6. You can use multi-casting.

Multi-casting is an interesting solution, and it may work for you. The idea is, when your server starts up, it announces to the net, "Here I am, I'm providing X server, here's my IP address, talk to me." The problem is, a multi-cast won't leave your living room. Obviously, if every multi-cast were spread to every computer on the Internet, the whole thing would collapse, so your router will ignore, and not route, multi-cast packets. That may or may not be a deal-breaker for you. EDIT Re-reading your question, I see it is a deal-breaker for you. I'd go with #5, but be aware there may be routing issues (address translations that prevent a server from knowing the address that other computers can find it at) or fire-wall issues (that is, your ISP may prevent your server from receiving incoming packets even if the address is correct).

like image 188
Michael Lorton Avatar answered Oct 26 '22 13:10

Michael Lorton


using a direct socket connection with a port like 3333 is usually complicated because different network configurations.

firewalls will make a pleasure preventing the connection, or killing it from time to time.

maintaining a 2-way connection can be a nighmare. the SIP protocol is struggling with this kind of problems.

For a simple application, i suggest you look into the comet technology, where your clients can establish an http connection with a shared server. The server can then bridge commands between them.

html5 will also bring the websocket protocol to the table.

like image 21
Jerome WAGNER Avatar answered Oct 26 '22 12:10

Jerome WAGNER


I got the IP address by right-clicking on the connection, status, support.

Not sure about the "support" part, and I'm not on a Windows machine right now, but I think that the most easy and reliable way to figure out the IP address on Windows is to run "ipconfig" from the command line (Win+R, type "cmd", then "ipconfig" in the opened window). This, of course, should be done on the server side.

However, the problem is that depending on the ISP your IP address may be not within the Internet, but within a local ISP network (so-called NAT). In this case, you'll need to use some sort of black magic called TCP hole punching, which is very complicated and not guaranteed to work. You can figure out if your address is local or not by looking at it. For IPv4 local addresses are almost always like 10.x.x.x or 172.16-31.x.x, or 192.168.x.x. Don't know about IPv6.

You can also check your IP by visiting one of the special sites like www.whatismyip.com. If the address they tell you is different from the one you see by running "ipconfig" or looking at the connection properties, then you're almost certainly behind a NAT (or your ISP is using a transparent proxy, but that's rare).

If you are directly connected to Internet (no local addresses and NAT), then you should also check if you have any firewall software and either to configure it to allow connections to the port you use, or make sure it's in "ask the user" (and not "silently reject") mode, or just disable it completely (this may put your computer at risk, especially if there is no anti-virus software or the system isn't up-to-date).

Also, is it possible to get a fixed name for my computer that I can use instead of entering the IP address, as this changes every time I connect to the internet using my mobile phone?

Yes, it's possible. There is the thing called DynDNS, and there are DynDNS providers like DynDNS.com, where you can get a third-level domain name for free (like mycoolpc.dyndns.org). You'll have to install and configure some DynDNS client on your PC that will tell the DynDNS server its new IP each time each changed. I don't know anything about particular clients to use because I'm using the one built-in in my home router.

like image 27
Sergei Tachenov Avatar answered Oct 26 '22 12:10

Sergei Tachenov