2009-11-18 3 views
2

Salut tout le monde, j'ai un peu de problème avec UDP et Datagrams. Je suis supposé faire un serveur qui recevra une demande du client pour envoyer un fichier dans le même répertoire. Le serveur UDP obtiendra alors ce fichier (une vidéo), le placera dans un datagramme et l'enverra. Je pense que je sais comment le faire, mais je ne peux pas mettre le fichier dans le datagramme. Je le mets sous forme binaire, gardez cela à l'esprit.Utilisez les datagrammes java pour envoyer de la vidéo/audio du client au serveur?

Voici mon code à ce jour: modifier: Ceci est le serveur en passant, et je continue à avoir des problèmes avec BufferedInputReader et OutputReader, donc gardez cela à l'esprit :)

Scanner inFromUser = new Scanner(System.in); 
    int port = 12345; 
    DatagramSocket server = new DatagramSocket(port); 
    // Read name of file supplied by client (must be a line of text): 
    Scanner in = new Scanner(new DataInputStream(server.getInputStream())); 
    String filename = in.nextLine(); 
    DatagramSocket request = server.accept(); 


    // Create buffer, then we're ready to go: 
    // Puts file into binary form 
     BufferedInputStream inbinary = 
       new BufferedInputStream(new FileInputStream("poop.txt")); 
    // Outputs the binary form 
     BufferedOutputStream outbinary = 
       new BufferedOutputStream(request.getOutputStream()); 

    int numbytes; 
    int countblocks = 0; 
    int countbytes = 0; 
    byte[] buf = new byte[1024]; 
    DatagramPacket packet = new DatagramPacket(buf, buf.length, port); 
    server.receive(packet); 

    while ((numbytes = inbinary.read(buf,0,1024)) >= 0) 
    { 
    // receive packet from client, telling it to send the video file 
    server.receive(packet); 
    InetAddress address = packet.getAddress(); 
    packet = new DatagramPacket(buf, buf.length, address, port); 
    server.send(packet); 
    countblocks++;   // keep statistics on file size 
    countbytes += numbytes; 
    outbinary.write(buf,0,numbytes); // write buffer to socket 
    } 
     outbinary.flush(); // FLUSH THE BUFFER 
     server.close(); // done with the socket 
     System.out.println(countblocks + " were read; " + countbytes + " bytes"); 
    } 
    } 

Répondre

Questions connexes