UDP通信 :主要的方向是一对多通信方式 UDP通信就是一下子可以通信多个对象,这就是UDP对比TCP的优势,UDP它的原理 就是开启服务端 然后客户端依次连接客户端 于TCP不同的是他不会一个一个跟客户端说而是跟微信群聊一样它在给这些客户端发送消息 缺点 :服务端会发送消息给到客户端 但是有些客户端并不会接收到消息, 或者没有看到消息 。这就是UDP的缺点, 不能保证所有客户端都能收到消息。UDP对比于TCP的缺点,就是不能保证每一个人都能够接收到消息 ,但是优点就是可以一下子跟好多个对象进行通信,但是不能保证可靠度,以下由代码讲解:
服务端类代码:
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;
//广播 先运行
public class Notification extends Thread{
String weather = "节目预报:八点有大型晚会,请收听";//发送消息
int port = 9898;//端口号
InetAddress iaddress = null;
MulticastSocket socket = null;//多点广播套接字
Notification(){
try {
iaddress = InetAddress.getByName("224.255.10.0");//地址
socket = new MulticastSocket(port);//实例化多点广播套接字
socket.setTimeToLive(1);//指定发送范围是本地网络
socket.joinGroup(iaddress);//加入广播组
}catch(IOException e){
e.printStackTrace();//输出异常信息
}
}
public void run(){//run方法
while(true) {
DatagramPacket packet = null;//数据包
byte data[]=weather.getBytes();//字符串消息的字节数组
packet = new DatagramPacket(data,data.length,iaddress,port);//将数据打包
System.out.println(weather);//控制台打印消息
try {
socket.send(packet);//发送数据
sleep(3000);//让线程休眠3000毫秒
}catch(IOException e){
e.printStackTrace();
}catch(InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[]args) {
Notification w =new Notification();
w.start();//启动线程
}
}
客户端:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.WindowConstants;
//接收 后运行
public class Receive extends JFrame implements Runnable, ActionListener {
int port ;//端口
InetAddress group =null;//广播组地址
MulticastSocket socket = null;//多点广播套接字对象
JButton inceBtn = new JButton("开始接收");
JButton stopBtn = new JButton("停止接收");
JTextArea inceAr = new JTextArea(10,10);//显示接收广播的文本域
JTextArea inced = new JTextArea(10,10);
Thread thread ;
boo