현재이 질문에 문제가 있습니다. 이 질문에 대한 , 내가 가지고 :소켓을 통한 데이터 압축 및 압축 해제
클라이언트 측 : 서버로 전송, 콘솔에서 각 입력 라인을 압축하고 서버에서
서버 측을 각 메시지를 압축 해제 : 클라이언트에서 데이터를 압축 해제, 변경 낮은 대문자로 된 대문자를 압축하여 클라이언트에게 다시 보냅니다.
내가 할 수있는 최선의 방법은 위의 모든 작업을 단 한 줄로 수행하는 것입니다.
클라이언트 측 :
/* SOCKET CONNECTING STUFF UP HERE */
/*PROBLEMS START AROUND HERE */
String line;
BufferedReader bis = new BufferedReader(new InputStreamReader(System.in));
DeflaterOutputStream compress = new DeflaterOutputStream(socket.getOutputStream(), true);
InflaterInputStream decompress = new InflaterInputStream(socket.getInputStream());
BufferedReader fromClient = new BufferedReader(new InputStreamReader(decompress));
line = bis.readLine();
line = line + "\n";
compress.write(line.getBytes(), 0, line.length());
compress.finish();
System.out.println("Message sent: " + line);
System.out.println("Message Returned : " +fromClient.readLine());
/* closing the streams here */
bis.close();
decompress.close();
compress.close();
fromClient.close();
socket.close();
}
}
서버 사이드 :
String line = "";
OutputStream outstream = new FileOutputStream("compessserver.txt");
InflaterInputStream decompress = new InflaterInputStream(clientsocket.getInputStream());
BufferedReader fromClient = new BufferedReader(new InputStreamReader(decompress));
DeflaterOutputStream compress = new DeflaterOutputStream(clientsocket.getOutputStream());
while ((line = fromClient.readLine()) != null) {
String upperLine = line.toUpperCase();
System.out.println("Message received and converted: " + upperLine);
System.out.println();
upperLine = upperLine + "\n";
byte[] input = upperLine.getBytes();
outstream.write(input);
outstream.write("\r\n".getBytes());
compress.write(input);
System.out.println("Message returned : " + upperLine);
compress.finish();
if (upperLine.equalsIgnoreCase("x")) {
break;
}
}
decompress.close();
compress.close();
fromClient.close();
outstream.close();
socket.close();
}
}
난 정말이 도움을 주시기 바랍니다해야합니다. 이 다중 입력을 대신 만들려고하면 전체 코드가 엉망이됩니다. 며칠 동안 이랬어.
편집 : 이것을 언급하는 것을 잊어 버려. 내가 할 일은 줄을 입력하고, 압축하고, 서버에 보내고, 서버가 압축을 풀고 대문자를 압축하고, 압축하여 클라이언트에게 보냅니다. 내가 경우,
내가 그것을 여러 줄두 번째 시도 클라이언트 측 작동하도록 다음 코드를 시도 프로그램을 종료합니다 "Q"와 같은 단일 문자에 넣어 때까지 그리고 나는 더 입력 라인에 가정 :
String line;
BufferedReader bis = new BufferedReader(new InputStreamReader(System.in));
DeflaterOutputStream compress = new DeflaterOutputStream(socket.getOutputStream(), true);
InflaterInputStream decompress = new InflaterInputStream(socket.getInputStream());
BufferedReader fromClient = new BufferedReader(new InputStreamReader(decompress));
line = bis.readLine();
while ((!line.equalsIgnoreCase("x"))) {
compress.write(line.getBytes(), 0, line.length());
System.out.println("Message sent: " + line);
System.out.println("Message returned:" +fromClient.readLine());
line = bis.readLine();
}
bis.close();
fromClient.close();
socket.close();
}
}
두 번째 시도의 서버 측 :
OutputStream outstream = new FileOutputStream("compessserver.txt");
InflaterInputStream decompress = new InflaterInputStream(clientsocket.getInputStream());
BufferedReader fromClient = new BufferedReader(new InputStreamReader(decompress));
DeflaterOutputStream compress = new DeflaterOutputStream(clientsocket.getOutputStream());
while ((line = fromClient.readLine()) != null) {
String upperLine = line.toUpperCase();
System.out.println("Message received and converted: " + upperLine);
System.out.println();
upperLine = upperLine + "\n";
byte[] input = upperLine.getBytes();
outstream.write(input);
outstream.write("\r\n".getBytes());
compress.write(input);
System.out.println("Message returned : " + upperLine);
if (upperLine.equalsIgnoreCase("x")) {
break;
}
}
decompress.close();
fromClient.close();
outstream.close();
socket.close();
}
}
무엇이 문제입니까? 너는 무엇을 기대하고 있니? 대신 무엇이 발생합니까? – cubrr
콘솔에 한 줄을 입력하면 작동하도록 할 수 있습니다. 내가 할 일은 줄을 입력하고, 압축하고, 서버에 보내고, 서버가 압축을 풀고 대문자를 압축하고, 압축하여 클라이언트에게 보냅니다. 그리고 나서 "Q"와 같은 한 글자를 넣을 때까지 더 많은 줄을 입력해야합니다. – BeyondDays
두 줄로 시도하면 어떻게됩니까? 그것은 당신이 뭔가를 입력하고 Enter 키를 누르면 요청이 실행되고 서버가 적절한 응답을 반환하면 클라이언트 프로그램이 종료됩니까? 프로그램에서 두 번째 줄을 물어야한다고 생각하는 코드 줄을 지적 할 수 있습니까? –