1. 程式人生 > >unix Domain socket(python)

unix Domain socket(python)

1. unix Domain Socket 簡介

Unix Domain Socket通常稱為 【unix域套介面】 或 【本地套介面】,它用於位於同一臺機器(作業系統)的程序間通訊。它已經被納入POSIX Operating Systems標準。

它支援以下三種方式資料傳輸:
(1) 可靠的位元組流傳輸(SOCK_STREAM, 對應TCP);
(2)有序、可靠的資料包傳輸(SOCK_SEQPACKET);
(3)無序、不可靠的資料包傳輸(SOCK_DGRAM,對應UDP)。

Unix Domain Socket 的通訊基於作業系統核心的,使用檔案系統作為地址名稱空間(address name space)。

2. 簡單的server/client示例(python)

示例分為兩部分,server端, client端

2.1 server端程式碼

import socket
import sys 
import os

serverAddr = 'xunixSocket_ex'

def serverSocket():
        #create sockert
        sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
        if sock < 0:
                print
>> sys.stderr, 'socket error' # bind to a file if os.path.exists(serverAddr): os.unlink(serverAddr) if sock.bind(serverAddr): print >> sys.stderr, 'socket.bind error' #listen if sock.listen(5): print
>> sys.stderr, 'socket.listen error' while True: print >> sys.stderr, 'waiting for connecting' #waiting for client connecting conn, clientAddr = sock.accept() try: # receive data # send data to client while True: data = conn.recv(100) if data: print >> sys.stderr, 'received "%s"' %data conn.sendall(data) else: break finally: #close the connection conn.close() os.unlink(serverAddr) if __name__ == "__main__": serverSocket()

2.2 client端程式碼

import socket
import sys 
import os

serverAddr = 'xunixSocket_ex'

def clientSocket():
        sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
        if sock < 0:
                print >> sys.stderr, 'socket error'

        try:
                sock.connect(serverAddr)
        except socket.error, msg:
                print >> sys.stderr, "exception"
                print >> sys.stderr, msg 
                sys.exit(1)

        message = 'this is the message'
        sock.sendall(message)

        amountRecv = 0 
        amountSnd = len(message)

        while amountRecv < amountSnd:
                data = sock.recv(100)
                amountRecv += len(data)
                print >> sys.stderr, 'received "%s"' %data
        sock.close()

if __name__ == "__main__":
        clientSocket()

注:
這篇博文只是做個備忘錄,後面會用詳細介紹unix域套介面(使用C語言寫程式碼示例)。

相關推薦

unix Domain socket(python)

1. unix Domain Socket 簡介 Unix Domain Socket通常稱為 【unix域套介面】 或 【本地套介面】,它用於位於同一臺機器(作業系統)的程序間通訊。它已經被納入POSIX Operating Systems標準。 它支援以

由一個簡單需求到Linux環境下的syslog、unix domain socket

message python domain 服務器 import 需求:回到頂部  工作中有一個在Linux(debian8)環境下運行的服務器程序,用python語言實現,代碼中有不同優先級的日誌需要記錄,開發的時候都是使用python的logging模塊輸出到文件,示例代碼如下:  

Unix domain socket 簡介

進程間通訊 ima cli strlen side 組件 errno doc i++ Unix domain socket 又叫 IPC(inter-process communication 進程間通信) socket,用於實現同一主機上的進程間通信。socket 原本是

go語言實現unix domain socket 客戶端/服務端

