繁体   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