欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java編程實現(xiàn)基于UDP協(xié)議傳輸數(shù)據(jù)的方法

 更新時間:2015年11月05日 15:17:03   作者:awj3584  
這篇文章主要介紹了java編程實現(xiàn)基于UDP協(xié)議傳輸數(shù)據(jù)的方法,較為詳細(xì)的分析了UDP協(xié)議的原理及Java編程實現(xiàn)數(shù)據(jù)傳輸客戶端與服務(wù)器端的相關(guān)技巧,需要的朋友可以參考下

本文實例講述了java編程實現(xiàn)基于UDP協(xié)議傳輸數(shù)據(jù)的方法。分享給大家供大家參考,具體如下:

UDP協(xié)議(User Datagram Protocol,用戶數(shù)據(jù)報協(xié)議)不同于TCP協(xié)議,它是不可能靠的,但是它比TCP協(xié)議具有更快的傳輸速度,UDP發(fā)送的數(shù)據(jù)單元稱為數(shù)據(jù)報,當(dāng)網(wǎng)絡(luò)傳輸UDP傳輸UDP數(shù)據(jù)報是無法保證數(shù)據(jù)能夠到達(dá)目的地,也無法保證按發(fā)送的順序到達(dá)目的地,也就是說先發(fā)送了“hello”,再發(fā)送了“world”,但接收方可能會先收到“world”,再收到“hello”,也有可能收不到數(shù)據(jù),為什么呢?因為它是不可能靠的,在傳輸途中可能丟失了。但UDP比TCP跟適合與傳輸實時音頻。下面是一個簡單的UPD傳輸數(shù)據(jù)報的例子

服務(wù)器端:

import java.io.IOException; 
import java.net.DatagramPacket; 
import java.net.DatagramSocket; 
import java.net.SocketException; 
public class EchoServer { 
 private DatagramSocket datagramSocket; 
 private final int port = 8088; 
 public static void main(String[] args) throws SocketException { 
  new EchoServer().service(); 
 } 
 public EchoServer() throws SocketException{ 
  datagramSocket = new DatagramSocket(port); 
  System.out.println("服務(wù)器啟動"); 
 } 
 public String echo(String msg){ 
  return "echo:"+msg; 
 } 
 public void service(){ 
  while (true) { 
   try { 
    DatagramPacket packet = new DatagramPacket(new byte[512], 512); 
    datagramSocket.receive(packet); 
    String msg = new String(packet.getData(), 0, packet.getLength()); 
    System.out.println(packet.getAddress()+"/"+packet.getPort()+" msg:"+msg); 
    packet.setData(echo(msg).getBytes()); 
    datagramSocket.send(packet); 
   } catch (IOException e) { 
    e.printStackTrace(); 
   } 
  } 
 } 
}

客戶端:

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.net.DatagramPacket; 
import java.net.DatagramSocket; 
import java.net.InetAddress; 
import java.net.SocketException; 
public class EchoClient { 
 private String remoteHost="localhost"; 
 private int remotePort=8088; 
 private DatagramSocket datagramSocket; 
 public EchoClient() throws SocketException{ 
  datagramSocket = new DatagramSocket(); 
 } 
 public static void main(String[] args) throws SocketException { 
  new EchoClient().talk(); 
 } 
 public void talk(){ 
  try { 
   BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); 
   String msg = null; 
   InetAddress address = InetAddress.getByName(remoteHost); 
   while ((msg=reader.readLine())!=null) { 
    //發(fā)送數(shù)據(jù)報 
    byte [] buffer = msg.getBytes(); 
    DatagramPacket packet = new DatagramPacket(buffer,buffer.length, address, remotePort); 
    datagramSocket.send(packet); 
    //接收數(shù)據(jù)報 
    DatagramPacket inputPacket = new DatagramPacket(new byte[512], 512); 
    datagramSocket.receive(inputPacket); 
    System.out.println(new String(inputPacket.getData(), 0 , inputPacket.getLength())); 
    if("bye".equals(msg)){ 
     break; 
    } 
   } 
  } catch (IOException e) { 
   e.printStackTrace(); 
  }finally{ 
   datagramSocket.close(); 
  } 
}

希望本文所述對大家Java程序設(shè)計有所幫助。

相關(guān)文章

  • Java HashSet集合存儲遍歷學(xué)生對象代碼實例

    Java HashSet集合存儲遍歷學(xué)生對象代碼實例

    這篇文章主要介紹了Java HashSet集合存儲遍歷學(xué)生對象代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-04-04
  • springboot打印接口調(diào)用日志的實例

    springboot打印接口調(diào)用日志的實例

    這篇文章主要介紹了springboot打印接口調(diào)用日志的實例,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • 解析SpringBoot整合SpringDataRedis的過程

    解析SpringBoot整合SpringDataRedis的過程

    這篇文章主要介紹了SpringBoot整合SpringDataRedis的過程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • VSCode?配置?Spring?Boot?項目開發(fā)環(huán)境的全過程

    VSCode?配置?Spring?Boot?項目開發(fā)環(huán)境的全過程

    兩三年前曾經(jīng)試過配置Java環(huán)境, 存在不少問題作罷. 最近搜了下相關(guān)的文章, 感覺VSCode對Java項目的支持比三年前完善了不少. 今天實際配置了一下環(huán)境, 把自己常用的功能過了一遍, 基本能跑通開發(fā)流程, 做個筆記,需要的朋友可以參考下
    2024-03-03
  • java并發(fā)編程專題(一)----線程基礎(chǔ)知識

    java并發(fā)編程專題(一)----線程基礎(chǔ)知識

    這篇文章主要介紹了java并發(fā)編程線程的基礎(chǔ)知識,文中講解非常詳細(xì),幫助大家更好的學(xué)習(xí)JAVA并發(fā)編程,感興趣想學(xué)習(xí)JAVA的可以了解下
    2020-06-06
  • Java設(shè)計模式之模板方法模式

    Java設(shè)計模式之模板方法模式

    這篇文章介紹了Java設(shè)計模式之模板方法模式,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-10-10
  • 使用Filter實現(xiàn)登錄權(quán)限驗證

    使用Filter實現(xiàn)登錄權(quán)限驗證

    這篇文章主要為大家詳細(xì)介紹了使用Filter實現(xiàn)登錄權(quán)限驗證,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • 深度源碼解析Java 線程池的實現(xiàn)原理

    深度源碼解析Java 線程池的實現(xiàn)原理

    如何高效的使用這些資源就是程序員在平時寫代碼時候的一個努力的方向。本文要說的線程池就是一種對 CPU 利用的優(yōu)化手段。對Java 線程池的實現(xiàn)原理相關(guān)知識感興趣的朋友一起看看吧
    2021-05-05
  • Mybatis讀取和存儲json類型數(shù)據(jù)的實現(xiàn)

    Mybatis讀取和存儲json類型數(shù)據(jù)的實現(xiàn)

    本文主要介紹了Mybatis讀取和存儲json類型數(shù)據(jù)的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • Java連接并操作Sedna XML數(shù)據(jù)庫的方法

    Java連接并操作Sedna XML數(shù)據(jù)庫的方法

    這篇文章主要介紹了Java連接并操作Sedna XML數(shù)據(jù)庫的方法,較為詳細(xì)的說明了Sedna XML數(shù)據(jù)庫的原理與功能,并給出了基于java操作Sedna XML數(shù)據(jù)庫的方法,需要的朋友可以參考下
    2015-06-06

最新評論