H
Hans Guck In Die Luft
Gast
Hallo,
ich habe einen Server und einen Client programmiert, die sich eine Datei zuschicken sollen. Wenn ich kleine Dateien benutze funktioniert das ganze auch. Bei größeren Dateien klappt es allerdings nicht. Ich glaube, dass das daran liegt, dass der letzte Buffer, der verschickt wird nicht, nicht vollständig gefüllt ist. Wie kann ich es hinbekommen, dass der letzte Buffer nur so groß ist, wie er auch sein muss? Bin für jede Antwort dankbar. Hier Quellcode von Server und Client...
SERVER:
CLIENT:
ich habe einen Server und einen Client programmiert, die sich eine Datei zuschicken sollen. Wenn ich kleine Dateien benutze funktioniert das ganze auch. Bei größeren Dateien klappt es allerdings nicht. Ich glaube, dass das daran liegt, dass der letzte Buffer, der verschickt wird nicht, nicht vollständig gefüllt ist. Wie kann ich es hinbekommen, dass der letzte Buffer nur so groß ist, wie er auch sein muss? Bin für jede Antwort dankbar. Hier Quellcode von Server und Client...
SERVER:
Code:
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.io.*;
public class FileTransferServer {
DataInputStream dis = null;
int b = 0;
byte[] schreib = new byte[1024];
String text = "";
DataOutputStream textstream;
private final ServerSocket server;
public FileTransferServer( int port ) throws IOException
{
server = new ServerSocket( port );
//server.setSoTimeout(60000); //60 Sekunden
}
private void startServing()
{
while ( true )
{
Socket client = null;
try
{
client = server.accept();
handleConnection ( client );
}
catch ( IOException e ) {
e.printStackTrace();
}
finally {
if ( client != null )
try { client.close(); } catch ( IOException e ) { e.printStackTrace(); }
}
}
}
private void handleConnection( Socket client ) throws IOException
{
OutputStream out = client.getOutputStream();
try
{
b = 0;
File f = new File("C:/datei.exe");
FileInputStream fis = new FileInputStream(f);
BufferedInputStream bis = new BufferedInputStream(fis);
dis = new DataInputStream(bis);
while ( b != -1 )
{
b = dis.read(schreib);
out.write(schreib);
out.flush();
}
}
catch (IOException e)
{
System.out.println("IO Excpetion: " + e.getMessage());
}
finally
{
if (dis != null)
{
try
{
dis.close();
}
catch (IOException ioe)
{
}
}
}
}
public static void main(String[] args) throws IOException {
FileTransferServer server = new FileTransferServer( 3141 );
server.startServing();
}
}
CLIENT:
Code:
import java.net.*;
import java.io.*;
class Client
{
public static void main( String[] args )
{
int b=0;
File nf = new File("D:/datei.exe");
DataOutputStream dos;
Socket server = null;
byte[] les = new byte[1024];
try
{
InetAddress adresse = InetAddress.getByName("localhost");
server = new Socket(adresse , 3141 );
InputStream in = server.getInputStream();
FileOutputStream fos = new FileOutputStream(nf);
BufferedOutputStream bos = new BufferedOutputStream(fos);
dos = new DataOutputStream(bos);
while ( b != -1 ) {
b = in.read(les);
dos.write(les);
dos.flush();
}
}
catch ( UnknownHostException e ) {
e.printStackTrace();
}
catch ( IOException e ) {
e.printStackTrace();
}
finally
{
if ( server != null )
try { server.close(); } catch ( IOException e ) { e.printStackTrace(); }
}
}
}