Socket byte Schleife beendet nicht

KingOfExceptions

Bekanntes Mitglied
Hey community,

ich hab ein kleines problem bei einer übertragung von bytes, die danach zu einer datei zusammengefügt werden sollen.

Das programm hängt jedoch ein einer schleife fest und ich kann den fehler leider nicht finden. Hier mal der relevante teil:

Java:
import java.io.*;
import java.net.*;

public class Server
{
    ServerSocket serversock;
    Socket       sock;
    InputStream  input;
    OutputStream output;    // ZUM DATEI MACHEN
                             
    public void doStreams() throws IOException
    {
        serversock = new ServerSocket(12345);
        
        System.out.println("Waiting...");
        
        sock = serversock.accept();
        System.out.println("Accepted connection : " + sock);
    }
    
    public void getEverything() throws IOException
    {
        
        input = sock.getInputStream();
        byte[] vec = new byte[9];
        
        int bytesRead = input.read(vec, 0, vec.length);
        int current = bytesRead;
        
        do
        {
            bytesRead = input.read(vec, current, (vec.length - current));
            
            if (bytesRead > 0)
                current = current + bytesRead;
        }
        while (bytesRead > -1);    ////WHILE FOR EVER !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
        
        BufferedWriter writer=new BufferedWriter(new FileWriter("Datei"));
        
        int[] vector=new int[vec.length];
        
        for(int x=0; x<vec.length; x++)
        {
            vector[x]=Integer.valueOf(vec[x]);
            writer.write(vector[x]);
        }
        
        writer.close();
        
    }

}

