• 基于tcp协议通信的套接字


    以打电话举例:

    import socket
    
    #1.买手机
    phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    #SOCK_STEAM=>TCP流式协议,
    
    #2.拨号
    phone.connect(('127.0.0.1',8080))
    
    #3.发收消息
    phone.send('hello'.encode('utf-8')) # 只能发bytes类型
    data=phone.recv(1024)
    print('收到服务端的消息: ',data)
    
    #4.挂电话链接
    phone.close()
    客户端
    import socket
    
    #1.买手机
    phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #SOCK_STEAM=>TCP流式协议,
    print(phone) #是用来接收链接请求,从而建立链接的
    # 结果:<socket.socket fd=268, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0>
    #2.插手机卡
    phone.bind(('127.0.0.1',8080)) #0-65535
    
    #3.开机
    phone.listen(5) # 同一时刻最大请求数为5个
    
    print('start....')
    #4.等待电话请求
    conn,client_addr=phone.accept() #(双向链接的套接字对象,存放客户端ip和端口的小元组)
    print(conn) # conn代表双向链接,用来收发消息
    #结果:<socket.socket fd=304, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 8080), raddr=('127.0.0.1', 3482)>
    print(client_addr)
    # 结果:('127.0.0.1', 3482)
    
    #5.收发消息
    data=conn.recv(1024) #1024接收的最大字节数bytes
    print('收到客户的数据',data)
    conn.send(data.upper())
    
    #6.挂电话链接
    conn.close()
    
    #7.关机
    phone.close()
    服务端
    服务端套接字函数
    s.bind() 绑定(主机,端口号)到套接字
    s.listen() 开始TCP监听
    s.accept() 被动接受TCP客户的连接,(阻塞式)等待连接的到来
    客户端套接字函数
    s.connect() 主动初始化TCP服务器连接
    s.connect_ex() connect()函数的扩展版本,出错时返回出错码,而不是抛出异常

    公共用途的套接字函数
    s.recv() 接收TCP数据
    s.send() 发送TCP数据(send在待发送数据量大于己端缓存区剩余空间时,数据丢失,不会发完)
    s.sendall() 发送完整的TCP数据(本质就是循环调用send,sendall在待发送数据量大于己端缓存区剩余空间时,数据不丢失,循环调用send直到发完)
    s.recvfrom() 接收UDP数据
    s.sendto() 发送UDP数据
    s.getpeername() 连接到当前套接字的远端的地址
    s.getsockname() 当前套接字的地址
    s.getsockopt() 返回指定套接字的参数
    s.setsockopt() 设置指定套接字的参数
    s.close() 关闭套接字

    面向锁的套接字方法
    s.setblocking() 设置套接字的阻塞与非阻塞模式
    s.settimeout() 设置阻塞套接字操作的超时时间
    s.gettimeout() 得到阻塞套接字操作的超时时间

    面向文件的套接字的函数
    s.fileno() 套接字的文件描述符
    s.makefile() 创建一个与该套接字相关的文件
  • 相关阅读:
    Ubuntu 12.04 国内更新源列表 LINUX软件 偶偶贝塔のBlog
    乱码
    charset
    乱码
    使用 Python 进行线程编程
    Pyphantomjs makes python crash
    乱码
    PyQt v4 Python Bindings for Qt v4 | Документация
    Automated Discovery of Blog Feeds and Twitter, Facebook, LinkedIn Accounts Connected to Business Website « Data Big Bang Blog
    jeanphix/Ghost.py · GitHub
  • 原文地址:https://www.cnblogs.com/zhouhao123/p/11267594.html
Copyright © 2020-2023  润新知