• Python socket套接字编程


    1.网络通讯

    socket:在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信

    在python中通过socket写一个cs架构的软件

    简单的通信服务端

    
    #导入一个socket模块
    import socket
    
    #想象成买手机打电话:socket.SOCK_STREAM 表示建立tcp连接 ,udp连接socket.SOCK_DGRAM
    #买了个手机
    soc=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    #插电话卡:绑定ip地址  传元组:(ip,端口号)
    soc.bind(('192.168.11.146',8080))  #如果写本机ip,局域网外部可以访问
    # soc.bind(('127.0.0.1',8080))    #如果写127.0.0.1,只能自己访问
    
    #开机,监听,这个5 是半连接池的大小
    soc.listen(5)
    #等待别人给我打电话
    print('xxxx')
    conn,addr=soc.accept()
    print('yyyy')
    print(addr)
    # conn 就是通路
    #接收1024个字节
    data=conn.recv(1024)
    print('我收到客户端发的',data)
    #conn.send  发送数据,数据必须是bytes格式
    conn.send(b'xxxxx')
    
    #挂断电话
    conn.close()
    #销毁手机
    soc.close()
    

    简单的通信客户端

    from multiprocessing import Process
    import time
    def foo():
        print('进程  start ')
        time.sleep(2.3)
        print('进程  end ')
    
    
    
    if __name__ == '__main__':
        p = Process(target=foo)
        p.start() #
        # 核心需求就是
        # time.sleep(5)
        p.join() # 阻塞住主进程再等待子进程结束,然后再往下执行,(了解的是:内部会待用wait())
        print('主')
    

    通信循环

    服务器同循环

    # import socket
    # #生成一个socket对象
    # soc=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    # #绑定地址跟端口号
    # soc.bind(('127.0.0.1',8001))
    # #监听(半连接池的大小)
    # soc.listen(5)
    # #等着客户端来连接,conn相当于连接通道,addr是客户端的地址
    # conn,addr=soc.accept()    #卡主,如果没有客户端连接,会一直卡在这,当有连接,才继续往下走
    # print(addr)
    # while True:
    #     #等待接收,最大收取1024个字节
    #     data=conn.recv(1024)    #会卡主,当客户端有数据过来,才会执行
    #     print(data)
    #
    # #关闭通道
    # conn.close()
    # # 关闭套接字
    # soc.close()
    

    客户端通信循环

    import socket
    
    soc=socket.socket()
    
    soc.connect(('127.0.0.1',8001))
    while True:
        in_s=input('请输入要发送的数据:')
        #发送的数据必须是b格式,in_s.encode('utf-8')  把字符串编码成b格式
        #把b格式转成字符串
        # ss=str(b'hello',encoding='utf-8')
        # ss=b'hello'.decode('utf-8')
        # #把字符串转成b格式
        # by=bytes('hello',encoding='utf-8')
        # by='hello'.encode('utf-8')
    
    
        soc.send(in_s.encode('utf-8'))
    
    
  • 相关阅读:
    git常用命令总结
    sublime text文本中文显示繁体字修改设置
    正则表达式规则玩法
    网址总结
    维度灾难的问题
    Mybatis使用Map当做参数获取插入数据成功后返回的自增id
    Cenos7安装破解jira
    Linux下安装mysql-5.7.28详细步骤
    使用通用mapper时报错,tk.mybatis.mapper.MapperException:无法获取实体类xxx对应的表名!
    Mysql插入数据时,报错this is incompatible with sql_mode=only_full_group_by
  • 原文地址:https://www.cnblogs.com/ledgua/p/11528361.html
Copyright © 2020-2023  润新知