全双工聊天

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

使用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()

Python全双工聊天的更多相关文章

  1. python socket 聊天室

    socket 发送的时候,使用的是全双工的形式,不是半双工的形式.全双工就是类似于电话,可以一直通信.并且,在发送后,如果又接受数据,那么在这个接受到数据之前,整个过程是不会停止的.会进行堵塞,堵塞就 ...

  2. 【翻译】用AIML实现的Python人工智能聊天机器人

    前言 用python的AIML包很容易就能写一个人工智能聊天机器人. AIML是Artificial Intelligence Markup Language的简写, 但它只是一个简单的XML. 下面 ...

  3. Python在线聊天软件(Tkinter)

    1.python2.7下安装 apt-get install python-tk 主要功能是实现客户端与服务器端的双向通信,这个小东西用到的主要知识点: 1.Python Socket:2.Pytho ...

  4. Python简易聊天工具-基于异步Socket通信

    继续学习Python中,最近看书<Python基础教程>中的虚拟茶话会项目,觉得很有意思,自己敲了一遍,受益匪浅,同时记录一下. 主要用到异步socket服务客户端和服务器模块asynco ...

  5. python 实现聊天室

    所用模块 asyncore 官方介绍, 源码 英文捉鸡点 这里  源码中可以看到其实本质上就对 select 以及 socket 的进一步封装 简单说明 Python的asyncore模块提供了以异步 ...

  6. python网络聊天器多线程版

    在之前的一篇文章(python网络编程-udp)中实现了一个简单的udp聊天器,只能在单线程下进行收发数据,在学习完多线程之后,实现一个能同时收发数据的udp聊天器. 说明: 编写一个有2个线程的程序 ...

  7. Python socket聊天室程序

    http://blog.csdn.net/calling_wisdom/article/details/42524745 今天用python的socket模块实现了一个聊天室的程序 虽然功能比较简单, ...

  8. 情人节用Python智能聊天机器人的实现|制作一个虚拟恋人

    首先项目需要的包 import urllib.request import urllib.parse from tkinter import * import time PS:另外很多人在学习Pyth ...

  9. Python 简易聊天机器人

    聊天机器人 | |-----MySql | |---module--"逻辑运算层" | | | |---ciku--"与词库交互" | | | |---dict ...

随机推荐

  1. 【VC编程技巧】窗口☞3.6以渐变效果加载对话框

    平时我们常常能够看到非常多应用程序启动过程非常酷.什么百叶窗.渐变,各种效果,今天我们看一下怎样在程序中添加这样的效果. 一.演示样例展示: watermark/2/text/aHR0cDovL2Js ...

  2. HDU3117-Fibonacci Numbers(矩阵高速幂+log)

    题目链接 题意:斐波那契数列,当长度大于8时.要输出前四位和后四位 思路:后四位非常easy,矩阵高速幂取模,难度在于前四位的求解.  已知斐波那契数列的通项公式:f(n) = (1 / sqrt(5 ...

  3. NPOI文件导入操作

    using EntMSM.SmsDbContext; using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using NPOI.XSSF.UserM ...

  4. 【cl】本地安装maven的jar包报错Artifact is already in the local repository

    原因是我直接把jar包放在了仓库里面 解决办法:将jar办放在不是仓库路径位置,在进行install就okle

  5. 数据结构之---C语言实现广义表头尾链表存储表示

    //广义表的头尾链表存储表示 //杨鑫 #include <stdio.h> #include <malloc.h> #include <stdlib.h> #in ...

  6. UVA 4855 Hyper Box

    You live in the universe X where all the physical laws and constants are different from ours. For ex ...

  7. C# 同步更新系统时间

    前言 在定位用户问题时,发现有些电脑,会出现系统时间不是最新的问题. 可能原因: 取消了勾选服务器时间同步 当前安装的系统,是一个未知来源系统,导致系统时间更新失败 而系统时间不正确,会导致IE选项- ...

  8. 为什么用Mysql?

    阅读目录 楔子 初识数据库 为什么要用数据库 认识数据库 初识mysql mysql概念 下载和安装 初识sql语句 楔子 假设现在你已经是某大型互联网公司的高级程序员,让你写一个火车票购票系统,来h ...

  9. AtCoder Beginner Contest 054

    1. A - One Card Poker 水题,直接输出大小. 2. B - Template Matching 暴力,每个位置枚举,比较. 3. C - One-stroke Path n的大小只 ...

  10. SVG剪裁路径和遮罩jQuery幻灯片

    SVG剪裁路径和遮罩jQuery幻灯片是一款基于SVG clipPath和mask遮罩元素实现的网站动画幻灯片代码特效. 在线演示本地下载