1、线程池,ThreadingTCPServer

#coding=utf-8
'''
可并发,客户端互不影响,可以保持长连接,客户端发送消息 也不要求加 \r\n
''' #线程池(windows 可运行) from socketserver import *
import threading class MyTCPHandler(BaseRequestHandler): def handle(self):
while 1:
self.data=self.request.recv(1024).strip() cur_thread=threading.current_thread()
print('cur_thread.name:',cur_thread.name) #if not self.data:
if self.data=='bye':
print('客户端退出:',self.client_address[0])
break
print('客户端IP:%s:%s,内容:%s'%(self.client_address[0],self.client_address[1],self.data.decode())) self.request.sendall(self.data.upper()) if __name__=='__main__':
print('监听开始了。。。。')
server=ThreadingTCPServer(('127.0.0.1',9977),MyTCPHandler)
server.serve_forever()

client 客户端程序:

#coding=utf-8
'''
client
'''
from socket import * sk=socket() sk.connect(('127.0.0.1',9977))
while 1:
sk.settimeout(50) print('sending...now....')
s=input('输入:')
sk.send(s.encode())
if s=='bye':
break print(sk.recv(1024).decode()) sk.close()

2、ThreadingMixIn与TCPServer

#coding=utf-8
'''
貌似是一个真正的并发
客户端不等待,互不影响,linux下运行
'''
from socketserver import TCPServer,StreamRequestHandler,ThreadingMixIn import time
class Server(ThreadingMixIn,TCPServer):
pass class MyHandler(StreamRequestHandler): def handle(self):
addr=self.request.getpeername()
print('来自客户端:',addr)
print('from address:',self.client_address)
data=self.rfile.readline().strip()
print('*'*10)
print(type(data))
print(data.decode())
#if data.decode()=='bye' or not data:
# break
time.sleep(0.1)
if data:
self.wfile.write('服务器回复的消息'.encode('utf-8')) if __name__=='__main__': sever=Server(('127.0.0.1',9966),MyHandler) sever.serve_forever()

client客户端程序:

#coding=utf-8
from socket import * addr=('127.0.0.1',9966)
print('addr:',addr) while 1: sk=socket(AF_INET,SOCK_STREAM)
sk.connect(addr) print('send begin...')
data=input('please input something:')
sk.send((data+'\r\n').encode('utf-8'))
if data=='bye'or not data:
break print('recv begin....')
print(sk.recv(1024))
print('recv over...')
sk.close()

3、

#coding=utf-8
'''
貌似是串行,多连接,会等待1发送消息完成,才会处理2
'''
#from socketserver import TCPServer,ForkingMixIn,StreamRequestHandler
from socketserver import *
import time class Server(TCPServer,ForkingMixIn):
pass class MyHandler(StreamRequestHandler):
def handle(self):
addr=self.request.getpeername()
print('connect from :',addr)
try:
data=self.rfile.readline().strip()##客户端传的数据必须加上'\r\n'结尾
print('data:',data)
time.sleep(0.1)
except:
print('jie shou bao cuo le..')
if data:
self.wfile.write('this is a server message'.encode('utf-8')) if __name__=='__main__': server=Server(('127.0.0.1',9900),MyHandler)#连接是接收一次,关闭一次,每次传数据都要重新建立连接
print('server object:',server)
server.serve_forever()

client 客户端程序:

from socket import *

addr=('127.0.0.1',9900)

while 1:
sk=socket(AF_INET,SOCK_STREAM) #注意每次都要创建连接,服务端收一次数据就会关闭连接
sk.connect(addr)
data=input('input sth:')
if not data:
break
sk.send((data+'\r\n').encode()) #发送数据必须加\r\n结尾
data=sk.recv(1024)
if not data:
break
print(data.strip())
sk.close()

4、最基础的TCPServer小实例

#coding=utf-8

from socketserver import TCPServer,StreamRequestHandler as srh
import time
import traceback class MyHandler(srh):
def handle(self):
print('client address:',self.client_address)
try:
print('sever recv begin...')
dd=self.rfile.readline() #客户端发送一定加入\r\n结尾,否则会卡死
print('received data is:',dd) self.wfile.write('server send message!!'.encode())
#self.wfile.write('%s,%s'%(self.data,time.strf('%Y-%m-%d %H:%M:%S',time.time())))
except:
traceback.print_exc()
print('baocuo ru shang') server=TCPServer(('127.0.0.1',21567),MyHandler) #每次发送请求后自动关闭连接,不能长连接
server.serve_forever()

client客户端程序:

from socket import *

addr=('127.0.0.1',21567)

while 1:
sk=socket(AF_INET,SOCK_STREAM) #注意每次都要创建连接,服务端收一次数据就会关闭连接
sk.connect(addr)
data=input('input sth:')
if not data:
break
sk.send((data+'\r\n').encode()) #发送数据必须加\r\n结尾
data=sk.recv(1024)
if not data:
break
print(data.strip())
sk.close()