sock domain tin soc reader ted ips for urn /*server.go */package mainimport ( "bufio" "fmt" &quo

linux一切皆檔案之Unix domain socket描述符(二)

一、知識準備 1、在linux中,一切皆為檔案,所有不同種類的型別都被抽象成檔案(比如:塊裝置,socket套接字,pipe佇列) 2、操作這些不同的型別就像操作檔案一樣,比如增刪改查等 3、主要用於:執行在同一臺機器上的2個程序相互之間的資料通訊 4、它們和網路檔案描述符非常相似(比如:TCP

基於libevent和unix domain socket的本地server

https://www.pacificsimplicity.ca/blog/libevent-echo-server-tutorial 根據這一篇寫一個最簡單的demo。然後開始寫client。 client調優 client最初的程式碼如下: 1 #include <sys/socke

Linux下程序間通訊方式 - UNIX Domain Socket

概述 Linux下程序通訊方式有很多,比較典型的有套接字,平時比較常用的套接字是基於TCP/IP協議的,適用於兩臺不同主機上兩個程序間通訊, 通訊之前需要指定IP地址. 但是如果同一臺主機上兩個程序間通訊用套接字,還需要指定ip地址,有點過於繁瑣. 這個時候就需要用到UNIX Domain Sock

UNIX Domain Socket

Unix domain socket 又叫 IPC(inter-process communication 程序間通訊) socket,用於實現同一主機上的程序間通訊。socket 原本是為網路通訊設計的,但後來在 socket 的框架上發展出一種 IPC 機制,就是 UNIX domain soc

android原始碼中採用Unix Domain Socket跨程序通訊

      今天看android原始碼Zygote程序啟動流程,無意間發現使用了一種檔案描述符作為跨程序通訊的地址,於是仔細研究了一下:  從字面來理解是傳統的Socket使用,但個人覺得不應該是,特地找資料學習了一下,下面的介紹比較詳細到位。又進一步瞭解一下,使用的其實是

linux一切皆檔案之Unix domain socket描述符

一、知識準備 1、在linux中,一切皆為檔案,所有不同種類的型別都被抽象成檔案(比如:塊裝置,socket套接字,pipe佇列) 2、操作這些不同的型別就像操作檔案一樣,比如增刪改查等 二、環境準備 元件 版本 OS CentOS Linux release 7.5.1804

UNIX DOMAIN SOCKET效率

nvidia 4.5 1.3 但是 效率 cti work mman running 關於UNIX DOMAIN SOCKET和普通udp socket的對比 在TX1(4核A57 1.7GHz)的板卡上進行測試,每個包大小設置為1024,全速收發,UDS的速度在90Mbp

[外一篇]關於Unix Domain Socket

咋一看名字,雖然有個socket,但是它的用場和常說的“網路”socket有所不同。它實際上是一種本地IPC,以socket為名是因為它和普通socket使用的介面是一致的。 雖說普通的socket也可以用作本地IPC,但是從效率上和功能上,要遜於Unix Domain

UNIX Domain Socket使用

一、Socket概述 Socket最初用在基於TCP/IP網路間程序通訊中,以客戶端/伺服器模式進行通訊。 實現非同步操作,共享資源集中處理,提高客戶端響應能力。 Tcp通訊基本流程:   伺服器端                                                  

如何獲得unix domain socket的對端PID

1. 什麼是unix domain socket 2. 有兩種方法,第一種是通過猜測,第二種是debug linux核心 第一種方法的示例: [[email protected] ipc]$ /usr/sbin/lsof -p 31854 COMMAND

使用psql命令基於udp(unix-domain-socket)協議連線postgresql資料庫

對於資料庫連線而言,通過netstat可以檢視當前連線協議,是udp還是tcp(包括ipv4和ipv6)。 實驗1: 如果本地直接使用psql命令連線,則為udp: 視窗1: postgres@pgdb-> psql psql (9.5.7) T

socket unix domain IPC程式碼示例

僅供參考: 服務端:socket->bind->listen->send/recv->close 客戶端:socket->bind->connect->send/recv->close #include <sys/socke

最大視角-從Unix底層 理解 python的io模型、python非同步IO、python的select、Unix的select、epoll

參考連結 最基本的文章 python之路——IO模型 一步步理解python的非同步IO Unix底層文章 Linux-C網路程式設計之select函式 python 的 select linux select函式詳解 unix的select epoll簡介(一) unix的ep

Socket- Python 重構即時聊天系統

Android移動端 - Socket中轉伺服器 - Python服務端 重構即時聊天系統 最近又比較閒,以前畢設即時聊天系統由於環境各種問題,各種也需要優化的問題,又想整合上現在的樹莓派監控系統,所以終於還是決定抽空重構 1.移動端Android_____

Impala cannot read or execute the parent directory of dfs.domain.socket.path

valid short-circuit reads configuration: Impala cannot read or execute the parent directory of dfs.domain.socket.path 解決方法: 1、去HDFS中找到dfs.

unixsocket繫結路徑不建立檔案問題[c語言]

unix域socket繫結地址時,需要指定一個檔案路徑,存在兩種情況: (1)socket自動建立一個bind指定的檔案路徑對應的檔案  (2)不需要建立socket檔案,只需要命名一個全域性名字即可讓客戶端根據此名字進行連線。後者的實現過程與前者的差別是,後者在對地址結構