2010-01-13 89 views
0

這是我的主類,它屬於服務器應用程序!但是如果沒有運行客戶端應用程序,這些句子將寫入控制檯,這真的讓人感到驚訝。請你幫助我爲什麼?謝謝。網絡問題!(多線程客戶端/服務器)

我的主類:

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); 
    } 
}} 
在控制檯

init: 
deps-jar: 
compile-single: 
run-single: 
Server is starting... 
Server is listening... 
Client Connected... 

回答

1

您創建一個Socket並宣佈接受連接之前客戶端連接:

 server = new ServerSocket(5050); 
     System.out.println("Client Connected..."); 

你應打印

客戶端被這條線後連接

client = server.accept(); 

哪些塊,直到客戶端實際上連接