我目前正在开发一个客户端 - 服务器应用程序,我遇到了这个问题:我想创建一个不同的类实例,具体取决于连接的套接字发送的内容,但它只会创建第一个实例然后它会卡住。这是一段代码:
Socket clientSocket = null;
ServerSocket server = null;
String buff = null;
transfer tr = null;
colectieClienti clienti = new colectieClienti();
和
while (true) {
try {
clientSocket = server.accept();
buff = (new BufferedReader(new InputStreamReader(clientSocket.getInputStream()))).readLine();
if (buff.equals("client")) {
(colectieClienti.useri[colectieClienti.nrUseri++] = new clientThread(clientSocket, stmt)).start();
} else {
tr = new transfer(clientSocket);
tr.start();
}
} catch (IOException ex) {
System.out.println(ex);
}
}
我必须提到clientThread
是一个扩展Thread
并与GUI通信的类,transfer
是一个只从客户端向服务器发送一些文件的类。逻辑是这样的:在GUI中,用户连接到服务器,因此创建了clientThread
的新实例,之后,当用户按下按钮时,它会创建一个新的套接字(在客户端)并向服务器发送一条消息,例如“我想创建transfer
类的新实例,由buff
完成”并接收数据。但它只创建{{1实例然后它卡住了。任何人都可以帮助我吗?
LE:这是clientThread
clientThread
答案 0 :(得分:1)
这只是一个猜测,但你是从客户端发送一个行终止符吗? BufferedReader.readLine()读取,直到它获得\ n,\ r或\ r \ n,因此如果客户端没有写入,那么服务器将只等待。
答案 1 :(得分:0)
首先:avoid extending the thread class and opt out for implementing a runnable.
但它只创建了clientThread实例然后它就会卡住。任何人都可以帮助我吗?
然后告诉我们您在创建clientThread
时所执行的操作,向我们展示您在服务器上执行的操作(单独)是不足以让我们告诉您您的错误。