我开始连服务器端都收不到消息,后面改成这样才可以
server:
import java.io.*;
import java.net.*;
public class MyServer extends Thread{
private Socket client;
public MyServer(Socket c) {
this.client=c;
}

public  void run(){
try{
String str;
BufferedReader bfd = new BufferedReader(new InputStreamReader(client.getInputStream()));
BufferedReader KeyBr = new BufferedReader(new InputStreamReader(System.in));
PrintStream ps = new PrintStream(client.getOutputStream());
/////将客户机的内容在屏幕上显示
System.out.println("服务器");
        while(true){
        str = bfd.readLine();
        System.out.println(str);
        str = KeyBr.readLine();
        ps.println(str);
        }

/*
BufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream()));
PrintWriter out=new PrintWriter(client.getOutputStream());
boolean eof=true;
while(eof){
String str=in.readLine();
if(str!=null){
System.out.println(str);
/* System.out.println("准备向客户端发送信息");
//向客户发送信息;
String returnInfo="已经成功接受信息" ;
out.print(returnInfo);
//System.out.println(returnInfo);
out.flush();
//break;
}
else{
eof=false;
}
}

// client.close();*/
}  
catch(Exception e){
System.out.println(e.toString());
}
}

public static void main(String args[]){
ServerSocket server=null;
Socket client=null;
try{
server=new ServerSocket(15677);
while(true){
MyServer ms=new MyServer(server.accept());
ms.start();
}
}
catch(Exception e){
System.out.println(e.toString());
}
}

}
client:
import java.io.*;
import java.net.*;public class Client {
  static Socket server;
  public static void main(String[] args) {
    try {
      server = new Socket(InetAddress.getLocalHost(), 15677);  
      
        BufferedReader KeyBr = new BufferedReader(new InputStreamReader(System.in));
        BufferedReader br = new BufferedReader(new InputStreamReader(server.getInputStream()));
        String str;
        PrintStream ps = new PrintStream(server.getOutputStream());
         while(true){
         str = KeyBr.readLine();
            ps.println(str);
            str = br.readLine();
            System.out.println(str);
         }     
      
      /*    
      PrintWriter out = new PrintWriter(server.getOutputStream());           BufferedReader wt = new BufferedReader(new InputStreamReader(System.in));
        BufferedReader br = new BufferedReader(new InputStreamReader(server.getInputStream()));
        String str;
      //  PrintStream ps = new PrintStream(ss.getOutputStream());   
          //  while (true) {
      // BufferedReader wt = new BufferedReader(new InputStreamReader(System.in));        
     //   String str = wt.readLine();
     //   out.print(str);
     //   out.flush();
    //    str = str.substring(0, 3);
      //  if (str.equals("end")) {
      //    break;
     //   }
    //  }
   /*   System.out.println("等待返回信息");
      //等待服务器返回信息      
      while(true){
       BufferedReader in = new BufferedReader(new InputStreamReader(server.getInputStream()));
       String serverOut=in.readLine();
if(serverOut!=null){
System.out.println(serverOut);
}
break;      
      }*/
    //  server.close();
    }
    catch (Exception e) {
      System.out.println(e.toString());
    }
  }
}

