gpt4 book ai didi

Java并通过socket发送文件

转载 作者:行者123 更新时间:2023-11-29 09:50:05 25 4
gpt4 key购买 nike

我编写了一个客户端-服务器应用程序,它将从客户端向服务器发送一个 .xml 文件。我在发送大数据时遇到问题。我注意到服务器最多可以获得 1460 个字节。当我发送超过 1460 字节的文件时,服务器只获得前 1460 字节,仅此而已。实际上我得到了未完成的文件。这是我的代码:

客户端发送:

public void sendToServer(File file) throws Exception
{
OutputStream output = sk.getOutputStream();

FileInputStream fileInputStream = new FileInputStream(file);
byte[] buffer = new byte[1024*1024];
int bytesRead = 0;

while((bytesRead = fileInputStream.read(buffer))>0)
{
output.write(buffer,0,bytesRead);
}

fileInputStream.close();
}

服务器获取:

public File getFile(String name) throws Exception
{
File file=null;

InputStream input = sk.getInputStream();

file = new File("C://protokolPliki/" + name);
FileOutputStream out = new FileOutputStream(file);

byte[] buffer = new byte[1024*1024];

int bytesReceived = 0;

while((bytesReceived = input.read(buffer))>0) {
out.write(buffer,0,bytesReceived);
System.out.println(bytesReceived);
break;
}

return file;
}

有人知道这段代码有什么问题吗?感谢您的帮助。

编辑:

没有任何帮助:(。我用谷歌搜索了一下,我认为它可能与 TCP MSS 连接,等于 1460 字节。

最佳答案

确保在流上调用 flush()


A passerby asks: isn't close() enough?

您已链接到 Writer 的文档和信息。在 close() 上方法状态..

Closes the stream, flushing it first. ..

所以你部分正确,OTOH,OP 显然使用了 OutputStreamclose() 的文档状态:

Closes this output stream and releases any system resources associated with this stream. The general contract of close is that it closes the output stream. A closed stream cannot perform output operations and cannot be reopened.

The close method of OutputStream does nothing.

(强调我的。)

总结一下。不,在普通 OutputStream 上调用 close() 不会有任何效果,并且可能会被编译器删除。

关于Java并通过socket发送文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8194763/

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