【发布时间】:2013-06-05 12:14:02
【问题描述】:
我有一个名为 class1 的类,其中有以下代码:
public class class1 {
public static ServerSocket serverSocket;
public static void main(String args[]) {
try {
serverSocket = new ServerSocket(1234);
while (true) {
class2 t = new class2(serverSocket.accept());
t.start();
}
} catch (IOException ex) {
Logger.getLogger(LisenerServer.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
所以在第 1 课中,我为每个连接打开一个新线程。
我还有另一个名为 class2 的类,其中有以下代码:
public class class2 extends Thread {
private Socket socket;
public class2(Socket socket) {
try {
this.socket = socket;
in = new BufferedInputStream(socket.getInputStream());
out = new DataOutputStream(socket.getOutputStream());
} catch (IOException ex) {
Logger.getLogger(ListenerServerThread.class.getName()).log(Level.SEVERE, null, ex);
}
}
@Override
public void run() {
while (true) {
try {
// do something with in and out.
} catch (IOException ex) {
System.out.println(ex);
break;
}
}
}
}
我希望客户端(不是 java 程序)连接到我的套接字服务器并发送 sting 命令,并且我想知道客户端(我将通过在类 1 中打开的线程名称和/或 id 来识别客户端)是否是连接与否。
我可以创建另一个类,比如说第 3 类,我在其中打开一个线程来持续检查客户端是否已连接?可以的话,可以举个例子吗?
【问题讨论】:
-
为什么不使用 RMI?
-
stackoverflow.com/questions/2170520/… 等等。您基本上是在问“教我如何在 Java 中进行线程间通信”
-
@Makky 他为什么要首先使用 RMI,他将如何在非 Java 客户端使用它?
-
好吧,如果他要从非 Java 客户端使用它,那么现有的 solutino 本身将无法工作。
-
好的,我明白了。 Marko。你是对的。
标签: java multithreading sockets