package chatserver;import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.net.*;
import java.io.*;public class Frame1 extends JFrame implements Runnable {
  JPanel contentPane;
  BorderLayout borderLayout1 = new BorderLayout();
  TextArea textArea1 = new TextArea();
  Panel panel1 = new Panel();
  TextField textField1 = new TextField();
  Button send = new Button();
  Button quit = new Button();
  ServerSocket serverSocket = null;
  Socket socket = null;
  BufferedReader cin = null;
  PrintWriter cout = null;
  /**Construct the frame*/
  public Frame1() {
    enableEvents(AWTEvent.WINDOW_EVENT_MASK);
    try {
      jbInit();
    }
    catch(Exception e) {
      e.printStackTrace();
    }
  }
  /**Component initialization*/
  private void jbInit() throws Exception  {
    //setIconImage(Toolkit.getDefaultToolkit().createImage(Frame1.class.getResource("[Your Icon]")));
    contentPane = (JPanel) this.getContentPane();
    contentPane.setLayout(borderLayout1);
    this.setResizable(false);
    this.setSize(new Dimension(372, 284));
    this.setTitle("聊天程序--服务器端");
    textField1.setColumns(15);
    send.setEnabled(false);
    send.setLabel("发送");
    send.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        send_actionPerformed(e);
      }
    });
    quit.setLabel("退出");
    quit.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        quit_actionPerformed(e);
      }
    });
    textArea1.setEditable(false);
    contentPane.add(textArea1,  BorderLayout.CENTER);
    contentPane.add(panel1, BorderLayout.SOUTH);
    panel1.add(textField1, null);
    panel1.add(send, null);
    panel1.add(quit, null);
    Thread thread = new Thread(this);
    thread.start();
  }
  /**Overridden so we can exit when window is closed*/
  protected void processWindowEvent(WindowEvent e) {
    super.processWindowEvent(e);
    if (e.getID() == WindowEvent.WINDOW_CLOSING) {
      quit();
    }
  }
  public void run() {
    try{
      serverSocket = new ServerSocket(1124);
      socket = serverSocket.accept();
      cin = new BufferedReader (new InputStreamReader(socket.getInputStream()));
      cout = new PrintWriter(socket.getOutputStream());
      if (socket!= null){
        textArea1.append("系统消息:客户端成功接入!\n");
        send.setEnabled(true);
      }
      Receiver r = new Receiver();
      Thread t = new Thread(r);
      t.start();
    }catch(Exception e){
      textArea1.append(e.toString()+"\n");
    }
  }  void quit_actionPerformed(ActionEvent e) {
      quit();
  }  void send_actionPerformed(ActionEvent e) {
    cout.println(textField1.getText());
    cout.flush();
    textArea1.append("服务器消息:"+textField1.getText()+"\n");
    textField1.setText("");
  }  void quit(){
    try{
    cout.println("ServerExits!");
    cout.flush();
    }catch(Exception e){}
    finally{
      System.exit(0);
    }
  }  private class Receiver implements Runnable{
    public void run(){
      String msg = null;
      try{
        msg = cin.readLine();
        while(msg!= "ClientExits!"){
          textArea1.append("客户端消息:"+msg+"\n");
          msg = cin.readLine();
        }
        cin.close();
        cout.close();
        socket.close();
        serverSocket.close();
      }catch(Exception e){}
       send.setEnabled(false);    //客户端已退出,禁止发送消息
    }
  }
}

解决方案 »

  1.   

    服务器端建立一个端口
    serverSocket serverSocket = new ServerSocket(1124);
    用一个循环来监听端口
    Socket  socket = serverSocket.accept();
      

  2.   

    同意楼上的,
    如果有信息,开一个处理线程(自己写)来处理,把socket传进去让他处理主线程继续
    监听端口
    Socket  socket = serverSocket.accept();
      

  3.   

    public boolean Connect(int piPortNo) throws SysExcpt{
            try {
                gServerSocket = new ServerSocket(piPortNo);
                return (true);
            } catch (UnknownHostException ex) {
                gTcpStatus = gTcpHostErr;
                throw new SysExcpt("TcpServer", "Connect()", ex.toString());
            } catch (IOException ex) {
                gTcpStatus = gTcpIOErr;
                throw new SysExcpt("TcpServer", "Connect()", ex.toString());
            } catch (Exception ex) {
                gTcpStatus = gTcpFail;
                throw new SysExcpt("TcpServer", "Connect()", ex.toString());
            }
        }
      

  4.   

    呵呵,我同意:jan4984(Janny)的意见哦,不过核心的代码真的是很少了,你说这样的代码还算多的话,不知道你有没有写过程序!
      

  5.   

    服务器端最少代码
    try
    {
    ServerSocket s=new ServerSocket(9999);
    Socket socket=s.accept();
    }
    catch(Exception e)
    {
    {
    客户端最少代码
    try
    {
    Socket s=new Socket("IPAdderss",9999);
    }
    catch(Exception e)
    {
    }
      

  6.   

    Thread t = new Thread(r);
    这么写效率很低的,尤其是对于那些繁忙且需要实时响应的服务,最好写一个线程池。