1 什么是 Socket? 2 Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。 3 4 socket()函数 5 Python 中,我们用 socket()函数来创建套接字,语法格式如下: 6 7 socket.socket([family[, type[, proto]]]) 8 参数 9 family: 套接字家族可以使AF_UNIX或者AF_INET 10 type: 套接字类型可以根据是面向连接的还是非连接分为SOCK_STREAM或SOCK_DGRAM 11 protocol: 一般不填默认为0. 12 13 14 15 import socket 16 from datetime import datetime 17 # 服务端 18 sk=socket.socket(socket.AF_INET,socket.SOCK_STREAM) 19 host=socket.gethostname() #获取主机名称 20 port=9999 21 # 绑定地址(host,port)到套接字, 在AF_INET下,以元组(host,port)的形式表示地址。 22 sk.bind((host,port)) 23 # 开始TCP监听。backlog指定在拒绝连接之前,操作系统可以挂起的最大连接数量。该值至少为1,大部分应用程序设为5就可以了。 24 sk.listen(5) 25 while True: 26 # 被动接受TCP客户端连接, (阻塞式) 等待连接的到来 27 ck,addr=sk.accept() 28 print('连接地址:%s'%str(addr),datetime.now()) 29 msg='欢迎访问菜鸟教程!'+' ' 30 # send() 发送TCP数据,将string中的数据发送到连接的套接字。返回值是要发送的字节数量,该数量可能小于string的字节大小。 31 ck.send(msg.encode('utf-8')) 32 ck.close() 33 34 35 36 37 import socket 38 import sys 39 from datetime import datetime 40 41 # 客户端 42 s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) 43 host=socket.gethostname() 44 port=9999 45 # 主动初始化TCP服务器连接。一般address的格式为元组(hostname,port),如果连接出错,返回socket.error错误。 46 s.connect((host,port)) 47 # 接收TCP数据,数据以字符串形式返回,bufsize指定要接收的最大数据量。flag提供有关消息的其他信息,通常可以忽略。 48 msg=s.recv(1024) 49 s.close() 50 print(msg.decode('utf-8'),datetime.now()) 51 52 53 54 55 56 57 import socket 58 59 s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) 60 s.bind(('localhost',10021)) 61 print('UDP连接') 62 while True: 63 data,addr=s.recvfrom(1024) 64 print('收到数据%s:%s.'%addr) 65 s.sendto(data.decode('utf-8').upper().encode(),addr) 66 67 68 69 import socket 70 71 s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) 72 addr=('localhost',10021) 73 while True: 74 data=input('请输入要处理的数据:') 75 if not data or data=='quit': 76 break 77 s.sendto(data.encode(),addr) 78 recvdata,addr=s.recvfrom(1024) 79 print(recvdata.decode('utf-8')) 80 s.close()