zoukankan      html  css  js  c++  java
  • 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转到Tortoise
    如何让浏览器不解析html?
    说几点我觉得谷歌浏览器不好的地方
    移动端开发:使用jQuery Mobile还是Zepto
    开源许可证GPL、BSD、MIT、Mozilla、Apache和LGPL的区别
    给大家讲个故事,感受一下什么叫CF。不知道的请认真听。
    cmd中utf-8编码的问题
    web前端关于html转义符的常用js函数
    js实例分析JavaScript中的事件委托和事件绑定
  • 原文地址:https://www.cnblogs.com/ledgua/p/11528361.html
Copyright © 2011-2022 走看看