0
사용자가 파일을 업로드하고 다운로드 할 수있는 간단한 서버 클라이언트 프로그램을 만들려고합니다. 소켓 및 스트림 작동하도록 및 파일을 서버에 업로드 할 수 있습니다. 그러나 하나의 파일이 업로드 될 때마다 서버 측은 스트림을 읽고이를 서버 파일로 전달하는 루프에 걸린 것처럼 보입니다.Java에서 소켓을 통한 파일 전송이 while 루프를 벗어나지 않습니다.
서버 코드 :
InputStream in = clientSocket.getInputStream();
String filePath = "......."
+ op[1];
System.out.println(op[0] + ": " + filePath);
FileOutputStream out = new FileOutputStream(filePath);
byte[] bytes = new byte[16*1024];
int count;
while ((count = in.read(bytes)) > 0) {
out.write(bytes, 0, count);
}
클라이언트 코드 :
String filePath = "...."
+ path;
System.out.println("Attempting: " + filePath);
dos = new DataOutputStream(serverSocket.getOutputStream());
fis = new FileInputStream(filePath);
byte[] buffer = new byte[4096];
while (fis.read(buffer) > 0) {
dos.write(buffer);
}
dos.flush();
fis.close();
문제는 프로그램이 잠시 루프에 걸리면, 그래서 서버 다른 작업을 수행 할 수 있다는 것입니다. 오류 또는 기타 오류가 없습니다 ...
감사합니다. 프로그램에서 while 루프를 종료했습니다. 그러나 클라이언트와 서버 간의 소켓 연결도 닫힙니다. 3 개의 파일을 연속으로 업로드 할 수있는 프로그램을 갖고 싶습니다. 각 업로드 후에 소켓을 닫으면 다시 연결해야합니다. 이 문제를 해결할 방법이 있습니까? 아니면 각 요청에 대해 서버에 연결해야합니까? –
서버가 파일 경계를 인식 할 수 있도록하는 프로토콜을 정의하고자 할 수 있습니다. 예를 들어, 각 파일 앞에 파일 크기를 보내도록 스트림을 설정할 수 있습니다. 서버 읽기 루프는 이것을 고려해야합니다. "off the shelf"Java 구현을 사용하는 다양한 파일 전송 프로토콜이 존재하기 때문에이 학습을 수행한다고 가정합니다. –