day7-socket
一、概述
socket,也称作套接字,用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求。
socket是unix 打开-读写-关闭 模式的一种实现,可看做特殊的“文件”
二、关系图

三、概念
Socket Families(地址簇)
socket.AF_UNIX:unix本机进程间通信
socket.AF_INET:IPV4
socket.AF_INET6:IPV6
Socket Types
socket.SOCK_STREAM:tcp
socket.SOCK_DGRAM:udp
socket.SOCK_RAW:原始套接字,可以处理普通套接字无法处理的ICMP、IGMP等网络报文和特殊的IPv4报文,还可以可以通过IP_HDRINCL套接字选项由用户构造IP头。
socket.SOCK_RDM :可靠的UDP形式,即保证交付数据报但不保证顺序。提供对原始协议的低级访问,如发送ICMP报文这种特殊操作,通常仅限于高级用户或管理员运行的程序使用。
socket.SOCK_SEQPACKET:废弃
四、实例
服务端:
1 #coding:utf-8 2 import socket 3 import os 4 5 # 创建服务端实例 6 sever = socket.socket() 7 # 绑定ip和端口 8 sever.bind(("localhost", 2222)) 9 # 监听端口,设置最大等待数为5个 10 sever.listen(5) 11 print("等电话....") 12 13 while True: 14 # 有客户端连接,返回连接实例和客户端地址 15 conn, addr = sever.accept() 16 # print(conn, addr) 17 print("我的电话来了") 18 count = 0 19 while True: 20 # 接收数据 21 data = conn.recv(1024) 22 # 如果数据为空,重新接收 23 if not data: 24 break 25 print("client data:", data.decode('utf-8')) 26 # 发回数据 27 # python2字符串和字节均可发送,python3只可发送字节 28 res = data.upper() 29 # 执行命令 30 # res = os.popen(data).read() 31 conn.send() 32 # 发送需要下载的文件 33 # with open("test", "rb") as test_file: 34 # res = test_file.read() 35 # conn.sendall(res) 36 count += 1 37 # 关闭服务端 38 sever.close()
客户端:
1 #coding:utf-8 2 3 # 客户端 4 import socket 5 6 # 创建socket实例 7 client = socket.socket() 8 # 建立连接 9 client.connect(('localhost', 2222)) 10 while True: 11 # send_data = 'hello world' 12 send_data = raw_input('>>>:') 13 if not send_data: 14 continue 15 send_data = send_data.encode('utf-8') 16 # 发送数据 17 # python2字符串和字节均可发送,python3只可发送字节 18 client.send(send_data) 19 # 接收服务端数据,这里设置接收1024字节 20 data = client.recv(1024) 21 res = data.decode('utf-8') 22 print("server rece:", res) 23 # 读取数据,生成文件用于下载 24 # with open("test_put", "wb") as test_put_file: 25 # test_put_file.write(data) 26 # 关闭连接 27 client.close()

浙公网安备 33010602011771号