1.套接字分类:
基于文件类型的套接字家族:AF_UNIX
基于网络类型的套接字家族:AF_INET
2.套接字的流程:
socket()模块函数用法:
客户端:
1 import socket 2 iphone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) 3 iphone.connect(('192.168.16.47',8080)) 4 while True: 5 choice=input('>>:').strip() 6 if not choice:continue 7 iphone.send(choice.encode('utf-8')) 8 data=iphone.recv(1024) 9 print(data.decode("utf-8")) 10 iphone.close()
服务端:
1 import socket 2 iphone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) 3 iphone.bind(('192.168.16.47',8080)) 4 iphone.listen(5) 5 print('Loading......') 6 while True: #循环等待 7 conn,addr=iphone.accept() 8 print('此次来电的线路是:',conn) 9 print('此次来电的号码是:',addr) 10 while True: #循环通讯 11 try: 12 data=conn.recv(1024) 13 if not data:break #应对linux系统 14 print('客服端发来的贺电:',data.decode("utf-8")) 15 conn.send(data.upper()) 16 except ConnectionResetError: 17 break 18 #关闭 19 conn.close() 20 iphone.close()
函数:
1 import socket as s 2 #服务端套接字函数 3 s.bind(('10.10.10.10',8080)) #绑定(主机,端口)到套接字 4 s.listen() #开始TCP监听 5 s.accept() #被动接受TCP客户的连接,(阻塞式)等待连接的到来 6 #客户端套接字函数 7 s.connect() #主动初始化TCP服务器连接 8 s.connect_ex() #connect()函数的扩展版本,出错时间时返回错码,而不是抛出异常 9 #公共用途的套接字函数 10 s.recv() #接受TCP数据 11 s.send() #发送TCP数据(send在待发送数据量大于己端缓存区剩余空间时,数据丢失,不会发完) 12 s.sendall() #发送完成的TCP数据(本质就是循环调用send,sendall在待发送数据量大于己端缓存区剩余空间时,数据不丢失,循环调用sned直到发完) 13 s.recvfrom() #接收UDP数据 14 s.sendto() #发送UDP数据 15 s.getpeername() #连接到当前套接字的远端地址 16 s.getsockname() #当前套接字的地址 17 s.getsockopt() #返回指定套接字的参数 18 s.setsockopt() #设置指定套接字的参数 19 s.close() #关闭套接字 20 #面向锁的套接字方法 21 s.setblocking() #设置套接字的阻塞与非阻塞模式 22 s.settimeout() #设置阻塞套接字操作的超时时间 23 s.gettimeout() #得到阻塞套接字操作的超时时间 24 #面向文件的套接字的函数 25 s.fileno() #套接字的文件描述符 26 s.makefile() #创建一个与该套接字相关的文件