Es geht um die do/while schleife.. ;(
 
G

Gast2

Gast
-1 wird nur genau dann zurückgegeben wenn das Ende des Streams erreicht wurde. Die Gegenseite muss also entweder den Stream schließen oder du brichst nach ner bestimmten Zeitspanne ab.
 

KingOfExceptions

Bekanntes Mitglied
So es funktioniert auch alles soweit nun, jedoch klappt das nur mit .txt files.

Wieso ? :/

Java:
package SendFiles;

import java.io.*;
import java.net.*;

public class Server
{
    ServerSocket serversock;
    Socket       sock;
    InputStream  input;
                             
    public void doStreams() throws IOException
    {
        serversock = new ServerSocket(12345);
        
        System.out.println("Waiting...");
        
        sock = serversock.accept();
        System.out.println("Accepted connection : " + sock);
    }
    
    public void getEverything() throws IOException
    {
        
        input = sock.getInputStream();
        byte[] vec = new byte[21000];
        
        int bytesRead = input.read(vec, 0, vec.length);
        int current = bytesRead;
        int zaehler=0;
        
        do
        {
            bytesRead = input.read(vec, current, (vec.length - current));
            zaehler++;
            if (bytesRead >= 0)
                current = current + bytesRead;
            if(zaehler>23000)
                break;
        }
        while (bytesRead > -1);    ////WHILE FOR EVER !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
        
        BufferedWriter writer=new BufferedWriter(new FileWriter("Datei"));
        
        int[] vector=new int[vec.length];
        
        for(int x=0; x<vec.length; x++)
        {
            vector[x]=Integer.valueOf(vec[x]);
            writer.write(vector[x]);
        }
        System.out.println("FERTIG");
        sock.close();
        input.close();
        serversock.close();
        writer.close();
        
    }

}

Und was muss ich ändern, damit ich auch zb .jpg files versenden kann?
 
Zuletzt bearbeitet:

KingOfExceptions

Bekanntes Mitglied
und wieso öffnet sich mein filechooser zweimal? :(

so wird es aufgerufen:

Java:
if (new FileFenster().getFile() != null)
        {
            uploader.sendFile();
        }

Java:
import java.io.*;
import javax.swing.*;

public class FileFenster
{
    File file = null;
    
    public FileFenster()
    {
        JFileChooser fc = new JFileChooser();
        fc.setFileSelectionMode(JFileChooser.FILES_ONLY);
        System.out.println("0");
        fc.showDialog(fc, "Choose File");
        fc.cancelSelection();
        System.out.println("1");
        if (fc.getSelectedFile() != null)
            file = fc.getSelectedFile();
        else
            System.out.println("file is null");
        System.out.println("2");
    }
    
    public File getFile()
    {
        return file;
    }
    
}

BTW: wenn ich das
Code:
fc.showDialog(fc, "Choose File");
rausnehme, dann öffnet sich gar nichts mehr.
 
S

SlaterB

Gast
kommt die Ausgabe von
> System.out.println("0");
2x?
dann gibt es wohl wirklich zwei Aufrufe, wer ist denn der Aufrufer? poste mehr Code,
zufällig eine Art Listener, der doppelt registriert sein könnte?

mit new Error("Test").printStackTrace(); kannst du an der Stelle einen Stack der aufrufenden Methoden anschauen,
wahrscheinlich aber gleich

edit:
Java:
if (new FileFenster().getFile() != null)
        {
            uploader.sendFile();
        }
hier wird das File des 'new FileFenster()' nicht gemerkt, uploader.sendFile() kann das unmöglich erfahren,
wird dort nochmal ein FileFenster erstellt? das wäre das zweite
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
x46 Byte-Array per for-Schleife schicken Netzwerkprogrammierung 1
x46 byte[] über BufferedReader auslesen Netzwerkprogrammierung 18
D Socket Gute Idee?: File als byte[] per ObjectIOStream übertragen Netzwerkprogrammierung 3
M TCP Verbindung Byte-weise lesen? Netzwerkprogrammierung 5
C Byte Stream dekodieren Netzwerkprogrammierung 7
W Socket Byte Array senden Netzwerkprogrammierung 2
M Byte Array kommt nicht an Netzwerkprogrammierung 0
N Paket-Analysieren Byte-Streams Netzwerkprogrammierung 12
K Byte für Byte aus InputStream lesen Netzwerkprogrammierung 5
B Socket Byte-array Komprimieren Netzwerkprogrammierung 3
J Probleme bei RSA mit byte[] bei Versand über RMI Netzwerkprogrammierung 2
N String als byte Array über Socket versenden Netzwerkprogrammierung 8
T Outputstream Byte-Array senden Netzwerkprogrammierung 2
J byte[] auf Stream schreiben Netzwerkprogrammierung 2
Q NullPointExeption beim Versuch byte[] zu senden/writen Netzwerkprogrammierung 3
E RTP Packet lesen - Byte Problem 0xFFFFFF80 statt 0x80 Netzwerkprogrammierung 7
V Zuweisen einer InetAddress mit einem byte Netzwerkprogrammierung 5
D Byte-Zähler des Netzwerkinterface auslesen Netzwerkprogrammierung 2
T Kommunikation auf Byte-Ebene zw. C und Java via Socket Netzwerkprogrammierung 12
B HEX String zu einem Byte Array ? *verzweiflung* :( Netzwerkprogrammierung 16
H Byte-Codierung bei Socket-Verbindung ändern Netzwerkprogrammierung 8
8 Socket Streams nur mit Byte? Netzwerkprogrammierung 2
G binärwert aus 2 byte auslesen Netzwerkprogrammierung 7
O Ip-String in byte[]-Array umwandeln? Netzwerkprogrammierung 3
D Daten per Server- Client nur als byte verschicken? Netzwerkprogrammierung 3
O JAVA hängt bei Dateikopie über LAN ein Byte an!!! ARGH Netzwerkprogrammierung 3
D Strings per Schleife zum Client senden Netzwerkprogrammierung 4
M while-Schleife funktioniert nicht bei Nachrichtempfang von Server Netzwerkprogrammierung 3
S Socket Thread in Schleife Netzwerkprogrammierung 4
F Chat Programm. Verständnisfrage while-Schleife Netzwerkprogrammierung 7
J while-Schleife / Abbruchbed. beim Einlesen eines Streams Netzwerkprogrammierung 4
Y server mit endlosse schleife beenden Netzwerkprogrammierung 6
T multithreaded multiport socketListener beendet TCP-Port-Listening Netzwerkprogrammierung 16
TheJavaKid ServerSocket beendet mit PuTTy Netzwerkprogrammierung 9
B Server-Programm wird durch "read" beendet Netzwerkprogrammierung 8
L RMI Programm beendet ohne Fehler sofort nach Start (Windows 2000) Netzwerkprogrammierung 7
& RMI Server beendet sich selbst Netzwerkprogrammierung 6

Ähnliche Java Themen

Neue Themen


Oben