【发布时间】:2021-08-08 07:31:54
【问题描述】:
我们如何通过套接字编程(Python)与不同设备和不同网络上的服务器和客户端建立服务器和客户端之间的连接?当我们使用 i/p 地址和端口创建套接字时 如果两个设备都连接在同一网络上,则服务器、服务器和客户端的连接。但是对于不同的网络,情况并非如此。需要做什么来连接它们?
import socket
def server_program():
host = socket.gethostname()
port = 5000
server_socket = socket.socket()
server_socket.bind((host, port))
server_socket.listen(2)
conn, address = server_socket.accept()
print("Connection from: " + str(address))
while True:
data = conn.recv(1024).decode()
if not data:
break
print("from connected user: " + str(data))
data = input(' -> ')
conn.send(data.encode())
conn.close()
if __name__ == '__main__':
server_program()
import socket
def client_program():
host = socket.gethostname() // used ngrok i/p here
port = 5000 // used ngrok port no
client_socket = socket.socket()
client_socket.connect((host, port))
message = input(" -> ")
while message.lower().strip() != 'bye':
client_socket.send(message.encode())
data = client_socket.recv(1024).decode()
print('Received from server: ' + data)
message = input(" -> ")
client_socket.close()
if __name__ == '__main__':
client_program()
【问题讨论】:
-
“但不同网络的情况并非如此。” - 不同的网络不是问题,即可以轻松拥有内部客户端和互联网上的一些外部服务器。这就是浏览器和 Web 服务器之间的正常通信以及类似的工作方式。 Python 也可以做到这一点。问题仅在于网络内的系统可以相互访问,或者是否存在限制连接性的防火墙或路由。 解决连接问题的方法取决于具体问题,但可能涉及防火墙设置、端口转发或使用外部帮助程序。
标签: python sockets networking