DataInputStream.readInt(Unknown Source)

Status
Nicht offen für weitere Antworten.

DEG1935

Mitglied
Hallo Zusammen,

ich habe ein Problem mit DataInputStream. Ich würde gerne einen Telegrammverkehr zwischen Client und Server realisieren. Gefunden habe ich dafür die Klasse Data(Input/Output)Stream.

Sendercode:
Code:
Socket sock = new Socket(args[0], 1055);
InputStream in = sock.getInputStream();
OutputStream out = sock.getOutputStream();
sock.setSoTimeout(3000);
int telNr=1;
int laenge=2;

DataOutputStream dos = new DataOutputStream(out);
try {
    dos.write(telNr);
    System.out.println("Telegrammnummer="+telNr);
    dos.write(laenge);
} catch (IOException e) {
    e.printStackTrace();
}

Empfängercode:
Code:
ServerSocket srv = new ServerSocket(1055);
while (true) {
    Socket client = srv.accept();
    try {
        InputStream in = client.getInputStream();
        DataInputStream dis = new DataInputStream(in);
        int telNr = dis.readInt();
        int laenge = dis.readInt();
        System.out.println("Telegrammnummer=" + telNr 
                                    + " / Laenge=" + laenge);
        client.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}


dis.readInt() verursacht bei Ausführung eine Fehlermeldung: Unknown Source.

Könnt ihr mir einen Hinweis geben, was ich falsch mache, bzw. wo mein Denkfehler liegt?
 
S

SlaterB

Gast
mit
dos.write(telNr);
schreibst du nur ein Byte,
während
dis.readInt();
einen int, also 4 Bytes liest,

da nur 2 Bytes maximal drin sind, geht das nicht gut,

--------

Code:
public class Test
{

    public static void main(String[] args)
        throws Exception
    {
        Runnable r = new Runnable()
            {
                public void run()
                {
                    try
                    {
                        ServerSocket srv = new ServerSocket(1055);
                        while (true)
                        {
                            Socket client = srv.accept();

                            InputStream in = client.getInputStream();
                            DataInputStream dis = new DataInputStream(in);
                            int telNr = dis.readInt();
                            int laenge = dis.readInt();
                            System.out.println("Telegrammnummer=" + telNr + " / Laenge=" + laenge);
                            client.close();
                        }
                    }
                    catch (IOException e)
                    {
                        e.printStackTrace();
                    }
                }
            };
        new Thread(r).start();

        Thread.sleep(300);
        Socket sock = new Socket("localhost", 1055);
        InputStream in = sock.getInputStream();
        OutputStream out = sock.getOutputStream();
        sock.setSoTimeout(3000);
        int telNr = 1;
        int laenge = 2;

        DataOutputStream dos = new DataOutputStream(out);
        dos.writeInt(telNr);
        System.out.println("Telegrammnummer=" + telNr);
        dos.writeInt(laenge);
        dos.flush();
        dos.close();
    }

}
 

DEG1935

Mitglied
Super, danke! Ich habe vor lauter Bäumen den Wald nicht gesehen! Natürlich wollte ich nicht die Methode write benutzen, sondern writeInt(int)! Kaum macht man es richtig schon funktioniert es! Danke!
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben