mid*_*avi 5 c# java tcp bytearray
我正在使用TCP套接字将文件从C#客户端传输到Java服务器.在C#客户端上,我将文件转换为字节数组以进行传输,并使用NetworkStream发送它.
在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();
}
}
Run Code Online (Sandbox Code Playgroud)
如果接收到的字节数组来自使用Java编程的客户端,则上述代码有效,但对于C#客户端,代码在bytesRead = input.read(...)方法的do-while循环中挂起.
有人知道为什么代码在这一点上悬挂在C#客户端而不是Java客户端?根据println消息的输出,数据肯定是由InputStream接收的,并且在bytesRead变量初始化时读取一次,但在do-while循环期间不读取.
任何克服这个问题的解决方案或建议都会受到欢迎.
问候,
Midavi.
基于: http: //docs.oracle.com/javase/1.4.2/docs/api/java/io/InputStream.html
int bytesRead = input.read(byteArrayJAR, 0, byteArrayJAR.length);
Run Code Online (Sandbox Code Playgroud)
读取所有可用字节,这意味着您的字节数据已读入byteArrayJAR,还是我在这里完全错了?
编辑:
刚刚检查了我的一些项目...我从 Android <=> C# 服务器应用程序发送数据。
我使用String data = input.readLine();(java)和_sw.WriteLine("Testdata");(C#)