是否可以在jsp中发送广播套接字?

时间:2014-07-25 09:09:00

标签: java jsp sockets broadcast

我找到了发送套接字的jsp代码,并将IP更改为255.255.255.255,但结果是:' Network is unreachable'。

代码是:

<%@ page contentType="text/html; charset=utf-8" language="java" import="java.util.*,java.net.*,java.io.*,java.lang.*" errorPage="" %>

var errors="";
<%
    try{

        int character;
        Socket socket = new Socket("255.255.255.255", 10000);

        InputStream inSocket = socket.getInputStream();
        OutputStream outSocket = socket.getOutputStream();

        String str = "Message";
        byte buffer[] = str.getBytes();
        outSocket.write(buffer);

        while ((character = inSocket.read()) != -1) {

           out.print((char) character);
        }

        socket.close();

    }
    catch(java.lang.Exception e){
%>
        errors="Something is wrong!"+ "<%= e.getMessage() %>";

<%
    }

我的tomcat是版本6(我猜......),

或者如果它不可能(我听说有人说jsp与java不同,它只用于演示),我可以编写一个java类(使用DatagramSocket)来显示接收数据并让我的jsp导入上课并获取数据?

任何建议都将受到赞赏。

2 个答案:

答案 0 :(得分:0)

您应该使用MulticastSocket。这是一个例子:

public void send(String message) throws IOException {

    MulticastSocket s = new MulticastSocket();

    byte[] msg = message.getBytes();

    DatagramPacket pack = new DatagramPacket(msg, msg.length, InetAddress.getByName("228.5.6.7"), 12345);

    s.send(pack);

    s.close();

}

void recieve() throws IOException {
    MulticastSocket s = new MulticastSocket(12345);

    InetAddress address = InetAddress.getByName("228.5.6.7");
    s.joinGroup(address);

    byte[] buf = new byte[1024];
    DatagramPacket pack = new DatagramPacket(buf, buf.length);
    s.receive(pack);

    String data = new String(pack.getData());

    System.out.println(data);

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

答案 1 :(得分:0)

你说你已经看过这些链接,但我认为你没有仔细阅读this one或者至少你没有理解它。

我将尝试解释:当您通过new Socket(...)创建套接字时,您将创建一个TCP套接字。 TCP是一种连接协议,您无法通过TCP进行广播

因此,通过正确使用UDP套接字(DatagramSocket)来修复代码,确保通过socket.setBroadcast(true);启用广播,如果仍然无效,请提供有关剩余问题的详细信息。

我在这里没有提供任何代码,因为所有相关代码都已经在参考文章中。