• 基础教程14章-socket模块a bytes-like object is required, not 'str'


    socket模块

    套接字主要是两个程序之间的“信息通道”。

    创建服务器套接字后,让它等待连接。这样它就在某个网络地址处(IP地址和一个端口号的组合)监听

    一个套接字就是一个socket模块中的socket类的实例。

    实例化需要3个参数,对于一个普通的套接字,不需要提供任何参数

    1. 地址族(默认是socket.AF_INET)

    2. 流(默认是socket.SOCK_STREAM)

    3. 使用的协议(默认是0)

    套接字有两个方法:send和recv,用于传输数据

    1. 使用字符串参数调用send发送数据

    2. 用一个所需的(最大)字节数做参数调用recv来接收数据(通常用1024)

    一个小型服务器:

    import socket
    
    s = socket.socket()
    
    host = socket.gethostname()             # 得到当前主机名(如www.baidu.com)
    port = 1234
    s.bind((host, port))                    # 与客户端connect的地址相同,格式为(host,port)的元组
                                            # host是主机名,port是端口号
    s.listen(5)                             # 监听(只有一个参数,即允许排队等待的连接数目,这些连接在禁用之前等待接收)
    while True:
        c, addr = s.accept()                # 接收客户端的连接。等待直到客户端连接,然后返回一个格式为(client,address)的元组
        print('Got connection from', addr)
        c.send('Thank you for connecting')
        c.close()

    一个小型客户机:

    import socket
    s = socket.socket()
    
    host = socket.gethostname()
    port = 1234
    
    s.connect((host, port))        # 连接到服务器
    print(s.recv(1024))

    先运行服务器代码,进入等待状态,再运行客户端代码,出现如下报错:

    PS D:pytest> python .jcjc14-1.py
    Got connection from ('192.168.1.4', 56424)
    Traceback (most recent call last):
      File ".jcjc14-1.py", line 13, in <module>
        c.send('Thank you for connecting')
    TypeError: a bytes-like object is required, not 'str'

    修改代码,在数据前加‘b’,强制转换

    服务器代码修改如下:

    import socket
    
    s = socket.socket()
    
    host = socket.gethostname()
    port = 1234
    s.bind((host, port))
    
    s.listen(5)
    while True:
        c, addr = s.accept()
        print('Got connection from', addr)
        c.send(b'Thank you for connecting')
        c.close()

    重新运行,服务器端:

    PS D:pytest> python .jcjc14-1.py
    Got connection from ('192.168.1.4', 56484)
    Got connection from ('192.168.1.4', 56488)

    客户端:

    PS C:UsersAdministrator> python D:pytestjcjc14-2.py
    b'Thank you for connecting'
    PS C:UsersAdministrator> python D:pytestjcjc14-2.py
    b'Thank you for connecting'
  • 相关阅读:
    [nodejs] web后端开发时, 用hapi/Joi对前端提交的数据进行校验--随笔
    [C++]类的空指针调用成员函数后,会发生什么事?
    赵家庙保险队大队长【永远置顶】
    NX二次开发-NXOpen C# OpenFileDialog弹出选择文件对话框
    NX二次开发-NXOpen C# string转tag
    NX二次开发-UFUN创建扫掠UF_MODL_create_sweep
    NX二次开发-NXOPEN C# WinForm点构造器UF.Ui.PointConstruct和UI加锁解锁UF.Ui.LockUgAccess
    vue 移动端手写手机验证码登录
    java--Scanner扫描器
    react中this.props.history实现跳转页面的使用方法
  • 原文地址:https://www.cnblogs.com/p36606jp/p/15113386.html
Copyright © 2020-2023  润新知