簡體   English   中英

如何通過Internet在兩台計算機之間發送數據

[英]How do I send data between two computers over the internet

我一整天都在努力解決這個問題,我希望有人可以幫助我。

我的問題很簡單:我希望通過互聯網將數據(主要是簡單的命令)從一台PC傳輸到另一台PC。

當兩台計算機連接到我的家用路由器時,我已經能夠使用Java中的套接字來實現這一點。 然后,我使用兩個不同的移動電話將兩台計算機連接到互聯網,並嘗試再次傳輸數據。 我使用移動電話,因為這提供了到互聯網的直接路由,如果我使用我的路由器,我必須設置端口轉發,至少,這是我理解它。

我認為問題在於我設置客戶端套接字的方法。 我用了:

Socket kkSocket = new Socket(ipAddress, 3333);

其中ipAddress是運行服務器的計算機的IP地址。 我通過右鍵單擊連接,狀態,支持來獲取IP地址。 這是正確使用的IP地址還是在哪里可以獲取服務器的地址? 此外,是否可以為我的計算機獲取一個固定的名稱,而不是輸入IP地址,因為每次使用我的手機連接到互聯網時這都會改變?

或者,是否有更好的方法來解決我的問題,如使用http,如果是這樣,我在哪里可以找到更多相關信息?

編輯:是否有可能讓服務器程序在互聯網上的某個服務器上運行。 我的原始服務器將是一個向該服務器發送信息的客戶端。 然后,此服務器將此信息傳遞給我的原始客戶端,反之亦然。 這樣,我的計算機的IP地址無關緊要,因為我只需要知道在網絡上某處托管的服務器的地址。 這似乎是一個更好的解決方案嗎? 我從哪里開始實施這樣的解決方案?

謝謝!

當您連接到服務於StackOverflow的服務器時,您是否輸入了IP地址? 它是64.34.119.12,如果那慢跑你的記憶。

你可能沒有。 你可能輸入了“stackoverflow.com”。 有一個巨大的,復雜的,聰明的, 在某些方面 ,實施不當的系統稱為DNS ,它將合理的和人類可讀的名稱轉換為IP地址。

但是,DNS存在的一個問題是,您需要一個“靜態IP”,這聽起來就是這樣的:一個不會改變的IP地址,這正是您沒有的。

所以,你可以做什么?

  1. 您可以從ISP購買靜態IP帳戶(相當昂貴)
  2. 你可以使用一些代理了在互聯網(一台機器, 確實有一個靜態IP,願您的反彈包來回-我不知道,這是否對你的任何服務的,你可以寫一個,並把它可以在亞馬遜網絡服務或谷歌應用引擎上使用,這兩種方式都可以免費使用,但它們會很慢,因為每個試圖穿過客廳的數據包都必須經過一些數據中心弗吉尼亞州)。
  3. 你可以繼續做你正在做的事情,查看你的機器的網絡配置。
  4. 您可以通過讓服務器程序查找自己的IP地址並將其打印出來,然后手動將其輸入服務器,從而加快(3)速度。
  5. 你可以像謝爾蓋所說的那樣使用DynDNS(這是“正確的”解決方案,因為它非常通用,設置起來可能有點復雜)
  6. 您可以使用多播

多播是一個有趣的解決方案,它可能適合您。 這個想法是,當你的服務器啟動時,它會向網絡宣布:“我在這里,我正在提供X服務器,這是我的IP地址,請跟我說說。” 問題是,多人演員不會離開你的起居室。 顯然,如果每個多播都傳播到互聯網上的每台計算機上,整個事情就會崩潰,所以你的路由器會忽略而不是路由多播數據包。 這可能是也可能不是你的交易破壞者。 編輯重新閱讀您的問題,我認為這對您來說一個交易破壞者。 我會選擇#5,但要注意可能存在路由問題(防止服務器知道其他計算機可以找到的地址的地址轉換)或防火牆問題(也就是說,您的ISP可能會阻止您的服務器從接收傳入的數據包,即使地址是正確的)。

使用與3333之類的端口的直接套接字連接通常很復雜,因為網絡配置不同。

防火牆會很高興阻止連接,或不時殺死它。

保持雙向連接可能是一個很大的問題。 SIP協議正在努力解決這類問題。

對於一個簡單的應用程序,我建議您研究一下彗星技術 ,您的客戶可以在其中與共享服務器建立http連接。 然后,服務器可以在它們之間橋接命令。

html5還將websocket協議帶到表中。

我通過右鍵單擊連接,狀態,支持來獲取IP地址。

不確定“支持”部分,我現在不在Windows機器上,但我認為在Windows上找出IP地址最簡單可靠的方法是從命令行運行“ipconfig”( Win + R,鍵入“cmd”,然后在打開的窗口中鍵入“ipconfig”。 當然,這應該在服務器端完成。

但問題是,根據ISP的不同,您的IP地址可能不在Internet內,而是在本地ISP網絡中(所謂的NAT)。 在這種情況下,你需要使用某種稱為TCP打孔的黑魔法,這種打法非常復雜並且無法保證工作。 你可以通過查看來確定你的地址是否是本地的。 對於IPv4,本地地址幾乎總是像10.xxx或172.16-31.xx,或192.168.xx。不了解IPv6。

您還可以訪問www.whatismyip.com等特殊網站查看您的IP。 如果他們告訴你的地址與你通過運行“ipconfig”或查看連接屬性看到的地址不同,那么你幾乎肯定會在NAT后面(或者你的ISP正在使用透明代理,但這種情況很少見)。

如果您直接連接到Internet(沒有本地地址和NAT),那么您還應檢查是否有任何防火牆軟件,並將其配置為允許連接到您使用的端口,或確保它在“詢問用戶”中(而不是“默默拒絕”)模式,或者只是完全禁用它(這可能會使您的計算機面臨風險,特別是如果沒有防病毒軟件或系統不是最新的)。

此外,是否可以為我的計算機獲取一個固定的名稱,而不是輸入IP地址,因為每次使用我的手機連接到互聯網時這都會改變?

是的,這是可能的。 有一個名為DynDNS的東西,有DynDNS提供商,如DynDNS.com ,你可以免費獲得三級域名(如mycoolpc.dyndns.org)。 您必須在PC上安裝和配置一些DynDNS客戶端,每次更改時都會告訴DynDNS服務器它的新IP。 我對使用特定客戶端一無所知,因為我正在使用家用路由器內置的客戶端。

不需要為此編寫網絡代碼,除非它真的漂浮在你的船上。 看看SCP。 http://amath.colorado.edu/computing/software/man/scp.html 有一個Windows實現,你可以下載putty(windows ssh客戶端),它在大多數Linux發行版上。 或者,您可以在一台或兩台計算機上設置FTP或SSH服務器。

“我可以使用的固定名稱,而不是輸入IP地址”將是一個域名,這些可以在網上購買幾塊錢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM