首页 > 解决方案 > 来自不同设备的 Python Socket 连接不起作用

问题描述

我用 python 在本地服务器上创建了一个小型聊天应用程序。当我在自己的计算机上运行客户端代码时,它工作正常,但是当我在另一台设备上尝试它时,它说:[WinError 10061] 无法建立连接,因为目标计算机主动拒绝它。我试图将主机设置为“”,我试图打开端口,但都没有成功。我应该怎么办?请不要提供诸如“它可能与您的防火墙有关”之类的答案,因为我已经知道了。我想一步一步确切地知道该怎么做,这样它才能真正起作用

我的服务器脚本:

import threading
import socket

name=socket.gethostname()
host=socket.gethostbyname(name)
port=5050

server=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind((host, port))
server.listen()

clients=[]
nicknames=[]

def broadcast(message):
    for client in clients:
        client.send(message)

def handle(client):
    while True:
        try:
            message=client.recv(1024)
            broadcast(message)
        except:
            index=clients.index(client)
            clients.remove(client)
            client.close()
            nickname=nicknames[index]
            broadcast(f"{nickname} left the chat".encode("ascii"))
            nicknames.remove(nickname)
            break

def recieve():
    while True:
        client,address=server.accept()
        print(f"[NEW CONNECTION] {str(address)} connected with the server!")
        
        client.send("NICK".encode("ascii"))
        nickname=client.recv(1024).decode("ascii")
        
        nicknames.append(nickname)
        clients.append(client)

        client.send("Welcome! you are connected to the server! have fun chatting!".encode("ascii"))        
        broadcast(f"{nickname} joined the chat!".encode("ascii"))

        thread=threading.Thread(target=handle, args=(client,))
        thread.start()

print("[LISTENING] server is started and is listening...")
recieve()

我的客户端脚本:


import threading
import socket

print("choose a nickname")
nickname=input()

host=socket.gethostbyname(socket.gethostname())
port=5050

client=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect((host, port))

def recieve():
    while True:
        try:
            message=client.recv(1024).decode()
            if message=="NICK":
                client.send(nickname.encode("ascii"))
            else:
                print(message)
        except:
            print("an error occurred")
            client.close()
            break

def write():
    while True:
        message="{}: {}".format(nickname, input(""))
        client.send(message.encode("ascii"))

recieve_thread=threading.Thread(target=recieve)
recieve_thread.start()

write_thread=threading.Thread(target=write)
write_thread.start()


标签: pythonsockets

解决方案


当我在另一台设备上尝试时它说:[WinError 10061] 无法建立连接

这个其他设备到底是什么?它位于哪里?你在哪里打开插座?

我假设你正试图打开一个到服务器的套接字,在这种情况下,你必须在你的套接字客户端之前运行服务器,然后再运行你的套接字程序,否则你会得到一个no connection错误。


推荐阅读