簡體   English   中英

如何用 python 插座連接兩台電腦?

[英]How can i connect two computers with python socket?

我是新來的。 我在使用不同 wi-fi 連接的兩台計算機之間連接時遇到問題。 大約 20 秒后,我得到無法完成連接的信息:有我的代碼:服務器:

from socket import *


lista = ['computer']

s = socket(AF_INET, SOCK_STREAM)

port = 21312
s.bind(('my ipv4', port))

s.listen(5)
while True:

for i in range (0, len(lista)):
    a = str(lista[i]).encode()
    c, addr = s.accept()
    print("CONNECTION WITH",addr)
    c.send(a)
    print(a)
    c.close()

客戶:

import socket
from socket import *

port = 21312

while True:
s = socket(AF_INET,SOCK_STREAM)
s.connect(('my ipv4', port))
odebrana = (s.recv(1024))
decoded = odebrana.decode()
print(decoded)
s.close()

所以我在使用python sockets在兩台計算機之間發送圖像文件時遇到了類似的問題。 我通過以下方式解決了這個問題:

  • 首先我完成了server.pyclient.py的連接代碼的編寫

注意server.py應該在一台計算機上, client.py應該在另一台計算機上。

服務器.py

import socket
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = socket.gethostname()
print(host)
server.bind((host, 12000))
server.listen()

client_socket, client_address = server.accept()

file = open('server_image.jpg','wb')

image_chunk = client_socket.recv(2048)

while image_chunk:
    file.write(image_chunk)
    image_chunk = client_socket.recv(2048)

file.close()
client_socket.close()

客戶端.py

import socket

client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  # AF_INET = IP, SOCK_STREAM = TCP

server_host = 'LAPTOP-1231'  # Replace this hostname with hostname printed in server.py

client.connect((server_host, 12000))  # 127.0.0.1

file = open('That_Sinking_Feeling_27.jpg', 'rb')
image_data = file.read(2048)

while image_data:
    client.send(image_data)
    image_data = file.read(2048)

file.close()
client.close()
  • 現在您應該將圖像添加到client.py所在的目錄中,以便您可以將其發送到另一台計算機(服務器)。 將其重命名為img.jpg

  • 然后,您需要在另一台計算機上運行server.py 它將在終端中打印hostname 然后復制該hostname並將其粘貼到client.py (server_host = hostname_from_server)

  • 然后運行client.py

最后將圖像傳輸到新計算機(服務器)

您可能會遇到問題,因為您的服務器位於網絡地址轉換器 (NAT) 后面。 這樣,您的客戶端無法直接使用服務器的 IP,因為它無法訪問。 有幾種方法可以解決它。

  1. 最簡單但不是很實用的方法是:讓兩台機器在同一個網絡中,然后它應該可以工作。
  2. 獲取服務器的公共 IP 地址。 您可以通過將其托管在為您提供公共 IP(例如 aws、azure、谷歌雲等)的雲服務器上來做到這一點。
  3. 在過去,我們使用hamachi來獲得可以連接兩台機器的 VPN。 然后他們可以通過該 VPN 相互識別。 只需打開 hamachi(或任何其他 VPN 解決方案),運行您的服務器,然后從您的客戶端(連接到 VPN),使用 VPN 的服務器 IP(hamachi 將在您設置網絡時為您提供一個)。

免責聲明:我大約 15 年沒有使用過 hamachi,但由於以下評論之一而剛剛經歷了這個過程。

似乎您可以創建一個帳戶,然后一旦打開它,您應該會看到您的 v4 和 v6 地址,如下所示:

濱町IP

突出顯示的是我的 v4 地址。 我懷疑您需要創建一個網絡,將兩台 PC 加入同一網絡,然后使用 hamachi 的 IP 模擬行為,就好像它們通過 LAN 連接一樣。

暫無
暫無

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

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