2013-03-24 196 views
0

我一直在网上搜索一段时间寻找答案。使用python客户端将数据发送到java服务器

用于发送文件的Python代码:

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

用于接收所述数据的java代码:

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)调用会挂起,并拒绝读取数据,直到连接数据死亡。

我怀疑它与java中的“flush”有关,但我找不到任何方式使用python做“flush”。

任何线索为什么会发生这种情况?

回答

0

我想出来了,出于某种原因出现了一个竞争条件,在python代码中放入一个睡眠(0,2)使得java服务器能够响应。

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
sleep(0.2) 
with open(path, mode='rb') as f: 
    s.sendall(f.read()) 
相关问题