2013-03-24 3 views
0

나는 잠시 동안 웹을 검색해왔다.파이썬 클라이언트를 사용하여 자바 서버로 데이터 보내기

파일을 보내기위한 파이썬 코드 :

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
with open(path, mode='rb') as f: 
    s.sendall(f.read()) 

데이터를 받기위한 자바 코드 :

private BufferedInputStream bis = new BufferedInputStream(socket.getInputStream()); 
try (BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(path))) { 
     while (true) { 
      int size = bis.read(by); 
      if (size > 0) { 
       bos.write(by, 0, size); 
       bos.flush(); 
       total += size; 
       System.out.println(size + "(" + total + ")"); 
       if (total == length) { 
        break; 
       } 
      } 
     } 
    }..... 

나는 데이터가 전송되는 것을보고, 내가 데이터에 알고 java 엔드의 스트림 그러나 bis.read (by) 호출은 중단되고 연결이 끊어 질 때까지 데이터 읽기를 거부합니다.

나는 그것이 "플러시"자바 물건과 관련이 있다고 생각하지만, 나는 "플러시"파이썬을 사용하여 어떤 방법을 찾을 수 없습니다.

이것이 일어날 수있는 단서가 있습니까?

답변

0

나는 그것을 알아 냈다. 웬일인지 경쟁 조건이 발생했다. 파이썬 코드에 수면 (0,2)을 넣어 자바 서버가 응답 할 수있게했다.

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
sleep(0.2) 
with open(path, mode='rb') as f: 
    s.sendall(f.read()) 
관련 문제