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()