當前位置:首頁 » 編程語言 » java多播

java多播

發布時間: 2022-11-05 23:16:32

java程序做broadcast

說的是你定義的地址不是組播地址吧

//選用專門為多播指定的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;

⑵ 基於java的p2p實現文件共享和傳輸

  1. 在JAVA中,發送和接收多播信息的方法:
    發送多播信息需經歷步驟
    確定發送的具體信息內容
    String msg = "Hello";
    選用專門為多播指定的D類IP地址(224.0.0.1到239.255.255.255),創建一個多播組
    InetAddress group = InetAddress.getByName("228.5.6.7");
    使用指定的埠(一般選1024以上的埠號)建立多播套接字
    MulticastSocket s = new MulticastSocket(6789);
    加入多播組
    s.joinGroup(group);
    創建一個數據報封裝多播信息
    DatagramPacket hi = new DatagramPacket(msg.getBytes(), msg.length(),
    group, 6789);
    發送
    s.send(hi);
    接收多播信息的步驟
    開辟接收緩沖區
    byte[] buf = new byte[1000];
    創建接收數據報
    DatagramPacket recv = new DatagramPacket(buf, buf.length);
    接收
    s.receive(recv);
    注意:以上發送和接收程序在同一個文件中實現,若在不同文件中實現則應分別定義多播套接字並加入多播組。
    3.與已知IP和埠的端點通信
    在互聯網上主要採用TCP和UDP來實現兩點之間的通信。採用TCP可可靠傳送信息,但花費時間較多;採用UDP可快速傳遞信息,但不能保證可靠傳遞。

  2. JAVA實現TCP通信的方法 :
    利用Socket(InetAddress addr, int port)和 Socket(String host, int port),創建客戶端套接字,利用ServerSocket(int port)創建伺服器端套接字,port埠就是伺服器監聽連接請求的埠,通過調用accept()返回一個最近創建的Socket對象,該Socket對象綁定了客戶程序的IP地址或埠號。通過調用Socket的 getInputStream()方法獲得輸入流讀傳送來的信息,也可能通過調用Socket的 getOutputStream()方法獲得輸出流來發送消息。

  3. JAVA實現UDP通信的方法 :
    使用DatagramPacket(byte [] buffer, int length, InetAddress addr, int port) 確定數據包數組、數組的長度、數據包的地址和埠信息。使用DatagramSocket()創建客戶端套接字,而伺服器端則採用DatagramSocket(int port),調用send(DatagramPacket dgp)和 receive(DatagramPacket dgp)來發送和接收數據包。本文設計的程序採用UDP。

  4. P2P(Peer-to-Peer 端到端)模型是與C/S(客戶/伺服器)模型相對應。基於C/S的用戶間通信需要由伺服器中轉,在C/S中的伺服器故障將導致整個網路通信的癱瘓。。而基於P2P的用戶間通信則是直接通信,去掉了伺服器這一層,帶來的顯著優點是通信時沒有單一的失敗點,一個用戶的故障不會影響整個P2P網路。本文提供了一種用JAVA實現P2P網路通信的方法。

⑶ 40、在Java中,如何實現組播通信

編輯一個java組播應用程序的過程如下

1. 創建一個用於發送和接收的MulticastSocket組播套接字對象
2. 創建一個指定緩沖區大小及組播地址和埠的DatagramPacket組播數據包對象
3. 使用組播套接字joinGroup(),將其加入到一個組播
4. 使用組播套接字的send()方法,將組播數據包對象放入其中,發送組播數據包.
或者
使用組播套接字的receive()方法,將組播數據包對象放入其中,接收組播數據包
5. 解碼組播數據包提取信息,並依據得到的信息作出響應String s = new String(dp.getData(), 0, dp.getLength());
6. 重復過程4和5,即在while循環中實現。
7. 使用組播套接字的leaveGroup()方法,離開組播組;關閉組播套接字

接收組播數據包程序:
Java代碼
public class MulticastReceived {

public static void main(String[] args) throws Exception {
InetAddress group = InetAddress.getByName("224.0.0.4"); // 組播地址
int port = 4006; // 埠
MulticastSocket msr = null;
try {
msr = new MulticastSocket(port); // 1.創建一個用於發送和接收的MulticastSocket組播套接字對象
msr.joinGroup(group); // 3.使用組播套接字joinGroup(),將其加入到一個組播
byte[] buffer = new byte[8192];
System.out.println("接收數據包啟動!(啟動時間:)" + new java.util.Date() + ")");
while (true) {
DatagramPacket dp = new DatagramPacket(buffer, buffer.length); // 2.創建一個指定緩沖區大小及組播地址和埠的DatagramPacket組播數據包對象
msr.receive(dp); // 4.使用組播套接字的receive()方法,將組播數據包對象放入其中,接收組播數據包
String s = new String(dp.getData(), 0, dp.getLength()); // 5.解碼組播數據包提取信息,並依據得到的信息作出響應
System.out.println(s);
}
} catch (IOException e) {
e.printStackTrace();

} finally {
if (msr != null) {
try {
msr.leaveGroup(group); // 7.使用組播套接字的leaveGroup()方法,離開組播組
msr.close(); // 關閉組播套接字
} catch (IOException e) {
}
}
}
}
}

