python套接字返回ConnectionRefusedError:[Errno 111]连接被拒绝

时间:2021-02-21 10:39:38

标签: python sockets tcp

我正在用 python 编写一个聊天室项目。下面是我的 server.py 和 client.py。当客户端尝试连接到服务器时,它返回“in line8, client.connect((ip,port)) ConnectionRefusedError: [Errno 111] 连接被拒绝”。我不知道为什么客户端无法连接到服务器,而 telnet 可以正常连接。如果您有任何想法,请告诉我,谢谢。

server.py

import socket
#ip =socket.gethostbyname(socket.gethostname())
ip="127.0.0.1"
port=8000
server=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind((ip,port))
print("server ip address:"+ip)
server.listen(1)
conn,addr=server.accept()

user=addr[0]
print("[system]",user,"is online")
while True:
    message=str(conn.recv(1024), encoding='utf-8')
    if(not "quit()" in message):
        print(user+' : '+message)
    else:
        print("[system]"+user+" quit")
        conn.close()
        break

客户端.py

import socket


ip="127.0.0.1"
port=8000

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


while(1):
    message=input("input:")
    
    client.sendall(message.encode())
    if(message=="quit()"):
        break
client.close()

2 个答案:

答案 0 :(得分:2)

您可以使用多处理或线程,如果您想查看并尝试一下,youtube 上有大量关于它的视频

答案 1 :(得分:2)

方法一: Coroutines and Tasks

<块引用>

使用 async/await 语法声明的协程是首选方式 编写异步应用程序。

运行示例:

import asyncio


async def f1():
    print('Hello')
    await asyncio.sleep(1)


async def f2():
    print('World')
    await asyncio.sleep(1)

asyncio.run(f1())
asyncio.run(f2())

方法 2: threading

from time import sleep


def f1():
    print('Hello ')
    sleep(1)


def f2():
    print('World')
    sleep(1)


Thread(target=f1).start()
Thread(target=f2).start()

不幸的是,由于 Global interpreter lock,这些函数不会真正并行执行:

<块引用>

全局解释器锁 (GIL) 是一种用于 用于同步线程执行的计算机语言解释器 这样一次只能执行一个本地线程。一个 使用 GIL 的解释器总是只允许一个线程执行 一次,即使在多核处理器上运行。

方法 3: multiprocessing

<块引用>

multiprocessing 是一个支持使用 API 类似于线程模块。多处理包 提供本地和远程并发,有效地回避 通过使用子进程而不是线程来锁定全局解释器。 因此,多处理模块允许程序员完全 在给定机器上利用多个处理器。

from multiprocessing import Process
from time import sleep


def f1():
    print('Hello ')
    sleep(1)


def f2():
    print('World')
    sleep(1)


p1 = Process(target=f1)
p1.start()
p2 = Process(target=f2)
p2.start()
p1.join()
p2.join()