2016-07-31 8 views
0

SERVER (Empfangsdatei)senden MP3 und JPEG-Datei über Socket ordnungsgemäß über Sockel in java

 String ip=JOptionPane.showInputDialog(this,"Enter Port Number :"); 
     String folder=jTextField2.getText(); 
     try 
     { 
     ServerSocket sskt= new ServerSocket(Integer.parseInt(ip)); 
Socket skt= sskt.accept(); 
InputStream is= skt.getInputStream(); 



byte[] bytes= new byte[1024*16]; 

DataInputStream dis=new DataInputStream(skt.getInputStream()); 
     String ext=dis.readUTF(); 

    System.out.println("extension read"); 



String path=folder+"/file."+ext; 
JOptionPane.showMessageDialog(this, path); 
File f= new File(path); 
OutputStream output = new FileOutputStream(f); 
while(is.read(bytes)>0) 
{ 
    output.write(bytes); 
System.out.println("byte read"); 
} 
System.out.println("Done!!!"); 

} 
catch(Exception e) 
{ 
System.out.println(e); 
    } 

CLIENT (Datei senden)

 String ip=JOptionPane.showInputDialog(this,"enter server ip:"); 
     String port=JOptionPane.showInputDialog(this,"enter port number :"); 
     File file=new File(jTextField1.getText()); 
     String name=file.getName(); 
     String n= name.substring(name.lastIndexOf(".") + 1); 



     try { 
      Socket skt=new Socket(ip, Integer.parseInt(port)); 
      OutputStream os= skt.getOutputStream(); 
      DataOutputStream dos= new DataOutputStream(os); 
      dos.writeUTF(n); 
      os.flush(); 


      FileInputStream fis= new FileInputStream(file); 
      BufferedInputStream bis= new BufferedInputStream(fis); 
      byte[] mybytearray = new byte[(int) file.length()]; 
      bis.read(mybytearray, 0, mybytearray.length); 
      os.write(mybytearray, 0, mybytearray.length); 
      JOptionPane.showMessageDialog(this,"Done!!"); 
      os.close(); 
     } 

     catch (Exception ex) { 
      System.out.println(ex); 
     } 

ich bin der Lage, alle Formate der Datei bt MP3-Format zu übertragen und JPEG-Dateien werden nicht ordnungsgemäß geöffnet. Media-Player ist nicht in der Lage jede MP3-Datei bt Größe der Datei auf dem Server erstellt zu spielen ist das gleiche wie die von Client senden

jemand kann mir bitte helfen Sie mit diesem

Antwort

0

üblichen Problem: Ignorieren der zurückgegebenen Länge von read(). Ihre Kopie Schleifen sollten beide wie folgt aussehen:

while ((count = is.read(bytes)) > 0) 
{ 
    output.write(bytes, 0, count); 
} 

Sie brauchen nicht alle, dass Müll in den Client über einen korrekten Puffer zuordnet.

+0

Danke, mein Herr !!! Ich schätze Ihre Bemühungen –