Kürzlich habe ich einen Server gemacht, der die Eingaben mehrerer Clients verarbeiten soll. Ich habe es funktioniert und derzeit gibt es einen Thread pro Client-Socket für die Eingabe über ObjectInputStream in einer Schleife und der Hauptserver Thread versucht manchmal zu sehr gleichen Sockets über ObjectOutputStream gleichzeitig zu schreiben, aber es wird blockiert.Java ObjectStream Socket E/A
Die Sache ist, Server muss die ganze Zeit zuhören und ich habe keine Ahnung, wie man es auch in Socket schreiben lassen kann. Ich würde mich über jeden Hinweis freuen, den Sie geben können.
Reading:
while (running) {
GameMessage msg = readGameMessage();
handleGameMessage(msg);
}
private GameMessage readGameMessage() {
GameMessage msg = null;
try {
msg = (GameMessage) objectInputStream.readObject();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return msg;
}
auf einem anderen Thread schreiben:
private void writeGameMessage(GameMessage msg) {
try {
objectOutputStream.writeObject(msg);
} catch (IOException e) {
e.printStackTrace();
}
}
Die Sache ist, Leseschleife ist bereits auf einem separaten Thread. Und trotzdem wird OutputStream sill blockiert. Ich dachte, blockierende I/O blockiert einen Thread, nicht eine Steckdose? – dntf0llow
Ja, Sie haben Recht, blockieren I/O blockiert den Thread, so dass der OutputStream auch in einen neuen Thread auch einfügen muss –