У меня есть Java-программа, которую я запускаю на домашнем сервере.У меня также есть клиентская программа 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» на сервер, я получаю «polo».У меня также есть (char) 13
в качестве разделителя, чтобы программа знала, что сообщение окончено.
У кого-нибудь есть идеи о том, как уменьшить время для переводов?Я читал о таких вещах, как отключение алгоритма Нейгла.Это поможет?Возможно, розетки - это не тот путь, если я хочу чистой скорости.Может быть, другой язык или библиотека будут быстрее?