python socket网络编程

python socket网络编程

服务器端

  • socket初始化
    socket(family,type[,protocal]) 使用给定的地址族、套接字类型、协议编号(默认为0)来创建套接字
    一些常用参数

    socket类型 描述
    socket.AF_INET ipv4地址
    socket.AF_INET6 ipv6地址
    socket.SOCK_STREAM 流式socket,用于TCP
    socket.SOCK_DGRAM 数据包式socket,用于UDP
    初始化socket: socket(socket.AF_INET,socket.SOCK_STREAM) (创建一个基于TCP的socket套接字)
  • socket函数
    注意点:

    1)TCP发送数据时,已建立好TCP连接,所以不需要指定地址。UDP是面向无连接的,每次发送要指定是发给谁。

    2)服务端与客户端不能直接发送列表,元组,字典。需要字符串化repr(data)

    一些常用socket函数 作用
    服务器端
    bind(address) 将套接字绑定到地址, 在AF_INET下,以元组(host,port)的形式表示地址
    listen(backlog) 开始监听TCP传入连接。backlog指定在拒绝连接之前,操作系统可以挂起的最大连接数量。该值至少为1,大部分应用程序设为5就可以了
    accept() 接受TCP连接并返回(conn,address),其中conn是新的套接字对象,可以用来接收和发送数据。address是连接客户端的地址
    客户端
    connect(address) 连接到address处的套接字。一般address的格式为元组(hostname,port),如果连接出错,返回socket.error错误
    公用
    getpeername() 返回连接套接字的远程地址。返回值通常是元组(ipaddr,port)
    getsockname() 返回套接字自己的地址。通常是一个元组(ipaddr,port)
    setblocking(flag) 设定是否阻塞,0代表否,1代表是
    recv(bufsize[,flag]) 接受TCP套接字的数据。数据以字符串形式返回,bufsize指定要接收的最大数据量。flag提供有关消息的其他信息,通常可以忽略
    send(string[,flag]) 发送TCP数据。将string中的数据发送到连接的套接字。返回值是要发送的字节数量,该数量可能小于string的字节大小
    sendall(string[,flag]) 完整发送TCP数据。将string中的数据发送到连接的套接字,但在返回之前会尝试发送所有数据。成功返回None,失败则抛出异常
    close() 关闭套接字
  • socket编程思路

    • 服务器端
      • 初始化socket #s.socket(socket.AF_INET,socket.SOCK_STREAM)
      • 绑定本地ip和端口到socket #s.bind((ip,port))
      • 开始监听连接 #s.listen(5)
      • 进入循环,不断接受客户端的连接请求 #s.accept()
      • 接受客户端的数据并发送数据给客户端 #s.recv(), s.sendall()
      • 关闭连接 #s.close()
    • 客户端
      • 初始化socket
      • 连接远端套接字 #s.connect()
      • 连接后发送和接受数据
      • 关闭套接字
posted @ 2021-05-03 16:07  智子lock  阅读(77)  评论(0编辑  收藏  举报