java開發的組播聊天室(java 組播)

本文目錄一覽:

java語音聊天室怎樣實現啊?

實現java語音聊天室的方法很簡單,要麼自己從零研發,要麼直接使用別人的成品,意思是找網上的第三方,他們自己有研發產品的。建議考慮ZEGO即構科技,他們的語聊房SDK很好用的,提供低延遲和低成本的方案供選擇,在保障語音質量的前提下,碼率最低可到8kbps,可以試試。

急求一個關於UDP的JAVA實現多人聊天源代碼

import java.io.InputStream;

import java.io.DataInputStream;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.io.DataOutputStream;

import java.io.BufferedReader;

import java.net.ServerSocket;

import java.net.Socket;

import java.io.IOException;

import java.util.Date;

class Server

{

public Server()

{

try

{

ServerSocket s=new ServerSocket(8888);

Socket ss=s.accept();

OutputStream out=ss.getOutputStream();

DataOutputStream dout=new DataOutputStream(out);

InputStream in=ss.getInputStream();

DataInputStream din=new DataInputStream(in);

System.out.print(din.readUTF()+”!”);

dout.writeUTF(“你已經連接到伺服器”+”\t”+”你的地址:”+ss.getInetAddress()+”\t”

+”你的鏈接埠:”+ss.getLocalPort()+”\n”);

new ReadMessage(din).start();

new SendMessage(dout).start();

}

catch (IOException e)

{

e.printStackTrace();

}

}

public static void main(String[] args)

{

new Server();

}

}

//接受客戶端信息

class ReadMessage extends Thread

{

private DataInputStream din;

public ReadMessage(DataInputStream din)

{

this.din=din;

}

public void run()

{

String str;

try

{

while (true)

{

str=din.readUTF();

System.out.println(new Date().toLocaleString()+”客戶端說:”+str);

if (str.equals(“bye”))

{

System.out.println(“客戶端下線!”);

break;

}

}

}

catch (IOException e)

{

e.printStackTrace();

}

}

}

// 發出伺服器信息

class SendMessage extends Thread

{

private DataOutputStream dout;

public SendMessage(DataOutputStream dout)

{

this.dout=dout;

}

public void run()

{

InputStreamReader inr=new InputStreamReader(System.in);

BufferedReader buf=new BufferedReader(inr);

String str;

try

{

while(true)

{

str=buf.readLine();

dout.writeUTF(str);

if (str.equals(“bye”))

{

System.out.println(“伺服器退出!”);

System.exit(1);

}

}

}

catch (IOException e)

{

e.printStackTrace();

}

}

}

import java.io.InputStream;

import java.io.DataInputStream;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.io.DataOutputStream;

import java.io.BufferedReader;

import java.net.Socket;

import java.io.IOException;

import java.util.Date;

class Client

{

public Client()

{

try

{

Socket s=new Socket(“192.168.1.2”,8888);

InputStream in=s.getInputStream();

DataInputStream din=new DataInputStream(in);

OutputStream out=s.getOutputStream();

DataOutputStream dout=new DataOutputStream(out);

dout.writeUTF(“伺服器你好!我是客戶端”);

System.out.println(din.readUTF());

new Thread(new SenderMessage(dout)).start();

new Thread(new ReaderMessage(din)).start();

}

catch (IOException e)

{

e.printStackTrace();

}

}

public static void main(String[] args)

{

new Client();

}

}

class ReaderMessage implements Runnable

{

private DataInputStream din;

public ReaderMessage(DataInputStream din)

{

this.din=din;

}

public void run()

{

String str;

try

{

while(true)

{

str=din.readUTF();

System.out.println(new Date().toLocaleString()+”伺服器說:”+str);

if (str.equals(“bye”))

{

System.out.println(“伺服器已經關閉,此程序自動退出!”);

break;

}

}

}

catch (IOException e)

{

e.printStackTrace();

}

}

}

class SenderMessage implements Runnable

{

private DataOutputStream dout;

public SenderMessage(DataOutputStream dout)

{

this.dout=dout;

}

public void run()

{

String str;

InputStreamReader inf=new InputStreamReader(System.in);

BufferedReader buf=new BufferedReader(inf);

try

{

while (true)

{

str=buf.readLine();

dout.writeUTF(str);

if (str.equals(“bye”))

{

System.out.println(“客戶端自己退出!”);

System.exit(1);

}

}

}

catch (IOException e)

{

e.printStackTrace();

}

}

}

