gpt4 book ai didi

python - 在 Python 中通过 Internet 进行套接字连接?

转载 作者:可可西里 更新时间:2023-11-01 02:31:43 26 4
gpt4 key购买 nike

我在 Python 2.7.x 中创建了一个基本的客户端服务器套接字程序,即使在不同的机器上,它也能在同一网络上运行得非常好,但是当我在不同的网络上运行服务器和客户端时(服务器在我 friend 的网络上,而客户端在我的)它不会返回任何错误并继续等待。我只是不明白如何调试代码。我通过终止端口 80 上的所有服务来使用端口 80。我还在两台机器上的端口 80 上完成了端口转发。

我的代码如下:

客户端.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()

它有时会输出 **From Server: ** 但不会来回发送任何消息。

PS:我之前在 Stack Overflow 上搜索过,但找不到任何相关内容。

最佳答案

使用这个 software实现端口转发。我建议您为您的服务器使用另一个端口,例如 5006,以防止与使用 80 等非常常用的端口相关的任何问题。基本上,该软件的工作方式如下:

  • 您点击“连接”,它会搜索路由器,如果找到您的路由器,它会列出现有的端口映射。
  • 你创建一个端口映射(在右边),默认协议(protocol)是 TCP
  • 您在路由器上选择一个端口,例如 5001(称为外部端口)
  • 您在服务器上选择一个端口,可能是 5006(称为内部端口)
  • 然后路由器将被指示使用您的私有(private) IP 将到达端口 5001 的所有数据转发到您的服务器,特别是转发到您服务器上的端口 5006。

所以您的客户端所要做的就是将数据发送到您服务器的公共(public) IP,特别是端口 5001。这些数据当然会首先到达您的路由器,路由器将按配置运行并将所有内容转发到您服务器的端口 5006 . 所有这一切只有在您的互联网网关支持端口转发时才有效。

客户:

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()

关于python - 在 Python 中通过 Internet 进行套接字连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35384437/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com