将“本地网络”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 的服务器上运行良好。