当前位置 : 主页 > 编程语言 > java >

UDP通信

来源:互联网 收集:自由互联 发布时间:2022-08-10
/* *作者:呆萌老师 *☑csdn认证讲师 *☑51cto高级讲师 *☑腾讯课堂认证讲师 *☑网易云课堂认证讲师 *☑华为开发者学堂认证讲师 *☑爱奇艺千人名师计划成员 *在这里给大家分享技术、知


 

/*
*作者:呆萌老师
*☑csdn认证讲师
*☑51cto高级讲师
*☑腾讯课堂认证讲师
*☑网易云课堂认证讲师
*☑华为开发者学堂认证讲师
*☑爱奇艺千人名师计划成员
*在这里给大家分享技术、知识和生活
*各种干货,记得关注哦!
*/

UDP通信_java

InetAddress类

IP是网络中存在一个数据,那么Java针对这类特殊的数据,会使用对应的类进行描述、封装。

学习Java中的网络编程,对应的类和接口都在java.net包下:

Java中使用InetAddress类描述封装IP对象。只要在程序中我们需要操作ip地址,只能通过InetAddress对象进行完成。

InetAddress类中没有构造方法,只能通过其中的静态的方法获取到InetAddress对象。

public class TestInetAddress {

/**
* @param
public static void main(String[] args) {
// TODO Auto-generated method stub

try {
InetAddress obj= InetAddress.getLocalHost();//获得本地主机

System.out.println(obj.getHostAddress()); //返回主机地址(ip)

InetAddress obj2=InetAddress.getByName("www.taobao.com");

System.out.println(obj2.getHostAddress());//返回的是ip

System.out.println(obj2.getHostName());//返回主机名 www.taobao.com

InetAddress[] arr=InetAddress.getAllByName("www.taobao.com");

for(InetAddress ipobj:arr)
System.out.println(ipobj.getHostAddress());

InetAddress obj3=InetAddress.getByName("192.168.1.136");

System.out.println(obj3.getHostAddress());//192.168.1.136

} catch (UnknownHostException e) {
// TODO Auto-generated catch block

UDP通信_.net_02

UDP通信 

DatagramSocket对象介绍

UDP协议是面向无连接的协议,发送数据的一方尽管发送数据,它不关心接收方是否在接收数据。

在Java中使用DatagramSocket对象表示基于UDP协议的发送端或者是接收端。

数据报套接字是包投递服务的发送或接收点。每个在数据报套接字上发送或接收的包都是单独编址和路由的。从一台机器发送到另一台机器的多个包可能选择不同的路由,也可能按不同的顺序到达。

DatagramPacket对象介绍

数据报包用来实现无连接包投递服务。每条报文仅根据该包中包含的信息从一台机器路由到另一台机器。从一台机器发送到另一台机器的多个包可能选择不同的路由,也可能按不同的顺序到达。不对包投递做出保证。

DatagramPacket:它本身负责的对基于UDP协议发送或者接收的数据进行打包或者拆包的。

如何区分DatagramPacket对象到底是打包还是拆包的对象:完全依赖创建DatagramPacket对象时调用的构造方法。

代码实现案例

package com.wowowo.udp;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

public class UdpReceive {

/**
* @param
public static void main(String[] args) {
// TODO Auto-generated method stub

//1.创建码头 接收端的码头需要添加端口号,发送端端口号要跟接收端的端口号一致
try {
DatagramSocket datagramSocket=new DatagramSocket(8888);

//2.创建packet 用来接收传递过来的数据
byte[] data=new byte[1024];
int length=data.length;
DatagramPacket datagramPacket=new DatagramPacket(data, length);

//3.接收数据
datagramSocket.receive(datagramPacket);

String ip=datagramPacket.getAddress().getHostAddress();

String msg=new String(data);

System.out.println("接收到来自"+ip+"的信息:"+msg);

//4.关闭码头
datagramSocket.close();

} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block

UDP通信_udp_03

package com.wowowo.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;

public class UdpSend {

/**
* @param
public static void main(String[] args) {
// TODO Auto-generated method stub

//发送端
try {


//1.创建一个socket(码头)
DatagramSocket datagramSocket=new DatagramSocket();

//2.创建packet (集装箱)
byte[] data="呆萌老师你好".getBytes();
int length=data.length;
InetAddress ip=InetAddress.getByName("192.168.31.111");
int port=8888; // 0-1023端口号一般是常用的知名的程序的端口号 65535以内

//DatagramPacket(byte[] buf, int length, InetAddress address, int port)

DatagramPacket datagramPacket=new DatagramPacket(data, length, ip, port);

//3.发送
datagramSocket.send(datagramPacket);

//4.关闭码头
datagramSocket.close();





} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block

UDP通信_udp_04

更多了解

​​https://edu.51cto.com/course/20124.html​​

上一篇:怎样用Java复制一个文件到指定目录?
下一篇:没有了
网友评论