Hallo alle miteinander!
Mit nachfolgendem code versuche ich auf meiner homepage gallerien zu veröffentlichen.
Server und client funktionieren sowei auch ganz und der code ist meiner meinung nach vollkommen richtig nur taucht ab und zu total unregelmäßig ein Fehler auf. Wenn ich z.B.: 300 bilder hochlade sind 2 davon defekt es fehlen ein paar bytes lade ich die selben bilder ein paar minuten später hoch sind alle ok oder andere defekt. Ich weiß einfach nicht woran das liegen kann oder wo ich suchen soll da der fehler so willkürlich auftritt als wenn ein defekt in den Streamklassen liegt.
ReadString()
und FormatString(String mess)
sind methoden die ich verwende um mehrzeilige Strings zu versenden.
Server:
Client:
files ist ein araay von File objecten die übertragen werden sollen.
MFG
JavaJoe
Mit nachfolgendem code versuche ich auf meiner homepage gallerien zu veröffentlichen.
Server und client funktionieren sowei auch ganz und der code ist meiner meinung nach vollkommen richtig nur taucht ab und zu total unregelmäßig ein Fehler auf. Wenn ich z.B.: 300 bilder hochlade sind 2 davon defekt es fehlen ein paar bytes lade ich die selben bilder ein paar minuten später hoch sind alle ok oder andere defekt. Ich weiß einfach nicht woran das liegen kann oder wo ich suchen soll da der fehler so willkürlich auftritt als wenn ein defekt in den Streamklassen liegt.
ReadString()
und FormatString(String mess)
sind methoden die ich verwende um mehrzeilige Strings zu versenden.
Server:
Code:
int anzahl = Integer.valueOf(ReadString());
int count=0;
InputStream in=null;
FileOutputStream fo=null;
System.out.println("anzahl: "+anzahl);
BufferedInputStream input=null;
while(count<anzahl)
{
Socket cur=null;
String name="";
try
{
System.out.println("Verbindung erwartet");
cur = s.accept();
reader2 = new BufferedReader(new InputStreamReader(cur.getInputStream()));
name = ReadString2();
System.out.println("Name: "+name);
in = cur.getInputStream();
input = new BufferedInputStream(cur.getInputStream());
fo = new FileOutputStream(Name+gallerie+name);
}catch(Exception x2)
{
System.out.println("Fehler beim namen!"+x2);
}
int read=0;
byte[] buffer = new byte[1024];
long bytes=0;
try
{
while((read=input.read(buffer,0,1024))>0)
{
bytes = bytes+read;
System.out.println("Schreibe in Datei. read: "+read);
fo.write(buffer,0,read);
fo.flush();
}
input.close();
reader2.close();
fo.close();
in.close();
cur.close();
input=null;
reader2=null;
fo=null;
in=null;
cur=null;
}catch(Exception x3)
{
System.out.println(x3);
}
System.out.println("Datei empfangen: "+bytes+" bytes!\n\r");
count++;
System.out.println("Count: "+ count);
}
System.out.println("Alle dateien empfangen!");
Client:
files ist ein araay von File objecten die übertragen werden sollen.
Code:
for(int i=0;i<files.length;i++)
{
File curr = files[i];
Socket tmpsock=null;
token = new StringTokenizer(curr.getName(),".");
String ext ="";
while(token.hasMoreTokens())
{
ext= token.nextToken();
}
if((curr.isFile()&&curr.canRead())&(ext.equalsIgnoreCase("jpeg")||ext.equalsIgnoreCase("jpg")||ext.equalsIgnoreCase("JPG")))
{
BufferedOutputStream output=null;
count++;
lab.setText("Bild "+count+" von "+ficount);
try
{
System.out.println("Baue Verbindung auf");
tmpsock = new Socket("***",port);
writer2 = new BufferedWriter(new OutputStreamWriter(tmpsock.getOutputStream()));
output = new BufferedOutputStream(tmpsock.getOutputStream()) ;
System.out.println("Current file: "+curr.getName());
}catch(Exception ex5)
{
}
try
{
//System.out.println("Schreibe Namen: "+this.FormatString(curr.getName()+"\n"));
writer2.write(this.FormatString(curr.getName()+"\n"));
writer2.newLine();
writer2.flush();
BufferedImage image = ImageIO.read(files[i]);
String Name = curr.getName();
// System.out.println("Hoehe: "+image.getWidth());
// System.out.println("Breite: "+image.getHeight());
double maxw=400;
double maxh=400;
double faktor=1.0;
if(image.getWidth()>maxw&&image.getHeight()>maxh)
{
if(image.getWidth()>image.getHeight())
{
//System.out.println("Faktor = "+maxw+"/"+image.getWidth());
faktor =( maxw/image.getWidth() );
}else
{
faktor = maxh/image.getHeight();
}
}else
{
if(image.getWidth()>maxw)
{
faktor = maxw/image.getWidth();
}
if(image.getHeight()>maxh)
{
faktor = maxh/image.getHeight();
}
}
//System.out.println("Fakto: "+faktor);
double hoehe=100;
double breite=100;
hoehe = image.getHeight()*faktor;
breite = image.getWidth()*faktor;
System.out.println("Erstelle neues Bild. Hoehe: "+(int)hoehe+" Breite: "+(int)breite);
Image out = image.getScaledInstance((int)breite,(int)hoehe,image.SCALE_SMOOTH );
BufferedImage outImg = new BufferedImage((int)breite, (int)hoehe,
BufferedImage.TYPE_INT_RGB);
Graphics g = outImg.getGraphics();
g.drawImage(out, 0, 0, null);
g.dispose();
File tmpfile = new File(Name);
ImageIO.write(outImg,"jpeg",tmpfile);
fin = new FileInputStream(tmpfile);
byte[] buffer = new byte[1024];
long bytes=0;
while(fin.available()>0)
{
int read = fin.read(buffer);
output.write(buffer,0,read);
output.flush();
tmpsock.getOutputStream().flush();
System.out.println("Schreibe: "+read+" Bytes");
bytes=bytes+read;
}
prog.setValue(count);
System.out.println("Datei uebertragen: "+bytes+" Bytes!\n\r");
output.close();
tmpsock.getOutputStream().close();
writer2.close();
tmpsock.close();
fin.close();
output=null;
writer2=null;
tmpsock=null;
fin=null;
}catch(Exception x)
{
System.out.println(x);
}
}
}
MFG
JavaJoe