ist die Situation:Können Sie Bilder senden, ohne die anderen Daten durch dieselbe java.net.socket zu blockieren? Diese
Ich bin an einem Projekt arbeiten, wo ich in der Lage sein ein oder mehrere Bilder ab und senden an/vom Server sowie viele andere Arten von Daten dargestellt mit Text. Die Art und Weise, wie es gerade gemacht wird, ist durch Senden einer Nachricht mit dem Zeichen "einkommendes Bild der Größe x, die als y verwendet werden soll" (es ist natürlich nicht so formuliert), und dann rufe ich eine Methode auf, die das nächste x liest Bytes durch einen DataInputStream. Zuerst traf ich einige Probleme mit der Latenz, die Dinge zu vermasseln, aber ich ließ den Server einen neuen Thread spawnen, um die Nachricht "eingehendes Bild" zu senden, und dann auf ein Flag warten, das gesetzt wird, wenn der Client mit einem "Ich bin bereit" antwortet für das Bild "Nachricht. Es funktioniert jetzt, aber wenn etwas anderes, zum Beispiel eine Chat-Nachricht, gesendet wird, während das Bild übertragen wird, wird diese Nachricht für einen BufferedReader als rohe Bytes gelesen und als Teil des Bildes verwendet. Daher muss ich alle ausgehenden Daten blockieren (und sie zu einer Warteschlange hinzufügen), wenn ein Bild gesendet wird. Aber das scheint sehr falsch und ärgerlich, da Benutzer der Anwendung nicht in der Lage sein werden zu chatten, während sie ein großes Bild empfangen/hochladen.
Das ist, was ich brauche: Also muss ich entweder einen unabhängigen Kanal für die Verwendung von Rohdaten einrichten. Was, soweit ich das verstehen kann, ist, dass ich einen neuen Socket über einen neuen Port einrichten muss, der unnötig erscheint. Der andere Weg, den ich sehen könnte, um dies zu lösen, wäre es irgendwie jedes Paket mit einem "Dies ist Text/Rohdaten" Bit zu versehen, aber ich habe keine Idee wie man das mit Java macht? Können Sie Informationen zum Paket-Header hinzufügen, wenn Sie etwas in den Stream schreiben (das jedes Paket enthält, das diese Informationen enthält) und dann die Paketdaten am anderen Ende lesen und entsprechend handeln?
Wie Sie sehen können, habe ich nicht viel Erfahrung mit dem Networking, noch habe ich Java für eine lange Zeit verwendet. Dies ist auch mein erster Beitrag hier, also sei nett. Wenn etwas unklar war, bitte fragen Sie, und ich werde angeben. Alle Ideen sind willkommen! (Es gibt möglicherweise einen Standard Weg, dies zu tun?)
Vielen Dank!
Ok, vielen Dank :) Ich werde diese Frage für eine Weile beobachten, und wahrscheinlich für eine separate Datenverbindung gehen? * Nachschlagen, wie man mehrere Verbindungen am selben Port einrichtet * –
Sie öffnen nur die zweite Verbindung wie die erste. Server-Seite kann auf einem Server-Socket in einer Schleife akzeptieren. –
Ja, ich habe es zur Arbeit :) Danke nochmal. Ich werde immer noch etwas Zeit brauchen, um alles funktionieren zu lassen, aber ich kann sehen, wie ich es jetzt machen werde. –