Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 网络问题!(多线程客户端/服务器)_Java_Multithreading_Networking - Fatal编程技术网

Java 网络问题!(多线程客户端/服务器)

Java 网络问题!(多线程客户端/服务器),java,multithreading,networking,Java,Multithreading,Networking,这是我的主类,属于服务器应用程序!但令人惊讶的是,在不运行客户端应用程序的情况下,这些句子将被写在控制台上。你能告诉我为什么吗?谢谢 我的主要班级: public class Main { static Socket client = null; static ServerSocket server = null; // We can have 10 clients' connections static ClientThread t[] = new ClientThread[10]; p

这是我的主类,属于服务器应用程序!但令人惊讶的是,在不运行客户端应用程序的情况下,这些句子将被写在控制台上。你能告诉我为什么吗?谢谢

我的主要班级:

public class Main {

static Socket client = null;
static ServerSocket server = null;

// We can have 10 clients' connections
static ClientThread t[] = new ClientThread[10];

public static void main(String args[]) {
    System.out.println("Server is starting...");
    System.out.println("Server is listening...");
    try {
        server = new ServerSocket(5050);
        System.out.println("Client Connected...");


        while (true) {

            client = server.accept();
            for (int i = 0; i <= 9; i++) {
                if (t[i] == null) {
                    (t[i] = new ClientThread(client, t)).start();
                    break;
                }
            }
        }
    } catch (IOException e) {
        System.out.println(e);
    }
}
}

// This client thread opens the input and the output streams for a particular client,
// ask the client's name, informs all the clients currently connected to the
// server about the fact that a new client has joined the chat room,
// and as long as it receive data, echos that data back to all other clients.
// When the client leaves the chat room this thread informs also all the
// clients about that and terminates.

class ClientThread extends Thread {

DataInputStream is = null;
PrintStream os = null;
Socket clientSocket = null;
ClientThread t[];

public ClientThread(Socket clientSocket, ClientThread[] t) {
    this.clientSocket = clientSocket;
    this.t = t;
}

@Override
public void run() {
    String line;
    String name;
    try {
        is = new DataInputStream(clientSocket.getInputStream());
        os = new PrintStream(clientSocket.getOutputStream());
        os.println("Enter your name.");
        name = is.readLine();
        os.println("Hello " + name + " to our chat room.\nTo leave enter /quit in a new line");
        for (int i = 0; i <= 9; i++) {
            if (t[i] != null && t[i] != this) {
                t[i].os.println("*** A new user " + name + " entered the chat room !!! ***");
            }
        }
        while (true) {
            line = is.readLine();
            if (line.startsWith("/quit")) {
                break;
            }
            for (int i = 0; i <= 9; i++) {
                if (t[i] != null) {
                    t[i].os.println("<" + name + "> " + line);
                }
            }
        }
        for (int i = 0; i <= 9; i++) {
            if (t[i] != null && t[i] != this) {
                t[i].os.println("*** The user " + name + " is leaving the chat room !!! ***");
            }
        }

        os.println("*** Bye " + name + " ***");

        // Clean up:
        // Set to null the current thread variable such that other client could
        // be accepted by the server

        for (int i = 0; i <= 9; i++) {
            if (t[i] == this) {
                t[i] = null;
            }
        }

        // close the output stream
        // close the input stream
        // close the socket

        is.close();
        os.close();
        clientSocket.close();
    } catch (IOException e) {
        System.out.println(e);
    }
}}

在接受连接之前,创建套接字并声明客户端已连接:

        server = new ServerSocket(5050);
        System.out.println("Client Connected...");
你应该打印

客户端已连接

在这条线之后

client = server.accept();
在客户端实际连接之前,哪个模块会阻塞

client = server.accept();