python网络编程基础
来源:互联网 发布:holy potatoes人物数据 编辑:程序博客网 时间:2024/05/16 07:17
客户/服务器架构
服务器:是一个软件或硬件,用于提供客户需要的”服务”;服务器存在的唯一目的就是等待客户的请求,给这些客户服务,然后再等待其他的请求.常见的服务类型:
硬件的客户/服务器架构:打印机,文件服务器
软件客户/服务器架构:web服务器,数据库服务器,窗口服务器(GUI)套接字:用于进程间通信(IPC)
两个家族的套接字:
(1)AF_UNIX:地址家族,基于文件,底层结构有文件系统来支持.
(2)AF_INET:基于网络端口号范围:0~65535,保留端口号:0~1023;
unix可以通过/etc/services查看保留端口号传输控制协议TCP:面向连接
用户数据报协议(UDP):无连接socket()模块函数
使用socket.socket()创建套接字
socket(socket_family,socket_type,protocol=0)socket_family可以是AF_UNIX或AF_INET,
socket_type可以是SOCK_STREAM或SOCK_DGRAM
protocol一般不填,默认为0导入socket模块:
from socket import *创建一个TCP/IP套接字:
tcpSock=socket(socket.AF_INET,socket.SOCK_STREAM)创建一个UDP/IP套接字:
udpSock=socket(socket.AF_INET,socket.SOCK_DGRAM)套接字常用函数:
服务器段套接字函数:
s.bind() 绑定地址(主机,端口号对)到套接字
s.listen() 开始TCP监听
s.accept() 被动接受TCP客户的连接,(阻塞式)等待连接的到来客户端套接字函数:
s.connect() 主动初始化TCP服务器连接
s.connect_ex() connect()的扩展版本,出错时返回出错码,而不是抛异常
s.recv() 接受TCP数据
s.send() 发送TCP数据
s.sendall() 完整发送TCP数据
s.recvfrom() 接收UDP数据
s.sendto() 发送UDP数据
s.getpeername() 连接当前套接字的远端地址
s.getsockname() 当前套接字的地址
s.getsockopt() 返回指定套接字的参数
s.setsockopt() 设置指定套接字的参数
s.close() 关闭套接字Blocking-Oriented Socket Methods
s.setblocking() 设置套接字的阻塞与飞阻塞模式
s.settimeout() 设置阻塞套接字操作的超时时间
s.gettimeout() 得到阻塞套接字操作的超时时间
面向文件的套接字的函数
s.fileno() 套接字的文件描述符
s.makefile() 创建一个与该套接字关联的文件服务器的一般动作流程:伪代码
ss=socket() #创建服务器套接字
ss.bind() #把地址绑定到套接字上,一个套接字对应一个端口号,设置完成才可以进入无限循环
ss.listen() #监听连接
inf_loop:
cs=ss.accept() #接收客户的连接,会返回一个单独的客户套接字用户后续通讯
comn_loop: #通讯循环
cs.recv()/cs.send() #对话
cs.close()
ss.close()客户端的一般动作:伪代码
cs.socket() #创建客户套接字
cs.connect() #尝试连接服务器
comm_loop: #通讯循环
cs.send()/cs.recv() #对话(发送/接收)
cs.close()实例:
TCP简单服务器端代码
#!/usr/bin/env python# encoding: utf-8from socket import *from time import ctimeHOST=''PORT=21567BUFSIZE=1024ADDR=(HOST,PORT)tcpsersock=socket(AF_INET,SOCK_STREAM)tcpsersock.bind(ADDR)tcpsersock.listen(5)while True: print 'waiting for connection...' tcpclisock,addr=tcpsersock.accept() print '...connected from:',addr while True: data =tcpclisock.recv(BUFSIZE) if not data: break tcpclisock.send('[%s]%s' % (ctime(),data))tcpclisock.close()tcpsersock.close()
TCP简单客户端代码
#!/usr/bin/env python# encoding: utf-8from socket import *HOST='localhost'PORT=21567BUFSIZ=1024ADDR=(HOST,PORT)tcpclisock=socket(AF_INET,SOCK_STREAM)tcpclisock.connect(ADDR)while True: data=raw_input('>') if not data: break tcpclisock.send(data) data=tcpclisock.recv(BUFSIZ) if not data: break print datatcpclisock.close()
友好地退出,调用服务器的close()函数
将服务器无限循环放进try-except语句中,捕获EOFError和KeyboardInterrupt异常,处理字句中调用close()创建一个UDP服务器一般步骤:
ss.socket() #创建一个服务器套接字
ss.bind() #绑定服务器套接字
inf_loop: 服务器无限循环
cs=ss.recvfrom()/ss.sendto() #对话
ss.close() #关闭套接字服务器例子:
#!/usr/bin/env pythonfrom socket import *from time import ctimeHOST=''PORT=21567BUFSIZ=1024ADDR=(HOST,PORT)udpsersock=socket(AF_INET,SOCK_DGRAM)udpsersock.bind(ADDR)while True: print 'waiting for message...' data,addr=udpsersock.recvfrom(BUFSIZ) udpsersock.sendto('[%s]%s'%(ctime(),data),addr) print '...received from and returned to:',addrudpsersock.close()
UDP客户端
cs=socket() #创建客户套接字
comm_loop: #通讯循环
cs.sendto()/cs.recvfrom() #对话(发送/接收)
cs.close() #关闭客户套接字简单UDP客户端代码
#!/usr/bin/env pythonfrom socket import *HOST='localhost'PORT=21567BUFSIZ=1024ADDR=(HOST,PORT)udpclisock=socket(AF_INET,SOCK_DGRAM)while True: data=raw_input('>') if not data: break udpclisock.sendto(data,ADDR) data,ADDR=udpclisock.recvfrom(BUFSIZ) if not data: break print dataudpclisock.close()
socket模块的属性
ServerSocket
- Python网络编程基础
- Python网络编程基础
- Python 网络编程基础
- python网络编程基础
- Python网络编程基础
- python网络编程基础
- python网络编程基础
- python 网络编程基础1
- python 网络编程基础 笔记
- 《Python网络编程基础》笔记
- python 网络编程基础(一)
- Python的网络编程基础
- Python网络编程00----网络基础
- Python编程基础之十五网络编程
- 《Python网络编程基础》中文版简评
- python网络基础编程笔记(一)
- Python基础——网络编程
- 《python网络编程基础》笔记(未完待续)
- Android中监听逻辑的demo
- Spring4+Hibernate4整合问题解决
- C#创建Windows Service(Windows 服务)基础教程
- jmf在win7x64下的安装及使用
- react+webpack 第二篇
- python网络编程基础
- 世界反兴奋剂组织频遭攻击,俄罗斯黑客再躺枪
- jQuery中.attr()和.removeAttr()的详解
- nodeJS命令初试
- 代码中动态修改xib中的约束
- 渗透之wifi钓鱼
- 解密:马云为何对肯德基“下手”?
- 【项目 0 - 宣告“主权”】
- centos7yum方式搭建LAMP环境