将“本地网络”python 聊天室连接到“互联网”
Connecting a ' local network ' python chatroom to the ' internet '
所以我尝试用 python 3.8 创建一个简单的聊天室,有一个简单的转折,而不是让一个服务器和两个客户端连接到该服务器,对话在客户端和服务器之间进行它本身,代码在一台机器上完全按预期工作,也在本地网络上的两个不同设备上工作(都连接到同一个路由器和调制解调器),但是当我试图在不同的设备上访问它时 超出本地网络,客户端无法连接到服务器,这是我的服务器端代码:
import socket
import threading
FORMAT = "utf-8"
PORT = 9999
HOST_IP = '192.168.1.56'
print("[SERVER STARTING]")
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind((HOST_IP, PORT))
server.listen()
def accepting():
global connection
print('[WAITING FOR CONNECTION ... ]')
while True:
connection, address = server.accept()
print(f'[NEW CONNECTION] {address} Connected to the server ')
connection.send(f"[SERVER] Welcome to {HOST_IP}".encode(FORMAT))
def receiving():
global connection
while True:
try:
msg = connection.recv(2048).decode(FORMAT)
if len(msg) == 0:
pass
else:
print('[CLIENT] ' + msg)
except:
pass
def sending():
global connection
while True:
try:
server_msg = input("> ")
connection.send(server_msg.encode(FORMAT))
except:
pass
receiving_th = threading.Thread(target=receiving)
accepting_th = threading.Thread(target=accepting)
sending_th = threading.Thread(target=sending)
accepting_th.start()
receiving_th.start()
sending_th.start()
我尝试将第 6 行的 HOST_IP 更改为以下所有内容:
HOST_IP = ''
HOST_IP = '0.0.0.0'
HOST_IP = '127.0.0.1'
他们都没有工作。我也尝试输入我的 Public IP 地址 但弹出以下错误:
Traceback (most recent call last):
File "C:\Users\pc\PycharmProjects\PrivateMssg1.0\Server.py", line 9, in <module>
server.bind((HOST_IP, PORT))
OSError: [WinError 10049] The requested address is not valid in its context
在客户端,这是我的代码:
import socket
import threading
FORMAT = "utf-8"
PORT = 9999
HOST_IP = "192.168.1.56"
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect((HOST_IP, PORT))
msg = client.recv(2048).decode(FORMAT)
print(msg)
def receiving():
while True:
try:
msg = client.recv(2048).decode(FORMAT)
print('[SERVER] ' + msg)
except:
pass
def sending():
while True:
try:
client_msg = input("> ")
client.send(client_msg.encode(FORMAT))
except:
pass
receiving_th = threading.Thread(target=receiving)
sending_th = threading.Thread(target=sending)
receiving_th.start()
sending_th.start()
我也在第 6 行 HOST_IP = "my public IP"
上尝试了我的 Public IP 地址,但没有成功。
我研究了大约 2 天,并尝试禁用我的 PC 的防火墙 和 我的路由器防火墙,但这也没有用。
我还尝试 在我的电脑上打开端口 9999 以及 端口转发 在我的路由器上将端口 9999 连接到我的本地 IP 196.168.1.56 。我尝试重新启动我的路由器和我的电脑。但其中 none 有效。我不认为我的代码导致它无法连接,因为它在本地网络上运行良好。谁能帮我吗 ?
有人可以尝试在他们的设置上编写代码吗?因为问题可能出在我的路由器上,端口转发不正确。
问题出在我的 public IP 上,您需要一个静态 public IP 才能接受入站请求,它在基于 linux 的服务器上运行良好。
所以我尝试用 python 3.8 创建一个简单的聊天室,有一个简单的转折,而不是让一个服务器和两个客户端连接到该服务器,对话在客户端和服务器之间进行它本身,代码在一台机器上完全按预期工作,也在本地网络上的两个不同设备上工作(都连接到同一个路由器和调制解调器),但是当我试图在不同的设备上访问它时 超出本地网络,客户端无法连接到服务器,这是我的服务器端代码:
import socket
import threading
FORMAT = "utf-8"
PORT = 9999
HOST_IP = '192.168.1.56'
print("[SERVER STARTING]")
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind((HOST_IP, PORT))
server.listen()
def accepting():
global connection
print('[WAITING FOR CONNECTION ... ]')
while True:
connection, address = server.accept()
print(f'[NEW CONNECTION] {address} Connected to the server ')
connection.send(f"[SERVER] Welcome to {HOST_IP}".encode(FORMAT))
def receiving():
global connection
while True:
try:
msg = connection.recv(2048).decode(FORMAT)
if len(msg) == 0:
pass
else:
print('[CLIENT] ' + msg)
except:
pass
def sending():
global connection
while True:
try:
server_msg = input("> ")
connection.send(server_msg.encode(FORMAT))
except:
pass
receiving_th = threading.Thread(target=receiving)
accepting_th = threading.Thread(target=accepting)
sending_th = threading.Thread(target=sending)
accepting_th.start()
receiving_th.start()
sending_th.start()
我尝试将第 6 行的 HOST_IP 更改为以下所有内容:
HOST_IP = ''
HOST_IP = '0.0.0.0'
HOST_IP = '127.0.0.1'
他们都没有工作。我也尝试输入我的 Public IP 地址 但弹出以下错误:
Traceback (most recent call last):
File "C:\Users\pc\PycharmProjects\PrivateMssg1.0\Server.py", line 9, in <module>
server.bind((HOST_IP, PORT))
OSError: [WinError 10049] The requested address is not valid in its context
在客户端,这是我的代码:
import socket
import threading
FORMAT = "utf-8"
PORT = 9999
HOST_IP = "192.168.1.56"
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect((HOST_IP, PORT))
msg = client.recv(2048).decode(FORMAT)
print(msg)
def receiving():
while True:
try:
msg = client.recv(2048).decode(FORMAT)
print('[SERVER] ' + msg)
except:
pass
def sending():
while True:
try:
client_msg = input("> ")
client.send(client_msg.encode(FORMAT))
except:
pass
receiving_th = threading.Thread(target=receiving)
sending_th = threading.Thread(target=sending)
receiving_th.start()
sending_th.start()
我也在第 6 行 HOST_IP = "my public IP"
上尝试了我的 Public IP 地址,但没有成功。
我研究了大约 2 天,并尝试禁用我的 PC 的防火墙 和 我的路由器防火墙,但这也没有用。
我还尝试 在我的电脑上打开端口 9999 以及 端口转发 在我的路由器上将端口 9999 连接到我的本地 IP 196.168.1.56 。我尝试重新启动我的路由器和我的电脑。但其中 none 有效。我不认为我的代码导致它无法连接,因为它在本地网络上运行良好。谁能帮我吗 ?
有人可以尝试在他们的设置上编写代码吗?因为问题可能出在我的路由器上,端口转发不正确。
问题出在我的 public IP 上,您需要一个静态 public IP 才能接受入站请求,它在基于 linux 的服务器上运行良好。