나는 홈 서버에서 실행되는 자바 프로그램을 가지고있다. 또한 서버에 메시지를 보내고 소켓을 사용하여 응답을받는 Java 클라이언트 프로그램이 있습니다.자바 소켓 통신 - 속도 향상
나는 그것을 성공적으로 구현했다. 그러나 조금 느려 보이고 가능한 한 빨리 얻으 려하고있다.
public class Server implements Runnable{
static ServerSocket socket1;
protected final static int port = 4701;
static Socket connection;
static StringBuffer process;
private String handleRequest(String req){
if(req.equals("marco")){
return "polo";
}else
return "null";
}
public void run(){
try {
socket1 = new ServerSocket(port);
int character;
while (true) {
connection = socket1.accept();
BufferedInputStream is = new BufferedInputStream(connection.getInputStream());
InputStreamReader isr = new InputStreamReader(is);
process = new StringBuffer();
while ((character = isr.read()) != 13) {
process.append((char) character);
}
String returnCode = handleRequest(process.toString()) + (char) 13;
BufferedOutputStream os = new BufferedOutputStream(connection.getOutputStream());
OutputStreamWriter osw = new OutputStreamWriter(os, "US-ASCII");
osw.write(returnCode);
osw.flush();
}
} catch (IOException e) {
System.out.println("error starting server " + e.getMessage());
}
try {
if(connection != null)
connection.close();
} catch (IOException e) {
}
클라이언트
String host = "xx.xx.xx.xxx";
int port = 4701;
StringBuffer instr = new StringBuffer();
try {
InetAddress address = InetAddress.getByName(host);
Socket connection = new Socket(address, port);
BufferedOutputStream bos = new BufferedOutputStream(connection.
getOutputStream());
OutputStreamWriter osw = new OutputStreamWriter(bos, "US-ASCII");
String process = "marco" + (char) 13;
osw.write(process);
osw.flush();
BufferedInputStream bis = new BufferedInputStream(connection.
getInputStream());
InputStreamReader isr = new InputStreamReader(bis, "US-ASCII");
int c;
while ((c = isr.read()) != 13)
instr.append((char) c);
connection.close();
}
catch (Exception e){}
if(instr.toString().equals("")){
//error
}
}
그래서 예를 들어, 내가 서버에 다양한 문자열을 보내드립니다 어떻게 서버를 결정하는
서버 : 여기
내 코드입니다 응답합니다. 예를 들어 코드에서 볼 수 있듯이 "marco"를 서버에 보내면 "폴로"가 반환됩니다. 메시지가 끝났음을 프로그램에 알리는 구분 기호로(char) 13
도 있습니다. 누구든지 전송 시간을 단축하는 방법에 대한 아이디어가 있습니까? 나는 독수리의 알고리즘을 비활성화하는 것과 같은 것에 대해 읽었습니다. 그게 도움이 되겠습니까? 아마도 소켓이 순수한 속도를 원한다면 갈 길은 아닙니다. 다른 언어 나 라이브러리가 더 빨라질 수 있습니까?
"조금 느린"이유는 무엇입니까? – Mat
가능한 한 빨리 처리 할 필요가있는 경우가 더 많습니다. –
예, 그게 핵심입니다. 어떻게 그 사실을 알 수 있습니까? – Mat