Unix domain sockets

时间:2023-03-09 03:02:43
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()

  

Unix domain sockets