java Socket UDP實例詳解
UDP編程示例
服務(wù)器端:
package socket;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
public class UDPServer {
public static void main(String[] args) throws IOException {
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf, buf.length);//聲明一個用來接收數(shù)據(jù)的“包裹”
DatagramSocket ds = new DatagramSocket(5678);//指定的是UDP中的端口號5678,在TCP中,還有另外一個端口號為5678的端口
while(true){
ds.receive(dp); //阻塞式的
System.out.println(new String(buf,0,dp.getLength()));//dp中獲取的數(shù)據(jù)的長度
}
}
}
客戶端:
package socket;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketException;
public class UDPClient {
public static void main(String[] args) throws IOException {
byte[] buf = new String("Hello").getBytes();
//UDP是無連接的,所以要在發(fā)送的數(shù)據(jù)包裹中指定要發(fā)送到的ip:port
DatagramPacket dp = new DatagramPacket(buf, buf.length, new InetSocketAddress("127.0.0.1", 5678));
DatagramSocket ds = new DatagramSocket(9999); //指明發(fā)送端的端口號
ds.send(dp);
ds.close();
}
}
說明:
1. 嚴格意義上來講,UDP沒有server和client之分,不像TCP中有ServerSocket和Socket,UDP中只有DatagramSocket。
2. UDP和TCP的端口是分開的,例如UDP有一個端口號為5678的端口,TCP也有一個端口號為5678的端口。
3. UDP是無連接的,所以要在發(fā)送的數(shù)據(jù)包裹中指定要發(fā)送到的ip:port。
4. 如果要發(fā)送long、int等類型的數(shù)據(jù),則需要使用到ByteArrayOutputStream、DataOutputStream、ByteArrayInputStream、ByteArrayInputStream流類型,如下:
服務(wù)器端:
package socket;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
public class UDPServer {
public static void main(String[] args) throws IOException {
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf, buf.length);
DatagramSocket ds = new DatagramSocket(5678);
ByteArrayInputStream bais = null;
DataInputStream dos = null;
while(true){
ds.receive(dp);
bais = new ByteArrayInputStream(buf);
dos = new DataInputStream(bais);
System.out.println(dos.readLong());
}
}
}
客戶端:
package socket;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketException;
public class UDPClient {
public static void main(String[] args) throws IOException {
byte[] buf = null;
long l = 100000L;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(baos);
dos.writeLong(l);
buf = baos.toByteArray();
DatagramPacket dp = new DatagramPacket(buf, buf.length, new InetSocketAddress("127.0.0.1", 5678));
DatagramSocket ds = new DatagramSocket(9999);
ds.send(dp);
ds.close();
dos.close();
}
}
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關(guān)文章
Windows10系統(tǒng)下JDK1.8環(huán)境變量的配置
今天帶大家學(xué)習(xí)在Windows10系統(tǒng)下怎么配置JDK1.8環(huán)境變量,文中有非常詳細的安裝及配置教程,對正在學(xué)習(xí)的小伙伴們很有幫助,需要的朋友可以參考下2021-05-05
Java實現(xiàn)MapStruct對象轉(zhuǎn)換的示例代碼
本文主要介紹了MapStruct在Java中的對象轉(zhuǎn)換使用方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-12-12
解決Java壓縮zip異常java.util.zip.ZipException:duplicate entry
這篇文章主要介紹了解決Java壓縮zip異常java.util.zip.ZipException:duplicate entry:問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-12-12
java虛擬機參數(shù)-D、-X和-XX的區(qū)別小結(jié)
本文主要介紹了java虛擬機參數(shù)-D、-X和-XX的區(qū)別小結(jié),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06
java生成excel并導(dǎo)出到對應(yīng)位置的方式
這篇文章主要介紹了java生成excel并導(dǎo)出到對應(yīng)位置的方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01
chatgpt java環(huán)境調(diào)用源碼實現(xiàn)demo
這篇文章主要介紹了chatgpt java環(huán)境調(diào)用源碼實現(xiàn)demo,本文結(jié)合實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-02-02
SpringBoot2 集成log4j2日志框架的實現(xiàn)
這篇文章主要介紹了SpringBoot2 集成log4j2日志框架的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10

