动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Java教程 ]的信息

本月文章推荐
.MVC 设计模式:将 Web 应用分三层.
.传言乍起,谁将收购SUN?.
.Java图形调试器 JSwat .
.Excel的java处理方式.
.用JAR发布JAVA应用程序.
.浅析Java中Data类的应用.
.Javascript实例教程(15) 日期函数.
.利用IO流:::(二种方法)读取.
.用JavaScript实现网页特效二例.
.引用 造型 protected和private的.
.DriveExists 方法.
.J2EE层次设计架构实例的分析详解.
.Javadoc 利弊分析.
.JDBC编程基础--很不错的文章!.
.SSO各产品单点登录的简单实现.
.Java在Client/Server网络中的应用.
.内部类可以覆盖吗?.
.Java语言出现的背景、影响及应用.
.Eclipse大整理之还回一个干净的E.
.使用私有构造函数来强化单态性.

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

发表日期:2008-1-5 |



  以下程序在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);
上一篇:很简短的几句就能访问文件输出文件 人气:677
下一篇:修改ZipInputStream支持中文名文件解压 人气:964
浏览全部Java的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-8-29 oblog v4.6 build 20080827
2008-8-29 ASBLOG v2.5 bulid 080828
2008-8-29 时尚DJ舞曲小偷 v3.1
2008-8-29 仿代码信息分类系统 v1.0 Beta3
2008-8-29 浮梦呓语-个人网站 完整版
2008-8-29 多用户QQ空间Flash播放器
2008-8-29 美思卡企业网站管理系统高级版
2008-8-28 LDV个人相册系统 v1.6.1
2008-8-28 讯时网站管理系统CMS v3.5
2008-8-23 Mini WinMount V0.4
2008-8-23 Vista优化大师3.11正式版
2008-8-23 Wine 1.13
2008-8-23 KlipFolio 5.0 Build 5899-80
2008-8-23 Windows Sysinternals Desktops
2008-8-23 OneTap Movies1.2破解版
2008-8-23 AnnotaterPDF阅读1.1.503 破解版
2008-8-23 SoundMeter分贝测量仪 v1.0汉化破
2008-8-23 iDrum音乐节拍1.0破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | Html转换js | js/vbs加密 | md5加密 | 进制转换
实用工具:汉字翻译拼音 | 符号对照表 | 个税计算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