Java - Senden eines Strings bzw. des Absatzes über TCP
Ich bin neu in Java, und ich bin zu lernen, wie zum senden von Nachrichten über die Buchse () - Klasse.
Ich versuche zu wickeln mein Gehirn um, wie Zeichenketten gesendet und empfangen werden zwischen 2 einfache chat-Programme. Ich habe festgestellt, viele Beispiele online, die für TCP - /UDP-chat-Client und chat-Server.
Aber ich bin immer noch verwirrt mit gepufferten Daten und strings.
In meinem code Hinzugefügt habe 3 Felder (Feld1, Feld2, Bereich), und einen submit-button mit einem event-listener.
Unten ist ein Teil des Codes, der zeigt, wie befestigte ich die Zuhörer und die Klasse instanziiert.
......more code above this
button.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
new SendRequest();
}
});
public class SendRequest{
SendRequest(){
try{
String dip = field1.getText(); //ip address
String port = field2.getText(); //port num
int pnum = Integer.parseInt(port);
String mess = area.getText(); //large text box
Socket skt = new Socket(dip, pnum);
/* kinda not sure about this part, with strings */
}
catch(IOException io){
System.out.println("error? " + io.getMessage());
}
}
}
Ich habe gesehen, so viele Beispiel online,, jetzt bin ich etwas verwirrt.
Nach der Instanziierung des new Socket(), was eine anständige Art und Weise zu senden, multi-line-text?
- Was unklar ist, über diesem zum Beispiel docs.oracle.com/javase/tutorial/networking/sockets/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
In der "irgendwie nicht sicher, Teil" erstellen Sie ein PrintWriter mit dem Ausgabestrom aus der Steckdose,
dann zum drucken der Nachricht rufen Sie den PrintWriter die print-Methode auf dem "Durcheinander" String aus dem text-Bereich.
Dieser legt die Nachricht string in die Ausgabe-stream-buffer ist aber nicht gesendet, bis Sie rufen Sie die PrintWriters flush-Methode.
Schließlich in der Nähe der PrintWriter.
Wird der text gesendet werden soll mehrzeilig als die Texteingabefelder string wird enthalten "\r\n" wenn Sie die EINGABETASTE gedrückt.
ZB.
Sobald der socket verbunden ist und Sie erhalten Ihre Ausgabe-stream (über
socket.getOutputStream()
), schreiben in der Buchse ist nicht bei allen anderen schreiben in beliebiger Ausgabe-stream, wie eine Datei. Sie sollten schreiben Sie Ihre multi-line-text in genau der gleichen Weise, würden Sie schreiben es in eine Datei.So senden Sie ein multi-line-text — wie es scheint der beste Weg zu gehen, wäre es um den Bau einer
ObjectOutputStream
auf der Oberseite der Buchse die output-stream, und verwenden Sie diese. Zum Beispiel:Und dann schreiben Sie Ihr Objekt (einen string, ein array von strings oder ein
List
oder whatnot):Solange die Klasse
mess
istSerializable
(und wennmess
ist eine Sammlung von Objekten, und die Objekte sind auchSerializable
), das funktioniert. Lesen Sie die Objekte aus dem anderen Ende durch die VerwendungObjectInputStream
undreadObject
.Es gibt mehrere Möglichkeiten, um Daten zu schreiben. Zum Beispiel, ich mag serialisieren einer Klasse und senden eine Instanz dieser Klasse mit ObjectOutputStream. Aber da Sie nur senden, einen string, ein BufferedWriter vielleicht einfacher zu handhaben.
Code:
Ist es nicht mehr verwirrend, als dass die "\\r \ \ n" ist es zur einfacheren Handhabung von der letzten Zeile auf der Empfängerseite.