python - 使用python在两个不同网络上的服务器和客户端?
问题描述
我有这两个 python 脚本。
服务器 :
#!/bin/env python
#--*-- coding:UTF-8 --*--
import socket
connexion = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = input("Ip : ")
port = int(input("Port : "))
connexion.connect((host, port))
print("The connection with {} is done.".format(host, port))
started = True
while started:
choice = int(input(" [1] Command\n [2] Leave\n > "))
if choice == 1:
command = input(" Command : ")
connexion.send(command.encode())
retour = connexion.recv(1024).decode('latin1')
print(retour)
if choice == 2:
connexion.send("exit")
connexion.close()
break
和客户:
#!/bin/env python
#--*-- coding:UTF-8 --*--
import socket
import subprocess
connexion = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = ''
port = 631
connexion.bind((host,port))
connexion.listen(5)
connexion_client, infos_connexion = connexion.accept()
started = True
while started:
rcv_cmd = connexion_client.recv(1024)
rcv_cmd = rcv_cmd.decode()
if rcv_cmd != "exit":
cmd = subprocess.Popen(rcv_cmd, shell=true, stdout = subprocess.PIPE, stderr =subprocess.PIPE, stdin = subprocess.PIPE )
out = cmd.stdout.read() + cmd.sdterr.read()
connexion_client.send(out)
else:
started = False
conexion.close()
exit
这两个脚本在我的本地网络上完美运行,但如果我想在两个不同的网络上使用它,我该怎么做?你有任何关于如何学习如何做到这一点的链接/提示吗?
解决方案
要实现这两个服务器之间的数据传输,您需要端口转发运行服务器的计算机。为此,您需要访问路由器的控制面板。然后说明因你的路由器而异,但你需要告诉路由器将服务器的本地IP和端口转发到公共IP和端口。
之后,您应该能够使用服务器路由器的公共 IP 从客户端连接到您的服务器。
推荐阅读
- postgresql - PostgreSQL中的子查询死锁
- javascript - 使用动态创建的反应组件并填充状态值
- asp.net - 无法在 ASP.NET 中纠正 VeraCode CWE ID 918 - (SSRF)
- php - 我需要使用 php 更改具有不同 id 的表的 html 元素
- java - 在静态块期间失败时在 Java 中手动加载类
- php - 我希望使用它 api v4 获得少量点击
- visual-studio-code - CosmosDB HttpTrigger VS Code Azure 函数无法加载程序集
- spring-boot - RabbitHandler 在 Spring 中创建消费者并重试致命异常,以便在侦听 RabbitMQ 时排队
- sql-server - 如何在 SQL 中创建一个新表,其中某些行是完全匹配的,而有些行不是?
- python-3.x - CountVectorizer 在具有异构列的 scikit-learn 中给出不兼容的行尺寸错误