1

我使用套接字编写了一个基本的服务器-客户端脚本,并且在我的 LAN 上一切正常,但是当我尝试连接到不在我的 LAN 中的客户端时它不起作用。我还转发了这些端口

这是服务器

###SERVER####


def ChatConnection():
    print('Waiting for a connection...\n')
    SOCKET = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    SOCKET.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    HOST = ''
    PORT = 8989
    SOCKET.bind((HOST, PORT))
    SOCKET.listen(1)
    CONN, ADDR = SOCKET.accept()
    print('You can now chat')
    while True:
        MSG = str(input('\n[YOU]> '))
        while not MSG: MSG = str(input('\n[YOU]> '))
        CONN.send(MSG.encode())
        print('\nAwaiting reply...')
        REPLY = CONN.recv(4096).decode()
CONN.close()

这是客户

###CLIENT###



def ChatConnection():
    print('Waiting for a connection...\n')
    while True:
        try:
            HOST = SERVER EXTERNAL IP
            PORT = 8989
            SOCKET = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            SOCKET.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
            SOCKET.connect((HOST, PORT))
            print('You can now chat with server')
            print('\nWaiting for server...')
            while True:
                REPLY = SOCKET.recv(4096)
                print('\n[USER]> %s'%REPLY.decode())
                MSG = str(input('\n[YOU]> '))
                while not MSG: MSG = str(input('\n[YOU]> '))
                SOCKET.send(MSG.encode())
                print('\nAwaiting reply...')
            SOCKET.close()
    except Exception: pass

我需要做什么才能在 WAN 上工作?

4

1 回答 1

0

确保端口转发WORKS,以检查它运行您的程序并尝试在您的公共 IP 上运行端口扫描。
端口扫描工具

  • 尝试将 更改HOST0.0.0.0
  • 如果这不起作用,请转到 CMD 并netstat -a在脚本运行时编写。
    搜索您正在侦听的端口并确保 IP 为0.0.0.0.
  • 如果 IP 是0.0.0.0然后尝试关闭您的防火墙。
于 2015-10-10T22:04:48.983 回答