發送組播數據包程序:
Java代碼
public class MulticastSender {

public static void main(String[] args) throws Exception {
InetAddress group = InetAddress.getByName("224.0.0.1"); // 組播地址
int port = 4000; // 埠
MulticastSocket mss = null;
try {
mss = new MulticastSocket(port); // 1.創建一個用於發送和接收的MulticastSocket組播套接字對象
mss.joinGroup(group); // 3.使用組播套接字joinGroup(),將其加入到一個組播
byte[] buffer = new byte[8192];
System.out.println("接收數據包啟動!(啟動時間:)" + new java.util.Date() + ")");
while (true) {
String message = "Hello" + new java.util.Date();
byte[] buffer2 = message.getBytes(); // 2.創建一個指定緩沖區大小及組播地址和埠的DatagramPacket組播數據包對象

DatagramPacket dp = new DatagramPacket(buffer, buffer.length, group, port);
// msr.receive(dp); //接收組播數據包

mss.send(dp); // 4.使用組播套接字的send()方法,將組播數據包對象放入其中,發送組播數據包
// String s = new String(dp.getData(), 0, dp.getLength()); //5.解碼組播數據包提取信息,並依據得到的信息作出響應
System.out.println("發送數據包給" + group + ":" + port);
Thread.sleep(1000);
}
} catch (IOException e) {
e.printStackTrace();

} finally {
if (mss != null) {
try {
mss.leaveGroup(group); // 7.使用組播套接字的leaveGroup()方法,離開組播組
mss.close(); // 關閉組播套接字
} catch (IOException e) {
}
}
}
}
}

⑷ JAVA編區域網聊天室

我是用多播實現的,MulticastSocket是DatagramSocket的子類,暫時還只能用於區域網,不過多播是可以在廣域網上進行的

大概步驟如下:

1.加入多播組

2.發送/接收數據包

發送需要從文本輸入

接收時使用了一個線程循環接收

3.發生異常離開多播組

我也見過用ServerSocket,Socket實現的,隨便找本網路編程的書,上面都有類似的代碼

編程環境:JDK1.7,eclipse3.5

⑸ 為什麼java下寫的udp發送多播能夠成功,到android下面卻發送不出去呢求大神幫個忙。。。

加網路許可權了嗎

⑹ java如何實現兩段程序走不同的網卡

java可以調用硬體驅動,在使用網卡的時候,在java程序內部制定網卡的驅動名稱就可以

⑺ java rtpstream怎麼用

1.出現Local Data AddressDoes not belong to any of this hosts local interfaces錯誤:
主要問題是發送視頻和音頻的程序需要在伺服器上運行,你可以選擇Win2000 Server 或者Win2003 Server,問題就解決了。
2.傳輸聲音和視頻的方法如下:
a.傳輸聲音或者視頻文件
編譯完AVTransmit2.java後,再命令提示符中輸入命令:java AVTransmit2 file:test.wav 224.224.123.123 22222(注意文件的類型是.wav 或者.mov 、.mpg的文件,不可以是.mp3、.rmvb等其他不支持的文件。傳輸支持文件格式有限,我也沒有辦法,應該在添加相關的插件就行了,希望大家提供幫助),其中test.wav即傳輸的文件名,224.224.123.123為多播地址,22222為埠號.
接收方法:編譯完AVReceive.java後,在命令提示符中輸入命令:java AVReceive 224.224.123.123/22222即可接受到聲音文件
b.傳輸麥克風的音頻,在傳輸之前先檢查電腦錄音控制的選項是否為麥克風.(步驟:打開桌面任務欄上的音量控制,選擇選項---->屬性----->調節音量選擇錄音,之後在下面的音量控制屬性中選中麥克風。單擊確定。接著跳到錄音控制,選擇麥克風就行了)。使用的命令是:java AVTransmit2 dsound:// 224.224.123.123 22222,此時就開始傳輸聲音了。
接收方法同上
c.傳輸攝相頭視頻,使用的命令為:java AVTransmit2 vfw://0 224.224.123.123 22222
接收方法同上
d.關於廣播、組播和單播
廣播:對於區域網廣播你可以使用廣播的地址,如你的子網掩碼是255.255.225.0,即C類的默認子網掩碼,你的廣播地址可以是192.168.3.255。(註:我的區域網ip地址分配為192.168.3.X)。如子網掩碼不同,你可以參照相關的網路常識自己推算。
接收時也使用多播地址來接受,假如發送方的機器地址為:192.168.3.46。發送時在發送放的機器上運行java AVTransmit2 file:test.wav 192.168.3.255 22222,接收時使用java AVReceive2 224.224.123.123 22222。才能完成接收.這和網上的說法不同,埠號不要填錯,地址任意。按網上的說法,使用的接收地址應為為192.168.3.46,可是我沒有成功,總是出現Local Data AddressDoes not belong to any of this hosts local interfaces的錯誤,而使用多播地址反而成功了。具體的參數我就不多介紹了,有問題可以給我留言。
組播:使用組播地址發送,組播地址接收即可
單播:假如你只想給某台機子發送,那麼就在發送方輸入命令,如:java AVTransmit2 file:test.wav 192.168.3.47 22222,這時你只會將聲音流文件發送給47號計算機。而接受時還是使用多播地址,如java AVReceive2 224.224.123.123 22222。這是就聽到聲音了。
總之,使用RTP傳輸,在接受時都在使用多播地址,在發送時根據情況而定,至於ttl你可以不去管它。不只大家是怎麼實現的,反正網上的資料讓我變的很失望,真正的成功源於實踐。下面摘取一段讓大家欣賞(盡信書則不如無書)
網上摘取:
Transmitting Audio and Video over RTP
The AVTransmit2 class is very similar to the VideoTransmit, but uses RTP managers
to send the video and audio streams.
Since the media tracks are transmitted in multiple sessions, you'll need to
use one Player per track on the receive side. Using JMStudio, you can
start multiple Players from the "File" menu using the "New Window"
item. Then either:
use the "Open URL..." item to open one RTP session per track. The URL to use is:

