1.字典队列测试

import queue

msg_dic={}
msg_dic[1]=queue.Queue()
msg_dic[1].put('hello')
msg_dic[1].put('bob')
print(msg_dic)

运行结果:

C:\abccdxddd\Oldboy\python-3.5.2-embed-amd64\python.exe C:/abccdxddd/Oldboy/Py_Exercise/Day10/eee.py
{1: <queue.Queue object at 0x00801630>} Process finished with exit code 0

2. 服务器端代码:

import select,socket,queue
server=socket.socket()
server.bind(('localhost',9000))
server.listen(1024)
server.setblocking(False)
msg_dic={} #定义一个空字典
inputs=[server,]
#inputs=[server,conn,conn2]
outputs=[]
#outputs=[r1,]
while True:
readable,writeable,exceptional=select.select(inputs,outputs,inputs)
print(readable,writeable,exceptional)
for r in readable:
if r is server:
conn,addr=server.accept()
print('来了个新链接',addr)
inputs.append(conn)
msg_dic[conn]=queue.Queue() #初始化一个队列,后面存要返回给客户端的数据。键值key:value=conn(键):queue.Queue(值)
else: #r is conn/conn2...
data=r.recv(1024)
print('收到数据',data)
msg_dic[r].put(data) #把要发的数据存在字典里面,等下次循环的时候发。
outputs.append(r) #放入返回的链接队列里.往output里面放什么,那么下次循环就出什么。往output里面放的是conn2,那么出的就是conn2
#r.send(data) for w in writeable: #要返回给客户端的链接列表,writeable里面存放的是r (conn,conn2)
data_to_client=msg_dic[w].get()
w.send(data_to_client) #返回给客户端源数据。这样收和发就分开了。
outputs.remove(w) #确保下次循环的时候writeable不返回这个已经处理完的链接了。 for e in exceptional: #这个链接已经断开了,出问题了,我就不再检测它了。
if e in outputs:
outputs.remove(e)
inputs.remove(e)
del msg_dic[e]

客户端代码:

import socket
s=socket.socket()
s.connect(('localhost',9000))
while True:
msg=bytes(input(">>:"),encoding='utf8')
s.sendall(msg)
data=s.recv(1024)
print('Received',data)
s.close()

用select模拟一个socket server成型版2的更多相关文章

  1. 用select模拟一个socket server成型版

    1.你往output里面放什么,下次循环就出什么.  2. 1.服务器端:实现了收和发的分开进行 import select,socket,queue server=socket.socket() s ...

  2. 用select模拟一个socket server

    1, 必须在非阻塞模式下,才能实现IO的多路复用,否则一个卡住就都卡住了.(单线程下的多路复用) 先检测自己,现在没有客户端连进来,所以会卡住. # 用select去模拟socket,实现单线程下的多 ...

  3. 用select (多路复用)模拟一个 socket server

    需求:用select (多路复用)模拟一个 socket server.可以接收多并发. 1. 一开始是检测自己,如果我有活动了,就说明有客户端要连我了. #用select去模拟socket,实现单线 ...

  4. python利用select实现的Socket Server

    # 利用python的select模块实现简单的Socket Sever #实现多用户访问,再次基础上可以实现FTP Server应用程序 # 发布目的,在于解决了客户端强行终止时,服务器端也跟着程序 ...

  5. C语言写了一个socket server端,适合windows和linux,用GCC编译运行通过

    ////////////////////////////////////////////////////////////////////////////////* gcc -Wall -o s1 s1 ...

  6. VFP 用 SPT 来发布一条 SELECT 到一个新的 SQL Server 表

    为了发布一条 SQL SELECT 语句来创建一个新的 SQL Server 表,  SQL Server 数据库的 select into/bulkcopy 选项必须是可用的. 在默认情况下, 对于 ...

  7. 面向连接的Socket Server的简单实现(简明易懂)

    一.基本原理 有时候我们需要实现一个公共的模块,需要对多个其他的模块提供服务,最常用的方式就是实现一个Socket Server,接受客户的请求,并返回给客户结果. 这经常涉及到如果管理多个连接及如何 ...

  8. C#7.2——编写安全高效的C#代码 c# 中模拟一个模式匹配及匹配值抽取 走进 LINQ 的世界 移除Excel工作表密码保护小工具含C#源代码 腾讯QQ会员中心g_tk32算法【C#版】

    C#7.2——编写安全高效的C#代码 2018-11-07 18:59 by 沉睡的木木夕, 123 阅读, 0 评论, 收藏, 编辑 原文地址:https://docs.microsoft.com/ ...

  9. C#中自己动手创建一个Web Server(非Socket实现)

    目录 介绍 Web Server在Web架构系统中的作用 Web Server与Web网站程序的交互 HTTPListener与Socket两种方式的差异 附带Demo源码概述 Demo效果截图 总结 ...

随机推荐

  1. CLR via #C读书笔记三:基元类型、引用类型和值类型

    1.一些开发人员说应用程序在32位操作系统上运行,int代表32位整数:在64位操作系统上运行,int代表64位整数.这个说法是完全错误的.C#的int始终映射到System.Int32,所以不管在什 ...

  2. 并发任务管理器AsyncTaskManager

    //-------------------------------------------------------------------------- // // Copyright (c) BUS ...

  3. vue中开发webSocket

    先安装 sockjs-client 和 stompjs npm install sockjs-client npm install stompjs <template> <div&g ...

  4. DSP5509项目之用FFT识别钢琴音调(1)

    1. 其实这个项目难点在于,能不能采集到高质量的钢琴音调.先看一下FFT相关程序. FFT 并不是一种新的变换,它是离散傅立叶变换(DFT)的一种快速算法.由于我们在计算 DFT 时一次复数乘法需用四 ...

  5. 利用Powershell查询AD中账号属性

    标签:AD账号信息 最后登录时间 最后修改密码.SID 账号SID 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://hubuxcg ...

  6. Django模型与创建管理员用户

    默认情况下, 配置使用SQLite:

  7. 域名添加www之后(或域名后加端口)无法访问(阿里云服务器)

    当时在阿里云服务器上部署了一个api接口,通过APP调用一直很正常,突然无法访问了,然后测试调查发现,只要在域名前加上www,再通过域名加端口的方式访问的话, 显示的都是 :502 错误:还一直以为是 ...

  8. 在nginx环境下,直接用域名访问(首页)

    ①: server { listen 80; server_name www.njm1.com; location = / { #=/规则可以直接访问域名.如:www.njm1.com.跳转到http ...

  9. tpo-08 C2 A strategy for attracting customers

    第 1 段 1.Listen to a conversation between a student and a business professor. 听一段学生和教授的对话. 第 2 段 1.So ...

  10. (C#)设计模式之状态模式

    1.状态模式 当一个对象的内在状态改变时允许改变其行为,这个对象看起像是改变了其类. *状态模式主要解决的是当控制一个对象的状态转换的条件表达式过于复杂时,可以将状态的判断逻辑转移到表示不同状态的一系 ...