JAVA简单聊天程序

/**

*   服务器端

*/

import java.io.IOException;
import java.net.*;
import java.io.*;
import java.util.*;

public class ChatServer {
 boolean started=false;
    ServerSocket ss=null;
   
    List<Client> clients=new ArrayList<Client>();
   
 public static void main(String[] args) {
      new ChatServer().started();
 }

   public void started(){
    try {
   ss=new ServerSocket(8888);
   started=true;
   }catch(SocketException e){
    System.out.println("端口正在使用中");
    System.out.println("程序正在运行中,请关掉相关程序!");
    System.exit(0);
   }
     catch(IOException e){
       e.printStackTrace();
      }
   try{
   while(started){
    boolean connected=true;
    Socket s=ss.accept();
    Client c=new Client(s);
 System.out.println("A client connected!");
             new Thread(c).start();
             clients.add(c);
            }
            // dis.close();
   }catch(IOException ioe){
    ioe.printStackTrace();
   }finally{
    try{ss.close();
    }catch(IOException e){
     e.printStackTrace();
    }
    }
   }
 
   class Client implements Runnable{
        private Socket s;
        private DataInputStream dis=null;
        private DataOutputStream dos=null;
        private boolean connected=false;
       
        public Client(Socket s){
         this.s=s; 
         try {
    dis=new DataInputStream(s.getInputStream());
    dos=new DataOutputStream(s.getOutputStream());
    connected=true;
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
        }
       
        public void send(String str){
         try {
    dos.writeUTF(str);
   } catch (IOException e) {
       clients.remove(this);
       System.out.println("对方退出了!"); 
    //e.printStackTrace();
   }
   }
       
  public void run() {
   Client c=null;
            try{  
       while(connected){
                   String str=dis.readUTF();
System.out.println(str);
                      for(int i=0;i<clients.size();i++){
                       c=clients.get(i);
                       c.send(str);
                      }      
       }
       } catch(SocketException e){
        if(c !=null){
      clients.remove(c);
     
       }
                } catch (EOFException e) {
    System.out.println("Client closed!");
       } catch(IOException ioe){
    ioe.printStackTrace();
   }
   finally{
    try {
     if(dis!=null)dis.close();
     if(dos!=null)dos.close();
     if(s!=null){
      s.close();
      s=null;
      }       
    } catch (Exception e1) {
     // TODO Auto-generated catch block
     e1.printStackTrace();
    }
    
    
   }
  }
     }
}

 

 

 

 

/*

*   客户端

*/

 

import java.awt.*;
import java.awt.event.*;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.*;

public class ChatClient extends Frame{
 Socket s=null;
 DataOutputStream dos=null;
 DataInputStream dis=null;
 boolean connected=false;
 
 TextField tfTxt=new TextField();
 TextArea taContent=new TextArea();
 Thread tRecv=new Thread(new RecvThread());

 public static void main(String[] args) {
  new ChatClient().launchFrame();
 }  
 
    public void launchFrame(){
     this.setLocation(400, 200);
     setSize(500,500);
     add(tfTxt,BorderLayout.SOUTH);
     add(taContent,BorderLayout.NORTH);
     pack();
     this.addWindowListener(new WindowAdapter(){

   public void windowClosing(WindowEvent arg0) {
       disConnect(); 
    System.exit(0);
   }
      
        });
     tfTxt.addActionListener(new tfListener());
     this.setVisible(true);
     connect();
     
     tRecv.start();
     
     //new Thread(new RecvThread()).start();
     
    }
   
    public void disConnect(){
     try {
   dos.close();
   dis.close();
   s.close();
  } catch (IOException e) {
   e.printStackTrace();
  }
     
     /*
     try {
      connected=false;
      tRecv.join();
   }catch (InterruptedException e) {
    e.printStackTrace();
  }
  finally{
   try {
    dos.close();
    dis.close();
    s.close();
   } catch (IOException e) {
    e.printStackTrace();
   }
  }
  */
    }
   
    public void connect(){
     try {
   s=new Socket("127.0.0.1",8888);
   dos=new DataOutputStream(s.getOutputStream());
   dis=new DataInputStream(s.getInputStream());
System.out.println("Connected!");
         connected=true;
  } catch (UnknownHostException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  }
    }
 
    private class tfListener implements ActionListener{

  public void actionPerformed(ActionEvent arg0) {
   String str=tfTxt.getText();
   //taContent.setText(str);
   tfTxt.setText("");
   try {
    //DataOutputStream dos=new DataOutputStream(s.getOutputStream());
    dos.writeUTF(str);
    dos.flush();
    //dos.close();
   } catch (IOException e) {
    e.printStackTrace();
   }
  }
     
    }

      public class RecvThread implements Runnable{

  public void run() {
   try {
       while(connected){
        String str;
       str = dis.readUTF();
     //System.out.println(str);
       taContent.setText(taContent.getText()+str+'\n');
    }
       }catch(SocketException e){
     System.out.println("退出了,byebye!");
    } catch (IOException e) {
     e.printStackTrace();
    }
    
   }
  }
      
      }

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值