我正在使用TCP套接字将文件从C#客户端传输到Java服务器。在C#客户端上,我将文件转换为字节数组进行传输并使用NetworkStream发送。读取Java中的C#字节数组
在Java服务器上,我使用以下代码将接收到的字节数组转换回文件;
public void run() {
try {
byte[] byteArrayJAR = new byte[filesize];
InputStream input = socket.getInputStream();
FileOutputStream fos = new FileOutputStream(
"Controller " + controllerNumber + ".jar");
BufferedOutputStream output = new BufferedOutputStream(fos);
int bytesRead = input.read(byteArrayJAR, 0, byteArrayJAR.length);
int currentByte = bytesRead;
System.out.println("BytesRead = " + bytesRead);
do {
bytesRead = input.read(
byteArrayJAR,
currentByte,
(byteArrayJAR.length - currentByte));
if (bytesRead >= 0) {
currentByte += bytesRead;
}
}
while (bytesRead > -1);
output.write(byteArrayJAR, 0, currentByte);
output.flush();
output.close();
socket.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
的代码,如果接收到的字节数组来自与Java编程的客户端,但对于C#客户代码在挂起上述工作do-while循环在bytesRead = input.read(...)方法。
有没有人知道为什么代码挂在C#客户端而不是Java客户端?根据println消息的输出数据肯定是由InputStream接收的,并且在bytesRead变量初始化时读取一次,但不在do-while循环中读取。
任何解决方案或建议,以克服这个问题将受到欢迎。
Regards,
Midavi。基于
向我们展示您的C#代码。你可能错过了一个'Flush()'? – dtb 2012-01-18 16:53:20
如果文件大小不小于或等于有效发送的数据,则read()将被阻止。你不应该试图猜测你要接收的数据的大小,你必须保持阅读,直到流为空。 – Viruzzo 2012-01-18 16:55:36