• python网络编程-socket


    socket


    • socket是把TCP/IP UDP做一个封装,send,recv...

    • 网络协议基于socket,进行收发等动作

    服务端

    1. 声明实例
      server = socket.socket(AF.INET,sock.SOCK_STREAM)
    • family address 地址簇

    AF.INET IPV4(默认)
    AF.INET6 IPV6
    AF.UNIT local

    • 类型

    socket.SOCK_STREAM  流式socket , for TCP (默认)
    socket.SOCK_DGRAM   数据报式socket , for UDP
    socket.SOCK_RAW 原始套接字,普通的套接字无法处理ICMP、IGMP等网络报文,而SOCK_RAW可以;其次,SOCK_RAW也可以处理特殊的IPv4报文;此外,利用原始套接字,可以通过IP_HDRINCL套接字选项由用户构造IP头。
    socket.SOCK_RDM 是一种可靠的UDP形式,即保证交付数据报但不保证顺序。SOCK_RAM用来提供对原始协议的低级访问,在需要执行某些特殊操作时使用,如发送ICMP报文。SOCK_RAM通常仅限于高级用户或管理员运行的程序使用。
    socket.SOCK_SEQPACKET 可靠的连续数据包服务

    1. 绑定地址
      server.bind(localhost,port)
    2. 开始监听
      server.listen()
    3. 获取连接
      conn,addr = server.accept()#阻塞,为进来的连接创建一个实例conn
      5 .接收回复
    while True:
        print('new conn',addr)
        #接收数据
        data = conn.recv(1024)#官方建议最大8192
        #recv默认是阻塞的
        #回复数据
        conn.send(b'recv data')#回复二进制数据
    
    • 客户端断开,conn.recv收到的就是控数据,进入死循环,因此:
    while True:
        print('new conn',addr)
        #接收数据
        data = conn.recv(1024)#官方建议最大8192
        #recv默认是阻塞的
        if not data: #<----判断是否为空,标识是否断开
            break
        #回复数据
        conn.send(b'recv data')#回复二进制数据
    

    客户端client

    1. 实例化 client = socket.socket()
    2. 连接 client.connect(serverip,port)
    3. 发送数据client.send()
    4. 收服务器回复client.recv()
  • 相关阅读:
    读《暗时间》
    文献笔记8
    文献笔记4
    文献笔记2
    文献笔记5
    文献笔记6
    文献笔记1
    文献笔记3
    读《暗时间》2
    文献笔记7
  • 原文地址:https://www.cnblogs.com/limich/p/7477041.html
Copyright © 2020-2023  润新知