Client-server应用程序套接字问题

时间:2011-05-08 13:01:03

标签: java multithreading client-server

我目前正在开发一个客户端 - 服务器应用程序,我遇到了这个问题:我想创建一个不同的类实例,具体取决于连接的套接字发送的内容,但它只会创建第一个实例然后它会卡住。这是一段代码:

    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

2 个答案:

答案 0 :(得分:1)

这只是一个猜测,但你是从客户端发送一个行终止符吗? BufferedReader.readLine()读取,直到它获得\ n,\ r或\ r \ n,因此如果客户端没有写入,那么服务器将只等待。

答案 1 :(得分:0)

首先:avoid extending the thread class and opt out for implementing a runnable.

  

但它只创建了clientThread实例然后它就会卡住。任何人都可以帮助我吗?

然后告诉我们您在创建clientThread时所执行的操作,向我们展示您在服务器上执行的操作(单独)是不足以让我们告诉您您的错误。