什么是.sock文件以及如何与它们通信

时间:2018-10-01 22:41:20

标签: sockets netcat

  • 什么是.sock文件?
  • 如何与.sock文件通信?

关于第二个项目符号,我了解.sock文件用于进程间通信。我如何与他们“沟通”?让我们说一个袜子文件旨在以一种特定的方式响应(例如:它接受输入的“时间”并打印出当前时间)。

与C / C ++相比,我更喜欢高级编程语言(python)。 如果有人可以将我指向某个应用程序(例如nc呢?),我也可以用它以快速而肮脏的方式与.sock文件进行通信,那会更好呢?

谢谢

2 个答案:

答案 0 :(得分:1)

Sock文件是套接字文件 它们是通信管道中的端点。

如何创建套接字文件:

  • 让uwsgi在与服务器交互时创建它们(例如nginx) 须藤uwsgi --ini / path / to / ini / file / 在ini文件中,您需要传递路径到要添加套接字文件的位置 .ini文件将在Unix系统上位于/ etc / uwsgi / sites / *。ini

  • 使用高级语言创建套接字文件尝试python: python -c“将套接字导入为s; sock = s.socket(s.AF_UNIX); sock.bind('/ tmp / test.sock')“

  • 使用nc 服务器端有: nc -l -p 1234 客户端有: nc -l -p 1234 这样,您就有了可以通信的开放套接字。 我把这个留在这里

答案 1 :(得分:0)

这是有关在Python中使用套接字的详细信息

https://pymotw.com/2/socket/uds.html

您可以使用netcat-openbsdsocat与套接字进行通信

nc -U <path_to_socket_file>

socat - UNIX-CONNECT:<path_to_socket_file>

第二部分的来源:https://unix.stackexchange.com/questions/26715/how-can-i-communicate-with-a-unix-domain-socket-via-the-shell-on-debian-squeeze

更新:这是从第一个链接获取的套接字服务器的示例

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

将其保存到名为 sock.py 的文件中并运行

~/Development/temp ᐅ python sock.py
starting up on ./uds_socket
waiting for a connection

然后使用 socat

连接
~/Development/temp ᐅ socat - UNIX-CONNECT:uds_socket
hello
HELLO

写点东西-您会收到相同的东西,但以大写形式作为答复。