# *.* Dateien versenden im Lan



## najjannaj (21. Jun 2005)

Hallo,
ich möchte einen Server und einen Client schreiben mit dem man Dateien verschicken kann. Für denn Anfang reicht mit vollkommen das der Client dem Server etwas schickt. Aber da kommt auch schon das Problem! Es funktioniert nicht.
Der Client bringt folgenden Fehler:

_Fehler :java.net.SocketException: The message is larger than the maximum supported by the underlying transport: Datagram send failed_



*Client:*


```
import java.io.FileInputStream;
import java.io.InputStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class Send {
	static String Host = "localhost";
	static int Port = 1234;

	public static void main(String[] args) {
		Send.send("test");
	}
	  public static void send(String data){
		    try{
		      DatagramPacket packet = null;
		      byte  buffer[] = new byte[0xffff];		      
		      InputStream fis = new FileInputStream("D:\\pad.exe");
		      
		      while(true){
		        InetAddress ip = InetAddress.getByName(Host);
		        
		        fis.read(buffer);
		        packet = new DatagramPacket(buffer, buffer.length, ip, Port);
		     
		        DatagramSocket toSocket = new DatagramSocket();
		        toSocket.send(packet);
		        
				toSocket.close();
				
		        Thread.sleep(500);
				
				break;
		      }
		    }
		    catch ( Exception e )
		    {
		      System.out.println("Fehler :" + e);
		    }
		  }
}
```


*Server:*

```
import java.io.FileOutputStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class Connection {
	static String antw=null;
	
	static public void Listen(){
	   try{	  
			  byte  buffer[] = new byte[0xffff];
			  
		      DatagramPacket packet;
		      DatagramSocket socket = new DatagramSocket(1234);
			  
		      FileOutputStream fos = new FileOutputStream("D:\\test.exe");      
		      
		      while (true)
		      {

		        packet = new DatagramPacket(buffer, buffer.length);
		        socket.receive(packet);

				int			len		= packet.getLength();
							buffer	= packet.getData();
				String		frage	= new String(buffer, 0, len);
				
				fos.write(buffer, 0, len);
				
		        System.out.println("Anfrage von " + packet.getAddress() +
		                            " am Port " + packet.getPort() + " empfangen: "
		                            + frage);
				
		        Thread.sleep(500);
		      }
		    }
		    catch ( Exception e )
		    {
		      System.out.println("Fehler: " + e);
		    }
	}
}
```

Weiß einer woran das liegt oder wie ich es anders machen kann? hab noch nicht soviel Ahnung daher wäre eine etwas genauere Beschreibung vllt angebracht! Und Ja ich habe die Foren suche schon genutzt, habe es aber leider nicht verstanden!

Mit freundlichen Grüßen
najjannaj


----------



## Bert Brenner (21. Jun 2005)

Ich würde so schon mal sagen das UDP nicht zweckmässig für diese Aufgabe ist.


----------



## najjannaj (21. Jun 2005)

Wie müss ich das ganze Sonst aufbauen??


----------



## Bert Brenner (21. Jun 2005)

Schau dir mal die Klassen Socket und ServerSocket an.


----------



## najjannaj (21. Jun 2005)

Problem gelöst:

*Server:*


```
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Server extends Thread{
    public Server (Socket s){
        socket = s;
    }
    public void run (){
    	try{
            System.out.print ("connection accepted [");
            System.out.print (socket.getInetAddress().getHostAddress());
            System.out.print ("]\n");

            OutputStream out = socket.getOutputStream(); 
            FileInputStream in = new FileInputStream("D:\\pad.exe"); 
            byte[] buffer = new byte[1024]; 
            int n; 
            
            while ((n = in.read(buffer)) != -1){
               out.write(buffer, 0, n); 
            }
            socket.close ();
        }
        catch (IOException e){
            System.err.println (e);
        }
    }
    public static void main (String [] args){
        try{
            ServerSocket serverSocket = new ServerSocket (2000);

            while (true){
                Server connection = new Server(serverSocket.accept());
                connection.start();
            }
        }
        catch (IOException e){
            System.err.println (e);
        }
    }
    protected Socket socket;
}
```


*Client:*


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

 public class Client{
	 static String server = "localhost";
	 static int port = 2000;
	 static String DstFilePath = "D:\\test.exe";
	  
	 
     public static void main (String [] args){
         try{
             Socket socket = new Socket (server, port);

             InputStream in = socket.getInputStream(); 
             OutputStream out = new FileOutputStream(DstFilePath); 
             byte[] buffer = new byte[1024];
             int n;
             while ((n = in.read(buffer)) != -1){
            	   out.write(buffer, 0, n);
             }
             socket.close ();
         }
         catch (UnknownHostException e){
             System.err.println (e);
         }
         catch (IOException e){
             System.err.println (e);
         }
     }
 }
```


Hab jetzt nur noch das Problem das ich denn Dateinamen gerne mit übertragen würde nur leider weiß ich nicht wie?!?!?! Hat einer eine Idee? Oder Verbesserungsvorschläge für denn Code?


----------



## meez (23. Jun 2005)

Wenn die Datei nicht gross ist, kannst du das ganze in ein Objekt packen...Dann kannst du auch den Dateinamen mitschicken...oder du nimmst ein L7 Protokoll, wie z.B. HTTP


----------

