java udp发送速率_项目总结22:Java UDP Socket数据的发送和接收
項(xiàng)目總結(jié)22:Java UDP Socket數(shù)據(jù)的發(fā)送和接收
1-先上demo
客戶端(發(fā)送數(shù)據(jù))
packagecom.hs.pretest.udp;importjava.io.IOException;importjava.net.DatagramPacket;importjava.net.DatagramSocket;importjava.net.InetAddress;importjava.net.SocketException;public classUDPClient {/*** @description:數(shù)據(jù)發(fā)送方
*@param:[args]
*@return:void
* @date:2019/4/29
*@author:tangyj
* @remark:
**/
public static voidmain(String[] args) {try{
DatagramSocket socket= newDatagramSocket();
String s= "這是測(cè)試數(shù)據(jù)";byte[] buffer =s.getBytes();
DatagramPacket packet= new DatagramPacket(buffer, buffer.length, InetAddress.getByName("127.0.0.1"),10000);
socket.send(packet);
socket.close();
}catch(SocketException e) {
e.printStackTrace();
}catch(IOException e) {
e.printStackTrace();
}
}
}
服務(wù)端(接收數(shù)據(jù))
package com.hs.pretest.udp;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
public class UDPServer {
/**
* @description:數(shù)據(jù)接收方
* @param:[args]
* @return:void
* @date:2019/4/29
* @author:tangyj
* @remark:
* */
public static void main(String[] args) {
try {
DatagramSocket socket = new DatagramSocket(10000);
byte[] buffer = new byte[65508];
DatagramPacket packet = new DatagramPacket(buffer, 0, buffer.length);
while(true){
socket.receive(packet);
String s = new String(packet.getData(),0,packet.getLength());
System.out.println(s);
}
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
2-操作流程
先啟動(dòng)服務(wù)端(服務(wù)端啟動(dòng)后,會(huì)一直處于響應(yīng)狀態(tài));在啟動(dòng)客戶端main方法,客戶端每啟動(dòng)一次,服務(wù)端就會(huì)收到一次數(shù)據(jù)
3-DatagramSocket
Java使用DatagramSocket代表UDP協(xié)議的Socket,DatagramSocket本身只是碼頭,不維護(hù)狀態(tài),不能產(chǎn)生IO流,它的唯一作用就是接收和發(fā)送數(shù)據(jù)報(bào),Java使用DatagramPacket來代表數(shù)據(jù)報(bào),DatagramSocket接收和發(fā)送的數(shù)據(jù)都是通過DatagramPacket對(duì)象完成的。
4-什么是UDP
UDP協(xié)議:全稱是用戶數(shù)據(jù)報(bào)協(xié)議,在網(wǎng)絡(luò)中它與TCP協(xié)議一樣用于處理數(shù)據(jù)包,是一種無連接的協(xié)議。
UDP協(xié)議的特點(diǎn):
(1)UDP無需建立連接。因此UDP不會(huì)引入建立連接的時(shí)延。試想如果DNS運(yùn)行在TCP之上而不是UDP,則DNS的速度會(huì)滿很多。HTTP使用TCP而不是UDP,是因?yàn)榛谖谋緮?shù)據(jù)的Web網(wǎng)頁(yè)來說,可靠性是至關(guān)重要的。
什么是DNS? DNS(Domain Name System,域名系統(tǒng)),萬(wàn)維網(wǎng)上作為域名和IP地址相互映射的一個(gè)分布式數(shù)據(jù)庫(kù),能夠使用戶更方便的訪問互聯(lián)網(wǎng),而不用去記住能夠被機(jī)器直接讀取的IP數(shù)串。通過域名,最終得到該域名對(duì)應(yīng)的IP地址的過程叫做域名解析(或主機(jī)名解析)。
(2)無連接狀態(tài)。TCP需要在端系統(tǒng)中維護(hù)連接狀態(tài)。此連接狀態(tài)包括接受和發(fā)送緩存、擁塞控制參數(shù)和確認(rèn)號(hào)和序號(hào)的參數(shù)。而UDP不維護(hù)連接狀態(tài),也不跟蹤這些參數(shù),因此某些專用應(yīng)用服務(wù)器使用UDP時(shí),一般都能支持更多的活動(dòng)客戶機(jī)。
(3)分組首部開銷更小。TCP有20字節(jié)的的首部開銷,而UDP只有8個(gè)字節(jié)的首部開銷。
(4)應(yīng)用層能夠更地控制要發(fā)送的數(shù)據(jù)和發(fā)送時(shí)間。UDP沒有擁塞控制,因此網(wǎng)絡(luò)中的擁塞也不會(huì)影響主機(jī)的發(fā)送效率。某些實(shí)時(shí)應(yīng)用(如直播)要求以穩(wěn)定的速度發(fā)送,能容忍一些數(shù)據(jù)的丟失,但不允許有較大的時(shí)延,而UDP正好可以滿足這些應(yīng)用的需求。
(5)UDP常用于一次性傳輸比較小數(shù)據(jù)的網(wǎng)絡(luò)應(yīng)用,如DNS、SNMP等,因?yàn)閷?duì)于這些應(yīng)用,若采用TCP,則將為創(chuàng)建連接、維護(hù)和拆除而帶來不小的開銷。UDP也常用于多媒體應(yīng)用(如IP電話、實(shí)時(shí)視頻會(huì)議、流媒體等),顯然,可靠數(shù)據(jù)傳輸對(duì)于這些應(yīng)用來說并不是最重要的,但TCP的擁塞控制會(huì)導(dǎo)致數(shù)據(jù)出現(xiàn)較大的延遲,這是它們不可容忍的。
(6)UDP提供盡最大努力的交付,即不保證可靠交付,但并不意味著應(yīng)用對(duì)數(shù)據(jù)的要求是不可靠的,因此需要維護(hù)傳輸可靠性的工作需要用戶在應(yīng)用層來完成。應(yīng)用實(shí)體可以根據(jù)應(yīng)用需求來靈活設(shè)計(jì)自己的可靠性機(jī)制。
(7)UDP是面向報(bào)文的的。發(fā)送方UDP對(duì)應(yīng)用層交下來的報(bào)文,在添加首部后就交付給IP層,既不合并,也不拆分,而是保留這些報(bào)文的邊界;接受方UDP對(duì)IP層交上來的用戶數(shù)據(jù)報(bào),在去除首部后就原封不動(dòng)的交付給上層的應(yīng)用進(jìn)程,一次交付一個(gè)完整的報(bào)文,因此報(bào)文不可分割,是UDP數(shù)據(jù)處理的最小單位。
總結(jié)
以上是生活随笔為你收集整理的java udp发送速率_项目总结22:Java UDP Socket数据的发送和接收的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [css] 父元素下有子元素,子元素也
- 下一篇: MLDN Java学习笔记(4)