龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > JAVA开发 >

用Java实现的一个C/S完整聊天程序

时间:2009-12-23 15:42来源:未知 作者:admin 点击:
分享到:
以下程序在jdk1.4.1中调试通过; OS : Windows XP 本程序有一个空发消息的处理问题,希望大家多多指教! mainto:yzmhacke.163.com 客户端的程序: //Client.Java import java.io.*; import java.net.*; import java.awt.*

  以下程序在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(" #_____________________________# "+br.readLine());
   }catch(Exception exo){}
   }  
   }
   
  //客户向服务端发送消息啊!
  
  
  
   public void actionPerformed(ActionEvent e)
    {  String command=e.getActionCommand();
  
  if("发送".equals(command))
   { 
    if(ta2.getText().trim()!=null)
   { 
  ta1.append("  客户端的消息: "+ta2.getText());
  pw.println(ta2.getText()+" ");//"   客户短信: "
  } 
  else
  if(ta2.getText().trim()==null)
  { ta1.append("请输入完整的IP地址与端口以及、 "+"不能空发消息");} 
  
  
    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(" 服务端来消息: "+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);
  
精彩图集

赞助商链接