2016-11-20 3 views

답변

0

당신에게 일반 파일 I/O를 제공하지 않습니다. 미디어 속성을 가져 오는 데 사용됩니다.

정상적인 열기/닫기, 읽기/쓰기 만 사용할 수 있습니다.

sender.py :

import socket 

(HOST,PORT)=('localhost',19123) 
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM); s.connect((HOST,PORT)) 

with open('input', 'rb') as f: 
    for l in f: s.sendall(l) 
s.close() 

receiver.py : 제가 위에서 쓴

import socket 

(HOST,PORT) = ('localhost',19123) 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.bind((HOST, PORT)); s.listen(1); conn, addr = s.accept() 

with open('output','wb') as f: 
    while True: 
    l = conn.recv(1024) 
    if not l: break 
    f.write(l) 
s.close() 
+0

클라이언트 코드 : 의 데이터 상태 : + = 데이터 데이터 = client_socket.recv ALLDATA는 (1024) 음성 = 열기 ("voice.p는" 'WB') voice.write (ALLDATA) ' 나에게 오류가 발생합니다 -wave.Error : 파일이 RIFF id로 시작하지 않습니다. – user4719989

+0

'send'를'sendall'으로 변경했습니다. 전자는 모든 바이트를 전송할 수있는 것은 아니며 나머지 바이트로 다시 시도해야합니다. 후자는 모든 바이트를 보냅니다. 다시 시도 할 필요가 없습니다. – blackpen

+0

클라이언트 측에서는 'alldata + = data;'와 같은 문자열 연산을하지 마십시오. 바이트 배열에서 안전하다고는 생각하지 않습니다. – blackpen

0

socket.sendfile(file, offset=0, count=None)을 시도해보십시오

가 나는 오류가 발생합니다.

Send a file until EOF is reached by using high-performance os.sendfile

는 그리고 당신은 당신이 원시 이진 데이터를 전송하는대로 wave.open(...)으로 파일을 열 싶지 않아요.

그래서 당신은 할 것이다 :

wave
with open(WAVE_OUTPUT_FILENAME, 'rb') as wave_file: 
    my_socket.sendfile(wave_file) 
+0

오류가 발생했습니다. AttributeError : '_socketobject'객체에 'sendfile'속성이 없습니다. – user4719989

+0

나는 창을 사용하고 있습니다. – user4719989

+0

socket.sendfile()이 (가) Python 2.7에서 종료되지 않습니다. – blackpen