网络聊天工具

package com.wyj.thread.socket;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class NetChat extends JFrame implements ActionListener
{
   
    private JTextField txtSend;
   
    private JTextArea txaContent;
   
    JButton btnSend;
   
    DatagramSocket socket = null;
   
    /**
    * @param args
    */
    public static void main(String[] args)
    {
        new NetChat();
    }
   
    public NetChat()
    {
       
        this.setBounds(130, 130, 219, 359);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
       
        getContentPane().setLayout(null);
       
        txaContent = new JTextArea();
        txaContent.setBounds(10, 10, 178, 265);
        getContentPane().add(txaContent);
       
        txtSend = new JTextField();
        txtSend.setBounds(10, 298, 113, 22);
        getContentPane().add(txtSend);
       
        btnSend = new JButton();
        btnSend.addActionListener(this);
        btnSend.setText("send");
        btnSend.setBounds(129, 295, 69, 28);
        getContentPane().add(btnSend);
        try
        {
            socket = new DatagramSocket(8888);
        }
        catch (SocketException e)
        {
            // TODO 自动生成 catch 块
            e.printStackTrace();
        }
        // 启动线程
        new Thread(new RecieveInfo(socket)).start();
    }
   
    public void actionPerformed(final ActionEvent e)
    {
        if (e.getSource() == btnSend)
        {
            // 定义套接字
           
            try
            {
                // 要发送的信息
                String mess = txtSend.getText();
               
                if (mess.equals(""))
                {
                    return;
                }
               
                // 定义发送包
                DatagramPacket dp = new DatagramPacket(mess.getBytes(),
                        mess.getBytes().length,
                        InetAddress.getByName("127.0.0.1"), 8888);
                // 发送
                socket.send(dp);
               
            }
            catch (Exception e1)
            {
                // TODO 自动生成 catch 块
                e1.printStackTrace();
            }
            finally
            {
                // socket.close();
            }
        }
       
    }
   
    class RecieveInfo implements Runnable
    {
        DatagramSocket socket;
       
        public RecieveInfo(DatagramSocket socket)
        {
            this.socket = socket;
        }
       
        public void run()
        {
            byte[] tempByte = null;
            int length = 0;
           
            try
            {
               
                while (true)
                {
                   
                    byte[] bs = new byte[512];
                   
                    // 定义接收包
                    DatagramPacket dp = new DatagramPacket(bs, bs.length);
                    //接收信息
                    try
                    {
                        socket.receive(dp);
                    }
                    catch (IOException e)
                    {
                        e.printStackTrace();
                    }
                   
                    for (byte b : bs)
                    {
                        if (0 != b)
                        {
                            length++;
                        }
                    }
                   
                    tempByte = new byte[length];
                   
                    for (int i = 0; i < 512; i++)
                    {
                        if (0 != bs[i])
                        {
                            tempByte[i] = bs[i];
                        }
                    }
                    // 将字节数组转换为字符串
                    String mess = new String(tempByte);
                    txaContent.append(mess + "\n");
                    System.out.println(mess);
                   
                    length = 0;
                }
            }
            catch (Exception e)
            {
                // TODO 自动生成 catch 块
                e.printStackTrace();
            }
            finally
            {
                //socket.close();
            }
           
        }
       
    }
   
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值