全双工聊天

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

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

最新文章

  1. iOS 字符串的宽度和高度自适应
  2. IT人经济思维之创业 - 创业与投资系列文章
  3. 7.echo(),print(),print_r()的区别
  4. HashMap归档-超越昨天的自己系列
  5. slickedit的alias配置
  6. LeetCode39/40/22/77/17/401/78/51/46/47/79 11道回溯题(Backtracking)
  7. ref关键字的作用
  8. [BZOJ2303][Apio2011]方格染色
  9. select与epoll、apache与nginx实现原理对比
  10. TCP/IP FTP/TFTP
  11. iOS网络编程-ASIHTTPRequest框架同步请求-备用
  12. VC++中的类的内存分布(上)
  13. sqldeveloper连接mysql
  14. TextView 设置图片
  15. 【转】Java方向如何准备技术面试答案(汇总版)
  16. VCC、 VDD、VEE、VSS 电压理解
  17. 【学习笔记】【Design idea】一、Java异常的设计思想、性能相关、笔记
  18. java 将保单数据 生成图片
  19. Appium学习笔记1_获取到APK安装包的Package以及Activity属性值
  20. 来自Unix/Linux的编程启发录

热门文章

  1. Thread interrupt表示什么
  2. [React] Update State Based on Props using the Lifecycle Hook getDerivedStateFromProps in React16.3
  3. [Angular] Upgrading to RxJS v6
  4. ScalaChina: Scala中文社区
  5. 基础树形DP小结
  6. Oracle 与 MySql 区别
  7. [ZJOI 2010] 数字计数
  8. weixin js接口
  9. 百度jquery公共引用地址
  10. ES6和Node容易搞混淆的点