2017-01-05 1 views
0

"/tmp/.mysocket"에 바인딩 된 로컬 소켓을 생성하고 해당 소켓에서 데이터를 수신하기를 기다리는 C++ 프로그램이 있습니다. 그 설정 방법은, 원시 이진 데이터는 다음과 C로 소켓에 전송되고로드 될 ++ 구조 :로컬 파일 소켓을 사용하는 Python과 C++ 간의 프로세스 간 통신?

int nBytes = recvfrom(SD,&DataReceived,sizeof(StateVariable)/sizeof(char),0,(sockaddr*)&SentFrom,&size); 

서버는 :

struct StateVariable 
{ 
    char Name[64]; 
    int E[8]; 
}; 

은 C++ 프로그램에 recvfrom을 사용하여 입력을 수신 그냥 표준 AF_UNIX와 SOCK_DGRAM을 사용하여 소켓을 생성한다.

내 질문은 파이썬과 관련이있다. 파이썬을 사용하여 /tmp/.mysocket에 바인드 된 로컬 소켓으로 데이터를 보내려면 어떻게해야합니까? AF_INET을 사용하지 않거나 특정 포트를 여는 중입니다.

파이썬의 소켓 라이브러리를 사용하여 소켓을 설명 할 수는 있지만 파이썬에서 소켓에 파일을 바인딩하고 해당 소켓에 데이터를 보내는 방법을 설명하는 리소스를 찾을 수 없습니다. 소켓 라이브러리에 대한 문서에서는 포트 번호 127.0.0.1에 바인딩 된 로컬 소켓에 대해 AF_INET 및 SOCK_DGRAM을 사용하는 방법에 대해서만 설명하지만 필자는 그렇게하지 않습니다.

파이썬이 파일에 바인딩 된 소켓으로 데이터를 보내도록하려면 어떻게해야합니까? 거기에 그냥 (아마이 기능을 보여주는 클라이언트/서버 쌍) 않습니다 예제 파이썬 프로그램이 있나요? 파이썬에서 로컬 파일 소켓으로 데이터를 보낼 수있는 한, 나머지는 알아낼 수 있습니다.

+0

원격 프로 시저 호출 메커니즘을 10000 번 프로그래밍했습니다. 기존 방법에 대한 Google. –

답변

2

파이썬 socket 라이브러리는 C++에서 익숙한 소켓 인터페이스를 감싸는 비교적 얇은 래퍼입니다. socket documentation을 참조하십시오.

다음과 같이 보일 것 :

import socket 
import struct 

s = socket.socket(socket.AF_UNIX, socket.SOCK_DGRAM) 
s.connect('/tmp/...') 
s.send(struct.pack('64s8i', ...)) 
0

당신은 방금 (대신 (host, port)쌍) 파일로 AF_INET 경로 AF_UNIX에 다음 .connect(address) 및/또는 .bind(address) 방법이 동의를 변경합니다. 그 외 모든 것은 거의 똑같이 작동합니다.