Je suis en train d'écrire un tas de données sur une socket, cependant, après ce qui semble être écrit autour de 64k, le socket est fermé avec une erreur "Connection reset by peer". Je crois que ce qui se passe est que ce qui lit la socket (Android Media Player) est en train de mourir en essayant de lire plus de données que ce qui est disponible sur le socket. C'est une chanson qui est diffusée et quand la balise id3 est assez grande, elle échoue. Cependant, lorsque je supprime les informations id3 de la chanson, cela fonctionne très bien. Puisque je crois que le côté de lecture échoue quand il n'y a pas assez de données, je me demande s'il est possible d'écrire un tas de données au socket avant d'appeler socket.accept() pour accepter la connexion pour le lire . Ma pensée ici est que lorsque le lecteur multimédia se connecte à la socket, il y aura suffisamment de données pour qu'il puisse lire et donc ne pas tomber en panne. Alors pouvez-vous appeler write() avant d'accepter()?Fermeture de socket avec erreur
Voici quelques psudocode de mon code actuel:
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);
}
Merci! En ce moment j'utilise socket.accept() pour créer le client (comme vous pouvez le voir dans le pseudo-code ci-dessus). Puisque je ne veux pas appeler accept() à ce stade, quelle est la meilleure façon de créer un client et ensuite appeler accept() pour ouvrir la connexion? – Nick
@Nick accept() ne crée pas le client. Il * accepte * le client. Le client crée le client et se connecte. Appelez simplement accept() lorsque vous êtes prêt à le faire. – EJP