本帖最后由 java2000_net 于 2008-08-05 17:29:37 编辑

解决方案 »

  1.   

    以下是我的程序:
    以下为ChatServer程序:
    package TCPChat;import java.awt.BorderLayout;
    import java.awt.Frame;
    import java.awt.Panel;
    import java.awt.TextArea;
    import java.awt.TextField;
    import java.awt.event.KeyAdapter;
    import java.awt.event.KeyEvent;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.InetAddress;
    import java.net.ServerSocket;
    import java.net.Socket;public class ChatServer extends Thread{ static TextArea ta;
    static TextField tfWord;
    ServerSocket ss;
    public static void main(String[] args) {

    // 界面
    Frame f=new Frame("服务端");
     /*TextField tfIP=new TextField(15);
     TextField tfPort=new TextField(6);*/
      ta=new TextArea(20,50);
     tfWord=new TextField(45);
     Panel pN=new Panel();
     Panel pC=new Panel();
     Panel pS=new Panel();
     BorderLayout bl=new BorderLayout();
     /*pN.add(tfIP);
     pN.add(tfPort);*/
     pC.add(ta);
     pS.add(tfWord);
    // f.add(pN,bl.NORTH);
     f.add(pC,bl.CENTER);
     f.add(pS,bl.SOUTH);
     
     f.setSize(500, 500);
     f.setLocation(50, 200);
     f.setVisible(true);
     f.pack();
     //退出命令响应
     f.addWindowListener(new WindowAdapter()
     {
     public void windowClosing(WindowEvent e)  
     {
     System.exit(0);
     }
     });
     new Thread(new ChatServer()).start();//启动接收线程
     //添加发送响应
     tfWord.addKeyListener(new KeyAdapter()
     {

     public void keyReleased(KeyEvent e)  
     {

     if(e.getKeyCode()==e.VK_ENTER)
     {


    try {
    //发送
     String strsend=new String(tfWord.getText()+"\n");//储备数据
     Socket s=new Socket(InetAddress.getByName("127.0.0.1"),9009);
     OutputStream os=s.getOutputStream();
     DataOutputStream dos=new DataOutputStream(os);
     dos.writeUTF(strsend+"\n");

    } catch (Exception e1) {
    e1.printStackTrace();
    }

     }
    }
       
     
     });
    }
    //接收线程
    public void run()
    {
    try {
     //接收客户端
    ss=new ServerSocket(9009);
    Socket s=ss.accept();
    //创建接收流
    InputStream is=s.getInputStream();
    DataInputStream dis=new DataInputStream(is);
    String str=dis.readUTF();//接收数据并存入str
    //显示数据
    ta.append(str+"\n");//显示在TextArea中

    } catch (IOException e) {
    e.printStackTrace();
    }


    }}
    *************************
    以下为ChatClient程序:
    package TCPChat;import java.awt.BorderLayout;
    import java.awt.Frame;
    import java.awt.Panel;
    import java.awt.TextArea;
    import java.awt.TextField;
    import java.awt.event.KeyAdapter;
    import java.awt.event.KeyEvent;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.InetAddress;
    import java.net.Socket;public class ChatClient extends Thread{
    static TextArea ta;
    static TextField tfWord;
    Socket s;
    public static void main(String[] args) {
    // 界面
    Frame f=new Frame("客户端");
     /*TextField tfIP=new TextField(15);
     TextField tfPort=new TextField(6);*/
      ta=new TextArea(20,50);
     tfWord=new TextField(45);
     Panel pN=new Panel();
     Panel pC=new Panel();
     Panel pS=new Panel();
     BorderLayout bl=new BorderLayout();
     /*pN.add(tfIP);
     pN.add(tfPort);*/
     pC.add(ta);
     pS.add(tfWord);
    // f.add(pN,bl.NORTH);
     f.add(pC,bl.CENTER);
     f.add(pS,bl.SOUTH);
     
     f.setSize(500, 500);
     f.setLocation(500, 200);
     f.setVisible(true);
     f.pack();
     //退出命令响应
     f.addWindowListener(new WindowAdapter()
     {
     public void windowClosing(WindowEvent e)  
     {
     System.exit(0);
     } });  
    // 启动发送线程
    new Thread(new ChatClient()).start();
    //接收响应
    tfWord.addKeyListener(new KeyAdapter()
     {

     public void keyReleased(KeyEvent e)  
     {

     if(e.getKeyCode()==e.VK_ENTER)
     {


    try {

     Socket s=new Socket(InetAddress.getByName("127.0.0.1"),9009);
    InputStream is=s.getInputStream();
    DataInputStream dis=new DataInputStream(is);
    String str=dis.readUTF();//接收数据并存入str
    //显示
    ta.append(str+"\n");

    } catch (Exception e1) {
    e1.printStackTrace();
    }

     }
    }
       
     
     });

    }

    //发送线程
    public void run()
    {
    /*String strsend=new String(tfWord.getText()+"\n");//储备数据 try {
    Socket s=new Socket(InetAddress.getByName("127.0.0.1"),9009);
    OutputStream os = s.getOutputStream();
     DataOutputStream dos=new DataOutputStream(os);
     dos.writeUTF(strsend+"\n");

    } catch (IOException e) {
    e.printStackTrace();
    }*/
    tfWord.addKeyListener(new KeyAdapter()
     {

     public void keyReleased(KeyEvent e)  
     {

     if(e.getKeyCode()==e.VK_ENTER)
     {


    try {
    //发送
     String strsend=new String(tfWord.getText()+"\n");//储备数据
     Socket s=new Socket(InetAddress.getByName("127.0.0.1"),9009);
     OutputStream os=s.getOutputStream();
     DataOutputStream dos=new DataOutputStream(os);
     dos.writeUTF(strsend+"\n");
    dos.close();
    s.close();
    } catch (Exception e1) {
    e1.printStackTrace();
    }

     }
    }
       
     
     });

    }
    }
      

  2.   

    很想帮你改,不过AWT、Swing那一块基本忘了!
      

  3.   

    要实现改动太多了,你还是去google找一个样例比较好。
    server:
    //接收线程 
    public void run() 

    try { 
    //接收客户端 
    ss=new ServerSocket(9009); 
    Socket s=ss.accept(); 
    //创建接收流 
    InputStream is=s.getInputStream(); 
    DataInputStream dis=new DataInputStream(is); 
    String str=dis.readUTF();//接收数据并存入str 
    //显示数据 
    ta.append(str+"\n");//显示在TextArea中 } catch (IOException e) { 
    e.printStackTrace(); 
    } 这个根本不能实现接收。没做循环。client的接收也不行,没做循环接收。
    而且你发送的时候已经吧socket关闭了,还能接收吗?