socket也称作‘套接字,用于描述IP地址和端口,是一个通信的终点。
socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,对于文件用【打开】【读写】【关闭】模式来操作。socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO、打开、关闭)
socket和file的区别:
- file模块是针对某个指定文件进行【打开】【读写】【关闭】
- socket模块是针对 服务器端 和 客户端Socket 进行【打开】【读写】【关闭】
来看一个例子,将用户在客户输入在服务端转换为大写后返回
1 #!/usr/bin/env python 2 # coding=utf-8 3 4 import socket 5 6 ip_port = ('115.159.193.70', 8080) 7 8 s = socket.socket() 9 s.connect(ip_port) 10 while True: 11 send_data = input(">> input message: ").strip() 12 if len(send_data) == 0: continue 13 s.send(bytes(send_data, encoding='utf-8')) # 发送输入的命令 14 tag = s.recv(1024) # 接收tag 15 tag = str(tag, encoding='utf-8') 16 if tag == 'exit': 17 break 18 elif tag.startswith('Ready'): # 如果收到Ready和包长度 19 msg_size = int(tag.split('|')[-1]) 20 else: 21 print(tag) 22 continue 23 start_tag = 'Start' 24 s.send(bytes(start_tag, encoding='utf-8')) # 发送开始标志 25 recv_size = 0 26 recv_data = b'' 27 while recv_size < msg_size: 28 recv_msg = s.recv(1024) 29 recv_data += recv_msg 30 recv_size += len(recv_msg) 31 print('MSG SIZE %s RECV_SIZE %s' % (msg_size, recv_size)) 32 33 print(str(recv_data, encoding = 'utf-8')) 34 s.close()