【小程序】使用UDP实现群聊功能

说明:该程序使用了多线程技术,在使用的时候请将发送IP该成广播IP地址,即可实现群聊:

/*

* 群聊主线程

*/

package com.lin.michael;

public class CharMain {

public static void main(String[] args){

//启动接收线程

ChartReceieve chartReceieve = new ChartReceieve();

chartReceieve.start();

//开启发送线程

ChartSender chartSender = new ChartSender();

chartSender.start();

}

}

//发送类

/*

* 群聊发送端

*/

package com.lin.michael;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.net.DatagramPacket;

import java.net.DatagramSocket;

import java.net.InetAddress;

import java.net.SocketException;

import java.net.UnknownHostException;

public class ChartSender extends Thread {

@Override

public void run() {

try {

//1.建立udp通信

DatagramSocket socket = new DatagramSocket();

//2.准备数据,把数据放入到数据包中发送

BufferedReader keyReader = new BufferedReader(new InputStreamReader(System.in));

String line = null;

DatagramPacket packet = null;

while((line=keyReader.readLine())!=null){

//把数据封装到数据包中发送出去

packet = new DatagramPacket(line.getBytes(), line.getBytes().length, InetAddress.getLocalHost(),9090);

//把数据发送出去

socket.send(packet);

}

//关闭资源

socket.close();

} catch (SocketException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (UnknownHostException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

//接收类

/*

* 群聊接收端

*/

package com.lin.michael;

import java.io.IOException;

import java.net.DatagramPacket;

import java.net.DatagramSocket;

import java.net.SocketException;

public class ChartReceieve extends Thread{

@Override

public void run() {

try {

//1.建立udp服务,要监听一个端口;

DatagramSocket socket = new DatagramSocket(9090);

//2.准备数据并使用包来封装

byte[] buf = new byte[1024];

DatagramPacket packet = new DatagramPacket(buf, buf.length);

//持续接收发送的数据

while(true){

//接收数据包放入到packet中

socket.receive(packet);

System.out.println(packet.getAddress().getHostAddress() + "说:" + new String(buf, 0, packet.getLength()));

}

} catch (SocketException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、 1、请用Java写一个冒泡排序方法 【参考答案】 public static void Bubble(int...
    独云阅读 5,244评论 0 6
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,930评论 18 399
  • 一. Java基础部分.................................................
    wy_sure阅读 9,246评论 0 11
  • 泛型 对象和实例是一个意思,类与对象的关系就像数据类型和变量一样。 泛型的主要目的之一就是用来指定类(如:容器)要...
    yueyue_projects阅读 3,647评论 0 0
  • 【Day 21】坚持是不容易的。坚持以后得到的成果也是高兴的。晚上贝贝泡脚的时候读了《It is my birth...
    幸福满屋Emily阅读 2,571评论 0 0