服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

用java实现的一个c/s完整聊天程序


  以下程序在jdk1.4.1中调试通过;
  os : windows xp
  本程序有一个空发消息的处理问题,希望大家多多指教!
  mainto:yzmhacke.163.com
  
  客户端的程序:
  
  //client.java
  import java.io.*;
  import java.net.*;
  import java.awt.*;
  import java.awt.event.*;
  
   public  class  client extends frame implements
   actionlistener,runnable{
     
     private textfield tf1,tf2;
     private label la1,la2;
     private textarea ta1,ta2;
     private socket s;
     private button b,l;
     private bufferedreader br=null;
     private printwriter pw=null;
       // static string  port,ip;
     public static void  main(string arg[]) {
       new client();
     //if(arg[0].length()!=0) ip=arg[0];
      //if(arg[1].length()!=0) port=arg[1];
       }
     
     //完成构造函数的说明
     public client(){
       //完成ip地址与端口的建立
       setlayout(new gridlayout(6,1));
       panel panel=new panel();   
       tf1=new textfield(20);
       tf2=new textfield(10);
       la1=new label("ip地址 ");
       
       la2=new label("对应端口  ");
       button l=new button("连接");
       l.setbackground(color.green);
       //l.addactionlistener(this);
       panel.add(la1);
       panel.add(tf1);
       panel.add(la2);
       panel.add(tf2);
       panel.add(l);
       add(panel);
      
      //输入框与显示框
      
       ta1=new textarea(100,300);
      
       add(new label("消息框"));
      
       add(ta1);
       add(new label("用户输入框"));
       ta2=new textarea(30,300);     
       
        add(ta2);
       panel p2=new panel();
       b=new button("发送");
       b.setbackground(color.yellow);
       p2.add(b);
       add(p2);
       settitle("客户端");
       setsize(300,450);
       setresizable(false);
       setvisible(true);
       //捕获各种的异常
       l.addactionlistener(this); 
     //  b.addactionlistener(this);
       //增加了一个关闭的事件
       addwindowlistener(new windowadapter(){
         
       public void windowclosing(windowevent exit){ system.exit(0);}});
       thread  threadreader=new thread(this);
       
       threadreader.start();
       
      b.addactionlistener(this);      
      
       
   }
       
   public void run(){
            while(true){
          try{
            ta1.append("/n #_____________________________#/n"+br.readline());
         }catch(exception exo){}
         }  
     }
     
      //客户向服务端发送消息啊!
    
  
  
   public void actionperformed(actionevent e)
    {  string command=e.getactioncommand();
      
      if("发送".equals(command))
       { 
        if(ta2.gettext().trim()!=null)
         { 
          ta1.append("/n 客户端的消息:/n"+ta2.gettext());
          pw.println(ta2.gettext()+"/n");//" /n  客户短信: /n "
          } 
        else
            if(ta2.gettext().trim()==null)
        { ta1.append("请输入完整的ip地址与端口以及、/n"+"不能空发消息");} 
            
      
            ta2.settext(" "); //结束的时候清空文本框
       }
     else
      if("连接".equals(command)){
          
      try
        {
        
        //借助连接的按钮完成远程pc的连接的工作。建立输入与输出流两个工具
       s=new socket(tf1.gettext().tostring(),integer.parseint((tf2.gettext()).trim()));
       //integer.parseint((tf2.gettext()).trim())
       br=new bufferedreader(new inputstreamreader(s.getinputstream()));
       pw=new printwriter(s.getoutputstream(),true);
       //ta1.append("/n 服务端来消息:/n"+br.readline());
       }
       catch(exception ex){
         //ta1.append("产生了输入输出异常无法完成交互!");
         }
        
       }     
          
      } 
                
    
   } 
  
  
  /*******************服务端的程序*************************/
  //server.java
  package server;
  import java.io.*;
  import java.awt.*;
  import java.net.*;
  import java.awt.event.*;
  
  public class server{
    public static void main(string arg[]){
       serverservice myserver=new serverservice(8000,10);  
      
    }
   }
   //交互端的服务窗口  
   class servicethread extends frame
   implements actionlistener,runnable{
       serverservice fatherlistener;
       socket connectedclient;
      thread  connectedthread;
      panel  listenepanel;
      textarea  servermeg;
      textarea serverwrite;
      label la; 
      button bt;
      bufferedreader in;
      printwriter out;  
     public servicethread(serverservice sv,socket s){
            //容器与格子组建的结合
            
             fatherlistener=sv;
             connectedclient=s;
             connectedthread =new thread(this);
             //采用线程的目的是利用他的并发机制,实现多个任务
            
             //在当前的类中(this)通过runnabel()接口实现thread()的run()方案
            
            
             settitle("answer client");
             setlayout(new gridlayout(4,1));
             //采用格子组建的形式完成组建的安排
            
             servermeg=new textarea(null,5,45,textarea.scrollbars_vertical_only);
             //添加各种组建到容器当中
             listenepanel=new panel();
             listenepanel.add(servermeg);
             add(listenepanel);
             addwindowlistener(new windowadapter(){
               public void windowclosing(windowevent e){
                //((frame)e.getwindow()).dispose();//保留的语句
                 system.exit(0);
                 }});
             //第二个panel()
            
            la=new label("服务端消息输入框...............");
            add(la);
            serverwrite=new textarea(10,50);
            add(serverwrite);
             //add(p2);
             setsize(355,360);
            
             panel p3=new panel();
            
             bt=new button("传送");
             bt.addactionlistener(this);
             p3.add(bt);
             add(p3);
           
             setresizable(false);

扫描关注微信公众号