zoukankan      html  css  js  c++  java
  • 003---socket介绍

    socket介绍

    什么是socket?

    socket是应用层与tcp/ip协议族通信的中间软件抽象层,它是一组接口。在设计模式中。其实就是一个门面模式。我们无需深入理解tcp/udp协议,socket已经为我们封装好了,我们遵循socket的规定去编程开发就行。

    套接字分类

    基于文件类型的套接字家族

    名字:AF_UNIX
    unix一切皆文件,基于文件的套接字调用的就是底层的文件系统来取数据。两个套接字进程运行在同一机器,可通过访问同一个文件系统间接完成通信。

    基于文件类型的套接字家族

    名字:AF_INET
    python支持很多种地址家族,但是我们只关心网络编程,大部分只使用AF_INET。

    套接字工作流程

    当通过socket建立两台机器的连接后,本质上socket只做两件事,一是收数据、二是发数据,没数据就等着。

    简单的套接字通信

    服务端

    
    import socket
    
    # 创建服务器套接字对象
    sk = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM)
    
    # 绑定 ip 和 port
    sk.bind(('127.0.0.1', 8080))
    
    # 监听:最大挂起连接数
    sk.listen(5)
    
    # 等待连接
    print('starting...')
    # 客户端初始化一个socket,
    conn, addr = sk.accept()
    
    # 收消息
    data = conn.recv(1024)
    print('客户端发来的数据', data)
    
    # 发消息
    conn.send(data.upper())
    
    # 关闭连接,客户端套接字
    conn.close()
    
    # 关闭服务端套接字对象
    sk.close()
    
    

    客户端

    
    import socket
    
    # 创建客服端套接字对象
    sk = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM)
    
    # 连接服务端
    sk.connect(('127.0.0.1', 8080))
    
    # 发消息
    sk.send('hello python'.encode('utf-8'))
    
    # 收消息
    data = sk.recv(1024)
    print(data)
    
    # 关闭客服端套接字对象
    sk.close()
    
    

    socket对象的常用方法

    服务端套接字函数

    • service.bind():绑定(IP,PORT)到套接字
    • service.listen():开始TCP监听
    • service.accept():被动接受TCP客户的连接,阻塞式等待连接的到来

    客户端套接字函数

    • client.connect():主动连接服务器
    • client.connect_ex():扩展版本,出错时返回出错码,而不是抛出异常

    公共用途的套接字函数

    • sk.recv():接收TCP数据
    • sk.send():发送TCP数据(在待发送数据量大于缓存区剩余空间时,数据会丢失,不会发完)
    • sk.sendall():发送完整的TCP数据(本质就是循环调用send。不会造成数据丢失,循环调用send直到发完)
    • sk.recvfrom():接收UDP数据
    • sk.sendto():发生UDP数据
    • sk.close():关闭套接字

    面向锁的套接字方法

    • sk.setblocking():设置套接字的阻塞与非阻塞模式
    • sk.settimeout():设置阻塞套接字操作的超时时间
    • sk.gettimeout():得到阻塞套接字操作的超时时间
  • 相关阅读:
    Redux API之applyMiddleware
    Redux API之combineReducers
    Redux API之creatStore
    Redux API之Store
    React-Redux之API
    ES6之6种遍历对象属性的方法
    React库protypes属性
    js立即执行函数
    Collection与Map总结
    02-再探MySQL数据库
  • 原文地址:https://www.cnblogs.com/xjmlove/p/10345588.html
Copyright © 2011-2022 走看看