java UDP 實現 多人聊天

UDP也可以和TCP那樣遍歷list然後發送啊

客戶端向外面開一個UDP埠接受數據報

然後伺服器這邊要是有消息要發送就直接發送數據報包就可以了嘛

UDP都不用保持著連接的,比TCP還簡單些

另外也可以用組播來實現,搜索下java UDP 組播,你能找到不少實例性的代碼,也有聊天室的代碼

Java實現一個簡單的聊天室

基本原理就是弄一個全局的容器,每進來一個人,將ip等相關信息放入容器,有人發送消息時,遍歷容器,向除它而外的所有人發送該消息。並不是很難,但是要考慮的細節還是不少的

我做java的簡易聊天室,已經可以群聊和私聊,如何把創建房間加進去,且只能同一個房間里才能群聊和私聊?

我說下思路:

1、客戶端創建房間時給每個房間分配惟一的一個房間ID,房間是公開的,每個連接的客戶端都可以看到,房間屬性,比如密碼,比如黑名單,房間保存在Server內存當中,如果你使用了集群,建議存儲到分散式緩存當中(Redis是最好的選擇,其次是memcached),當創建完成後,將房間信息發送給所有客戶端。新客戶端連接進來時,客戶端要主動從服務端拉取房間信息。建議採用服務端主動通知(房間增減,服務端主動通知給所有客戶端)和客戶端定時輪詢(客戶端起個定時任務,每隔一定時間主動向服務端拉取房間列表)的方式來保證房間列表的動態更新。

2、當客戶端選擇加入房間時,如果設置有加入條件,比如密碼,那就提示客戶端輸入,如果是其他條件就判斷加入客戶端是否符合這個條件。服務端保存房間同客戶端的關聯關係(可以設計成一對多,也就是一個客戶端只能在一個房間聊天,也可以設計成多對多,一個客戶端可以同時加入多個房間聊天,主要看設計),並將這個消息通知給這個房間所有的客戶端列表「歡迎***進入房間」(消息的發送者為系統,房間ID這個房間的ID,接收人無,表示是這個房間的公開消息,消息內容即:歡迎***進入房間。)

3、把聊天內容當成消息的話,那消息應該有這樣的屬性,發送人,房間ID(如果沒有房間ID就當成系統公告消息,在所有房間顯示),接收人(如果沒有指定接收人,則是公開消息,如果有接收人,就是私聊消息,只能在同一個房間私聊,那在發消息的時候要判斷下接收客戶端的是否在這個房間列表當中)。

4、再來說消息路由設置,當客戶端發送消息時,根據房間ID,找到這個這個房間內所有的客戶端列表,如果沒有指定接收人,那消息就推送給這個房間關聯的所有客戶端,如果指定有接收人,接收人不在這個房間,直接提示「***已經離開」,如果還在就把消息推送給這個指定的客戶端。

5、房間的管理:踢人,把這個客戶端從房間同客戶端關聯關係解除,並在房間顯示消息「***被踢出房間」等等

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) {

}

}

}

}

}

原創文章,作者:簡單一點,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/130755.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
簡單一點的頭像簡單一點
上一篇 2024-10-03 23:29
下一篇 2024-10-03 23:29

相關推薦

  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Bean載入過程

    Java Bean載入過程涉及到類載入器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean載入的過程。 一、類載入器 類載入器是Java虛擬機…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字元串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字元串中是否存在多個指定字元: 一、字元串遍歷 字元串是Java編程中非常重要的一種數據類型。要判斷字元串中是否存在多個指定字元…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29
  • Java任務下發回滾系統的設計與實現

    本文將介紹一個Java任務下發回滾系統的設計與實現。該系統可以用於執行複雜的任務,包括可回滾的任務,及時恢復任務失敗前的狀態。系統使用Java語言進行開發,可以支持多種類型的任務。…

    編程 2025-04-29
  • Java 8 Group By 會影響排序嗎?

    是的,Java 8中的Group By會對排序產生影響。本文將從多個方面探討Group By對排序的影響。 一、Group By的概述 Group By是SQL中的一種常見操作,它…

    編程 2025-04-29

發表回復

登錄後才能評論