rtp://<sourceIP>:<port>/media
Where <sourceIP> is the IP address of the RTP session and the port
number is the same one that is used on the transmitting side.
OR

Open RTP session and specify <sourcIP> and <port>

How to run this sample
1. Run AVTransmit2 with the required 3 command line parameters
For example, we can use any of the following:
- java AVTransmit2 file:clips/clip01mpg.mpg 224.112.112.112 22222

2. To receive the transmission on the client side use JMStudio:
- use open RTP session and specify group: 224.112.112.112 & port: 22222
AND use FILE -> New Window and open RTP sesssion with port 22224.

OR
- use open URL and specify: rtp://224.112.112.112:22222/video
AND use FILE -> New Window and open URL with 22224/audio

Notes:

You should run 1. then 2., otherwise AVTransmit2 will find the port number used.
You can also use the program to send only audio or video as follows:

- java AVTransmit2 javasound://0 224.112.112.112 22222 (audio only)
- java AVTransmit2 vfw://0 224.112.112.112 22222 (video only)
In such case create only one instance of JMStudio.

Use Unicast:

- java AVTransmit2 file:clip01.mpg 128.82.4.7 22222
Where 128.82.4.7 is the receicver address.
If the sender address is 128.82.4.9 it will use port 22222 as well
to send out data. In this case the receiver (e.g., JMStudio)
should specify the sender as: 128.82.4.9 22222.
Therefore to use unicast you should have two machines since
you can not use the same port for both sender and receiver.
Receiving Audio and Video using RTP
AVReceive2 uses the RTPManager API to receive RTP transmissions.
AVReceive2 performs the following tasks:
Open one RTP session per session address given.
Listen for the NewReceiveStreamEvent from the ReceiveStreamListener.
Create a JMF Player for each stream received for playback.
This sample program can be used in conjunction with JMStudio,
the AVTransmit2 sample or any other RTP compliant transmitter.
The IP address should be the address of the computer which transmits the data; or the multicast address if multicast is being used for the transmission.
The ports should be the same as what's being used by the transmitter.
How to run this sample
1. Run AVTransmit2 with the required 3 command line parameters
For example:
- java AVTransmit2 file:clips/clip01mpg.mpg 224.112.112.112 1234
2. Run AVReceive2 and specify the RTP session addresses to receive from.
For example:
- java AVReceive2 224.112.112.112/1234 224.112.112.112/1236
to simultaneously receive 2 different RTP sessions (video and audio).
Note: because of port reuse, it must run in this order, 1 then 2.

⑻ JAVA中什麼叫「多播地址」

0.0.0.0就是多播地址

⑼ java的MulticastSocket 多播只能用於區域網嗎

恩 組播應該是不行 而且組播需要路由協議的支持
qq用的是udp 他是利用中心伺服器進行打洞後建立起的p2p的udp鏈接
我猜想應該是登陸的時候鏈接一下中心伺服器 打洞成功後 以後你和好友間的聊天全是你們點對點的udp 就和伺服器關系不大了
如果編聊天軟體應該結合tcp和udp

⑽ JAVA 使用UDP協議發送組播報文,組播地址該如何設置

IP/port 要對應

~~~~~~~上源碼,再回來試試

熱點內容
c語言元編程 發布:2025-01-11 09:53:02 瀏覽:342
線切割割圓怎麼編程 發布:2025-01-11 09:52:23 瀏覽:171
怎麼選女孩子的配置 發布:2025-01-11 09:47:33 瀏覽:670
python獲取header 發布:2025-01-11 09:47:32 瀏覽:492
iis7上傳大小 發布:2025-01-11 09:41:38 瀏覽:507
拍攝腳本是什麼工作 發布:2025-01-11 09:39:12 瀏覽:785
魅族安卓8什麼時候更新 發布:2025-01-11 09:27:58 瀏覽:362
電腦板我的世界登錄密碼多少 發布:2025-01-11 09:15:43 瀏覽:284
編譯原理和是非終結符嗎 發布:2025-01-11 09:15:42 瀏覽:252
網路調試助手源碼 發布:2025-01-11 09:14:24 瀏覽:117