【发布时间】:2014-03-09 13:13:10
【问题描述】:
我正在使用服务器套接字在主线程上接受客户端,当一个线程被接受时,客户端套接字被提供给一个处理程序,该处理程序在一个新线程中启动以处理通信。但是,在我开始运行我的服务器以访问客户端之前,它会连接到第二台服务器,它必须列出并能够响应并将它收到的消息传递给它的客户端。
希望这张图片能说明我的意思:
小服务器必须不断地监听来自大服务器的输入,并且能够输出响应。
//Default constructor
private smallServer(){}
//method to initialise and start the server
public static void StartServer(int port) throws IOException {
smallServer ss = new smallServer();
ss.bs= new bigServerClient(ss);
Thread nsc_Thread = new Thread(ss.bsc);
bsc_Thread.start();
//accepts clients and starts new thread for them
ss.ServerRun(port);
}
private void ServerRun(int port) throws IOException {
ServerSocket server = new ServerSocket(port);
server.setSoTimeout(50);
while (run) {
Socket client = null;
try {
client = server.accept();
} catch (SocketTimeoutException e) {
}
if (client != null) {
ClientHandler handler = new ClientHandler(client, this);
Thread handleThread = new Thread(handler);
handleThread.start();
}
}
if (!run) {
synchronized (ClientHandler.handlers) {
for (ClientHandler handler : ClientHandler.handlers) {
handler.terminateHandler();
}
}
System.exit(0);
}
}
public void processBigServerCommand(String toProcess) {
System.out.println("RESEAVED: " + toProcess);
}
大服务器客户端(在小服务器上)然后这样做:
public class bigServerClient implements Runnable {
private smalsServer ss;
private PrintWriter printer;
private BufferedReader reader;
private Socket socket;
public bigServerClient(smallServer _ss) throws IOException {
ss = _ss;
socket = new Socket("Localhost", 5000);
printer = new PrintWriter(socket.getOutputStream());
reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
printer.flush();
SendBigServerMessage("Starting String");
}
private void SendBigServerMessage(String toSend) {
printer.print(toSend);
printer.flush();
}
@Override
public void run() {
try {
while (ss.state()) {
String inputLine;
while ((inputLine = reader.readLine()) != null) {
ss.processBigServerCommand(inputLine);
System.out.println(inputLine);
}
}
} catch (IOException e) {
} finally {
try {
socket.close();
} catch (IOException ex) {
}
}
}
}
从以上内容,任何人都可以看出为什么大型服务器客户端在发送消息时没有响应大型服务器?我猜这与阻塞第二个线程的主线程有关,但我不确定......任何帮助将不胜感激。
【问题讨论】:
-
smallserver 的代码是什么?
-
哎呀!忘记了,我已经在上面添加了。 :)
标签: java multithreading sockets client java-server