Python全双工聊天

博客介绍了全双工聊天,即服务端和客户端都能发送并接收信息。还提到使用Python的select模块中的select方法来实现,同时给出了参考链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

全双工聊天

全双工聊天:服务端和客户端都可以发送并接收信息。

使用select模块中的select方法

select(rlist, wlist, xlist[, timeout]) -> (rlist, wlist, xlist)

# server.py 服务器

from socket import *
from time import ctime
import select 
import sys

HOST = ''
PORT = 12346
BUFSIZE = 1024
ADDR = (HOST, PORT)

tcpServer = socket(AF_INET, SOCK_STREAM)
tcpServer.bind(ADDR)
tcpServer.listen(5)
gets = [tcpServer, sys.stdin]

while True:
    print('Waiting for connection...')
    tcpClient, addr = tcpServer.accept()
    print('Connected from:', addr)
    gets.append(tcpClient)

    while True:
        readyInput, readyOutput, readyException = select.select(gets, [], [])
        for indata in readyInput:
            if indata == tcpClient:  
                data = tcpClient.recv(BUFSIZE)
                if not data:
                    break
                print('[%s]: %s' % (ctime(), data.decode('utf-8')))
            else:
                data = input()
                if not data:
                    break
                tcpClient.send(bytes(data, 'utf-8'))
    tcpClient.close()
tcpServer.close()

 

# client.py 客户端

from socket import *
from time import ctime
import select 
import sys

HOST = 'localhost'
PORT = 12346
BUFSIZE = 1024
ADDR = (HOST, PORT)

tcpClient = socket(AF_INET, SOCK_STREAM)
tcpClient.connect(ADDR)
gets = [tcpClient, sys.stdin]

while True:
    readyInput, readyOutput, readyException = select.select(gets, [], [])
    for indata in readyInput:
        if indata == tcpClient:
            data = tcpClient.recv(BUFSIZE)
            if not data:
                break
            print('[%s]: %s' % (ctime(), data.decode('utf-8')))
        else:
            data = input()
            if not data:
                break
            tcpClient.send(bytes(data, 'utf-8'))
tcpClient.close()

 

转载于:https://www.cnblogs.com/noonjuan/p/10815259.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值