2014-01-19 336 views
0

这是我的代码服务器:服务器/客户端连接(Python)的

import socket 

serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
host = "192.168.1.3" 
port = 8000 
print (host) 
print (port) 
serversocket.bind((host, port)) 

serversocket.listen(5) 
print ('server started and listening') 
while 1: 
    (clientsocket, address) = serversocket.accept() 
    print ("connection found!") 
    data = clientsocket.recv(1024).decode() 
    print (data) 
    clientsocket.send("data is sent".encode()) 

和客户:

import socket 

s = socket.socket() 
host ="59.93.199.XXX" 
port =8000 
s.connect((host,port)) 
s.send('randomData'.encode()) 
data = '' 
data = s.recv(1024).decode() 
print (data) 
s.close 

我想这个跨两台电脑在互联网上工作。 当我将host =“192.168.1.3”放在客户端时,它可以正常工作,但这只适用于连接到同一网络的计算机。 问题是,当服务器运行时,我检查在线开放端口,服务器显示'找到连接',但它不通过客户端连接到服务器。 我做错了什么? PORT 8000已开放。

192.168.1.3是我的电脑的IP和192.168.1.1是网关 错误,我得到的,当我运行客户端:

Traceback (most recent call last): File "C:\Users\Harsh's\Desktop\aaa.py", line 6, in s.connect((host,port)) ConnectionRefusedError: [WinError 10061] No connection could be made because the target machine actively refused it

回答

1

across two computers across the internet

在这种情况下,你的服务器或者需要一个公共的,静态地址,或者您必须配置您的路由器以将端口8000的传入连接路由到您的服务器(NATting,PATting等)。

谁的地址是“59.93.199.XXX”?你的路由器?那么你需要做翻译/重定向/链接。

一些测试后,这一问题表现为:中

s = socket.socket() 

代替

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
+0

被引导。 www.yourgetsignal.com展示其开放。 我有dyanamic ip,但没有重置,为什么它不工作? –

+0

在这种情况下,请将您的服务器绑定到其公共地址,而不是绑定到其本地。或将其绑定到所有可用的接口。 – Hyperboreus

+0

我是小白,请详细解释一下 如果我在服务器上使host = 显示错误。 我认为服务器没问题,因为它显示连接的消息,当我检查打开的端口。 我认为问题出在客户端 –