gpt4 book ai didi

java - 无法使用 JAVA 中的网络将文件从一台电脑传输到另一台电脑

转载 作者:行者123 更新时间:2023-12-01 13:04:53 25 4
gpt4 key购买 nike

我正在尝试使用中间服务器将文件从一个客户端 1 发送到另一个客户端 2。客户端 1 和客户端 2 都通过网络连接到服务器。为此,我已将服务器的 IP 地址指定给两个客户端。但由于我的代码中存在一些错误,我无法正确传输文件。我正在使用以下代码,但它不起作用,并且在客户端 2(接收方)端,创建的文件是空的。请找出我的代码中可能存在的错误。

服务器代码

`
import java.net.*;
import java.io.*;

public class S1 {


public static void main(String[] args) {

try{

ServerSocket sc1=new ServerSocket(6988);
Socket c1=sc1.accept();
Socket c2=sc1.accept();



DataInputStream dis=new DataInputStream(c1.getInputStream());
int m=c1.getInputStream().available();
byte b2[]=new byte[m];
dis.read(b2);

DataOutputStream dos=new DataOutputStream(c2.getOutputStream());
dos.write(b2);
dos.flush();
dos.close();


}
catch(Exception e){}
}
}
<小时/>

客户端 1(发送者)

import java.io.*;
import java.net.*;

public class C11 {


public static void main(String[] args) {
try{
Socket c2=new Socket("127.0.0.1",6988);
FileInputStream fis=new FileInputStream("f:/abc.jpg");
File f1=new File("f:/abc.jpg");
long l1=f1.length();
int a=(int)l1;
byte b1[]=new byte[a];
DataInputStream dis=new DataInputStream(fis);
dis.read(b1);
DataOutputStream dout=new DataOutputStream(c2.getOutputStream());
dout.write(b1);

}
catch(Exception e){}
}

}
<小时/>

客户端2(接收者)

import java.io.*;
import java.net.*;

public class C22 {


public static void main(String[] args) {
try{
Socket c2=new Socket("127.0.0.1",6988);
DataInputStream dis=new DataInputStream(c2.getInputStream());
int m=c2.getInputStream().available();
byte b2[]=new byte[m];
dis.read(b2);
FileOutputStream fout=new FileOutputStream("E:\\PRACTICE\\xyz.txt");
DataOutputStream dos=new DataOutputStream(fout);
dos.write(b2);
dos.close();
}
catch(Exception e){}
}
}

最佳答案

常见问题。

nt m=c1.getInputStream().available();
byte b2[]=new byte[m];

来自Javadoc :“使用此方法的返回值来分配用于保存此流中所有数据的缓冲区永远是不正确的。”

dis.read(b2);

read() 方法返回一个值。你忽略了它。该值可以是 -1,或者是 1 和缓冲区大小之间的正数。您假设读取已填满缓冲区。它没有义务这样做。

dout.write(b1);

应该是这样

dout.write(b1, 0, count);

其中 countread() 返回的长度, 并且它应该处于循环中:

while ((count = in.read(buffer)) > 0)
{
out.write(buffer, 0, count);
}

在两端使用它,任何缓冲区大小都大于零。我一般用8192。

关于java - 无法使用 JAVA 中的网络将文件从一台电脑传输到另一台电脑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23343521/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com