2015-01-02 4 views
0

소켓을 통해 파일을 보내는 클라이언트/서버 프로그램을 작성하고 있습니다. 나는 서버 코드에서 파일 객체를 만들지 만, 클라이언트가 보내는 파일은 사용자가 정의한대로 파일을 무엇으로 부를지 모른다. 참고 : 더 큰 파일을 수신하고 싶습니다. .mp3 파일 등 서버 코드 :서버에 파일의 파일 이름을 가져 오는 중

try{ 
     ServerSocket servsock = new ServerSocket(123456); 
     File myFile = new File(/* I dont know how to get the file name here*/); 
     while (true) { 
      Socket sock = servsock.accept(); 
      System.out.println("Connection accepted, ip - port - "); 
      byte[] mybytearray = new byte[(int) myFile.length()]; 
      BufferedInputStream bis = new BufferedInputStream(new FileInputStream(myFile)); 
      bis.read(mybytearray, 0, mybytearray.length); 
      OutputStream os = sock.getOutputStream(); 
      os.write(mybytearray, 0, mybytearray.length); 
      os.flush(); 
      sock.close(); 
      bis.close(); 
      servsock.close(); 
     } 
    }catch(IOException e){ 
     System.out.println("Error"); 
    } 
+0

클라이언트는이 바이트 배치를 호출하는 방법을 서버에 알려야합니다 ... – laune

+0

@laune 어떻게 할 수 있습니까? – joyalrj22

+0

데이터를 보내기 전에 이름이 들어있는 일련의 문자를 보내고 존재하지 않는 파일에서 길이를 부를 수 없으므로 파일 크기도 보내십시오. – laune

답변

0

파일 이름을 유지하는 POJO를 만들고 바이트 클라이언트 측

의 파일 이름과 데이터

ClientCode

FileObject fileObject = new FileObject(); 
    //set the fileName here 
    fileObject.setFileName(fileName); 

    File file = new File(filePath); 
    if (file.isFile()) { 
      //set data here 
      fileObject.setFileData(fileBytes); 
    } 
    //Now writing the FileObject object to socket 

    outputStream.writeObject(fileObject); 
을 설정

public class FileObject { 
private String fileName; 
private byte[] fileData; 
    //getter/setters 
} 

ServerCode

//Cast the received input stream to get data and file name 
fileObject = (FileObject) inputStream.readObject(); 
관련 문제