- 什么是 .sock 文件?
- 我如何与 .sock 文件进行通信?
针对第二个问题,我了解到 .sock 文件用于进程间通信。我该如何“通信”?假设一个 sock 文件被设计为以特定方式响应(例如:它接收“time”输入并打印出当前时间)。
我更喜欢高级编程语言(如 Python)而不是 C/C++。如果有人能指点一些应用程序(例如 nc),让我以快速而简单的方式与 .sock 文件通信,那就更好了。
谢谢
针对第二个问题,我了解到 .sock 文件用于进程间通信。我该如何“通信”?假设一个 sock 文件被设计为以特定方式响应(例如:它接收“time”输入并打印出当前时间)。
我更喜欢高级编程语言(如 Python)而不是 C/C++。如果有人能指点一些应用程序(例如 nc),让我以快速而简单的方式与 .sock 文件通信,那就更好了。
谢谢
Socket文件是套接字文件,它们是通信管道中的端点。
如何创建套接字文件:
让uwsgi与服务器(例如nginx)交互时创建它们 sudo uwsgi --ini /path/to/ini/file/ 在ini文件中,您需要传递要添加套接字文件的路径。 .ini文件在Unix系统上将位于/etc/uwsgi/sites/*.ini
使用高级语言尝试Python创建套接字文件: python -c "import socket as s; sock = s.socket(s.AF_UNIX); sock.bind('/tmp/test.sock')"
https://pymotw.com/2/socket/uds.html
您可以使用netcat-openbsd
或socat
来使用套接字进行通信。
nc -U <path_to_socket_file>
socat - UNIX-CONNECT:<path_to_socket_file>
更新:以下是从第一个链接中提取的套接字服务器示例。
import socket
import sys
import os
server_address = './uds_socket'
# Make sure the socket does not already exist
try:
os.unlink(server_address)
except OSError:
if os.path.exists(server_address):
raise
# Create a UDS socket
sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
# Bind the socket to the port
print >>sys.stderr, 'starting up on %s' % server_address
sock.bind(server_address)
# Listen for incoming connections
sock.listen(1)
while True:
# Wait for a connection
print >>sys.stderr, 'waiting for a connection'
connection, client_address = sock.accept()
try:
print >>sys.stderr, 'connection from', client_address
# Receive the data in small chunks and retransmit it
while True:
data = connection.recv(16)
print >>sys.stderr, 'received "%s"' % data
if data:
print >>sys.stderr, 'sending data back to the client'
connection.sendall(data.upper())
else:
print >>sys.stderr, 'no more data from', client_address
break
finally:
# Clean up the connection
connection.close()
~/Development/temp ᐅ python sock.py
starting up on ./uds_socket
waiting for a connection
~/Development/temp ᐅ socat - UNIX-CONNECT:uds_socket
hello
HELLO
user:~/test$ nc -U /path/to/the.sock user:~/test$
socat:
user:~/test$ socat - UNIX-CONNECT:/path/to/the.sock user:~/test$
如何收集由/path/to/the.sock生成的响应。 - Julian Simpson