JAVA聊天客户端

来源:互联网 发布:济南申宝网络balkwill 编辑:程序博客网 时间:2024/05/16 04:09
花了2天写时间写了个这个小东东,第一次发,大家不要见笑笑,呵呵!

多播类:

/**
 *  程序名称:Broadcast.java
 *  程序作用:创建一个多播类,用于数据的发送与接收
 *  程序作者:J.J.Y
 *
 */
 import java.io.*;
 import java.net.*;
 
 public class Broadcast
 {
  //定义播段地址,接收端口,发送端口
  public static final String BroadcastGroup = "228.6.7.8";
  public static final int BroadcastRecvPort = 4567;
  public static final int BroadcastSendPort = 4566;
  
  //接收字符串
  private String Message;
  //接收包和发送包
  private DatagramPacket DataSendPacket;
  private DatagramPacket DataRecvPacket;
  //private DatagramSocket SendSocket;
  //接收缓冲区和发送缓冲区
  private byte[] SendBuf = new byte[1024];
  private byte[] RecvBuf = new byte[1024];
  //发送Socket
  private DatagramSocket SendSocket;
  //多播类
  MulticastSocket BroadcastClass;
  //构造函数
  public Broadcast()
  {
   try
   {
       //发送Socket初始化
       SendSocket = new DatagramSocket();
       //多播段初始化
       BroadcastClass = new MulticastSocket(BroadcastRecvPort);
       //确定多报播地址
       BroadcastClass.joinGroup(InetAddress.getByName(BroadcastGroup));
   }
   catch(IOException e)
   {
    e.printStackTrace();
   }
  }
  
  //发送数据
  public void SendData(String InMsg)
  {
   try
   {
       //发送数据包初始化
       SendBuf = InMsg.getBytes();
       int length = InMsg.getBytes().length;
       DataSendPacket = new DatagramPacket(SendBuf,length,InetAddress.getByName(BroadcastGroup),BroadcastRecvPort);
         //数据发送
          SendSocket.send(DataSendPacket);
        }
        catch(IOException ioe)
        {
         ioe.printStackTrace();
        }
  }
  
  //接收数据并返回
  public String GetData()
  {
   try
   {
       //接收数据并送与接收缓冲区
       DataRecvPacket = new DatagramPacket(RecvBuf,1024);
       BroadcastClass.receive(DataRecvPacket);
       //取得数据并返回数据
       Message = new String(DataRecvPacket.getData(),0,DataRecvPacket.getLength());
       Message = Message + " from " + DataRecvPacket.getAddress().getHostName();
       Message = Message + " 端口 " + DataRecvPacket.getPort();
      }
      catch (IOException ioe)
      {
       ioe.printStackTrace();
      }
      return Message;
  }
 }

/**一个接收线程,主要用于接收数据,随便也写了发送数据
 *   程序名称:Receiver.java
 *   程序作用:接收线程类
 *   程序作者:J.J.Y
 */
 
 import java.net.*;
 import java.io.*;
 import javax.swing.*;
 
 public class Receiver extends Thread
 {
  //接收的信息
  private String Message;
  private JTextArea displayArea;
  Broadcast Recv = new Broadcast();
  //构造函数,
    public Receiver(JTextArea RecvArea)
    {
     displayArea = RecvArea;
    }
   
    public void run()
    {
     while (true)
     {
      //监听接收数据包
      Message = Recv.GetData();
      //System.out.println(Message);
      //displayArea.setText("11111");
      displayArea.append(Message + "/r/n");
     } 
    }
   
    //发送数据
    public void SendMessage(String InMsg)
    {
     Recv.SendData(InMsg);
    }
 }

/**
 *   程序名称:ChatClient.java
 *   程序作用:UDP聊天客户端
 *   程序作者:J.J.Y
 */ 
 import javax.swing.*;
 import java.awt.*;
 import java.awt.event.*;
 
 public class ChatClient extends JFrame implements ActionListener
 {
  //接收线程
  Receiver recv;
  //发送文本框
  JTextField Sendtxt;
    public ChatClient()
  {
        //客户端界面简单初始化
        Sendtxt = new JTextField();
        Sendtxt.addActionListener(this);
        JTextArea DisplayArea = new JTextArea();
        JScrollPane js =new JScrollPane();
         JViewport port = js.getViewport();
      port.add(DisplayArea);
        // System.out.println(js.getLayout());
        //js.add(DisplayArea);
        this.getContentPane().add(BorderLayout.CENTER,js);
        this.getContentPane().add(BorderLayout.SOUTH,Sendtxt);
        this.setSize(300,300);
        this.show();
        //Broadcast brd = new Broadcast();
        //brd.SendData("客户端初始化");
        //创建一个新的接收线程并运行
        recv = new Receiver(DisplayArea);
        recv.start();
  }
  
  //事件响应代码
  public void actionPerformed(ActionEvent e)
  {
   //文本框有内容才发送数据
   if (Sendtxt.getText().length() != 0)
   {
    recv.SendMessage(Sendtxt.getText());
   }
  }
  
  public static void main(String args[])
  {
   new ChatClient();
  }
 }

在JDK1.4.2测试通过,直接编译ChatClient.java运行。

原创粉丝点击