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

  

时间: 2024-11-05 03:29:26

Unix domain sockets的相关文章

Python3 UNIX domain sockets使用代码实现

一.说明 背景一:大学的时候学网络编程,经常看到说socket有AF_UNIX.AF_INET和AF_INET6三个协议族,AF_UNIX一般不用.AF_INET是IPv4的.AF_INET6是IPv6的.基于这种说教一直以来写网络编程,上来协议族就写AF_INET,AF_UNIX是什么怎么用一直没深究. 背景二:毕业后多接触Linux,也经常用netstat看端口监听情况,在较长一段时间内也不懂“netstat -ltnp”."netstat -unp",上来就是“netstat -

由一个简单需求到Linux环境下的syslog、unix domain socket

本文记录了因为一个简单的日志需求,继而对linux环境下syslog.rsyslog.unix domain socket的学习.本文关注使用层面,并不涉及rsyslog的实现原理,感兴趣的读者可以参考rsyslog官网.另外,本文实验的环境实在debian8,如果是其他linux发行版本或者debian的其他版本,可能会稍微有些差异. 需求: 工作中有一个在Linux(debian8)环境下运行的服务器程序,用python语言实现,代码中有不同优先级的日志需要记录,开发的时候都是使用pytho

ndk学习16: unix domain socket

一.UNIX Domain Socket 概念: UNIX Domain Socket是在socket架构上发展起来的用于同一台主机的进程间通讯(IPC) 特点: 1. 它不需要经过网络协议栈,不需要打包拆包.计算校验和.维护序号和应答等 2. 只是将应用层数据从一个进程拷贝到另一个进程. 工作模式: SOCK_DGRAM     类似于UDP SOCK_STREAM    类似于TCP 用途: UNIX Domain Socket可用于两个没有亲缘关系的进程,是全双工的,是目前使用最广泛的IP

UNIX域套接字(unix domain)

UNIX域套接字用于在同一台机器上运行的进程之间的通信. UNIX域套接字提供流和数据报两种接口. 创建一对非命名的.相互连接的UNIX域套接字. socketpair 1.命名UNIX域套接字 1)套接字地址格式,在linux下如下所示 struct sockaddr_un { sa_family_t sun_family; char sun_path[108]; } 绑定该地址: #include <stdlib.h> #include <string.h> #include

unix domain socket示例一(SOCK_DGRAM)

unix domain socket 是IPC通信的一种方式,可用于与管理进程间通信,同时由和网络socket统一,所以很好管理,使用还是比较多.现举个例子: server.c 1 #include <stdio.h> 2 #include <string.h> 3 #include <unistd.h> 4 #include <stdlib.h> 5 #include <sys/types.h> 6 #include <sys/socke

redis性能测试tcp socket and unix domain

UNIX Domain Socket IPC socket API原本是为网络通讯设计的,但后来在socket的框架上发展出一种IPC机制,就是UNIX Domain Socket.虽然网络socket也可用于同一台主机的进程间通讯(通过loopback地址127.0.0.1),但是UNIX Domain Socket用于IPC更有效率:不需要经过网络协议栈,不需要打包拆包.计算校验和.维护序号和应答等,只是将应用层数据从一个进程拷贝到另一个进程.UNIX域套接字与TCP套接字相比较,在同一台主

UNIX Domain Socket IPC

目录 目录 概述 socket函数使用 struct sockaddr_un socket bind listen accept connect Socket IPC 实例 server client 运行结果 概述 socket API原本是为网络通讯设计的,但是后来在socket的框架上发展出一种IPC机制,就是UNIX Domain Socket. 虽然网络socket也可用于同一台主机的进程间通讯(通过loopback地址127.0.0.1),但是UNIX Domain Socket用于

问题解决:psql: could not connect to server: No such file or directory Is the server running locally and accepting connections on Unix domain socket &quot;/var/run/postgresql/.s.PGSQL.5432&quot;?

错误提示: psql: could not connect to server: No such file or directory Is the server running locally and accepting connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"? 出现该问题的很多,以下是目前碰到的几种情况,之后碰到继续补充: 1.删除了/tmp路径中的.s.PGSQL.5432 与.s.

【转】PHP实现系统编程(四)--- 本地套接字(Unix Domain Socket)

原文:http://blog.csdn.net/zhang197093/article/details/78143687?locationNum=6&fps=1 -------------------------------------------------------------------------------------------------------------------------------------------------------- Socket API一开始是为了