socketserver 多进程、多线程应用实例的更多相关文章

  1. [转帖]Windows和Linux对决(多进程多线程)

    Windows和Linux对决(多进程多线程) https://blog.csdn.net/world_2015/article/details/44920467 太长了 还没看完.. 还是没太理解好 ...

  2. (转) C#多线程赛跑实例

    专于:http://blog.csdn.net/lidatgb/article/details/8363035 结合上篇<多线程的基础>,这次我们写一个多线程的赛跑实例,内容很简单:超人和 ...

  3. vc 基于对话框多线程编程实例——线程之间的通信

     vc基于对话框多线程编程实例——线程之间的通信 实例:

  4. C#多线程编程实例 螺纹与窗口交互

    C#多线程编程实例 螺纹与窗口交互 代码: public partial class Form1 : Form { //声明线程数组 Thread[] workThreads = new Thread ...

  5. gdb常用命令及使用gdb调试多进程多线程程序

    一.常用普通调试命令 1.简单介绍GDB 介绍: gdb是Linux环境下的代码调试⼯具.使⽤:需要在源代码⽣成的时候加上 -g 选项.开始使⽤: gdb binFile退出: ctrl + d 或 ...

  6. c# 多线程 创建对象实例

    本次的标题是我在写单例模式的博客时遇到的问题,所以今天专门写了的demo让自己记住怎么简单的使用多线程. 一直纠结的是怎么在for循环中多次实例化对象,好复现单例模式在没有加锁的情况下出现多个实例对象 ...

  7. python采用 多进程/多线程/协程 写爬虫以及性能对比,牛逼的分分钟就将一个网站爬下来!

    首先我们来了解下python中的进程,线程以及协程! 从计算机硬件角度: 计算机的核心是CPU,承担了所有的计算任务.一个CPU,在一个时间切片里只能运行一个程序. 从操作系统的角度: 进程和线程,都 ...

  8. 也说性能测试,顺便说python的多进程+多线程、协程

    最近需要一个web系统进行接口性能测试,这里顺便说一下性能测试的步骤吧,大概如下 一.分析接口频率 根据系统的复杂程度,接口的数量有多有少,应该优先对那些频率高,数据库操作频繁的接口进行性能测试,所以 ...

  9. linux下C语言多线程编程实例

    用一个实例.来学习linux下C语言多线程编程实例. 代码目的:通过创建两个线程来实现对一个数的递加.代码: //包含的头文件 #include <pthread.h> #include ...

  10. Python 多进程 多线程 协程 I/O多路复用

    引言 在学习Python多进程.多线程之前,先脑补一下如下场景: 说有这么一道题:小红烧水需要10分钟,拖地需要5分钟,洗菜需要5分钟,如果一样一样去干,就是简单的加法,全部做完,需要20分钟:但是, ...

随机推荐

  1. php utf8 gbk 数组 互转

    这些都是工作中常用的 前几年写过 但没有记录的习惯,后边有要用到麻烦,现在记录下 以后直接拿来用 数组里的 utf8_to_gbk 方法 是上一篇写的 直接调用 public static funct ...

  2. 【谷歌浏览器】修改和添加Cookie

    一.使用谷歌浏览器 1.1.修改ookie 方法一:直接用开发者工具修改: 操作如图:   参考: 检查和删除 Cookie · Chrome 开发者工具中文文档 http://www.css88.c ...

  3. ios客户端浏览器样式加载失效问题

    最近线上测试中出现一个奇怪的问题,ios客户端浏览器样式加载失效. 从表象来看,同样的css,安卓手机上可以正常展示,但是到ios手机上首次进入页面就不能正常显示 这时候,我们首先会考虑是不是ios设 ...

  4. 方法重载,new,override

    方法重载:参数列表不一样,方法名字一样,包括泛型,和返回值无关 new: 复写,方法重载   overload  继承是对于普通方法和属性  复写 父类的 override:覆盖,重写 ,  对于抽象 ...

  5. mssql sqlserver时间戳与时间格式互相转换的方法分享

    转自: http://www.maomao365.com/?p=9336 摘要: 下文讲述mssql中时间戳和时间格式的转换方法,如下所示: 实验环境:sql server 2008 R2 时间戳简介 ...

  6. PO,VO,DAO,BO,POJO之间的区别与解释

    VO value object:值对象 通常用于业务层之间的数据传递,由new创建,由GC回收. PO persistant object:持久层对象 对应数据库中表的字段. VO和PO,都是属性加上 ...

  7. Thinking In Java 4th Chap6 访问权限控制

    引入一个包及其所包含的方法:import java.util.ArrayList;(引入java.util包,并引入了包中的ArrayList类) import java.util.*;(引入了jav ...

  8. Python【BeautifulSoup解析和提取网页数据】

    [解析数据] 使用浏览器上网,浏览器会把服务器返回来的HTML源代码翻译为我们能看懂的样子 在爬虫中,也要使用能读懂html的工具,才能提取到想要的数据 [提取数据]是指把我们需要的数据从众多数据中挑 ...

  9. Scratch运动模块——有趣的弹球游戏(一)

    大家好!我是蓝老师,有了前几期Scratch的基础,相信大家早已摩拳擦掌,跃跃欲试了,甚至还有些小伙伴已经编写了非常不错的程序. 学习编程就是这样不断探索.主动思考.解决问题的过程. 本期内容: 课程 ...

  10. APK反编译教程

    在学习Android开发的过程你,你往往会去借鉴别人的应用是怎么开发的,那些漂亮的动画和精致的布局可能会让你爱不释手,作为一个开发者,你可能会很想知道这些效果界面是怎么去实现的,这时,你便可以对改应用 ...