2009-09-10 4 views
2

Я пытаюсь передать видео на сервер с другого компьютера с помощью Java и для начала, я просто пытаюсь передать файл с использованием подключения сокетов и байтового потока. Однако вещи не появляются одинаково. Если я переношу файл таким образом, файл 3 МБ на моем компьютере заканчивается 5 МБ на сервере. Я пытаюсь сделать это с видео-файлом, и полученный файл фактически «играет», когда я загружаю его и имеет правильную длину, но изображения нет. Код ниже:Потоковое видео на сервер

Client (растяжка):

public static void main(String[] args){ 
    Socket sock = null; 

    try{ 
     System.out.println("Connecting..."); 
     sock = new Socket("server.com", 8080); 
     InputStream is = new FileInputStream(new File("Bear.wmv")); 
     byte[] bytes = new byte[1024]; 

     OutputStream stream = sock.getOutputStream(); 

     int count = is.read(bytes, 0, 1024); 
     while (count != -1){ 
      stream.write(bytes, 0, 1024); 
      count = is.read(bytes, 0, 1024); 
     } 

     is.close(); 
     stream.close(); 
     sock.close(); 

    }catch (Exception e){ 
     e.printStackTrace(); 
    } 
} 

Сервер (приемник):

public static void main(String[] args){ 
    ServerSocket sock = null; 
    try { 
     sock = new ServerSocket(8080); 
    } catch (IOException e) { 
     System.out.println("Could not instantiate socket:"); 
     e.printStackTrace(); 
     return; 
    } 

    Socket clientSock = null; 
    while(true){ 

     try{ 

      System.out.println("Waiting for connection..."); 
      clientSock = sock.accept(); 
      final Socket fin = clientSock; 
      System.out.println("Connection accepted"); 
      System.out.println("Spawning thread..."); 
      Thread trd = new Thread(new Runnable(){ 
       public void run(){ 
        try { 
         try { 
          Thread.sleep(5000); 
         } catch (InterruptedException e) { 
          e.printStackTrace(); 
         } 

         System.out.println("Receiving video..."); 
         File video = new File("test.wmv"); 
         FileOutputStream fos = new FileOutputStream(video); 
         byte[] data = new byte[1024]; 
         int count = fin.getInputStream().read(data, 0, 1024); 
         while (count != -1){ 
          fos.write(data, 0, 1024); 
          count = fin.getInputStream().read(data, 0, 1024); 
         } 
         fos.close(); 
         fin.close(); 
         System.out.println("Done receiving"); 
        } catch (IOException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        }} 
      }); 
      trd.start(); 

     }catch(IOException e){ 
      System.out.println("Could not accept"); 
      e.printStackTrace(); 
     } 


    } 



} 

Любые мысли? Заранее спасибо!

Chris

+0

Спасибо, это была отличная помощь в начале работы. Теперь просто пытаюсь выработать thow to stream, например. отправлять данные, а затем воспроизводить в то же время – LmC

ответ

4

Так что я выяснил проблему.

я изменил сервер только запись "подсчета" байт

while (count != -1){ 
     fos.write(data, 0, count); 
     count = fin.getInputStream().read(data, 0, 1024); 
} 

И теперь он работает :)

Спасибо!