JAVA程序做broadcast
发布网友
发布时间:2022-04-30 16:10
我来回答
共4个回答
热心网友
时间:2022-06-27 03:46
说的是你定义的地址不是组播地址吧
//选用专门为多播指定的D类IP地址(224.0.0.1到239.255.255.255)任选一个即可,用来创建一个多播组
public static final String DefaultMulticastGroupIP="230.1.1.1";
//使用指定的端口(一般选1024以上的端口号)只要是空闲端口即可,用于建立多播套接字。
public static final int DefaultMulticastGroupPort=1314;
热心网友
时间:2022-06-27 03:46
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.net.*;
public class BorderCast extends JFrame implements KeyListener,ActionListener{
private JTextArea recMess,senMess;
private JButton send;
private InetAddress group;
private static int port=8081;
private MulticastSocket mult;
private Thread thread;
public BorderCast()
{
super("BorderCast");
this.setBounds(100,100,500,600);
this.setLayout(new FlowLayout());
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
Container c=this.getContentPane();
recMess=new JTextArea(20,40);
//recMess.setFont(new Font("楷体",Font.PLAIN,22));
recMess.setForeground(Color.blue);
JScrollPane jScrollPane1=new JScrollPane(recMess);
c.add(jScrollPane1);
senMess=new JTextArea(8,40);
senMess.addKeyListener(this);
JScrollPane jScrollPane2=new JScrollPane(senMess);
c.add(jScrollPane2);
send=new JButton(" 发 送 ");
send.addActionListener(this);
c.add(send);
this.setVisible(true);
try {
group=InetAddress.getByName("224.0.1.1");
mult=new MulticastSocket(port);
mult.joinGroup(group);
} catch (Exception e) {
e.printStackTrace();
}
}
public void startCast()
{
senMess.requestFocus(true);
try{
byte[] buf=new byte[1024];
DatagramPacket dpr=new DatagramPacket(buf, buf.length);
String str;
while(true)
{
mult.receive(dpr);
str=new String(dpr.getData(),0,dpr.getLength());
recMess.append(str+"\n");
thread.sleep(100);
}
}
catch (Exception e) {
e.printStackTrace();
}
finally
{
if(mult!=null)
{
try {
mult.leaveGroup(group);
mult.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
}
public void sendCast(String stringMessage)
{
try{
byte[] buf=stringMessage.getBytes();
DatagramPacket dps=new DatagramPacket(buf, buf.length,group,port);
mult.send(dps);
}
catch (Exception e) {
e.printStackTrace();
}
}
public void actionPerformed(ActionEvent e)
{
String str=senMess.getText().trim();
if(e.getSource()==send)
{
if(str!=null&&!str.equals(""))
{
this.sendCast(str);
senMess.setText("");
}
}
}
public void keyReleased(KeyEvent e)
{
String str=senMess.getText().trim();
if(e.getKeyCode()==KeyEvent.VK_ENTER)
{
if(str!=null&&!str.equals(""))
{
this.sendCast(str);
senMess.setText("");
}
}
}
public void keyPressed(KeyEvent e) {}
public void keyTyped(KeyEvent e) {}
public static void main(String[] args) {
new BorderCast().startCast();
}
}追问我按这个,把GUI去了,加到我的代码里,可是显示不了,能帮我看看问题么,我加到补充里了
追答while(true)
{
multicastSocket.receive(dpr);
str=new String(dpr.getData(),0,dpr.getLength());
//recMess.append(str+"\n");
System.out.println(str);
multicastSocket.send(dps);
Thread.sleep(100);
}
你在这个循环中是先接收然后再发送的,如果接收不到则不会向下执行,即两个都不会发送消息。所以你运行同样的两个此程序是不会达到结果的。你把客户端的发送信息改到接收信息的前面,然后先运行服务端,再运行客户端就能收到了。
参考资料:756827998我的文库。
热心网友
时间:2022-06-27 03:47
Not a multicast address
热心网友
时间:2022-06-27 03:47
这个急不得了