日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JAVA UDP 发送和接收数据

發(fā)布時間:2023/12/9 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JAVA UDP 发送和接收数据 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

JAVA UDP 發(fā)送和接收數(shù)據(jù)

UDP的三種通訊方式

  • 單播: 單機(jī)與單機(jī)之間的通訊
  • 廣播: 當(dāng)前主機(jī)與所在網(wǎng)絡(luò)中的所有主機(jī)通訊
  • 組播: 當(dāng)前主機(jī)與選定的一組主機(jī)通訊

一.單播

1.發(fā)送單次單條數(shù)據(jù)

1.發(fā)送端代碼

package com.wei.udp;import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress;public class ClientDemo1 {/*** 發(fā)送端*/public static void main(String[] args) throws Exception {System.out.println("=============發(fā)送端啟動===========");// 1.創(chuàng)建發(fā)送端對象DatagramSocket socket = new DatagramSocket(6666);// 2.創(chuàng)建一個數(shù)據(jù)包對象封裝數(shù)據(jù)/*** 參數(shù)1:封裝要發(fā)送的數(shù)據(jù)* 參數(shù)2:發(fā)送數(shù)據(jù)的大小* 參數(shù)3:服務(wù)端的IP地址* 參數(shù)4:服務(wù)端的端口** InetAddress.getLocalHost() 獲取本機(jī)IP地址*/byte[] buffer = "我是一坨數(shù)據(jù)!".getBytes();DatagramPacket packet = new DatagramPacket(buffer,buffer.length, InetAddress.getLocalHost(),8888);// 3.發(fā)送數(shù)據(jù)socket.send(packet);// 4.關(guān)閉管道socket.close();} }

2.服務(wù)端(接收端)代碼

package com.wei.udp;import java.net.DatagramPacket; import java.net.DatagramSocket;/*** 接收端*/ public class ServerDemo2 {public static void main(String[] args) throws Exception {System.out.println("=============客戶端啟動===========");// 1.創(chuàng)建接受對象DatagramSocket socket = new DatagramSocket(8888);// 2.創(chuàng)建一個數(shù)據(jù)包接收數(shù)據(jù)byte [] buffer = new byte[1024];DatagramPacket packet = new DatagramPacket(buffer, buffer.length);// 3.等待接受數(shù)據(jù)socket.receive(packet);// 4.取出數(shù)據(jù)int len = packet.getLength();String rs = new String(buffer,0,len);System.out.println("收到的數(shù)據(jù):" + rs);// 獲取發(fā)送端的ip和端口String ip = packet.getSocketAddress().toString();System.out.println("發(fā)送端的IP地址: " + ip);int port = packet.getPort();System.out.println("發(fā)送端端口為: "+port);// 關(guān)閉管道socket.close();} }

3.接收到的數(shù)據(jù)

=============客戶端啟動=========== 收到的數(shù)據(jù): 我是一坨數(shù)據(jù)! 發(fā)送端的IP地址: /192.168.43.83:6666 發(fā)送端端口為: 6666

2.多發(fā)多收消息

1.服務(wù)端代碼

package com.wei.udp2;import java.net.DatagramPacket; import java.net.DatagramSocket;/*** 接收端*/ public class ServerDemo2 {public static void main(String[] args) throws Exception {System.out.println("=============客戶端啟動===========");// 1.創(chuàng)建接受對象DatagramSocket socket = new DatagramSocket(8888);// 2.創(chuàng)建一個數(shù)據(jù)包接收數(shù)據(jù)byte [] buffer = new byte[1024];DatagramPacket packet = new DatagramPacket(buffer, buffer.length);while (true) {// 3.等待接受數(shù)據(jù)socket.receive(packet);// 4.取出數(shù)據(jù)int len = packet.getLength();String rs = new String(buffer,0,len);System.out.println("收到來自: "+ packet.getAddress()+ ",對方端口號為: "+ packet.getPort()+"的消息: " + rs);}} }

2.客戶端代碼

package com.wei.udp2;import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.util.Scanner;public class ClientDemo1 {/*** 發(fā)送端*/public static void main(String[] args) throws Exception {System.out.println("=============發(fā)送端啟動===========");// 1.創(chuàng)建發(fā)送端對象DatagramSocket socket = new DatagramSocket(6666);Scanner sc = new Scanner(System.in);while (true) {System.out.println("請輸入您要發(fā)送的消息: ");String msg = sc.nextLine();if("exit".equals(msg)){System.out.println("退出成功!");socket.close();break;}// 2.創(chuàng)建一個數(shù)據(jù)包對象封裝數(shù)據(jù)byte[] buffer = msg.getBytes();DatagramPacket packet = new DatagramPacket(buffer,buffer.length, InetAddress.getLocalHost(),8888);// 3.發(fā)送數(shù)據(jù)socket.send(packet);}} }

3.發(fā)送及接收到的數(shù)據(jù)

===發(fā)送端啟動=
請輸入您要發(fā)送的消息:
嗨,在嗎?
請輸入您要發(fā)送的消息:
在嗎?
請輸入您要發(fā)送的消息:
怎么不說話?
請輸入您要發(fā)送的消息:
exit
退出成功!

===客戶端啟動=
收到來自: /192.168.43.83,對方端口號為: 6666的消息: 嗨,在嗎?
收到來自: /192.168.43.83,對方端口號為: 6666的消息: 在嗎?
收到來自: /192.168.43.83,對方端口號為: 6666的消息: 怎么不說話?

二.廣播消息

  • 發(fā)送廣播消息需要使用廣播地址: 255.255.255.255
  • 發(fā)送端的數(shù)據(jù)包的目的地址是廣播地址+指定端口號(255.255.255.255,9999)
  • 本機(jī)所在網(wǎng)段的其他主機(jī)只要匹配到端口即可接受消息(9999)

1.服務(wù)端代碼

package com.wei.udp3;import java.net.DatagramPacket; import java.net.DatagramSocket;/*** 服務(wù)端*/ public class ServerDemo2 {public static void main(String[] args) throws Exception {System.out.println("=============客戶端啟動===========");// 1.創(chuàng)建接受對象DatagramSocket socket = new DatagramSocket(9999);// 2.創(chuàng)建一個數(shù)據(jù)包接收數(shù)據(jù)byte [] buffer = new byte[1024];DatagramPacket packet = new DatagramPacket(buffer, buffer.length);while (true) {// 3.等待接受數(shù)據(jù)socket.receive(packet);// 4.取出數(shù)據(jù)int len = packet.getLength();String rs = new String(buffer,0,len);System.out.println("收到來自: "+ packet.getAddress()+ ",對方端口號為: "+ packet.getPort()+"的消息: " + rs);}} }

2.發(fā)送端代碼

package com.wei.udp3;import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.util.Scanner;public class ClientDemo1 {/*** 發(fā)送端*/public static void main(String[] args) throws Exception {System.out.println("=============發(fā)送端啟動===========");// 1.創(chuàng)建發(fā)送端對象DatagramSocket socket = new DatagramSocket(6666);Scanner sc = new Scanner(System.in);while (true) {System.out.println("請輸入您要發(fā)送的消息: ");String msg = sc.nextLine();if("exit".equals(msg)){System.out.println("退出成功!");socket.close();break;}// 2.創(chuàng)建一個數(shù)據(jù)包對象封裝數(shù)據(jù)byte[] buffer = msg.getBytes();DatagramPacket packet = new DatagramPacket(buffer,buffer.length, InetAddress.getByName("255.255.255.255"),9999);// 3.發(fā)送數(shù)據(jù)socket.send(packet);}} }

3.發(fā)送及接收到的數(shù)據(jù)

===發(fā)送端啟動=
請輸入您要發(fā)送的消息:
hello
請輸入您要發(fā)送的消息:
我是一條廣播消息
請輸入您要發(fā)送的消息:
exit
退出成功!

===客戶端啟動=
收到來自: /192.168.43.83,對方端口號為: 6666的消息: hello
收到來自: /192.168.43.83,對方端口號為: 6666的消息: 我是一條廣播消息

三.組播

  • 使用組播地址: 224.0.0.0~239.255.255.255
  • 發(fā)送端的數(shù)據(jù)包的目的目的地址是組播ip(224.0.1.1,9999)
  • 接收端必須綁定該組播ip(224.0.1.1),端口還要對應(yīng)發(fā)送端的目的端口(9999)

1.服務(wù)端代碼

package com.wei.udp4;import java.net.*;/*** 服務(wù)端*/ public class ServerDemo2 {public static void main(String[] args) throws Exception {System.out.println("=============客戶端啟動===========");// 1.創(chuàng)建接受對象MulticastSocket socket = new MulticastSocket(9999);// 把當(dāng)前接受端加入到一個組播組中,綁定對應(yīng)組播消息的組ip // socket.joinGroup(InetAddress.getByName("224.0.1.1")); 過時的方法socket.joinGroup(new InetSocketAddress(InetAddress.getByName("224.0.1.1"),9999), NetworkInterface.getByInetAddress(InetAddress.getLocalHost()));// 2.創(chuàng)建一個數(shù)據(jù)包接收數(shù)據(jù)byte [] buffer = new byte[1024];DatagramPacket packet = new DatagramPacket(buffer, buffer.length);while (true) {// 3.等待接受數(shù)據(jù)socket.receive(packet);// 4.取出數(shù)據(jù)int len = packet.getLength();String rs = new String(buffer,0,len);System.out.println("收到來自: "+ packet.getAddress()+ ",對方端口號為: "+ packet.getPort()+"的消息: " + rs);}} }

2.客戶端代碼

package com.wei.udp4;import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.util.Scanner;public class ClientDemo1 {/*** 發(fā)送端*/public static void main(String[] args) throws Exception {System.out.println("=============發(fā)送端啟動===========");// 1.創(chuàng)建發(fā)送端對象DatagramSocket socket = new DatagramSocket(6666);Scanner sc = new Scanner(System.in);while (true) {System.out.println("請輸入您要發(fā)送的消息: ");String msg = sc.nextLine();if("exit".equals(msg)){System.out.println("退出成功!");socket.close();break;}// 2.創(chuàng)建一個數(shù)據(jù)包對象封裝數(shù)據(jù)byte[] buffer = msg.getBytes();DatagramPacket packet = new DatagramPacket(buffer,buffer.length, InetAddress.getByName("224.0.1.1"),9999);// 3.發(fā)送數(shù)據(jù)socket.send(packet);}} }

3.發(fā)送及接收到的數(shù)據(jù)

===發(fā)送端啟動=
請輸入您要發(fā)送的消息:
hello
請輸入您要發(fā)送的消息:
我是一條組播消息
請輸入您要發(fā)送的消息:
exit

===客戶端啟動=
收到來自: /192.168.43.83,對方端口號為: 6666的消息: hello
收到來自: /192.168.43.83,對方端口號為: 6666的消息: 我是一條組播消息

總結(jié)

以上是生活随笔為你收集整理的JAVA UDP 发送和接收数据的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。