无法使用JAVA中的网络将文件从一台电脑传输到另一台电脑
我正在尝试使用中间服务器将文件从一个客户端1发送到另一个客户端2。客户机1和客户机2都是通过网络连接到服务器的。为此,我给了两个客户机服务器的IP地址。 但是由于我的代码中的一些错误,我无法正确传输文件。我正在使用下面的代码,它不工作,在客户端2(接收方)端,创建的文件是空的。 请在我的代码中查找可能的错误 服务器代码无法使用JAVA中的网络将文件从一台电脑传输到另一台电脑,java,file,networking,transfer,Java,File,Networking,Transfer,我正在尝试使用中间服务器将文件从一个客户端1发送到另一个客户端2。客户机1和客户机2都是通过网络连接到服务器的。为此,我给了两个客户机服务器的IP地址。 但是由于我的代码中的一些错误,我无法正确传输文件。我正在使用下面的代码,它不工作,在客户端2(接收方)端,创建的文件是空的。 请在我的代码中查找可能的错误 服务器代码 客户1(发送方) 客户2(接收方) 最明显的错误是: int m=c2.getInputStream().available(); available方法只告诉您可以在不
客户1(发送方)
客户2(接收方)
最明显的错误是:
int m=c2.getInputStream().available();
available
方法只告诉您可以在不阻塞的情况下读取多少数据,而不告诉您可以从套接字读取多少数据。要读取发送的所有数据,您需要编写一个循环,从套接字读取数据,直到read
返回-1。常见问题
nt m=c1.getInputStream().available();
byte b2[]=new byte[m];
来自:“使用此方法的返回值来分配用于保存此流中所有数据的缓冲区是不正确的。”
read()
方法返回一个值。你忽略了它。该值可以是-1,也可以是介于1和缓冲区大小之间的正数。您假设读取已填满缓冲区。它没有义务这么做
dout.write(b1);
那应该是
dout.write(b1, 0, count);
其中,count
是read(),
返回的长度,它应该在一个循环中:
while ((count = in.read(buffer)) > 0)
{
out.write(buffer, 0, count);
}
在任何缓冲区大小大于零的情况下,在两端都使用此选项。我通常使用8192。你有错误吗?@Rahul没有,但代码没有按照我的要求运行。你不知道是否有错误,因为你忽略了任何异常。至少在所有这些
catch
块中调用e.printStackTrace()
。
dis.read(b2);
dout.write(b1);
dout.write(b1, 0, count);
while ((count = in.read(buffer)) > 0)
{
out.write(buffer, 0, count);
}