《软件编程思想》PPT课件.ppt

上传人:小飞机 文档编号:4861619 上传时间:2023-05-20 格式:PPT 页数:28 大小:232KB
返回 下载 相关 举报
《软件编程思想》PPT课件.ppt_第1页
第1页 / 共28页
《软件编程思想》PPT课件.ppt_第2页
第2页 / 共28页
《软件编程思想》PPT课件.ppt_第3页
第3页 / 共28页
《软件编程思想》PPT课件.ppt_第4页
第4页 / 共28页
《软件编程思想》PPT课件.ppt_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《《软件编程思想》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《软件编程思想》PPT课件.ppt(28页珍藏版)》请在三一办公上搜索。

1、第十六章 网络编程,引言:客户/服务器架构 套接字:通信终点 面向连接与无连接套接字 Python 中的网络编程 Socket 模块 套接字对象方法 TCP/IP 客户端和服务器 UDP/IP 客户端和服务器 SocketServer 模块 Twisted 框架介绍,客户服务器架构,客户服务器网络编程1.服务程序,监听请求2.客户端,提出服务请求,套接字:通讯端点70 年代,伯克利分校版本的 BSD UNIX基于文件基于网络AF_UNIX,AF_NETLINK,和AF_INET,套接字地址:主机与端口主机:服务器端口:服务合法的端口号范围为0 到65535。其中,小于1024 的端口号为系统保

2、留端口,面向连接“虚电路”或“流套接字”:在通讯之前建立一条连接传输控制协议(TCP):顺序的,可靠的,不会重复的数据传输套接字类型:SOCK_STREAM,无连接无需建立连接就可以进行通讯无法保证数据到达的顺序,可靠性及数据不重复性.用户数据报协议(UDP)套接字类型:SOCK_DGRAM,socket()模块函数socket(socket_family,socket_type,protocol=0)socket_family:AF_UNIX AF_INETsocket_type:SOCK_STREAM SOCK_DGRAMtcpSock=socket(AF_INET,SOCK_STREAM

3、)udpSock=socket.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

4、 数据s.recvfrom()接收UDP 数据s.sendto()发送UDP 数据s.getpeername()连接到当前套接字的远端的地址s.getsockname()当前套接字的地址s.getsockopt()返回指定套接字的参数s.setsockopt()设置指定套接字的参数s.close()关闭套接字,Blocking-Oriented Socket Methodss.setblocking()设置套接字的阻塞与非阻塞模式s.settimeout()a 设置阻塞套接字操作的超时时间s.gettimeout()a 得到阻塞套接字操作的超时时间面向文件的套接字的函数s.fileno()套接

5、字的文件描述符s.makefile()创建一个与该套接字关连的文件,ss=socket()#创建服务器套接字ss.bind()#把地址绑定到套接字上ss.listen()#监听连接inf_loop:#服务器无限循环cs=ss.accept()#接受客户的连接comm_loop:#通讯循环cs.recv()/cs.send()#对话(接收与发送)cs.close()#关闭客户套接字ss.close()#关闭服务器套接字(可选),TCP 时间戳服务器from socket import*from time import ctimeHOST=PORT=21567BUFSIZ=1024ADDR=(HO

6、ST,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:,addrwhile True:data=tcpCliSock.recv(BUFSIZ)if not data:BreaktcpCliSock.send(%s%s%(ctime(),data)tcpCliSock.close()tc

7、pSerSock.close(),TCP 客户端cs=socket()#创建客户套接字cs.connect()#尝试连接服务器comm_loop:#通讯循环cs.send()/cs.recv()#对话(发送接收)cs.clos e()#关闭客户套接字客户有了套接字之后,马上就可以调用connect()函数去连接服务器。连接建立后,就可以与服务器开始对话了,from socket import*HOST=localhostPORT=21567BUFSIZ=1024ADDR=(HOST,PORT)tcpCliSock=socket(AF_INET,SOCK_STREAM)tcpCliSock.co

8、nnect(ADDR),while True:data=raw_input()if not data:breaktcpCliSock.send(data)data=tcpCliSock.recv(BUFSIZ)if not data:breakprint datatcpCliSock.close(),运行客户端与服务器程序客户端的输入与输出 hiSat Jun 17 17:27:21 2006 hi spanish inquisitionSat Jun 17 17:27:37 2006 spanish inquisition服务器的输出waiting for connection.connec

9、ted from:(127.0.0.1,1040)waiting for connection.,UDP 服务器ss=socket()#创建一个服务器套接字ss.bind()#绑定服务器套接字inf_loop:#服务器无限循环cs=ss.recvfrom()/ss.sendto()#对话(接收与发送)ss.close()#关闭服务器套接字,HOST=PORT=21567BUFSIZ=1024ADDR=(HOST,PORT)udpSerSock=socket(AF_INET,SOCK_DGRAM)udpSerSock.bind(ADDR)while True:print waiting for

10、message.data,addr=udpSerSock.recvfrom(BUFSIZ)udpSerSock.sendto(%s%s%(ctime(),data),addr)print.received from and returned to:,21 udpSerSock.close(),UDP 客户端cs=socket()#创建客户套接字comm_loop:#通讯循环cs.sendto()/cs.recvfrom()#对话(发送接收)cs.close()#关闭客户套接字,HOST=localhostPORT=21567BUFSIZ=1024ADDR=(HOST,PORT)udpCliSo

11、ck=socket(AF_INET,SOCK_DGRAM)while True:data=raw_input()if not data:BreakudpCliSock.sendto(data,ADDR),data,ADDR=udpCliSock.recvfrom(BUFSIZ)if not data:Breakprint dataudpCliSock.close()udpCliSock.close(),属性名字 描述数据属性AF_UNIX,AF_INET,AF_INET6a Python 支持的套接字家族SO_STREAM,SO_DGRAM 套接字类型(TCP=流,UDP=数据报)has_ip

12、v6b 表示是否支持IPv6 的标志变量异常error 套接字相关错误herrora 主机和地址相关的错误gaierrora 地址相关的错误timeoutb 超时,函数socket()用指定的地址家族,套接字类型和协议类型(可选)创建一个套接字对象socketpair()c 用指定的地址家族,套接字类型和协议类型(可选)创建一对套接字对象fromfd()用一个已经打开的文件描述符创建一个套接字对象数据属性ssl()在套接字初始化一个安全套接字层(SSL)。不做证书验证。getaddrinfo()得到地址信息getfqdn()返回完整的域的名字gethostname()得到当前主机名,getho

13、stbyname()由主机名得到对应的ip 地址gethostbyname_ex()gethostbyname()的扩展版本,返回主机名,主机所有的别名和IP 地址列表。gethostbyaddr()由IP 地址得到DNS 信息,返回一个类似gethostbyname_ex()的3 元组。getprotobyname()由协议名(如tcp)得到对应的号码。getservbyname()/由服务名得到对应的端口号或相反getservbyport()两个函数中,协议名都是可选的。,ntohl()/ntohs()把一个整数由网络字节序转为主机字节序htonl()/htons()把一个整数由主机字节序转为网络字节序inet_aton()/把IP 地址转为32 位整型,以及反向函数inet_ntoa()inet_pton()/把IP 地址转为二进制格式以及反向函数。(仅对IPv4 地址有效)inet_ntop()getdefaulttimeout()/得到设置默认的套接字超时时间,单位秒(浮点数)setdefaulttimeout(),

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号