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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值