gpt4 book ai didi

java - 套接字关闭错误

转载 作者:行者123 更新时间:2023-11-30 04:39:26 25 4
gpt4 key购买 nike

我正在向套接字写入一堆数据,但是,在写入大约 64k 的数据后,套接字关闭并出现错误“连接被对等方重置”。我相信正在发生的事情是,当尝试读取比套接字可用的数据更多的数据时,正在读取套接字(Android 媒体播放器)的东西正在消失。这是一首正在流式传输的歌曲,当 id3 标签相当大时,它会失败。但是,当我从歌曲中删除 id3 信息时,它工作正常。

因为我相信当没有足够的数据时读取端会失败,所以我想知道是否可以在调用 socket.accept() 接受连接以读取它之前将一堆数据写入套接字。我的想法是,当媒体播放器连接到套接字时,将有足够的数据供其读取,因此不会崩溃。那么你可以在 accept() 之前调用 write() 吗?

这是我当前代码的一些伪代码:

    ServerSocket socket = new ServerSocket(port, 0, InetAddress.getByAddress(new byte[] {127,0,0,1}));

socket.setSoTimeout(10000);
port = socket.getLocalPort();

Socket client = socket.accept();

...

while (isRunning && (readBytes = data.read(buff, 0, buff.length)) != -1) {

client.getOutputStream().write(buff, 0, readBytes);

}

最佳答案

这通常意味着你已经写入了一个已经被另一端关闭的连接。换句话说,应用程序协议(protocol)错误。 64k 可能只是代表您和对等方之间的缓冲量。

如果它指的是服务器,您关于在 accept() 之前写入套接字的问题就没有意义。但是,如果您指的是 客户端 写入套接字,那确实会发生。客户端可以在服务器调用 accept 之前连接、写入(达到可用缓冲的限制)和关闭。这是由于 TCP“积压”队列,TCP 堆栈由此异步完成连接并将它们排队,准备好被应用程序接受。

关于java - 套接字关闭错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6259538/

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