講解Java的Socket網絡編程的多播與廣播實現
在Java中,我們可以有很多種方法來發送和接收數據。有的方法比較靠近底層,有些問題就需要程序員自己去解決,而有些方法抽象層次比較高,很方便地就可以拿來使用。這些處理數據的方法根據抽象層次由低到高分別有:
1.手動編碼:使用位運算逐個自己編碼和解析。
2.利用流來自動編碼:組合使用OutputStream和ByteArrayOutputStream。
3.序列化:將數據放入一個數據對象中,直接將這個對象序列化後發送。
使用起來很方便,但要注意效率的損失,以及接收方也要使用Java。
:將對方法的調用都發送過去了,直接實現了方法的遠程調用。
在最底層的`方法1中,我們需要自己解決一些底層的問題:
1.整型的發送:要考慮是大尾端還是小尾端,是無符號的還是有符號的整數。
2.字符串的發送:要考慮編碼問題。
3.無長度限制的類型,如大整數:要編碼成幀Frame,通過定界符或者長度位
來區分每幀。
多播與廣播
我們可以向每個接受者單播一個數據副本,但這樣做效率可能非常低。
只有UDP套接字允許廣播和多播,兩者的區別是:廣播會發送到網絡上所有可達的
主機,有些操作系統可能不允許普通用户進行廣播操作;而多播只發送給感興趣的
主機。具體來説是調用MulticastSocket的joinGroup()加入到多播組的主機。
public class MulticastReceiverTest { public static void main(String[] args) throws Exception { final InetAddress address = yName(""); final int port = 45599; for (int i = 0; i < 5; i++) { new Thread("Thread #" + i){ @Override public void run() { try { MulticastSocket sock = new MulticastSocket(port); Group(address); byte[] msg = new byte[256]; DatagramPacket packet = new DatagramPacket(msg, th); ive(packet); tln(entThread()ame() + " receive: " + new String(ata())); } catch (IOException e) { tStackTrace(); } } }t(); } p(2000); MulticastSocket sock = new MulticastSocket(); imeToLive(32); byte[] msg = "hellomulticast"ytes(); DatagramPacket packet = new DatagramPacket(msg, th, address, port); (packet); tln("Message sent"); }}
-
java圖片處理功能介紹
java可實現縮放圖像、切割圖像、圖像類型轉換、彩色轉黑白、文字水印、圖片水印等常用功能,本文是本站小編搜索整理的關於java圖片處理功能介紹,供參考學習,希望對大家有所幫助!想了解更多相關信息請持續關注我們應屆畢業生考試網!代碼如下複製代碼importaComposi...
-
21個java基本知識點
本文主要是一些java基礎知識點相關的,所以也希望能分享給剛剛入門的Java程序員和打算入Java開發這個行當的準新手們,希望可以給大家一些經驗,能讓大家更好學習和使用Java。1.JVM相關(包括了各個版本的特性)對於剛剛接觸Java的人來説,JVM相關的知識不一定需要理解很...
-
jsp向cookie寫入中文亂碼的解決辦法
jsp在向cookie寫入中文亂碼大家是怎麼處理的呢?下面是小編給大家提供的解決辦法,大家可以參考閲讀,更多詳情請關注應屆畢業生考試網。在jsp中對中文的處理有一點不好就可能出現亂碼了,下面我來給大家介紹jsp中向cookie寫入中文實現程序有需要了解的`朋友可參考。Co...
-
Java中運算符的使用
導語:計算機的最基本用途之一就是執行數學運算,作為一門計算機語言,Java也提供了一套豐富的運算符來操縱變量。下面是java中運算符的使用,一起來學習下吧:算術運算符單目:+(取正)-(取負)++(自增1)--(自減1)雙目:+-*/%(取餘)三目:a>b?true:false説明:當a大於b的時候,為tru...