java se 局域网小聊天室

来源:互联网 发布:淘宝怎样退货 编辑:程序博客网 时间:2024/05/24 06:57

//主进程

package com.study.chat;

import java.net.DatagramSocket;
import java.net.SocketException;

public class start {

    public static void main(String[] args) throws SocketException {
        // TODO Auto-generated method stub
        DatagramSocket sendds=new DatagramSocket();
        DatagramSocket receds=new DatagramSocket(13000);
        Rece rece=new Rece(receds);
        Send send=new Send(sendds);
        new Thread(rece).start();     //多线程
        new Thread(send).start();
    }

}

//聊天室

package com.study.chat;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

public class Rece implements Runnable {
    
    private DatagramSocket ds;
    public Rece(DatagramSocket ds) {
        this.ds=ds;
    }
    @Override
    public void run() {
        // TODO Auto-generated method stub
        try {
            byte[] buf=new byte[1024];
            DatagramPacket dp=new DatagramPacket(buf, 0, buf.length);
            ds.receive(dp);
            String ip=dp.getAddress().getHostAddress();
            String content=new String(dp.getData(),0,dp.getLength());
            System.out.println(ip+":"+content);
            if(content.equals("886")) {
                System.out.println("提示"+ip+"已经退出聊天室");
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

//发送信息

package com.study.chat;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;

public class Send implements Runnable {

    private DatagramSocket ds;
    private DatagramPacket dp;

    public Send(DatagramSocket ds) {
        this.ds=ds;
    }
    @Override
    public void run() {
        // TODO Auto-generated method stub
        try {
            // 键盘输入
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            String line = null;
            while ((line = br.readLine()) != null) {
                byte[] buf = new byte[1024];
                buf = line.getBytes();
                // 192.168.1.255 为此网段广播,这样所有在该网段的电脑都能收到
                dp = new DatagramPacket(buf, buf.length, InetAddress.getByName("192.168.1.255"), 13000);
                ds.send(dp);
                if("886".equals(line))
                    break;
            }
            ds.close();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}