大家。 希望你能帮我解决这个问题: 我有两个线程,其任务是处理来自客户端的连接。
这是我的代码
ServerSocket loginSocket = new ServerSocket(8000);
ServerSocket fileSocket = new ServerSocket(7000);
while (running) {
new LoginThread(loginSocket.accept(),loginInormation).start();
new LoaderThread(fileSocket.accept()).start();
}
当我尝试连接到loginSocket两次时,服务器将阻塞并停止工作,阻止客户端,但如果我删除它,则不会发生这种情况:
new LoginThread(loginSocket.accept(),loginInormation).start();
我没有收到任何错误消息,为什么会发生这种情况,我该如何解决?
答案 0 :(得分:0)
accept()
方法是一种阻止方法,这意味着在与loginSocket()
建立连接之前,您的程序不会继续。
当您创建LoginThread
时,程序会等待连接以设置对象的第一个参数,并且在建立连接之前不会继续执行。
答案 1 :(得分:0)
行new LoginThread(loginSocket.accept(),loginInormation).start();
包含方法调用loginSocket.accept()
,它将在创建此线程之前调用。此方法调用将阻塞,直到客户端登录。(此外,第二个线程将被fileSocket.accept()
阻止)。
至于解决方案,我会将accept()
调用移到每个线程内部。您需要将套接字传递给线程,以便它们执行此操作。
答案 2 :(得分:0)
在不同的线程中启动fileSocket和登录套接字
INDEX VAL
0 1 23.0
1 250001 23.0
2 500001 23.0
3 750001 18.0
4 1000001 0.0