Avatar billede backupmand Nybegynder
20. februar 2002 - 23:07 Der er 3 kommentarer og
1 løsning

Overførsel af bytes vha Datagram

Jeg har en fil test.txt, som jeg
forsøger at overføre via udp (datagram).

På serversiden specificerer jeg en
InetAddress, DatagramSocket og en
DatagramPacket, der kan modtage vha receive.
Så kan jeg få modtageradressen.

På clientsiden det samme, bare send
istedet for receive.Jeg bruger localhost

Jeg specificerer endnu en DatagramPacket
til at sende et datagram til client,

min kode på serversiden ser nogenlunde således ud:

public void put_file()
    {
    try
    {
    DatagramSocket dSocket=new DatagramSocket(251);         
    System.out.println("Waiting for client requests");   
   
    while(true)
      {
        System.out.println("Client contacted me");
        System.out.println("receiving client request");
        inPacket=new DatagramPacket(buffer, buffer.length);
        dSocket.receive(inPacket);       
       
        addr=inPacket.getAddress();  // addr for reply packet
        inFile=new BufferedReader(new FileReader("test.txt"));
        buffersize=inFile.read();
        System.out.println("handling request");
       
        outPacket=new DatagramPacket(buffer,buffer.length,addr,250);   
        System.out.println("sending packet to client");
        dSocket.send(outPacket);
      }
     
     
      }
    catch (Exception e)
    { System.err.println("Closing DatagramSocket");
      if (dSocket!=null)
        dSocket.close();
    }     
    }
   
     
jeg kan ikke se fejlen helt

Hjælp?

på klientsiden:

public void get_file()
    {
    try {       
      FileOutputStream fos=new FileOutputStream("testen.txt");   
      // Create datagram socket
      DatagramSocket dSocket=new DatagramSocket(250);
      // Get inet addr of server
      InetAddress addr=InetAddress.getByName(myHost);
      outPacket=new DatagramPacket(buffer, buffer.length, addr, 251);
      System.out.println("sending outpacket on datagram socket");
      dSocket.send(outPacket);
      System.out.println("creating inpacket");           
      inPacket = new DatagramPacket(buffer, buffer.length);
      System.out.println("receiving inpacket on datagramsocket");           
      dSocket.receive(inPacket);
      buffer = inPacket.getData();
      fos.write(buffer, 0, buffer.length);
      System.out.println("writing file to disk");
      fos.close();     
    }
   
    catch(Exception e)
    { System.err.println(e); }
   
   
    }
Avatar billede disky Nybegynder
20. februar 2002 - 23:12 #1
din .read() indlæser kun 1 karakter !

brug

public int read(char[] cbuf,
                int off,
                int len)
        throws IOException

istedet som læser pakken ind i en buffer hvis størrelse du bestemmer.
Avatar billede backupmand Nybegynder
20. februar 2002 - 23:14 #2
ok men kan der ikke opstå problemer ved at indlæse det i et char array?
Er det meningen at jeg skal definere et array af chars i stedet for et
af bytes?
bare en tanke
Avatar billede disky Nybegynder
20. februar 2002 - 23:52 #3
så brug en ByteArrayInputStream istedet :)
Avatar billede backupmand Nybegynder
21. februar 2002 - 23:51 #4
Kunne min struktur se nogenlunde således ud,
eller hvad glipper jeg?

inFile = new BufferedReader(new FileReader("LS.mp3"));
          buffer=inFile.getBytes();
          ByteArrayOutputStream baos=new ByteArrayOutputStream(buffer.length);
          baos.write(buffer,0,buffer.length);
          outPacket=new DatagramPacket(buffer,buffer.length,addr,250);   
          System.out.println("sending packet to client");
          dSocket.send(outPacket);

Umiddelbart tror jeg selv der er "dobbeltkonfekt" et eller andet sted.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester