java udp单机发送接收_java Udp实现简单地发送接收信息

首先我们得知道 DatagramSocket、DatagramPacket这两个类

DatagramSocket

数据报套接字是包投递服务的发送或接收点。每个在数据报套接字上发送或接收的包都是单独编址和路由的。

从一台机器发送到另一台机器的多个包可能选择不同的路由,也可能按不同的顺序到达。

DatagramPacket

此类表示数据报包,因为Udp发送的是数据包。

InetSocketAddress

供套接字用于绑定、连接或用作返回值。就是地址

代码实现:

UdpSender(发送方)

import java.net.DatagramPacket;

import java.net.DatagramSocket;

import java.net.InetSocketAddress;

import java.net.SocketAddress;

import java.net.SocketException;

public class UdpSender {

public static void main(String[] args) {

SocketAddress local_addr = new InetSocketAddress("localhost", 9090);//发送方地址

try {

DatagramSocket sender = new DatagramSocket(local_addr);//发送对象

int count = 0;//设置消息数

while(count<100){

count++;

byte[] buf = (count+"hello").getBytes();//信息byte

SocketAddress receive_addr = new InetSocketAddress("localhost",8081);//接收方地址

DatagramPacket data = new DatagramPacket(buf, buf.length, receive_addr);//数据包

try {

sender.send(data);//发送消息

System.out.println("send "+count+" ---- message");

Thread.sleep(1000);

} catch (Exception e) {

e.printStackTrace();

}

}

sender.close();

} catch (SocketException e) {

e.printStackTrace();

}

}

}

UdpReceiver(接收方)

import java.net.DatagramPacket;

import java.net.DatagramSocket;

import java.net.InetSocketAddress;

import java.net.SocketAddress;

public class UdpReceiver {

public static void main (String[] args){

SocketAddress local_addr = new InetSocketAddress("localhost", 8081);//接收方地址

try {

DatagramSocket receiver = new DatagramSocket(local_addr);//接收对象

while(true){

byte[] buf =new byte[10];

DatagramPacket data = new DatagramPacket(buf, buf.length);//接收数据包对象

receiver.receive(data);

String msg = new String(data.getData());

System.out.println("receive"+msg+"from"+data.getAddress());

}

} catch (Exception e) {

e.printStackTrace();

}

}

} 输出:

send 1 ---- message

send 2 ---- message

send 3 ---- message

send 4 ---- message

send 5 ---- message

0818b9ca8b590ca3270a3433284dd417.png

不需要建立连接直接可以发送或接收。。。

不过在接受方创建byte数组时,不会预知其大小,如果自己定义还是大一些好,不然会丢失消息,

但是弊端就是多余的会以输出结果中的方格显示。。。

小结:

一般的在接触Udp(面向非连接)之前都会了解Tcp(面向连接),这两个肯定会有对比

在这里说下自己的理解,

在java中,Tcp建立需要一个ServerSocket对象,然后获取InputStream 和 OutputStream 对象,就可以实现通信,

其实Udp中的DatagramSocket和ServerSocket可以一样理解,只是它不需要建立连接,传送方式是数据包而不是字节数组。

当然,这些理解都只是些皮毛,以后在通信项目中还会遇更多、更复杂的问题,因为往往在一个项目中同时会应用两种

协议(比如QQ)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值