Python Socket连接到联网计算机

时间:2014-12-12 01:52:43

标签: sockets python-2.7 networking

我正在开发一个简单的聊天程序,以便在同一网络上的多台计算机之间来回发送数据(这不适合在局域网外使用)。当服务器和客户端都在同一台计算机上时(使用localhost),该程序可以正常工作,但当我尝试将客户端应用程序移动到由同一路由器连接的另一台计算机时,该程序失败。我目前正在我的家庭网络上测试它。

如果我向前移植(对于端口5000到IP 192.168.1.100)并将server_host更改为公共IP而不是服务器的本地IP(192.168.1.100 - 从comp的终端中的ifconfig确定),它可以正常工作。所以,我的问题是:当客户端在同一局域网内的另一台计算机上时,我可以仅使用本地IP而不是端口转发/公共IP连接到计算机吗?我问的原因是因为这比请求允许打开我希望使用该程序的端口更可取。

简化的服务器代码:

from socket import *

host = '192.168.1.100' #This is the local IP of this particular machine
port = 5000
s = socket(AF_INET, SOCK_STREAM)
s.bind((host, port))
s.listen(5)

while True:
    conn, addr = s.accept()
    print 'Server Connected by: ' + str(addr)
    while True:
        data = conn.recv(1024)
        if not data: break
        conn.send('Data: ' + str(data))
    conn.close()

简化客户代码:

from socket import *
server_host = '192.168.1.100' #If I change this to public IP/port forward it works
server_port = 5000

msg = 'Hello!'
s = socket(AF_INET, SOCK_STREAM)
s.connect((server_host, server_port))
s.send(msg)
data = s.recv(1024)
print str(data)
s.close()

由于我缺乏“声望”点,我无法发布图片:但是当我通过将我的server_host更改为我的公共IP和端口转发来连接时,这是cli输出:

客户端:收到的数据:数据:您好!服务器:服务器连接方式:('192.168.1.1',61004)

以下是我尝试使用服务器的本地IP(192.168.1.100)时得到的内容:

客户端(暂停一段时间然后):[errno 10060]连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立的连接失败,因为连接的主机无法响应服务器:(没有显示在服务器端)

0 个答案:

没有答案