客户端无法从INTERNET上的其他计算机连接到服务器

时间:2019-09-28 15:54:39

标签: python

我一直在研究一个非常简单的群聊程序。该程序在同一台计算机上进行测试时可以很好地运行,但是在INTERNET上的不同计算机之间无法运行。

我尝试禁用Windows Fire Wall。

抱歉,我无法缩小代码范围。 该程序使用套接字和线程库。

客户代码:

import socket
import threading

SERVER_IP = "127.0.0.1"      #This is changed to the servers PUBLIC IP when testing with another computer.
SERVER_PORT = 9279

global name
global sock


def connect():
    global sock
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    server_addres = (SERVER_IP, SERVER_PORT)
    try:
        sock.connect(server_addres)
        print("Connected.")
        return 1
    except:
        print("Cant connect to server.")
        return 0

def send_msg():
    global sock
    while True:
        try:
            msg = name + " >> " + input()
            sock.sendall(msg.encode())
        except Exception as e:
            print(e)

def recieve_msg():
    global sock
    server_active = 1

    while True and server_active:
        try:
            recieved_msg = sock.recv(1024).decode()
            print("\n" + recieved_msg)
        except Exception as e:
            print(e)
            server_active = 0

def main():
    global name

    name = input("Enter name: ")

    connected = connect()

    while True and connected:
        send_thread = threading.Thread(target=send_msg)
        send_thread.start()
        recv_thread = threading.Thread(target=recieve_msg)
        recv_thread.start()
        while recv_thread.is_alive():
            recv_thread.join(timeout=0.1)


    sock.close()

服务器代码:

import socket
import _thread


host = "My private IP"
port = 9279

global thread_active
thread_active = 1

global client_list

client_list = []

global addr

def on_new_client(clientsocket, pt):
    global thread_active
    global client_list
    while True and thread_active:
        global addr
        try:
            msg = clientsocket.recv(1024).decode()
            print(msg + " " + str(addr))
            for client in client_list:
                client.send(msg.encode())
        except Exception as e:
            print("Client " + str(addr[0]) + ':' + str(addr[1]) + " disconnected (" + str(e) + ")")
            if clientsocket in client_list:
                client_list.remove(clientsocket)
            print(client_list)
            thread_active = 0




s = socket.socket()

print('Server started!')
print('Waiting for clients...')

s.bind((host, port))        # Bind to the port
s.listen(10)                 # Now wait for client connection.

while True:
    c, addr = s.accept()
    print('Got connection from', addr)
    client_list.append(c)
    _thread.start_new_thread(on_new_client, (c, 0))
    thread_active = 1


s.close()
clientsocket.close()

0 个答案:

没有答案