单进程服务器

1. 完成一个简单的TCP服务器

from socket import *serSocket = socket(AF_INET, SOCK_STREAM)# 重复使用绑定的信息
serSocket.setsockopt(SOL_SOCKET, SO_REUSEADDR  , 1)localAddr = ('', 7788)serSocket.bind(localAddr)serSocket.listen(5)while True:print('-----主进程,,等待新客户端的到来------')newSocket,destAddr = serSocket.accept()print('-----主进程,,接下来负责数据处理[%s]-----'%str(destAddr))try:while True:recvData = newSocket.recv(1024)if len(recvData)>0:print('recv[%s]:%s'%(str(destAddr), recvData))else:print('[%s]客户端已经关闭'%str(destAddr))breakfinally:newSocket.close()serSocket.close()

2. 总结

  • 同一时刻只能为一个客户进行服务,不能同时为多个客户服务
  • 类似于找一个“明星”签字一样,客户需要耐心等待才可以获取到服务
  • 当服务器为一个客户端服务时,而另外的客户端发起了connect,只要服务器listen的队列有空闲的位置,就会为这个新客户端进行连接,并且客户端可以发送数据,但当服务器为这个新客户端服务时,可能一次性把所有数据接收完毕
  • 当recv接收数据时,返回值为空,即没有返回数据,那么意味着客户端已经调用了close关闭了;因此服务器通过判断recv接收数据是否为空 来判断客户端是否已经下线

单进程服务器-非堵塞模式

服务器

#coding=utf-8
from socket import *
import time# 用来存储所有的新链接的socket
g_socketList = []def main():serSocket = socket(AF_INET, SOCK_STREAM)serSocket.setsockopt(SOL_SOCKET, SO_REUSEADDR  , 1)localAddr = ('', 7788)serSocket.bind(localAddr)#可以适当修改listen中的值来看看不同的现象serSocket.listen(1000)#将套接字设置为非堵塞#设置为非堵塞后,如果accept时,恰巧没有客户端connect,那么accept会#产生一个异常,所以需要try来进行处理serSocket.setblocking(False)while True:#用来测试#time.sleep(0.5)try:newClientInfo = serSocket.accept()except Exception as result:passelse:print("一个新的客户端到来:%s"%str(newClientInfo))newClientInfo[0].setblocking(False)g_socketList.append(newClientInfo)# 用来存储需要删除的客户端信息needDelClientInfoList = []for clientSocket,clientAddr in g_socketList:try:recvData = clientSocket.recv(1024)if len(recvData)>0:print('recv[%s]:%s'%(str(clientAddr), recvData))else:print('[%s]客户端已经关闭'%str(clientAddr))clientSocket.close()g_needDelClientInfoList.append((clientSocket,clientAddr))except Exception as result:passfor needDelClientInfo in needDelClientInfoList:g_socketList.remove(needDelClientInfo)if __name__ == '__main__':main()

客户端


#coding=utf-8
from socket import *
import random
import timeserverIp = raw_input("请输入服务器的ip:")
connNum = raw_input("请输入要链接服务器的次数(例如1000):")
g_socketList = []
for i in range(int(connNum)):s = socket(AF_INET, SOCK_STREAM)s.connect((serverIp, 7788))g_socketList.append(s)print(i)while True:for s in g_socketList:s.send(str(random.randint(0,100)))# 用来测试用#time.sleep(1)

并发服务器模型——单进程服务器相关推荐

  1. 并发服务器模型——多线程服务器

    多线程服务器 #coding=utf-8 from socket import * from threading import Thread from time import sleep# 处理客户端 ...

  2. 并发服务器模型——多进程服务器

    多进程服务器 1. 多进程服务器 from socket import * from multiprocessing import * from time import sleep# 处理客户端的请求 ...

  3. 循环服务器,并发服务器模型以及I/O多路转接模型

    https://blog.csdn.net/xinianbuxiu/article/details/53455784 一.基于TCP/IP协议的基本循环服务器 tcp_server.c #includ ...

  4. TCP/IP,单进程服务器与客户端连接通信,ipv4,TCP传输,无复用简单实例,nc模拟客户端连接服务器

    TCP/IP,单进程服务器与客户端连接通信,ipv4,TCP传输,无复用简单实例 一.实例设定 1.服务器与客户端均是本机,服务器绑定的ip可以是宏INADDR_ANY,这个宏表示可以和本机的所有网卡 ...

  5. 一个简单的高并发的回应服务器(5万并发)

    一个简单的高并发的回应服务器,主要是使用boost的库! 自己测试过可以达到5万个并发! 程序的下载地址:http://download.csdn.net/detail/guanyijun123/83 ...

  6. 单进程服务器-非堵塞模式(python版)

    单进程服务器-非堵塞模式 服务器 #coding=utf-8 from socket import * import time# 用来存储所有的新链接的socket g_socketList = [] ...

  7. 单进程服务器(python版)

    单进程服务器 1. 完成一个简单的TCP服务器 from socket import *serSocket = socket(AF_INET, SOCK_STREAM)# 重复使用绑定的信息 serS ...

  8. TCP高并发数据转接服务器(Ntrip Caster)

    TCP高并发数据转接服务器(Ntrip Caster) 说到NTRIP Caster, 咱们需要首先链接一下什么是Ntrip协议由于这不是本博客的重点,故只做如下简单介绍,,大家可以通过如下链接对nt ...

  9. 单机十万并发HLS直播服务器的防盗链技术

    单机十万并发HLS直播服务器的防盗链技术 本文主要介绍基于HLS直播服务器的十万并发防盗链实现 录制切片服务器 HTTP 服务器 (nginx) LuaLib 录制切片服务器 录制切片服务器负责把直播 ...

最新文章

  1. springboot新版本(2.0.0+)自定义ErrorController中使用ErrorAttributes
  2. 配置Windows下编译运行C/C++过程
  3. Python bytes 和 string 相互转换 - Python零基础入门教程
  4. [转载] Python3 数组
  5. kafka 创建topic_Kafka试题
  6. yeomanbower
  7. 1048. 数字加密(20)-浙大PAT乙级真题
  8. Swift调用微信支付宝SDK(Swift4.0)
  9. 【Win 10应用开发】认识一下UAP项目
  10. AI语音交互机器人,揭秘你不知道的隐藏功能
  11. Python使用 opencv对CT图进行医学处理
  12. DeepFool论文翻译---DeepFool: a simple and accurate method to fool deep neural networks
  13. 数学建模【规划模型--线性规划(整数规划、0-1规划)、非线性规划-附:案例分析、奶制品的生产和销售(详细求解过程)】
  14. 使用bug分类来设计更好的软件测试
  15. python爬取qq音乐歌词风变编程_风变编程的Python课,让我离掌握编程又进了一步...
  16. parameter缩略语_WB 术语及缩略语表
  17. 机房装饰实施方案的评审
  18. Linux 安装字体库-宋体
  19. 程序员必备的20多种开发工具
  20. pancake bot夹子机器人

热门文章

  1. Python连接mysql基本操作
  2. Redis和Memcached的区别详解
  3. jQuery 图片裁剪插件 Jcrop
  4. 实操《深入浅出React和Redux》第一期
  5. JS面向对象程序设计(OOP:Object Oriented Programming)
  6. 对中级 Linux 用户有用的 20 个命令
  7. oracle报表范例1 (转载)
  8. NetBeans 时事通讯(刊号 # 74 - Sep 30, 2009)
  9. SpringAOP 注解方式代码示例
  10. 解决硬盘文件目录损坏且无法读取