【发布时间】:2015-03-02 22:23:22
【问题描述】:
我有以下代码用于 java 回显服务器,它侦听传入请求并回复发送的文本。
public class EchoServer {
int port;
ServerSocket server;
Socket client;
BufferedWriter bw;
BufferedReader br;
EchoServer() throws IOException{
int port = 1234;
while(true){
server = new ServerSocket(port);
client = server.accept();
bw = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
br = new BufferedReader(new InputStreamReader(client.getInputStream()));
bw.write(br.readLine());
bw.newLine();
bw.flush();
bw.close();
br.close();
client.close();
server.close();
}
}
public static void main(String[] args)throws IOException{
new EchoServer();
}
}
但我认为这是低效的,因为每个对象都会在循环中重新创建。如果我将循环修改为以下
while(true){
server = new ServerSocket(port);
client = server.accept();
bw = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
br = new BufferedReader(new InputStreamReader(client.getInputStream()));
bw.write(br.readLine());
bw.newLine();
bw.flush();
}
bw.close();
br.close();
client.close();
server.close();
我可以处理许多请求,但只能来自客户端。 我该怎么做才能获得以下行为:
- 处理无限量的请求
- 按顺序处理每个请求,一次只处理一个请求
- 无需不必要地创建对象或关闭流/套接字
- 没有线程
甚至可以在没有线程的情况下实现此行为,因为我不希望事情变得不必要地复杂。如果不可能,我怎么能用线程来实现呢?
提前致谢
【问题讨论】:
标签: java multithreading sockets loops