解决方案 »

  1.   

    import java.io.*;
    import java.net.*;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.Timer;
    public class ChattingServer {
      static final int PORT = 8080;
      
      public static void main(String[] args)
          throws IOException {
        ToAll toall=new ToAll();
        ServerSocket s = new ServerSocket(PORT);
        System.out.println("Server Started");
        try {
          while(true) {
            Socket socket = s.accept();
            try {
              ServeOneJabber server=new ServeOneJabber(socket);
              toall.count++;
              toall.temp=toall.count;
              server.start();
            } catch(IOException e) {
              socket.close();
            }
            System.out.println(toall.count);
          }
        } finally {
          s.close();
        }
      } 

     class ServeOneJabber extends Thread{
       
     
       public ServeOneJabber(Socket s)
       throws IOException{
       socket=s;
       send=new ToAll();
       in=
       new BufferedReader(
       new InputStreamReader(
       socket.getInputStream()));
      
      
       send.out[send.count]=
       new PrintWriter(
       new BufferedWriter(
       new OutputStreamWriter(
       socket.getOutputStream())),true);
      
       }
      
       public void run(){
       receiveThread receivethread=new receiveThread();
       receivethread.start();
       sendThread sendthread=new sendThread();
       sendthread.start();
       }
      
       private class receiveThread extends Thread{
       public void run(){
       try{
       try{
      
       while(true){
       String str=in.readLine();
           // if(str.equals("end")) break;
       send.strcon=str;
       System.out.println(str);
       sleep(150);
       }
      
       }
       catch(InterruptedException e){
       }
       System.out.println("closing...");
       }
       catch(IOException e){
      
       }finally{
       try{
       socket.close();
       }
       catch(IOException e){
       }
       }
       }
       }
      
       private class sendThread extends Thread{
    public void run(){

    try{
    while(true){
    if(send.strcon!=null){
    send.temp=send.count;
    for(int i=0;i<send.temp;i++){
    send.out[i].println(send.strcon);
    }
    send.strcon=null;
    }
    sleep(100);

    }
    }
    catch(InterruptedException e){
    }
    }
    } private class TimeEvent implements ActionListener{
    public void actionPerformed(ActionEvent event){
    send.strcon=null;
    }
    }

    private ToAll send;
       private Socket socket;
       private BufferedReader in;
       public static PrintWriter out[];
      
      }
      
      class ToAll {
       public  static int count=0;
       public  static int temp;
       public  static String strcon;
       public  static PrintWriter out[]=new PrintWriter[10];
      }
      

  2.   

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import java.io.*;
    import java.net.*;public class ChattingClient{
    public static void main(String[] args){
    try{
    RoomFrame frame=new RoomFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.show();
    }
    catch(IOException e){

    }

    }
    }class RoomFrame extends JFrame{
    public RoomFrame()
    throws IOException {
    Toolkit kit=Toolkit.getDefaultToolkit();
    Dimension screenSize=kit.getScreenSize();
    setTitle("聊天室");
    setSize(screenSize.height/2,screenSize.width/2);
    setLocation(screenSize.height/2,screenSize.width/8);


    send=new JButton("发送");

    sendContent=new JTextField(27);

    sendPanel=new JPanel();
    sendPanel.add(sendContent);
    sendPanel.add(send);
    room=new JTextArea();
    JScrollPane scrollPane=new JScrollPane(room);

    sendAction senda=new sendAction();
    send.addActionListener(senda);
    Container contantPane=getContentPane();
    contantPane.add(sendPanel,BorderLayout.SOUTH);
    contantPane.add(scrollPane,BorderLayout.CENTER);
    room.setEditable(false);
    room.setLineWrap(true);


    InputMap imap=sendPanel.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
    imap.put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER,Event.CTRL_MASK),"sendkey");
    ActionMap amap=sendPanel.getActionMap();
    amap.put("sendkey",senda);

    //connection
    InetAddress addr = 
           InetAddress.getByName(null);
           try{
           socket = new Socket(addr, 8080);
           socket.setSoTimeout(10000);       System.out.println("socket = " + socket);
           in =
             new BufferedReader(
               new InputStreamReader(
                 socket.getInputStream()));
          
           out =
             new PrintWriter(
              new BufferedWriter(
                new OutputStreamWriter(
                   socket.getOutputStream())),true);
               
                 
                
             }
             catch(IOException e){
             
             }
             receiveThread receive=new receiveThread();
             receive.start();
            }
             private class receiveThread extends Thread{
    public void run(){
    try{
    while(true){
    try{
    String str = in.readLine();
             room.append(str+'\n');
    }
    catch(IOException e){
    }
    sleep(1000);
    }
    }
    catch(InterruptedException exception){

    }
    }
    }

    private class sendAction extends AbstractAction{
     public void actionPerformed(ActionEvent evt){
      out.println(sendContent.getText());
      sendContent.setText("");
     
    }
    }

    private BufferedReader in;
    private PrintWriter out;
    private Socket socket;
    private JTextArea room;
    private JPanel sendPanel;
    private JTextField sendContent;
    private JButton send;
    }
      

  3.   

    你应该每登陆一个用户就将其用户名存入arraylist或vector中保存
    然后当某个用户发的消息向arraylist中所有用户转发
      

  4.   

    安子,在你的receiveThread类中用到sleep(1000),我这里是通过类来implement Runnable,那么如何在run()方法里调用sleep(1000)。
    我试了一下直接sleep(1000)和this.sleep(1000)都不行。