使用UDP实现IP多点传送出错

我的服务器端代码:package com.zf.s13;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Date;
public class TextMuliticastServer {
public static void main(String[] args) throws IOException {
new MulticastServerThread().start();
}
}
class MulticastServerThread extends QuoteServerThread {
private long FIVE_SECOND = 5000; // 定义常量,5秒钟
public MulticastServerThread() throws IOException {
super("MulticastServerThread");
}
public MulticastServerThread(String name) throws IOException {
super(name);
}
public void run() // 重写父类的线程主体
{
while (moreQuotes) {// 根据标志变量判断是否继续循环
try {
byte[] buf = new byte[256];// 创建缓冲区
String dString = null;
if (in == null)
dString = new Date().toString();//使用日期作为要传送的字符串
else
dString = getNextQuotes();// 调用方法从文件中读出字符串
buf = dString.getBytes();// 转换成字节数组
InetAddress group = InetAddress.getByName("136.122.133.1");// 获得地址信息
DatagramPacket packet = new DatagramPacket(buf, buf.length,group, 8888);//根据缓冲区,广播地址,和端口号创建DatagramPacket对象
socket.send(packet); //发送
try {
sleep((long) (Math.random() * FIVE_SECOND));// 随机等待一段时间,0~5秒之间
} catch (Exception e) {//捕获异常
}
} catch (IOException e) { //捕获IO异常
moreQuotes = false; //结束循环标志
}
}
socket.close(); //关闭广播套接口
}
}
class QuoteServerThread extends Thread {
protected DatagramSocket socket = null;//记录和本对象相关联的DatagramSocket对象
protected BufferedReader in = null;//用来读文件的一个Reader
protected boolean moreQuotes = true;// 标志变量,是否继续操作
public QuoteServerThread() throws IOException {// 无参数的构造函数
this("QuoteServerThread");
}
public QuoteServerThread(String name) throws IOException {
super(name); // 调用父类的构造函数
socket = new DatagramSocket(8888);// 在端口4445创建数据报套接字
try {
in = new BufferedReader(new FileReader("F:/11.txt"));//打开一个文件构造相应的BufferReader对象
} catch (Exception e) { // 异常处理
}
}
public void run() // 线程主体
{
while (moreQuotes) {
try {
byte[] buf = new byte[256]; // 创建缓冲区
DatagramPacket packet = new DatagramPacket(buf, buf.length);// 由缓冲区构造DatagramPacket对象
socket.receive(packet); // 接收数据报
String dString = null;
if (in == null)
dString = new Date().toString();//使用日期作为要传送的字符串
else
dString = getNextQuotes();//调用方法从文件中读出字符串
buf = dString.getBytes();//转换成字节数组,以便传送
InetAddress address = packet.getAddress();//从客户端获得地址
int port = packet.getPort(); //获得端口号
packet = new DatagramPacket(buf, buf.length, address, port);//根据客户端信息构建DatagramPacket
socket.send(packet); // 发送数据报
} catch (IOException e) { // 异常处理
e.printStackTrace(); // 打印错误栈
moreQuotes = false; // 标志变量置false,以结束循环
}
}
socket.close(); // 关闭数据报套接字
}
protected String getNextQuotes() {
String returnValue = null;// 成员函数,从文件中读数据
try {
if ((returnValue = in.readLine()) == null) {// 从文件中读一行,如果读到了文件尾
in.close(); // 关闭输入流
moreQuotes = false;//以结束循环
returnValue = "No more quotes. Goodbye.";
}
} catch (Exception e) { //异常处理
returnValue = "IOException occurred in server";
//置异常返回值
}finally{
System.out.println(returnValue);
}
return returnValue; //返回字符串
}
}
客户端代码:
package com.zf.s13;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.MulticastSocket;

public class TextMuliticastClient {
public static void main(String[] args) throws IOException {
MulticastSocket socket = new MulticastSocket(4446);
InetAddress address = InetAddress.getByName("136.122.133.1");
socket.joinGroup(address);
DatagramPacket packet;

for (int i = 0; i < 5; i++) {
byte[] buf = new byte[256];
packet = new DatagramPacket(buf, buf.length);
socket.receive(packet);
String received = new String(packet.getData());
System.out.println("Quote of the Moment: " + received);
}

socket.leaveGroup(address);
socket.close();
}

}
怎么在客户端总是出现 Not a multicast address错误?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值