gpt4 book ai didi

java - 在 Java 中通过套接字发送文件

转载 作者:行者123 更新时间:2023-12-02 00:29:09 26 4
gpt4 key购买 nike

我在尝试通过套接字从服务器程序向客户端程序发送文件时遇到问题。公平地说,我尝试将其拆分为字节,但到目前为止我还没有取得任何成功。此外,服务器必须是并发的,所以我不确定应该将代码放在哪里来发送文件。

谢谢

编辑:

这是我迄今为止尝试过的代码,目前它将文件的副本传输到其预期位置,但文件大小为零字节:(

在协议(protocol)类中:

try {
File program = new File("./src/V2AssignmentCS/myProgram.jar");

byte[] mybytearray = new byte[4096];

FileInputStream fis = new FileInputStream(program);

BufferedInputStream bis = new BufferedInputStream(fis);

bis.read(mybytearray, 0, mybytearray.length);

OutputStream os = sock.getOutputStream();

System.out.println("Sending...");

os.write(mybytearray, 0, mybytearray.length);

os.flush();

} catch (IOException e) {

System.err.println("Input Output Error: " + e);

}

在客户端:

long start = System.currentTimeMillis();
int bytesRead;
int current = 0;
// localhost for testing

// receive file
byte [] mybytearray = new byte [ServerResponse.programSize()];
InputStream is = sock.getInputStream();
FileOutputStream fos = new FileOutputStream("./src/V2AssignmentCS/newProgram.jar");
BufferedOutputStream bos = new BufferedOutputStream(fos);
bytesRead = is.read(mybytearray,0,mybytearray.length);
current = bytesRead;

// thanks to A. Cádiz for the bug fix
do {
bytesRead =
is.read(mybytearray, current, (mybytearray.length-current));
if(bytesRead >= 0) current += bytesRead;
} while(bytesRead > -1);

bos.write(mybytearray, 0 , current);
bos.flush();
long end = System.currentTimeMillis();
System.out.println(end-start);
bos.close();
sock.close();

最佳答案

bis.read(mybytearray, 0, mybytearray.length);

您忽略了此方法返回的结果代码。检查 Javadoc。这不是您明确期望的那样。

os.write(mybytearray, 0, mybytearray.length);

这里您正在写入 4096 字节。这是你的意图吗?

bytesRead = is.read(mybytearray,0,mybytearray.length);
current = bytesRead;
// thanks to A. Cádiz for the bug fix
do {
bytesRead =
is.read(mybytearray, current, (mybytearray.length-current));
if(bytesRead >= 0) current += bytesRead;
} while(bytesRead > -1);

在 Java 中复制流的规范方法,您应该在两端使用,如下:

int count;
byte[] buffer = new byte[8192]; // or whatever you like
while ((count = in.read(buffer)) > 0)
{
out.write(buffer, 0, count);
}
out.close();
in.close();

关于java - 在 Java 中通过套接字发送文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9476108/

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