# Strings über Sockets senden



## Gast (21. Okt 2005)

Hallo, ich habe eine XML-Datei, die ich von meinem Client zum Server transportieren will, 
um Sie dort zu verarbeiten. Der Server soll dann eine Rückantwort geben. Es ist für mich sehr wichtig,
dass das schnellstmöglich läuft, da daruf meine weiteren Entwicklungen beruhen.

Ausschnitt Client:

```
try 
{
    Socket server = new Socket("D100W825504", 5050);
    server.setSoTimeout(20000);    
    OutputStream inclient = server.getOutputStream();
    DataOutputStream output = new DataOutputStream(inclient);
    ObjectOutputStream o = new ObjectOutputStream(server.getOutputStream());
    output.writeUTF(Text);
    			
    server.close();
}     
catch (IOException e) 
{
    System.out.println("IO Error:" + e.getMessage());
}
```
"Text" ist ein String, in dem der Inhalt der XML steht.

Ausschnitt Server:


```
while (true) 
{
    try 
    {
        Socket server = Server.accept();
        InputStream inclient = server.getInputStream();
        BufferedInputStream input = new BufferedInputStream(inclient);
        OutputStream outclient = server.getOutputStream();
        DataOutputStream output = new DataOutputStream(outclient);
        Text = new String();
        Text = input.toString();
        System.out.println(Text);
        output.writeBytes("Antwort erhalten");
    }
    catch (IOException r) 
    {
        System.out.println("Fehler");
    }
}
```

Ich möchte, dass beim Server die XML ankommt und erst einmal testweise ausgegeben wird.
Bitte mit Codeänderung antworten bin totaler Anfänger und wenn ihr schreibt, ich soll doch lieber einen ObjectOutputStream verwenden, kann ich damit nicht viel anfangen.

Vielen Dank im voraus
Bastian


----------



## tconz (21. Okt 2005)

Hi,

da du nicht konkret beschrieben hast was nicht geht, hab ich nur gesehen, dass der Server wahrscheinlich nicht alles ausgibt. nimm mal folgende Schleife (Zeile 12) für deinem Server:


```
while(true)
            {
                String str = in.readLine();
                
                if(str.equals("</xml>"))
                {
                    break;
                }
                System.out.println("Echoing " + str);     
            }
```

Hoffe dass du das gemeint hast

Tobi
[/code]


----------



## Guest (21. Okt 2005)

ObjectOutputStream = new ObjectOutputStream(sock.getOutputStream);
Und siehe da, dann hättest du deinen ObjectOutputStream.

mit writeObject(Object obj) kannst du dann auch wunderbar Strings versenden.
Also wirklich schwer dürfte das dann jetzt nicht mehr sein.
Eventuell würde ich den buffern.
Habe bei mir schon probleme gehabt wo ich nicht gebuffert habe...
Wenn z.B: die Latenzzeit zu hoch ist und du schon ein neues Object schreiben willst, das dass alte dann im Stream überschreibt.

server.setSoTimeout(20000); 
Das verstehe ich aber bei dir irgendiwe nicht...
Das macht doch gar keinen Sinn oder doch?
Entschuldigung bin aber auch noch nicht so bewandert mit dem Thema.


----------



## Bleiglanz (21. Okt 2005)

Text = input.toString(); 

das geht so bestimmt nicht, input ist ein "Stream", den muss man auslesen

und: wenn du mit writeUTF was reinschreibst, kannst du beim Lesen nicht auf einmal einen Reader verwenden

die beiden Stream-Arten müssen "zusammenpassen"...


----------



## Gast_Autor (21. Okt 2005)

@ Gast *g

Ich bekomme jetzt einen Teil der Datei übertragen. Ein bisschen fehlt mal hier mal da.
Wie buffere ich denn einen ObjectOutputStream ?


----------



## Gast_Autor (21. Okt 2005)

Habe es geschafft, der String kommt komplett an !

Danke für die Hilfe.


----------

