Java實現區域網內單播
前面我寫過一篇文章講java實現組播,今天我們就來看看java怎麼實現區域網內單播。
我們先來補充一下網路程式設計的兩個要點:
1. 以程式為物件來看待問題會比較簡單一點。程式是最小的程式單元,而網路程式在建立網路連線的時候會佔用一個埠。
2. 不管是單播還是組播,其實都是程式間通訊。
所以實現單播最重要的是指定IP地址和程式埠。
如果是本機測試,IP地址相同是必然的,只要傳送程式和接收程式使用不同的埠(注意在傳送時保持目的埠與接收程式的埠一致)就可以互相通訊,否則會出現IP地址被佔用的異常。
區域網內單播有兩種實現方式:一種是無連線方式,另一種是面向連線方式。
我們先來看無連線的方式:
首先我們繼承DatagramSocket類,並封裝了傳送和接收訊息的方法。
import java.net.*;
import java.io.*;
/**
* 繼承資料包套接字類
* 實現傳送訊息和接收訊息的方法
* @author michael
*
*/
public class MyDatagramSocket extends DatagramSocket {
static final int MAX_LEN = 100;
MyDatagramSocket() throws SocketException {
super();
}
MyDatagramSocket(int port) throws SocketException {
super(port);
}
public void sendMessage(InetAddress receiverHost, int receiverPort,
String message) throws IOException {
byte[] sendBuffer = message.getBytes();
DatagramPacket datagram = new DatagramPacket(sendBuffer,
sendBuffer.length, receiverHost, receiverPort);
this.send(datagram);
}
public String receiveMessage() throws IOException {
byte[] receiveBuffer = new byte[MAX_LEN];
DatagramPacket datagram = new DatagramPacket(receiveBuffer, MAX_LEN);
this.receive(datagram);
String message = new String(receiveBuffer);
return message;
}
}
-------------------------------------------------Receiver.java---------------------------------------------------
import java.net.*;
/**
* 採用無連線的方式實現程式間通訊
* @author michael
*
*/
public class Receiver {
public static void main(String[] args) {
try {
InetAddress receiverHost = InetAddress.getByName("127.0.0.1");
int myPort = 1234;// 本程式埠
int receiverPort = 5689;// 接收程式的埠
String message = "Hi Sender";
MyDatagramSocket mySocket = new MyDatagramSocket(myPort);
System.out.println(mySocket.receiveMessage());
mySocket.sendMessage(receiverHost, receiverPort, message);
mySocket.close();
} catch (Exception ex) {
System.out.println(ex);
}
}
}
-------------------------------------------------Sender.java---------------------------------------------------
import java.net.*;
/**
* 採用無連線的方式實現程式間通訊
* @author michael
*
*/
public class Sender {
public static void main(String[] args) {
try {
InetAddress receiverHost = InetAddress.getByName("127.0.0.1");
int myPort = 5689;
int receiverPort = 1234;
String message = "Hello Receiver";
MyDatagramSocket mySocket = new MyDatagramSocket(myPort);
mySocket.sendMessage(receiverHost, receiverPort, message);
System.out.println(mySocket.receiveMessage());
mySocket.close();
} catch (Exception ex) {
}
}
}
程式碼裡面我採用的是本機測試,不過我試過了聯機測試,是可以的。
下面再看面向連線的方式:
面向連線的方式跟無連線的方式大體相同,只是多了一個建立連線和斷開連線的過程。
-------------------------------------------------Receiver.java---------------------------------------------------
import java.net.*;
/**
* 採用面向連線的方式實現程式間通訊
* @author michael
*
*/
public class Receiver {
public static void main(String[] args) {
try {
InetAddress senderHost = InetAddress.getByName("127.0.0.1");
int senderPort = 1234;
int myPort = 4568;
String message = "Hi Sender";
MyDatagramSocket mySocket = new MyDatagramSocket(myPort);
//與對方建立連線
mySocket.connect(senderHost, senderPort);
System.out.println(mySocket.receiveMessage());
mySocket.sendMessage(senderHost, senderPort, message);
//斷開連線
mySocket.disconnect();
mySocket.close();
}
catch (Exception ex) {
System.out.println("An exception has occured: " + ex);
}
}
}
-------------------------------------------------Sender.java---------------------------------------------------
import java.net.*;
/**
* 採用面向連線的方式實現程式間通訊
* @author michael
*
*/
public class Sender {
public static void main(String[] args) {
try {
InetAddress receiverHost = InetAddress.getByName("127.0.0.1");
int receiverPort = 4568;
int myPort = 1234;
String message = "Hello Receiver";
MyDatagramSocket mySocket = new MyDatagramSocket(myPort);
mySocket.connect(receiverHost, receiverPort);
mySocket.sendMessage(receiverHost, receiverPort, message);
System.out.println(mySocket.receiveMessage());
mySocket.disconnect();
mySocket.close();
}
catch (Exception ex) {
System.out.println(ex);
}
}
}
相關文章
- 用VC在區域網實現IP多播通訊
- 簡單的區域網內通訊
- Linux下如何實現區域網內網路裝置相互通訊Linux內網
- Java實現多執行緒區域網聊天室Java執行緒
- Java 基於UDP 實現單播、組播、廣播 Socket 程式設計JavaUDP程式設計
- 企業網盤實現區域網共享
- 要在區域網中配置檔案伺服器,確保檔案只能在區域網內傳播,並且無法複製到區域網外伺服器
- 用natapp簡單實現內網穿透APP內網穿透
- 基於Vue實現圖片在指定區域內移動Vue
- Java內部類詳解--區域性內部類Java
- 藉助sIoT可以通過手機app實現區域網內的裝置操控。APP
- Ubuntu18.04 安裝opensips,實現區域網內sip語音視訊通話Ubuntu
- beef區域網內模擬攻擊
- Java之區域性匿名內部類物件Java物件
- OSPF單區域配置實驗(Cisco)
- virtualbox實現區域網內訪問虛擬機器2-network新增埠轉發虛擬機
- OSPF單區域和多區域
- Flutter 區域性路由實現Flutter路由
- 區域網/內網IP地址配置https證書教程內網HTTP
- 如何外網訪問內網svn 網雲穿內網穿透教你簡單實現內網穿透
- Kali 實現區域網 ARP 欺騙和 ARP 攻擊
- 用java實現一個簡單的區塊鏈Java區塊鏈
- 區域網與廣域網
- 百度地圖BMap實現在行政區域內做標註地圖
- java內部類,區域性內部類,靜態內部類,匿名內部類Java
- Vue實現內部元件輪播切換效果Vue元件
- ServerSocket實現簡單的廣播系統Server
- 使用Holer外網SSH訪問內網/區域網Linux系統內網Linux
- 區域性內部類
- 批次網站DNS區域傳送漏洞檢測——bash shell實現網站DNS
- win10區域網內傳檔案很慢怎麼辦 win10區域網內檔案傳輸很慢如何處理Win10
- frp 實現內網穿透FRP內網穿透
- 10-Java內部類——成員內部類、區域性內部類、匿名內部類Java
- 內網穿透—使用 frp 實現內外網互通內網穿透FRP
- 超簡單整合ML kit 實現聽寫單詞播報
- 網頁佈局------輪播圖效果實現網頁
- numpy實現神經網路-反向傳播神經網路反向傳播
- 基於Service Worker實現WebRTC區域網大檔案傳輸能力Web
- Padavan安裝使用ZeroTier實現組建虛擬區域網的方法