2013-03-29 40 views
1

我試圖製作一個允許兩個或多個客戶端之間進行通信的程序。我從一個網站抓取了大部分資源,但是我無法找到如何讓這兩個客戶實際展示其他客戶所說的內容。由於他們在自己的線程中運行,我認爲服務器只會將文本僅發送給發件人的線程,而不是將其發送給所有連接的人。在Java中的線程之間進行通信

package Server; 
import java.net.*; 
import java.util.*; 
import java.io.*; 
import javax.swing.*; 
import java.awt.*; 

public class Server extends JFrame 
{ 
//A JTextArea to hold the information received from clients 
JTextArea chatBox = new JTextArea(); 

public static void main(String[] args) 
{ 
    new Server(); 
} 

public Server() 
{ 
    //We need to set up a layout for our window 
    setLayout(new BorderLayout()); 
    //Only display text, do not allow editing 
    chatBox.setEditable(false); 
    //Add our chatbox in the center with scrolling abilities 
    add(new JScrollPane(chatBox), BorderLayout.CENTER); 

    setTitle("Chat Server"); 
    setSize(550,400); 
    //If the user closes then exit out 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    //Show the frame 
    setVisible(true); 

    //We need a try-catch because lots of errors can be thrown 
    try { 
     ServerSocket sSocket = new ServerSocket(8123); 
     chatBox.append("Server started at: " + new Date()+"\n"); 

     //Loop that runs server functions 
     while(true) { 
      //Wait for a client to connect 
      Socket socket = sSocket.accept(); 
      int Port = socket.getPort(); 
      InetAddress IP = socket.getInetAddress(); 
      System.out.println("INFO: Incoming connection from: "+IP+":"+Port); 
      chatBox.append("INFO: Incoming connection from: "+IP+":"+Port+"\n"); 

      //Create a new custom thread to handle the connection 
      ClientThread cT = new ClientThread(socket); 

      //Start the thread! 
      new Thread(cT).start(); 

     } 
    } catch(IOException exception) { 
     System.out.println("Error: " + exception); 
    } 
} 

//Here we create the ClientThread inner class and have it implement Runnable 
//This means that it can be used as a thread 
class ClientThread implements Runnable 
{ 
    Socket threadSocket; 

    //This constructor will be passed the socket 
    public ClientThread(Socket socket) 
    { 
     //Here we set the socket to a local variable so we can use it later 
     threadSocket = socket; 
    } 

    public void run() 
    { 

     //All this should look familiar 
     try { 
      //Create the streams 
      PrintWriter output = new PrintWriter(threadSocket.getOutputStream(), true); 
      BufferedReader input = new BufferedReader(new InputStreamReader(threadSocket.getInputStream())); 

      //Tell the client that he/she has connected 
      output.println("You have connected at: " + new Date()); 
      chatBox.append("Client connected\n"); 


       //This will wait until a line of text has been sent 
       String chatInput = input.readLine(); 
       //Add the chat to the text box 
       chatBox.append(chatInput+"\n"); 
       System.out.println(chatInput); 
       output.println(chatInput); 
      } catch(IOException exception) { 
      System.out.println("ERROR: " + exception); 
      chatBox.append("ERROR: "+exception); 
     } 
     } 
    } 
} 
+0

你需要的是一種多播方式發送數據.. –

+0

我會盡力的。從未真正使用過多播。 –

+0

爲什麼不嘗試Java消息服務? – prasanth

回答