我写的一个server 一个client ,就是实现运行多个client,在一个client输入消息,然后消息发给服务器,服务器再回发给所有的client 代码如下,怎么实现不了呢,希望高手帮忙
server  import   java.net.*;   
  import   java.io.*;   
  import   java.util.*;   
    
  public   class   ServerSocketDemo     
  {   
  public   static   void   main(String[]   args)   throws   Exception   
  {   
  ArrayList   list=new   ArrayList();   
  ServerSocket   ss=new   ServerSocket(8189);   
    
  while(true)   
  {   
  Socket   s=ss.accept();   
  list.add(s);   
  new   ReverseDemo(s,list);   
  }   
  // ss.close();   
  }   
  }   
  class   ReverseDemo   extends   Thread   
  {   
  BufferedReader   in=null;   
  PrintWriter   out=null;   
  String   str="abc";   
  ArrayList   list;   
  Socket   s;   
    
  public   ReverseDemo(Socket   s,ArrayList   list)   
  {   
  this.list=list;   
  this.s=s;   
  this.start();   
  }   
  public   void   run()   
  {   
 
  try  
   {   
            InputStream inStream = s.getInputStream();
            OutputStream outStream = s.getOutputStream();
            Scanner in = new Scanner(inStream); 
          
            PrintWriter out = new PrintWriter(outStream, true /* autoFlush */);
            System.out.println(s.getInetAddress().getHostAddress()+"   connected-------");
            out.println("连接成功!");
            Scanner a=new Scanner(System.in);
              
  while(true)   
  {   str=in.nextLine();   
  // StringBuffer   sb=new   StringBuffer(str);   
  // str=sb.reverse().toString();   
  //System.out.println(str);  
  Iterator   iterator=list.iterator();   
  while(iterator.hasNext())   
  {
  PrintWriter   o=new   PrintWriter(   
  new   BufferedWriter(   
  new   OutputStreamWriter(   
  ((Socket)(iterator.next())).getOutputStream())),true);   
  o.println(str);   
  }   
    
  }   
  // in.close();   
  // out.close();   
  // s.close();   
          }   
          catch   (Exception   ex)   
          {   
          ex.printStackTrace();   
          }   
    
  }   
  }   client/**
   @version 1.20 2004-08-03
   @author Cay Horstmann
*/import java.io.*;
import java.net.*;
import java.util.*;/**
   This program makes a socket connection to the atomic clock
   in Boulder, Colorado, and prints the time that the 
   server sends.
*/
public class SocketTest
{  
   public static void main(String[] args)
   {  
      try
      {  
         Socket s = new Socket("localhost", 8189);
         try
         {
            InputStream inStream = s.getInputStream();
            OutputStream outStream=s.getOutputStream();
            Scanner in = new Scanner(inStream);
            Scanner a=new Scanner(System.in);            
            PrintWriter out = new PrintWriter(outStream, true /* autoFlush */);            boolean done=false;
            while (!done)
            {               String line = in.nextLine();
               System.out.println("服务器发送的信息为:"+line);               if(a.hasNextLine())
               {
                 String b=a.nextLine();
                 out.println(b);
                 if (b.trim().equals("BYE"))
                 done = true;
                 
               }
               //else continue;
            }
         }
         finally
         {
            s.close();
         }
      }
      catch (IOException e)
      {  
         e.printStackTrace();
      }
   }
}

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【oceans0501】截止到2008-06-26 09:04:58的历史汇总数据(不包括此帖):
    发帖数:0                  发帖分:0                  
    结贴数:0                  结贴分:0                  
    未结数:0                  未结分:0                  
    结贴率:-------------------结分率:-------------------
    如何结贴请参考这里:http://topic.csdn.net/u/20080501/09/ef7ba1b3-6466-49f6-9d92-36fe6d471dd1.html
      

  2.   

    一个简单的聊天程序
    =====================================================================================================
    server:import  java.net.*; 
    import  java.io.*; 
    import  java.util.*; 
       
    public  class  ServerSocketDemo   
    {

    public  static  void  main(String[]  args) 

    ArrayList list = new ArrayList();
    ServerSocket  ss = null;

    try {
    ss =new  ServerSocket(8189); 

    while(true) 

    Socket  s=ss.accept(); 
    list.add(s); 
    new  ReverseDemo(s,list); 
    }
    }catch( Exception ex ) {
    }
    try {
    ss.close();
    }catch( Exception ex ) {

    }
    }
     import  java.net.*; 
    import  java.io.*; 
    import  java.util.*; public class  ReverseDemo  extends  Thread 

    BufferedReader  in=null; 
    PrintWriter  out=null; 
    String  str="abc"; 
    ArrayList  list; 
    Socket  s; 

    public  ReverseDemo(Socket  s,ArrayList  list) 

    this.list=list; 
    this.s=s; 
    this.start(); 
    }
    public  void  run() 


    try 

            InputStream inStream = s.getInputStream();
            OutputStream outStream = s.getOutputStream();
         
            PrintWriter out = new PrintWriter(outStream, true /* autoFlush */);
            System.out.println(s.getInetAddress().getHostAddress()+"  connected-------");
            out.println("连接成功!"); byte[] buf = new byte[1024];
             
    while(true) 
    {
    int bytes_read = inStream.read( buf );
    if( bytes_read < 0 ) {
    break;
    } else {
    broadcast( buf, 0, bytes_read );
    }

          } 
          catch  (Exception  ex) 
          { 
           ex.printStackTrace(); 
          }
      finally {
       list.remove( s );
      } 
    }
    void broadcast( byte[] b, int offset, int length ) {
    for( int i = 0, n = list.size(); i < n; i++ ) {
    Socket sock = (Socket) list.get( i );
    if( sock != s ) {
    try {
    sock.getOutputStream().write( b, offset, length );
    sock.getOutputStream().flush();
    }catch( Exception ex ) {
    }
    }
    }
    }
    } ======================================================================================================
    client
    /**
      @version 1.20 2004-08-03
      @author Cay Horstmann
    */import java.io.*;
    import java.net.*;
    import java.util.*;/**
      This program makes a socket connection to the atomic clock
      in Boulder, Colorado, and prints the time that the
      server sends.
    */
    public class SocketTest
    {
    private Socket sock_;
    private byte[] name_; 

    public SocketTest( String host, int port, byte[] name ) throws Exception {
    name_ = name;
    sock_ = new Socket( host, port );
    Thread th = new Thread( createMsgRecvRunnable() );
    th.start();
    byte[] b = new byte[ 1024 ];

    int bytes_read = readMsg( b );
    while( bytes_read > 0 ) {
    sendMsg( b, 0, bytes_read );
    bytes_read = readMsg( b );
    }
    }

    private Runnable createMsgRecvRunnable() {
    return new Runnable() {
    public void run() {
    try {
    InputStream in = sock_.getInputStream();
    byte[] buf = new byte[1024];

    while( true ) {
    int bytes_read = in.read( buf );
    if( bytes_read < 0 ) {
    break;
    } else {
    System.out.write( buf, 0, bytes_read );
    }
    }
    }catch( Exception ex ) {
    }
    }
    };
    }

    private int readMsg( byte[] b ) throws Exception {
    return System.in.read( b );
    }

    private void sendMsg( byte[] msg, int offset, int length ) throws Exception {
    sock_.getOutputStream().write( name_ );
    sock_.getOutputStream().write( msg, offset, length );
    sock_.getOutputStream().flush();
    }

    public static void main( String[] args ) {
    try {
    String name = null;

    if( args.length > 0 ) {
    name = args[0] + ":";
    } else {
    name = "unknown:";
    }
    SocketTest test = new SocketTest( "localhost", 8189, name.getBytes() );
    }catch( Exception ex ) {
    ex.printStackTrace();
    }
    }
      
      

  3.   

    一个简单的聊天程序 ==========================================================================================
    server:import  java.net.*; 
    import  java.io.*; 
    import  java.util.*; 
       
    public  class  ServerSocketDemo   
    {

    public  static  void  main(String[]  args) 

    ArrayList list = new ArrayList();
    ServerSocket  ss = null;

    try {
    ss =new  ServerSocket(8189); 

    while(true) 

    Socket  s=ss.accept(); 
    list.add(s); 
    new  ReverseDemo(s,list); 
    }
    }catch( Exception ex ) {
    }
    try {
    ss.close();
    }catch( Exception ex ) {

    }
    }
     
    import  java.net.*; 
    import  java.io.*; 
    import  java.util.*; public class  ReverseDemo  extends  Thread 

    BufferedReader  in=null; 
    PrintWriter  out=null; 
    String  str="abc"; 
    ArrayList  list; 
    Socket  s; 

    public  ReverseDemo(Socket  s,ArrayList  list) 

    this.list=list; 
    this.s=s; 
    this.start(); 
    }
    public  void  run() 


    try 

            InputStream inStream = s.getInputStream();
            OutputStream outStream = s.getOutputStream();
         
            PrintWriter out = new PrintWriter(outStream, true /* autoFlush */);
            System.out.println(s.getInetAddress().getHostAddress()+"  connected-------");
            out.println("连接成功!"); byte[] buf = new byte[1024];
             
    while(true) 
    {
    int bytes_read = inStream.read( buf );
    if( bytes_read < 0 ) {
    break;
    } else {
    broadcast( buf, 0, bytes_read );
    }

          } 
          catch  (Exception  ex) 
          { 
           ex.printStackTrace(); 
          }
      finally {
       list.remove( s );
      } 
    }
    void broadcast( byte[] b, int offset, int length ) {
    for( int i = 0, n = list.size(); i < n; i++ ) {
    Socket sock = (Socket) list.get( i );
    if( sock != s ) {
    try {
    sock.getOutputStream().write( b, offset, length );
    sock.getOutputStream().flush();
    }catch( Exception ex ) {
    }
    }
    }
    }
    } ===================================================================================
    client:
    /**
      @version 1.20 2004-08-03
      @author Cay Horstmann
    */import java.io.*;
    import java.net.*;
    import java.util.*;/**
      This program makes a socket connection to the atomic clock
      in Boulder, Colorado, and prints the time that the
      server sends.
    */
    public class SocketTest
    {
    private Socket sock_;
    private byte[] name_; 

    public SocketTest( String host, int port, byte[] name ) throws Exception {
    name_ = name;
    sock_ = new Socket( host, port );
    Thread th = new Thread( createMsgRecvRunnable() );
    th.start();
    byte[] b = new byte[ 1024 ];

    int bytes_read = readMsg( b );
    while( bytes_read > 0 ) {
    sendMsg( b, 0, bytes_read );
    bytes_read = readMsg( b );
    }
    }

    private Runnable createMsgRecvRunnable() {
    return new Runnable() {
    public void run() {
    try {
    InputStream in = sock_.getInputStream();
    byte[] buf = new byte[1024];

    while( true ) {
    int bytes_read = in.read( buf );
    if( bytes_read < 0 ) {
    break;
    } else {
    System.out.write( buf, 0, bytes_read );
    }
    }
    }catch( Exception ex ) {
    }
    }
    };
    }

    private int readMsg( byte[] b ) throws Exception {
    return System.in.read( b );
    }

    private void sendMsg( byte[] msg, int offset, int length ) throws Exception {
    sock_.getOutputStream().write( name_ );
    sock_.getOutputStream().write( msg, offset, length );
    sock_.getOutputStream().flush();
    }

    public static void main( String[] args ) {
    try {
    String name = null;

    if( args.length > 0 ) {
    name = args[0] + ":";
    } else {
    name = "unknown:";
    }
    SocketTest test = new SocketTest( "localhost", 8189, name.getBytes() );
    }catch( Exception ex ) {
    ex.printStackTrace();
    }
    }
      
      

  4.   

    这样的东西,网上一大把。
      不过强烈建议,LZ多看看马老师的 “基于SOCKET的聊天室的实现”。
      

  5.   

    我写了一个简单的控制台聊天室程序.楼主有兴趣,可以看看.
    服务端:
    package houlei.chatRoom;import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.util.Iterator;
    import java.util.Vector;public class Server implements Runnable {
    private Thread instance;
    private boolean running=false;
    private Socket socket;
    private Vector set;
    public Server(Socket socket, Vector set) {
    this.socket=socket;this.set=set;
    } public void run() {
    while(running){
    try {
    InputStream in = socket.getInputStream();
    if(in.available()>0){
    BufferedReader br = new BufferedReader(new InputStreamReader(in));
    String line = br.readLine();
    Iterator itr = set.iterator();
    while(itr.hasNext()){
    Server s = (Server)itr.next();
    if(this.equals(s)==false)
    s.sendLine(line);
    }
    }
    Thread.sleep(10);
    } catch (IOException e) {
    stop();
    } catch (InterruptedException e) {
    }
    }
    }

    private void sendLine(String line) throws IOException {
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
    bw.write(line);
    bw.newLine();
    bw.flush();
    } public static void main(String[] args) throws IOException {
    int port = 8189;
    ServerSocket ss = new ServerSocket(port);
    Vector set = new Vector();
    while(true){
    Server s = new Server(ss.accept(),set);
    set.add(s);
    s.start();
    }
    } private void start() {
    if(running)return;
    running=true;
    instance=new Thread(this);
    instance.start();
    }

    private void stop(){
    if(running){
    running=false;
    set.remove(this);
    if(socket!=null && socket.isConnected()){
    try {
    socket.close();
    } catch (IOException e) {
    }
    }
    instance.interrupt();
    }
    }
    }客户端:
    package houlei.chatRoom;import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.net.Socket;public class Client { public static void main(String[] args) throws Exception {
    String serverIp = "127.0.0.1";
    int serverPort = 8189;
    Socket s = new Socket(serverIp,serverPort);
    InputStream input = s.getInputStream();
    BufferedReader reader = new BufferedReader(new InputStreamReader(input));
    BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
    InputStream in = System.in;
    while(s.isConnected()){
    if(in.available()>0){
    BufferedReader br = new BufferedReader(new InputStreamReader(in));
    String line = br.readLine();
    writer.write(line);
    writer.newLine();
    writer.flush();
    }
    if(input.available()>0){
    String line = reader.readLine();
    System.out.println(line);
    }
    Thread.sleep(10);
    }
    }}