我是socket编程新手并尝试编写一个简单的cmd线路聊天应用程序。 现在我使用下面的代码接受连接,然后为它创建一个新线程,但是没有创建新线程,并且不再支持一个客户端(通常在不使用线程时),
public class chatserver extends Thread{
public static Socket client;
public static void main(String a[]) throws Exception{
ServerSocket srv = new ServerSocket(4444);
if((client = srv.accept())!=null){
new newthread(client);
}
}
}
class newthread extends Thread{
private Socket client;
public newthread(Socket client){
super("chatchild");
this.client = client;
start();
}
为什么不创建线程?我在“oracle.com”中提到了一些示例,其中一个包含相同的代码但是我无法弄清楚将要发生的确切序列以及何时??? exaple代码接受连接并创建线程::
while (listening)
new KKMultiServerThread(serverSocket.accept()).start();
现在在这里听取bool var sat为true但在代码中的任何地方都不会设置为false.???这有效吗?
答案 0 :(得分:2)
您必须不断调用 accept()来创建其他线程:
public static void main(String a[]) throws Exception{
ServerSocket srv = new ServerSocket(4444);
while (listening) {
new newthread(srv.accept());
}
}
如果要停止服务器, listen 变量应设置为false。
答案 1 :(得分:2)
你的跑步方法在哪里?如果没有Thread或Runnable中的run方法,我认为你的线程不会做任何事情。
答案 2 :(得分:0)
最后我已经解决了问题,事情是socket.accept()方法在第一次客户端联系后没有保持活动状态... run方法没有错,它作为socket.accept()方法的属性...