Python Core(一)
0X01 套接字第一个家族 AF_UNIX
地址家族:address family:UNIX 基于文件的套接字
第二类型 AF_INET
地址家族: 因特网
第三类型 :AF_NETLINK(无连接型)
允许使用BSD套接字用户接口进行用户级别和内核级别代码之间的IPC。
0X02 面向连接的套接字与无连接的套接字
(1).面向连接的套接字。
通信提供序列化的,可靠的,不可重复的数据交付。信息可以被拆分成为多个片段,并且保证每一个套接字都能够达到目的地。实现这种类型的主要协议:TCP。
(2).面向无连接的套接字
与面向连接套接字性质相反。成本低廉。 UDP。
0X03 socket()模块函数
socket(socket_family, socket_type, protocol=0)
创建TCP/IP套接字
tcpSock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
创建UDP/IP套接字
udpSock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
使用 from socket import * 可以将socket属性引入命名空间,这种方法可以缩短代码。
tcoSock = socket(AF_INET, SOCK_STREAM)
0X04 练习
2-1.面向连接的套接字和无连接的套接字区别。
区别:1.在通信前是否需要建立连接。
2.通信的稳定性。
3.通信的速率。
2-2.客户端/服务器架构。(c/v结构)
服务端被动地以循环程序地方式处理客户端主动发出的请求。
2-4.修改客户端源文件,不用硬编码规定主机名,端口号。
1 from socket import * 2 import re 3 4 def checkip(ip): 5 p = re.compile('^((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$') 6 if p.match(ip): 7 return True 8 else: 9 return False 10 11 print 'please input the HOST\n' 12 13 HOST = raw_input('') 14 15 if not HOST: 16 HOST = 'localhost' 17 else: 18 if HOST != 'localhost': 19 if not checkip(HOST): 20 HOST = 'localhost'