pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

Java使用MulticastSocket實現群聊應用程序

這篇文章主要為大家詳細介紹了Java使用MulticastSocket實現群聊應用程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了Java使用MulticastSocket實現群聊應用程序的具體代碼,供大家參考,具體內容如下

在這篇文章中,討論了一個使用 MulticastSocket (Java Platform SE 7) 類的群聊應用程序。MulticastSocket 是一個 (UDP) DatagramSocket,具有加入 Internet 上其他多播主機“組”的附加功能。

import java.net.*;
import java.io.*;
import java.util.*;
?
public class GroupChat {
?? ?private static final String TERMINATE = "Exit";
?? ?static String name;
?? ?static volatile boolean finished = false;
?
?? ?public static void main(String[] args) {
?? ??? ?if (args.length != 2)
?? ??? ??? ?System.out.println("Two arguments required: <multicast-host> <port-number>");
?? ??? ?else {
?? ??? ??? ?try {
?? ??? ??? ??? ?InetAddress group = InetAddress.getByName(args[0]);
?? ??? ??? ??? ?int port = Integer.parseInt(args[1]);
?? ??? ??? ??? ?Scanner sc = new Scanner(System.in);
?? ??? ??? ??? ?System.out.print("Enter your name: ");
?? ??? ??? ??? ?name = sc.nextLine();
?? ??? ??? ??? ?MulticastSocket socket = new MulticastSocket(port);
?
?? ??? ??? ??? ?// Since we are deploying
?? ??? ??? ??? ?socket.setTimeToLive(0);
?? ??? ??? ??? ?// this on localhost only (For a subnet set it as 1)
?
?? ??? ??? ??? ?socket.joinGroup(group);
?? ??? ??? ??? ?Thread t = new Thread(new ReadThread(socket, group, port));
?
?? ??? ??? ??? ?// Spawn a thread for reading messages
?? ??? ??? ??? ?t.start();
?
?? ??? ??? ??? ?// sent to the current group
?? ??? ??? ??? ?System.out.println("Start typing messages...\n");
?? ??? ??? ??? ?while (true) {
?? ??? ??? ??? ??? ?String message;
?? ??? ??? ??? ??? ?message = sc.nextLine();
?? ??? ??? ??? ??? ?if (message.equalsIgnoreCase(GroupChat.TERMINATE)) {
?? ??? ??? ??? ??? ??? ?finished = true;
?? ??? ??? ??? ??? ??? ?socket.leaveGroup(group);
?? ??? ??? ??? ??? ??? ?socket.close();
?? ??? ??? ??? ??? ??? ?break;
?? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ?message = name + ": " + message;
?? ??? ??? ??? ??? ?byte[] buffer = message.getBytes();
?? ??? ??? ??? ??? ?DatagramPacket datagram = new DatagramPacket(buffer, buffer.length, group, port);
?? ??? ??? ??? ??? ?socket.send(datagram);
?? ??? ??? ??? ?}
?? ??? ??? ?} catch (SocketException se) {
?? ??? ??? ??? ?System.out.println("Error creating socket");
?? ??? ??? ??? ?se.printStackTrace();
?? ??? ??? ?} catch (IOException ie) {
?? ??? ??? ??? ?System.out.println("Error reading/writing from/to socket");
?? ??? ??? ??? ?ie.printStackTrace();
?? ??? ??? ?}
?? ??? ?}
?? ?}
}
?
class ReadThread implements Runnable {
?? ?private MulticastSocket socket;
?? ?private InetAddress group;
?? ?private int port;
?? ?private static final int MAX_LEN = 1000;
?
?? ?ReadThread(MulticastSocket socket, InetAddress group, int port) {
?? ??? ?this.socket = socket;
?? ??? ?this.group = group;
?? ??? ?this.port = port;
?? ?}
?
?? ?@Override
?? ?public void run() {
?? ??? ?while (!GroupChat.finished) {
?? ??? ??? ?byte[] buffer = new byte[ReadThread.MAX_LEN];
?? ??? ??? ?DatagramPacket datagram = new DatagramPacket(buffer, buffer.length, group, port);
?? ??? ??? ?String message;
?? ??? ??? ?try {
?? ??? ??? ??? ?socket.receive(datagram);
?? ??? ??? ??? ?message = new String(buffer, 0, datagram.getLength(), "UTF-8");
?? ??? ??? ??? ?if (!message.startsWith(GroupChat.name))
?? ??? ??? ??? ??? ?System.out.println(message);
?? ??? ??? ?} catch (IOException e) {
?? ??? ??? ??? ?System.out.println("Socket closed!");
?? ??? ??? ?}
?? ??? ?}
?? ?}
}

將文件另存為 GroupChat.java 并使用 javac 編譯它,然后使用指定的兩個命令行參數運行程序。多播主機由 D 類 IP 地址和標準 UDP 端口號指定。D 類 IP 地址的范圍為 224.0.0.0 到 239.255.255.255(含)。地址 224.0.0.0 是保留地址,不應使用。
以下是上述程序的示例輸出:

我們使用多播主機 IP 地址為 239.0.0.0,端口號為 1234(因為端口號 0 到 1023 被保留)。該組有 3 名成員:Ironman、CaptainAmerica 和 Groot。在發送消息之前首先啟動所有三個終端,否則在啟動終端之前發送的消息將丟失(因為沒有合并緩沖區來存儲消息。)我們在這個應用程序中需要兩個線程。一個用于接受用戶輸入(使用 java.util.Scanner 類),另一個用于讀取從其他客戶端發送的消息。因此,我將執行讀取工作的線程分離到 ReadThreadclass 中。要離開組,任何用戶都可以鍵入退出以終止會話。

上述程序在單機上執行。套接字編程適用于分布式編程。相同的代碼片段出現在安裝了 Java 的不同機器上時可以滿足該要求。這只是最基本的服務邏輯。如果前端開發出來,這個項目會更加吸引人。您可以使用 Java 的 AWT(抽象窗口工具包)或其高級對應物 Java Swing 來開發前端。由于這不是 Socket 編程的一部分,因此我將在不深入了解細節的情況下保持不變。
附加點:

您可以通過在通過網絡發送消息之前執行加密來合并網絡安全功能。
凱撒密碼等原始技術或 RSA 等高級方法可用于執行加解密。您可以嘗試使用 Java 的 RMI(遠程方法調用)來執行相同的任務。
在這里,您可以最大限度地利用 Java 提供的抽象。但是,如果您的主要目標是效率,那么 Socket 編程是最佳選擇。由于它不需要任何運行時支持,因此與 RMI 相比要快一些。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持html5模板網。

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

用戶上傳大文件,網絡差點的需要歷時數小時,萬一線路中斷,不具備斷點續傳的服務器就只能從頭重傳,而斷點續傳就是,允許用戶從上傳斷線的地方繼續傳送,這樣大大減少了用戶的
有的時候我們需要鼠標一直滑動的情況,為了節省時間,本文用Java語言寫了一個腳本,可以實現鼠標隨機移動,感興趣的小伙伴可以了解一下
這篇文章主要為大家詳細介紹了java網絡編程之群聊功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
這篇文章主要為大家介紹了JavaString中intern方法的原理以及使用。文中通過圖片和示例代碼進行了詳細展示,感興趣的小伙伴可以跟隨小編一起學習一下
這篇文章主要介紹了Java中用戶線程與守護線程的使用區別,Java語言中無論是線程還是線程池,默認都是用戶線程,因此用戶線程也被成為普通線程,下文關于其與守護線程的區別詳情,
本文主要介紹了Java中ReentrantLock?4種常見的坑,ReentrantLock默認情況下為非公平鎖,下文關于其更多詳情需要的小伙伴可以參考一下
主站蜘蛛池模板: 防勒索软件_数据防泄密_Trellix(原McAfee)核心代理商_Trellix(原Fireeye)售后-广州文智信息科技有限公司 | 山东商品混凝土搅拌楼-环保型搅拌站-拌合站-分体仓-搅拌机厂家-天宇 | 手术室净化厂家_成都实验室装修公司_无尘车间施工单位_洁净室工程建设团队-四川华锐16年行业经验 | 玻璃钢型材-玻璃钢风管-玻璃钢管道,生产厂家-[江苏欧升玻璃钢制造有限公司] | 青岛美佳乐清洁工程有限公司|青岛油烟管道清洗|酒店|企事业单位|学校工厂厨房|青岛油烟管道清洗 插针变压器-家用电器变压器-工业空调变压器-CD型电抗器-余姚市中驰电器有限公司 | 优宝-汽车润滑脂-轴承润滑脂-高温齿轮润滑油脂厂家 | 山东商品混凝土搅拌楼-环保型搅拌站-拌合站-分体仓-搅拌机厂家-天宇 | 蒸汽热收缩机_蒸汽发生器_塑封机_包膜机_封切收缩机_热收缩包装机_真空机_全自动打包机_捆扎机_封箱机-东莞市中堡智能科技有限公司 | 登车桥动力单元-非标液压泵站-非标液压系统-深圳市三好科技有限公司 | 东莞市超赞电子科技有限公司 全系列直插/贴片铝电解电容,电解电容,电容器 | 深圳激光打标机_激光打标机_激光焊接机_激光切割机_同体激光打标机-深圳市创想激光科技有限公司 深圳快餐店设计-餐饮设计公司-餐饮空间品牌全案设计-深圳市勤蜂装饰工程 | China plate rolling machine manufacturer,cone rolling machine-Saint Fighter | 广州中央空调回收,二手中央空调回收,旧空调回收,制冷设备回收,冷气机组回收公司-广州益夫制冷设备回收公司 | 重庆磨床过滤机,重庆纸带过滤机,机床伸缩钣金,重庆机床钣金护罩-重庆达鸿兴精密机械制造有限公司 | 双菱电缆-广州电缆厂_广州电缆厂有限公司 | 精密五金冲压件_深圳五金冲压厂_钣金加工厂_五金模具加工-诚瑞丰科技股份有限公司 | 青州搬家公司电话_青州搬家公司哪家好「鸿喜」青州搬家 | 便携式XPDM露点仪-在线式防爆露点仪-增强型烟气分析仪-约克仪器 冰雕-冰雪世界-大型冰雕展制作公司-赛北冰雕官网 | 常州减速机_减速机厂家_常州市减速机厂有限公司 | 厚壁钢管-厚壁无缝钢管-小口径厚壁钢管-大口径厚壁钢管 - 聊城宽达钢管有限公司 | 机构创新组合设计实验台_液压实验台_气动实训台-戴育教仪厂 | 安规_综合测试仪,电器安全性能综合测试仪,低压母线槽安规综合测试仪-青岛合众电子有限公司 | 吨袋包装机|吨包秤|吨包机|集装袋包装机-烟台华恩科技 | 旋片真空泵_真空泵_水环真空泵_真空机组-深圳恒才机电设备有限公司 | 聚氨酯保温钢管_聚氨酯直埋保温管道_聚氨酯发泡保温管厂家-沧州万荣防腐保温管道有限公司 | 施工围挡-施工PVC围挡-工程围挡-深圳市旭东钢构技术开发有限公司 | 手术室净化厂家-成都做医院净化工程的公司-四川华锐-15年特殊科室建设经验 | 电车线(用于供电给电车的输电线路)-百科| SF6环境监测系统-接地环流在线监测装置-瑟恩实业 | 铁艺,仿竹,竹节,护栏,围栏,篱笆,栅栏,栏杆,护栏网,网围栏,厂家 - 河北稳重金属丝网制品有限公司 山东太阳能路灯厂家-庭院灯生产厂家-济南晟启灯饰有限公司 | 中细软知识产权_专业知识产权解决方案提供商 | 陶氏道康宁消泡剂_瓦克消泡剂_蓝星_海明斯德谦_广百进口消泡剂 | 注塑机-压铸机-塑料注塑机-卧式注塑机-高速注塑机-单缸注塑机厂家-广东联升精密智能装备科技有限公司 | 档案密集架,移动密集架,手摇式密集架,吉林档案密集架-厂家直销★价格公道★质量保证 | 能量回馈_制动单元_电梯节能_能耗制动_深圳市合兴加能科技有限公司 | 全自动过滤器_反冲洗过滤器_自清洗过滤器_量子除垢环_量子环除垢_量子除垢 - 安士睿(北京)过滤设备有限公司 | 外贮压-柜式-悬挂式-七氟丙烷-灭火器-灭火系统-药剂-价格-厂家-IG541-混合气体-贮压-非贮压-超细干粉-自动-灭火装置-气体灭火设备-探火管灭火厂家-东莞汇建消防科技有限公司 | 智成电子深圳tdk一级代理-提供TDK电容电感贴片蜂鸣器磁芯lambda电源代理经销,TDK代理商有哪些TDK一级代理商排名查询。-深圳tdk一级代理 | 杭州画室_十大画室_白墙画室_杭州美术培训_国美附中培训_附中考前培训_升学率高的画室_美术中考集训美术高考集训基地 | KBX-220倾斜开关|KBW-220P/L跑偏开关|拉绳开关|DHJY-I隔爆打滑开关|溜槽堵塞开关|欠速开关|声光报警器-山东卓信有限公司 | 洛阳网站建设_洛阳网站优化_网站建设平台_洛阳香河网络科技有限公司 |