Я записываю кучу данных в сокет, однако после того, что, как кажется, написано около 64 Кб, сокет закрывается с ошибкой «Сброс соединения по пиру». Я полагаю, что происходит то, что чтение сокета (Android Media Player) умирает при попытке прочитать больше данных, чем доступно из сокета. Это песня, которая передается в потоковом режиме, и когда тег id3 довольно большой, он не работает. Однако, когда я удаляю информацию id3 из песни, она отлично работает.
Поскольку я считаю, что сторона чтения не работает, когда данных недостаточно, мне интересно, можно ли записать группу данных в сокет перед вызовом socket.accept (), чтобы принять соединение для его чтения. Я думаю здесь, что когда медиаплеер подключается к сокету, будет достаточно данных, чтобы он мог прочитать и, следовательно, не зависнуть. Так что вы можете вызвать write (), прежде чем accept ()?
Вот некоторый псевдокод моего текущего кода:
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);
}