java网络编程udp_Java网络编程之UDP
UDP是User Datagram Protocol的簡稱,中文名是用戶數(shù)據(jù)報協(xié)議,是OSI(Open System Interconnection,開放式系統(tǒng)互聯(lián))參考模型中一種無連接的傳輸層協(xié)議,提供面向事務(wù)的簡單不可靠信息傳送服務(wù),IETF RFC 768是UDP的正式規(guī)范。
UDP的特征:
不需要建立連接,將數(shù)據(jù)及相關(guān)的地址都封裝到數(shù)據(jù)包中
每個數(shù)據(jù)包的大小限制在64k
不需要建立連接,所以效率比較高,正因為不需要連接所以是不可靠協(xié)議
Socket
Socket就是為網(wǎng)絡(luò)服務(wù)提供的一種機制
通信的兩端都有Socket
網(wǎng)絡(luò)通訊其實就是Socket通信
數(shù)據(jù)在兩個Socket間進行傳輸
Java中使用UDP的步驟
發(fā)送端
建立UDP的socket服務(wù)
封裝數(shù)據(jù)包(指明接收端的IP地址,和接收端的端口號)
通過socket的Send()發(fā)送數(shù)據(jù)
關(guān)閉服務(wù)
接收端
創(chuàng)建socket服務(wù)(需要指明監(jiān)視的端口號,并且要和發(fā)送端指定的接受端口的端口號一致)
定義數(shù)據(jù)包用于接收數(shù)據(jù)(構(gòu)建DatagramPacket packet用于接收數(shù)據(jù))
通過socket的Receiver()接受數(shù)據(jù)
通過packet提供的相應(yīng)方法獲取發(fā)送端發(fā)送的信息
關(guān)閉服務(wù)
代碼案例如下
發(fā)送端
package cc.enfp.socket.udp;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
/*
* UDP 發(fā)送端程序
*/
public class SendTest
{
public static void main(String[] args) throws IOException
{
/*
* 1、創(chuàng)建socket服務(wù)
*/
DatagramSocket socket = new DatagramSocket();
/*
* 2、提供相應(yīng)的發(fā)送=信息
*/
byte[] data = "開啟udp之旅".getBytes();
//指明接收端的IP地址,和接收端的端口號
DatagramPacket packet = new DatagramPacket(data, data.length,
InetAddress.getLocalHost(), 10000);
/*
* 3、使用socket的發(fā)送方法,進行數(shù)據(jù)的發(fā)送
*/
socket.send(packet);
/*
* 4、關(guān)閉連接,釋放資源
*/
socket.close();
}
}
接收端
package cc.enfp.socket.udp;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
/*
* UDP 接收端
*/
public class ReceiveTest
{
public static void main(String[] args) throws Exception
{
/*
* 1、創(chuàng)建socket服務(wù)
* 需要指明監(jiān)視的端口號,并且要和發(fā)送端指定的接受端口的端口號一致
*/
DatagramSocket socket = new DatagramSocket(10000);
/*
* 2、構(gòu)建DatagramPacket packet用于接收數(shù)據(jù)
* packet只是為了接受數(shù)據(jù),所以只需要指明字節(jié)數(shù)組和長度就可以
*/
byte[] data = new byte[1024];
DatagramPacket packet = new DatagramPacket(data, data.length);
/*
* 3、通過socket的receive方法將數(shù)據(jù)封裝到packet中
*/
socket.receive(packet);//該方法是阻塞
/*
* 4、通過packet提供的相應(yīng)方法獲取發(fā)送端發(fā)送的信息
*/
InetAddress ip = packet.getAddress();
System.out.println("發(fā)送端的IP: "+ip.getHostAddress());
//使用String的重載將返回的byte[]類型的內(nèi)容轉(zhuǎn)換成字符串
String content = new String(packet.getData(), 0, packet.getLength());
System.out.println("發(fā)送端發(fā)送的內(nèi)容為: "+content);
/*
* 5.關(guān)閉連接,釋放資源
*/
socket.close();
}
}
總結(jié)
以上是生活随笔為你收集整理的java网络编程udp_Java网络编程之UDP的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java外部类调用内部类_java中的外
- 下一篇: java arrays方法_Java工具