1. UDP多線程聊天如何實現
如果對樓主有幫助,給個採納好不,謝謝啦
UDP-聊天-多線程實現
/*UDP-聊天-多線程實現
編寫一個聊天程序。
有收數據的部分,和發數據的部分。
這兩部分需要同時執行。
那就需要用到多線程技術。
一個線程式控制制收,一個線程式控制制發.
因為收和發動作是不一致的,所以要定義兩個run方法
而且這兩個方法要封裝到不同的類中。
*/import java.io.*;
import java.net.*;class Send implements Runnable//實現Runnable介面,可以多線,發送
{
private DatagramSocket ds;//定義Socket為成員
public Send (DatagramSocket ds)//發送的構造方法,以指定的DatagramSocket服務作為參數
{ this.ds = ds;
} public void run()
{ try
{
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));//讀取鍵盤
String line = null; while ((line = bufr.readLine())!=null)
{ if ("886".equals(line))//設定輸入886為退出
break; byte[] buf = line.getBytes();//得到數組
DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.255"),10002); //DatagramPacket的 實例化new參數(byte[],length)
//DatagramPacket的 實例化new參數(byte[],length,address,port)
//192.168.1.255 末尾255是廣播,0是網段
ds.send(dp);
}
} catch (Exception e)
{ throw new RuntimeException("發送端失敗");
}
}
}class Rece implements Runnable//實現Runnable介面,可以多線程,接收
{
private DatagramSocket ds;//定義Socket為成員
public Rece(DatagramSocket ds)//構造方法,以指定的DatagramSocket服務作為參數
{ this.ds = ds;
} public void run()
{ try
{ while (true)
{ byte[] buf = new byte[1024];//數組作為緩沖區
DatagramPacket dp = new DatagramPacket(buf,buf.length); //DatagramPacket的 實例化new參數(byte[],length)
//DatagramPacket的 實例化new參數(byte[],length,address,port)
ds.receive(dp);//將接收到的數據存儲到定義好的數據包中。調用DatagramSocket的方法receive()
String ip = dp.getAddress().getHostAddress();//ip地址從DatagramPacket數據包中分離出來
String data = new String(dp.getData(),0,dp.getLength());//getData()變數組,參數(byte[],offset,length)
System.out.println(ip+":"+data);
}
} catch (Exception e)
{ throw new RuntimeException("接收端失敗");
}
}
}class ChatDemo{
public static void main(String[] args) throws Exception
{
DatagramSocket sendSocket = new DatagramSocket();//無參數,隨機分配埠 發送端的UDP服務
DatagramSocket receSocket = new DatagramSocket(10002);//參數,port指定埠 接收端的UDP服務
//建立多線程對象,要把實現Runnable介面的子類作為參數,傳給Thread的構造函數
new Thread(new Send(sendSocket)).start(); new Thread(new Rece(receSocket)).start();
//這里new了Thread()的目的就是為了調用start()方法來啟動線程
//啟動線程的唯一方法就是通過Thread類的start()實例方法。start()方法是一個native方法,它將啟動一個新線程,並執行run()方法。
//<!-- 為了啟動MyThread,需要首先實例化一個Thread,並傳入自己的MyThread實例: -->
//事實上,當傳入一個Runnable target參數給Thread後,Thread的run()方法就會調用target.run()
}
}
2. 我要一份用java網路編程寫的點對點的兩人聊天程序(TCP和UDP)
Server端:
import java.io.*;
import java.net.*;
import java.applet.Applet;
public class TalkServer{
public static void main(String args[]) {
try{
ServerSocket server=null;
try{
server=new ServerSocket(4700);
}catch(Exception e) {
System.out.println("can not listen to:"+e);
}
Socket socket=null;
try{
socket=server.accept();
}catch(Exception e) {
System.out.println("Error."+e);
}
String line;
BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter os=new PrintWriter(socket.getOutputStream());
BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));
System.out.println("Client:"+is.readLine());
line=sin.readLine();
while(!line.equals("bye")){
os.println(line);
os.flush();
System.out.println("Server:"+line);
System.out.println("Client:"+is.readLine());
line=sin.readLine();
}
os.close();
is.close();
socket.close();
server.close();
}catch(Exception e){
System.out.println("Error:"+e);
}
}
}
Client端:
import java.io.*;
import java.net.*;
public class TalkClient {
public static void main(String args[]) {
try{
Socket socket=new Socket("127.0.0.1",4700);
BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));
PrintWriter os=new PrintWriter(socket.getOutputStream());
BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));
String readline;
readline=sin.readLine(); //從系統標准輸入讀入一字元串
while(!readline.equals("bye")){
os.println(readline);
os.flush();
System.out.println("Client:"+readline);
System.out.println("Server:"+is.readLine());
readline=sin.readLine(); //從系統標准輸入讀入一字元串
}
os.close(); //關閉Socket輸出流
is.close(); //關閉Socket輸入流
socket.close(); //關閉Socket
}catch(Exception e) {
System.out.println("Error"+e); //出錯,則列印出錯信息
}
}
}
3. java能開發視頻聊天嗎
肯定的說:能!
大致的說一下原理:
首先你要學習一下java的網路編程方面的東西,像TCP/IP UDP協議等等的東西,因為要編寫視頻聊天程序,這些理論性的東西是必須的。
現在假設你已經可以編寫出簡單功能的網路聊天功能的軟體了,想在就是要用你編寫軟體驅動起你的攝像頭了。首先你要確保你的攝像頭的開發商已經給了你該攝像頭的驅動介面,有了這個介面你就可以編寫出可以驅動起該攝像頭的java程序了。
之後你要學習一下JNI,也就是Java Native Interface,學會這個,你就可以用你編寫的java程序來調用攝像頭驅動程序(驅動一般都是用C或C++)編寫,有了JNI,你就可以讓你的java程序和驅動的C或C++程序來進行通訊了。
之後把攝像頭的實時攝像信息傳到網路的另一邊(用到網路編程),就可以讓對方看到你了(前提是對方也安裝了你編寫的軟體,否則你們之間的通訊可能沒人能看懂)。
這是個大致的過程,實現的過程肯定會暈倒這樣那樣的問題,不過不要擔心,學習的過程就是遇到問題,思考問題,解決問題的過程。這樣慢慢的你就發現你已經很牛了!
4. java開發聊天功能用什麼技術
Java開發聊天功能可以使用Socket和ServerSocket技術來實現。
在這種情況下,伺服器端需要創建一個ServerSocket對象來監聽客戶端的連接請求槐伍。當有新的連接請求到達時,伺服器會創建一個鉛敏或新的Socket對象來與客戶端進行通信,並將該Socket對象加入到線程池中。通過這種方式,伺服器可拿御以同時處理多個客戶端的連接請求和消息交互。
客戶端需要創建一個Socket對象,並指定伺服器端的IP地址和埠號來連接伺服器。連接成功後,客戶端可以向伺服器發送消息,也可以接收來自伺服器的消息。當客戶端退出聊天室時,需要關閉Socket連接,並通知伺服器該客戶端已經離開。
在實際開發中,還需要考慮到消息的編碼和解碼、異常處理、線程安全等問題。可以使用現成的開源框架如Netty、Spring Boot等來簡化聊天功能的開發。同時,還需要進行充分的測試和優化,以提高聊天功能的性能和用戶體驗。
5. java開發聊天功能用什麼技術比較好
開發聊天功能可以採用以下幾種技術:
Socket編程:使用Java Socket編程可以實現基於TCP或UDP的網路通信,這虧畢是Java最基礎、最底層的網路編程技術。使用Socket編程可以實現實時通信、消息推送等功能,但需要自己實現消息協議、數據傳輸等細節。
Java NIO:Java NIO(New IO)是Java 1.4之後引入的一種新IO API,它提供了基於事件驅動的非同步IO操作,可以大大提高網路通信效率。使用Java NIO可以實現高並發、高性能的網路通信,但需要掌握NIO的相關概念和使用方式。
WebSockets:WebSockets是HTML5標准中新增的一種協議,可以實現基於瀏覽器的實時雙向通信。使用Java開發WebSockets可以實現跨平台、跨瀏覽器的聊天功能,但需要掌握WebSocket協議的相關概念和使用方式。
第三方庫:Java中有許多第三方庫可以用於實現聊天功能,如Netty、Apache MINA、Smack等。這些庫提供了更加簡銷悉芹單、易用的API,可以快速陸升搭建聊天功能,但需要熟悉相關庫的使用方法和特性。
具體選用哪種技術,需要根據具體需求、開發經驗和技術水平等因素進行綜合考慮。