zoukankan      html  css  js  c++  java
  • Unix domain sockets

    #server:

    SERVER_PATH = "/tmp/python_unix_socket_server"
    def run_unix_domain_socket_server():
        if os.path.exists(SERVER_PATH):
            os.remove(SERVER_PATH)
        print('starting unix domain socket server.')
        #
        #UNIX 无连接的socket(类型 SOCK_DGRAM)
        sever=socket.socket(socket.AF_UNIX,socket.SOCK_DGRAM)
        #在创建套接字描述符之后,bind() 函数获取套接字的唯一名称。
        #UNIX 域套接字的名称空间由路径名组成。
        # 当套接字程序调用 bind() 函数时,会在文件系统目录中创建一项。
        # 如果路径名已存在,则 bind() 失败。因此,UNIX 域套接字程序应总是调用 unlink() 函数以在结束时除去该目录项。
        sever.bind(SERVER_PATH)
        print("监听路径:%s"%SERVER_PATH)
        while True:
            #从客户机应用程序接收数据。
            datagram=sever.recv(1024)
            #如果没有数据
            if not datagram:
                break
            else:
                print('-'*20)
                print(datagram)
    
            if "DONE"==datagram:
                break
        print('*'*20)
        #关闭socket
        print('关闭服务器')
        sever.close()
        #从文件系统除去 UNIX 路径名。
        os.remove(SERVER_PATH)
    

      client:

    #coding:utf-8
    __author__ = 'similarface'
    
    import socket
    import sys
    SERVER_PATH = "/tmp/python_unix_socket_server"
    def run_unix_domain_socket_client():
        #端点的套接字描述符。该语句还标识将对此套接字使用带有流传输(SOCK_STREAM)的 UNIX 地址系列。该函数返回表示端点的套接字描述符。还可使用 socketpair() 函数初始化 UNIX 套接字
        sock = socket.socket(socket.AF_UNIX, socket.SOCK_DGRAM)
        #使用 connect() 函数来建立与服务器的连接。
        try:
            sock.connect(SERVER_PATH)
        except socket.error, msg:
               print >>sys.stderr, msg
               sys.exit(1)
    
        try:
            message="Good Info"
            print("Sending[%s]"%message)
            sock.sendall(message)
            amount_received=0
            amount_expected=len(message)
            while amount_received < amount_expected:
                #函数一直循环,直到所有 16 字节数据都到达为止。
                data=sock.recv(16)
                amount_received+=len(data)
                print >>sys.stderr, "Received [%s]" % data
        finally:
            #关闭客户端
            sock.close()
    
    if __name__ == '__main__':
        run_unix_domain_socket_client()
    

      

    AF_UNIX

  • 相关阅读:
    企业nginx应用实例(功能拆分记录)
    Squid代理服务器的安装与配置
    关于mysql主从架构master宕机后,请求转移问题解决办法
    记一次innobackupex备份恢复数据库过程
    elasticsearch6.6及其插件安装记录(较详细)
    redis一主二从加哨兵
    nginx反向代理proxy_pass的问题
    spring程序打包war,直接通过-jar启动,并指定spring.profiles.active参数控制多环境配置
    Debian下配置防火墙iptables
    内连接和外连接
  • 原文地址:https://www.cnblogs.com/similarface/p/5541886.html
Copyright © 2011-2022 走看看