San*_*ain 6 python sockets networking tcp
我已经在Python 2.7.x中创建了一个基本的客户端服务器套接字程序,即使在不同的机器上也可以在同一个网络上运行,但是当我在不同的网络上运行服务器和客户端时(我朋友的网络上的服务器,而我的客户端)不会返回任何错误并继续等待.我只是无法理解如何调试代码.我通过杀死端口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()
Run Code Online (Sandbox Code Playgroud)
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()
Run Code Online (Sandbox Code Playgroud)
它有时输出**来自服务器:**但不会来回发送任何消息.
PS:我之前在Stack Overflow上搜索过,但我找不到任何相关内容.
使用本软件实现端口转发。我建议您为服务器使用另一个端口,例如 5006,以防止与使用非常常用的端口(如 80)相关的任何问题。基本上,该软件的工作方式如下:
因此,您的客户端所要做的就是将数据发送到您服务器的公共 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()
Run Code Online (Sandbox Code Playgroud)
服务器:
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()
Run Code Online (Sandbox Code Playgroud)