为什么在同一局域网下的不同电脑上边运行该程序,不可以实现网络通信?该代码时《疯狂的Java讲义》中MulticastSocket网络编程内容!
import java.net.*;
import java.io.*;
import java.util.*;
/**
Description:
<br/>网站: 疯狂Java联盟
<br/>Copyright (C), 2001-2016, Yeeku.H.Lee
<br/>This program is protected by copyright laws.
<br/>Program Name:
<br/>Date:
@author Yeeku.H.Lee kongyeeku@163.com
@version 1.0
*/
// 让该类实现Runnable接口,该类的实例可作为线程的target
-
class MulticastSocketTest implements Runnable
{// 使用常量作为本程序的多点广播IP地址 private static final String BROADCAST_IP = "230.0.0.1"; // 使用常量作为本程序的多点广播目的的端口 public static final int BROADCAST_PORT = 30000; // 定义每个数据报的最大大小为4K private static final int DATA_LEN = 4096; //定义本程序的MulticastSocket实例 private MulticastSocket socket = null; private InetAddress broadcastAddress = null; private Scanner scan = null; // 定义接收网络数据的字节数组 byte[] inBuff = new byte[DATA_LEN]; // 以指定字节数组创建准备接受数据的DatagramPacket对象 private DatagramPacket inPacket = new DatagramPacket(inBuff , inBuff.length); // 定义一个用于发送的DatagramPacket对象 private DatagramPacket outPacket = null; public void init()throws IOException { try( // 创建键盘输入流 Scanner scan = new Scanner(System.in)) { // 创建用于发送、接收数据的MulticastSocket对象 // 由于该MulticastSocket对象需要接收数据,所以有指定端口 socket = new MulticastSocket(BROADCAST_PORT); socket.setTimeToLive(1); broadcastAddress = InetAddress.getByName(BROADCAST_IP); // 将该socket加入指定的多点广播地址 socket.joinGroup(broadcastAddress); // 设置本MulticastSocket发送的数据报会被回送到自身 socket.setLoopbackMode(false); // 初始化发送用的DatagramSocket,它包含一个长度为0的字节数组 outPacket = new DatagramPacket(new byte[0] , 0 , broadcastAddress , BROADCAST_PORT); // 启动以本实例的run()方法作为线程体的线程 new Thread(this).start(); // 不断读取键盘输入 while(scan.hasNextLine()) { // 将键盘输入的一行字符串转换字节数组 byte[] buff = scan.nextLine().getBytes(); // 设置发送用的DatagramPacket里的字节数据 outPacket.setData(buff); // 发送数据报 socket.send(outPacket); } } finally { socket.close(); } } public void run() { try { while(true) { // 读取Socket中的数据,读到的数据放在inPacket所封装的字节数组里。 socket.receive(inPacket); // 打印输出从socket中读取的内容 System.out.println("聊天信息:" + new String(inBuff , 0 , inPacket.getLength())); } } // 捕捉异常 catch (IOException ex) { ex.printStackTrace(); try { if (socket != null) { // 让该Socket离开该多点IP广播地址 socket.leaveGroup(broadcastAddress); // 关闭该Socket对象 socket.close(); } System.exit(1); } catch (IOException e) { e.printStackTrace(); } } } public static void main(String[] args) throws IOException { new MulticastSocketTest().init(); }
}
可以试试关掉防火墙,能解决大部分离奇的毛病。。。。