UDP传输
- 1.发送Send
- 创建DatagramSocket, 随机端口号
- 创建DatagramPacket, 指定数据, 长度, 地址, 端口
- 使用DatagramSocket发送DatagramPacket
- 关闭DatagramSocket
- 2.接收Receive
- 创建DatagramSocket, 指定端口号
- 创建DatagramPacket, 指定数组, 长度
- 使用DatagramSocket接收DatagramPacket
- 关闭DatagramSocket
- 从DatagramPacket中获取数据
- 3.接收方获取ip和端口号
- String ip = packet.getAddress().getHostAddress();
- int port = packet.getPort();
UDP传输优化
- 接收端Receive
-
12345678910
DatagramSocket socket =
new
DatagramSocket(
6666
);
//创建socket相当于创建码头
DatagramPacket packet =
new
DatagramPacket(
new
byte
[
1024
],
1024
);
//创建packet相当于创建集装箱
while
(
true
) {
socket.receive(packet);
//接收货物
byte
[] arr = packet.getData();
int
len = packet.getLength();
String ip = packet.getAddress().getHostAddress();
System.out.println(ip +
":"
+
new
String(arr,
0
,len));
}
-
发送端Send
123456789101112DatagramSocket socket =
new
DatagramSocket();
//创建socket相当于创建码头
Scanner sc =
new
Scanner(System.in);
while
(
true
) {
String str = sc.nextLine();
if
(
"quit"
.equals(str))
break
;
DatagramPacket packet =
//创建packet相当于创建集装箱
new
DatagramPacket(str.getBytes(), str.getBytes().length, InetAddress.getByName(
"127.0.0.1"
),
6666
);
socket.send(packet);
//发货
}
socket.close();
UDP传输多线程
发送和接收在一个窗口完成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | public class Demo_MoreThread { /** * @param args */ public static void main(String[] args) { new Receive().start(); new Send().start(); } } class Receive extends Thread { public void run() { try { DatagramSocket socket = new DatagramSocket( 6666 ); //创建socket相当于创建码头 DatagramPacket packet = new DatagramPacket( new byte [ 1024 ], 1024 ); //创建packet相当于创建集装箱 while ( true ) { socket.receive(packet); //接收货物 byte [] arr = packet.getData(); int len = packet.getLength(); String ip = packet.getAddress().getHostAddress(); System.out.println(ip + ":" + new String(arr, 0 ,len)); } } catch (IOException e) { e.printStackTrace(); } } } class Send extends Thread { public void run() { try { DatagramSocket socket = new DatagramSocket(); //创建socket相当于创建码头 Scanner sc = new Scanner(System.in); while ( true ) { String str = sc.nextLine(); if ( "quit" .equals(str)) break ; DatagramPacket packet = //创建packet相当于创建集装箱 new DatagramPacket(str.getBytes(), str.getBytes().length, InetAddress.getByName( "127.0.0.1" ), 6666 ); socket.send(packet); //发货 } socket.close(); } catch (IOException e) { e.printStackTrace(); } } } |
最后,关注【码上加油站】微信公众号后,有疑惑有问题想加油的小伙伴可以码上加入社群,让我们一起码上加油吧!!!
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步