[置顶] python的socket入门到高级
2018-02-27 16:35
288 查看
SOCKET入门:
原理:服务端一直处理监听的状态,当客户端发起一个请求,服务端监听到请求建立连接,在建立连接时,若当前客户端没有结束,处于阻塞状态,当前的会话处于不断的交互状态,只有当前客户端结束回话后,才进行下个回话请求,若此时有另外一个连接,不会分配当前的服务端正在使用连接分配给后来的客户端绘画通俗说理解SOCKET过程:小磊子和10086 一天小磊子打电话给10086,10086的小红接到小磊子的电话,这时候小磊子就开始发牢骚问,我这个月的电话费怎么那么多(此时就是SOCKET建立会话连接通信过程),小红听到小磊子的牢骚后,开始在后台查询小磊子这个月的电话记录情况,然后小红把查到的数据告诉小磊子(此时是客户端:请求数据-请求处理--回应数据),你这个月凌晨跟某某女生.....此时浩哥也打电话给10086,要找小红,此时小红在接客状态,在给小磊子干活,无法接通(客户端阻塞连接),浩哥不开心,因为他想查下这个月他老婆最近夜里跟谁在打电话....就随便找了小丽为浩哥服务(此时是SOCKET的并发过程)......当小磊子挂掉电话后,此时与小红断开连接(结束连接),小红才能继续接客....继续等待下一个人到来....Socket服务端编程主要包括下面几步:1、打开socket2、绑定到一个地址和端口3、侦听进来的连接4、接受连接5、读取数据客户端过程:1、打开一个socket2、连接一个地址和端口3、读写数据####网络通信,有TCP/IP还有其他...socket type:socket.AF_UNIX:只能够用于单一的unix系统进程间通信socket.AF_INET:服务器之间网络通信socket.AF_NET6IPV6###简单例子SERVER:import sockethost=''port=1122s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)s.bind((host,port))s.listen(1)conn,addr=s.accept()print "connected by",addrwhile True: data=conn.recv(1024)
if not data:break
conn.sendall(data)
conn.close()###CLIENT:import sockethost='127.0.0.1'port=1122s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)s.connect((host,port))s.sendall('hello,world')data=s.recv(1024)s.close()print 'received',repr(data)--SOCKET多线程
多线程的原理图:可以理解成成10086的多个客服,在SOCKET里 有个连接池。#!/usr/bin/env pythonimport SocketServerclass MyTcpHandler(SocketServer.BaseRequestHandler): def handle(self):
print "Got a new conn from ",self.client_address while True: data=self.request.recv(1024).strip()
print "recv:",data
self.request.send(data.upper())
if __name__=="__main__": host,port="localhost",8888
s=SocketServer.ThreadingTCPServer((host,port),MyTcpHandler)
s.server_forver()
###CLIENT不变。
原理:服务端一直处理监听的状态,当客户端发起一个请求,服务端监听到请求建立连接,在建立连接时,若当前客户端没有结束,处于阻塞状态,当前的会话处于不断的交互状态,只有当前客户端结束回话后,才进行下个回话请求,若此时有另外一个连接,不会分配当前的服务端正在使用连接分配给后来的客户端绘画通俗说理解SOCKET过程:小磊子和10086 一天小磊子打电话给10086,10086的小红接到小磊子的电话,这时候小磊子就开始发牢骚问,我这个月的电话费怎么那么多(此时就是SOCKET建立会话连接通信过程),小红听到小磊子的牢骚后,开始在后台查询小磊子这个月的电话记录情况,然后小红把查到的数据告诉小磊子(此时是客户端:请求数据-请求处理--回应数据),你这个月凌晨跟某某女生.....此时浩哥也打电话给10086,要找小红,此时小红在接客状态,在给小磊子干活,无法接通(客户端阻塞连接),浩哥不开心,因为他想查下这个月他老婆最近夜里跟谁在打电话....就随便找了小丽为浩哥服务(此时是SOCKET的并发过程)......当小磊子挂掉电话后,此时与小红断开连接(结束连接),小红才能继续接客....继续等待下一个人到来....Socket服务端编程主要包括下面几步:1、打开socket2、绑定到一个地址和端口3、侦听进来的连接4、接受连接5、读取数据客户端过程:1、打开一个socket2、连接一个地址和端口3、读写数据####网络通信,有TCP/IP还有其他...socket type:socket.AF_UNIX:只能够用于单一的unix系统进程间通信socket.AF_INET:服务器之间网络通信socket.AF_NET6IPV6###简单例子SERVER:import sockethost=''port=1122s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)s.bind((host,port))s.listen(1)conn,addr=s.accept()print "connected by",addrwhile True: data=conn.recv(1024)
if not data:break
conn.sendall(data)
conn.close()###CLIENT:import sockethost='127.0.0.1'port=1122s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)s.connect((host,port))s.sendall('hello,world')data=s.recv(1024)s.close()print 'received',repr(data)--SOCKET多线程
多线程的原理图:可以理解成成10086的多个客服,在SOCKET里 有个连接池。#!/usr/bin/env pythonimport SocketServerclass MyTcpHandler(SocketServer.BaseRequestHandler): def handle(self):
print "Got a new conn from ",self.client_address while True: data=self.request.recv(1024).strip()
print "recv:",data
self.request.send(data.upper())
if __name__=="__main__": host,port="localhost",8888
s=SocketServer.ThreadingTCPServer((host,port),MyTcpHandler)
s.server_forver()
###CLIENT不变。
相关文章推荐
- [置顶] python爬虫实践——零基础快速入门(二)爬取豆瓣电影
- [置顶] 免费分享最适合零基础的Python入门资源+电子书
- python socket 入门
- python的socket编程入门
- Python爬虫入门二之Urllib库的高级用法
- [置顶] python爬虫实践——零基础快速入门(六)解决动态页面爬取问题
- [置顶] 【python 图像处理】Python 图像处理库 Pillow 入门
- python3 从基础入门到高级进阶练习题之----基础篇001
- python socket编程入门
- python入门之简单socket
- [置顶] Python 入门指南
- [置顶] python爬虫实践——零基础快速入门(三)爬取豆瓣图书
- Python socket 入门
- [置顶] Python 入门指南
- 【七月Python入门】 第六课高级面向对象
- Python学习入门基础教程(learning Python)--6.3 Python的list切片高级
- python中socket与socketserver模块简单入门使用
- Python爬虫入门(4):Urllib库的高级用法
- [置顶] Python 入门指南
- python入门(三十四):socket