Python中的套接字编程引发错误socket.error:< [Errno 10060]连接尝试失败

时间:2017-07-11 15:50:23

标签: python sockets

我是Socket Programming的新手。我已经实现了客户端和服务器脚本,用于通过Internet传输文件。这两个脚本都在使用局域网计算机。我试图将局域网中的文件从1MB交换到1GB,脚本运行正常。

但是,当我使用脚本在不同的网络上工作意味着互联网。它不起作用。我检查了两个系统的防火墙规则。 Python是允许的。这是代码片段。有人能告诉我这是什么问题吗?

Script -> Server.py

import os
import socket
file_path = r'C:\Users\Baby\Downloads\006.jpg'
file_size = str(os.path.getsize(file_path))
file_name = file_path.split('\\')[-1]
# print file_name.encode('UTF-8')
total = file_name+ '/'+file_size
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
host = socket.gethostbyname(socket.gethostname())
# value of host = '103.235.165.205' as this is my ip which i am using in client.py
s.bind((host,21000))
s.listen(5)

print 'Server is listening on {}:21000'.format(host)
conn,addr = s.accept()
print 'Got connection from IP :{} Host :{}'.format(addr[0],addr[1])
conn.send(total.encode())

with open(file_path,'rb') as data:
    while data:
        conn.send((data.read()))
        break
    conn.close()
print 'transfer complete'
s.close()
Script -> Client.py

import socket
s = socket.socket()
s.connect(('10.174.238.205',21000))
total = (s.recv(1024)).decode()
file_name , file_size = map(str,total.split('/'))
data = s.recv(int(file_size.decode()))
with open(file_name,'wb') as getfile:
    getfile.write(data)

1 个答案:

答案 0 :(得分:0)

服务器中的每个网络适配器都应与其自己的iP地址相关联。

s.bind()命令应使用与您希望侦听连接器的网络适配器关联的IP或主机名。这应该是连接到运行客户端的网络的适配器。

此外,如果连接在本地网络旁边,则必须使用公开可见的IP。您可以阅读有关IP分配here和许多其他地方(Google是您的朋友)的信息。通常,您的ISP将分配公共IP地址(有时需要额外费用,因为它们是稀缺资源。)

感谢@jasonharper在评论中指出公共与私人知识产权问题。