我已经在Python 2.7.x中创建了一个基本的客户端服务器套接字程序,即使在不同的计算机上,它也可以在同一网络上正常运行,但是当我在不同的网络上运行服务器和客户端时(我 friend 所在的服务器上的服务器,而我的客户端上的服务器)不返回任何错误,并继续等待。我只是不明白如何调试代码。我通过杀死端口80上的所有服务来使用端口80。我还完成了两台计算机上端口80上的端口转发。
我的代码如下:
client.py
import socket
s = socket.socket()
host = '103.47.59.130'
port = 80
s.connect((host, port))
while True:
print "From Server: ", s.recv(1024) #This gets printed after sometime
s.send(raw_input("Client please type: "))
s.close()
server.py
import socket
s = socket.socket() # Create a socket object
host = '192.168.0.104' #private ip address of machine running fedora
port = 80
s.bind((host, port))
s.listen(5)
c, addr = s.accept()
print 'Got connection from', addr #this line never gets printed
while True:
c.send(raw_input("Server please type: "))
print "From Client: ", c.recv(1024)
c.close()
有时会输出**从服务器:**,但不会来回发送任何消息。
PS:我之前在Stack Overflow上进行了搜索,但找不到任何相关内容。
最佳答案
使用此software实现端口转发。我建议您为服务器使用另一个端口,例如5006,以防止与使用非常常用的端口(例如80)相关的任何问题。基本上,该软件的工作方式如下:
因此,您的客户端所需要做的就是将数据发送到服务器的公共(public)IP,特别是到端口5001。当然,这些数据将首先到达路由器,路由器将按照配置进行操作,并将所有内容转发到服务器的端口5006。仅在您的Internet网关支持端口转发时才有效。
客户:
import socket
s = socket.socket()
host = '103.47.59.130'
port = 5001
s.connect((host, port))
while True:
try:
print "From Server: ", s.recv(1024)
s.send(raw_input("Client please type: "))
except:
break
s.close()
服务器:
import socket
s = socket.socket() # Create a socket object
host = '192.168.0.104' #private ip address of machine running fedora
port = 5006
s.bind((host, port))
s.listen(5)
c, addr = s.accept()
print 'Got connection from', addr
while True:
c.send(raw_input("Server please type: "))
print "From Client: ", c.recv(1024)
c.close()