神码组的聊天室项目。

来源:互联网 发布:c 网络编程 pdf 编辑:程序博客网 时间:2024/05/16 10:17

聊天室代码及注释

package NetChat;

import java.awt.BorderLayout;

 //这是一个布置容器的边框布局,它可以对容器组件进行安排,并调整其大小,使其符合下列五个区域:北、南、东、西、中。 

import java.awt.List;  

//List 组件为用户提供了一个可滚动的文本项列表。

import java.awt.TextField;

 //TextField对象是允许编辑单行文本的文本组件。

importjava.awt.event.ActionEvent;

 //Event类已废弃,只可用于向后兼容。

importjava.awt.event.ActionListener;  

importjava.io.IOException; 

//当发生某种 I/O异常时,抛出此异常。

importjava.net.DatagramPacket; //此类表示数据报包。

importjava.net.DatagramSocket;  //此类表示用来发送和接收数据报包的套接字。

importjava.net.InetAddress;  //此类表示互联网协议 (IP)地址。

importjava.net.SocketException; //抛出此异常指示在底层协议中存在错误,如 TCP错误。

importjava.net.UnknownHostException; //指示主机 IP地址无法确定而抛出的异常。

 

importjavax.swing.JFrame;   //java.awt.Frame 的扩展版本,该版本添加了对 JFC/Swing组件架构的支持。窗口框架。

importjavax.swing.JPanel;   //JPanel 是一般轻量级容器,面板。 

 

 

publicclass netchat {

    JFrame jf = new JFrame("聊天窗口");

    //新建一个顶层容器窗口框架,为聊天窗口jf

       List l = new List(6);//新建一个列表l,长度为6

       JPanel jp =new JPanel();//新建一个中间容器面板jp

       TextField tip = newTextField(15);  

       TextField tdata = new TextField(15);

       //新建两个文本框tiptdata,长度为15

       DatagramSocket ds;  

     //通过DatagramSocket类创建一个Socket(套接字)对象ds

       // DatagramPacket dp;  

       public netchat() {  

           tip.setText("127.0.0.1");

           //调用tipsetText方法设置其内容为127.0.0.1 

           try {  

               ds = newDatagramSocket(3000);  

           } catch (SocketExceptione) {  

               e.printStackTrace();  

           }  //捕获异常

           new Thread(new Runnable()  

     //实例化Thread类创建一个线程,用来传递Runnable

           {  

               DatagramPacket dp;

               //通过DatagramPackeet类创建一个Packet(数据报)对象dp

    

               publicvoid run() {  

                   byte[] buf =newbyte[1024];//定义一个字节变量buf,长度为1024 

                   dp = newDatagramPacket(buf, 1024);//实例化数据报dp,容量大小为1024个字节

                   while (true) {//循环为true,即一直实现监听状态,实现实时接收

                       try {  

                           ds.receive(dp);//调用Socketreceive方法进行数据报的接收 

                           //l.add(dp.getAddress().getHostName()+"say:"+new  

                           // String(buf,0,dp.getLength()),-1);  

                           //l.add(dp.getAddress().getHostAddress()+" say:"+new  

                           // String(buf,0,+dp.getLength()),-1);  

                           System.out.println("aaaa");//输出aaaa 

    

                           String str = new String(dp.getData(), 0,dp.getLength());

                           //定义一个字符串变量str内容为数据报的内容和长度

                           System.out.println("数据1是:" + str);  

                          //输出数据1str的内容

                           String str2 = new String(buf, 0,dp.getLength());

                           //定义字符串变量str2其内容为buf的内容和长度

                           System.out.println("数据2是:" + str2);  

                            //输出数据2str2的内容

                           l.add(dp.getAddress().getHostAddress()+" say:" + str,  

                                   -1);  

                       } catch (IOException e){  

                          e.printStackTrace();  //捕获IO端口异常

                       }  

                   }  

               }  

           }).start(); //线程开始 

    

       }  

    

 

   publicstaticvoid main(String[]args) {//主程序

       newnetchat().init(); //实例化netchatinit方法

    }  

 

    privatevoid init() {  

        jf.add(l);  //列表

        jp.add(tip, BorderLayout.WEST); //在文本框tip中添加加组件

        jp.add(tdata, BorderLayout.EAST);//在文本框tdata中添加组件 

        jf.add(jp, BorderLayout.SOUTH); //向容器jp中添加组件

        jf.setSize(400,300);  //设置窗体大小

        jf.setVisible(true); //设置窗体是否可见,可见

        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  

          //设置窗体的关闭操作

        tdata.addActionListener(new ActionListener(){

      //实例化tdataaddActionListener方法添加一个新的ActionListener变量

           publicvoidactionPerformed(ActionEvent e) {  

               byte[] buf;  

 

               String str222 = e.getActionCommand();  

               buf = str222.getBytes();  

               System.out.println("ddd=" + str222);  

               l.add("我说:" + str222, -1);  

               //buf = e.getActionCommand().getBytes();  

               DatagramPacket dp;  

               //通过DatagramPackeet类创建一个Packet(数据报)对象dp

               try {  

                   dp =new DatagramPacket(buf, buf.length,InetAddress  

                           .getByName(tip.getText()),3000);  

                   ds.send(dp);  

               }catch (UnknownHostException e1) {  

                   e1.printStackTrace();  

               }catch (IOException e1) {  

                   e1.printStackTrace();  

               }  

               ((TextField) e.getSource()).setText("");  

           }  

       });  

   }

 

}

 

 

0 0
原创粉丝点击