首页 > 编程语言 >Java网络编程

Java网络编程

时间:2022-09-25 11:45:13浏览次数:55  
标签:DatagramPacket Java 编程 网络 ds msg new public dp

网络通信三要素

分别是IP地址、端口号和协议

IP地址操作类—InetAddress

名称 说明
public static InetAddress getLocalHost() 返回本主机的地址对象
public static InetAddress getByName(String host) 得到指定主机的IP地址对象,参数是域名或者IP地址
public String getHostName() 获取此IP地址的主机名
public String getHostAddress() 返回IP地址字符串
public boolean isReachable(int timeout) 在指定毫秒内连通该IP地址对应的主机,连通返回true

端口号

端口号是标识正在计算机设备上运行的进程(程序),规定为一个 16 位的二进制,范围是 0~65535。

端口类型

  • 周知端口:0~1023,被预先定义的知名应用占用(如:HTTP占用 80,FTP占用21)
  • 注册端口:1024~49151,分配给用户进程或某些应用程序。(如:Tomcat占 用8080,MySQL占用3306)
  • 动态端口:49152到65535,之所以称为动态端口,是因为它 一般不固定分配某种进程,而是动态分配。

注意:一个设备中不能出现两个程序的端口号一样,否则会出现端口冲突错误

协议

TCP(Transmission Control Protocol) :传输控制协议

  • 要使用TCP协议,必须双方先建立连接,它是一种面向连接的可靠通信协议
  • 传输前,采用“三次握手”方式建立连接,所以是可靠的
  • 在连接中可进行大数据量的传输
  • 连接、发送数据都需要确认,且传输完毕后,还需释放已建立的连接,通信效率较低

UDP(User Datagram Protocol):用户数据报协议

  • UDP是一种无连接、不可靠传输的协议
  • 将数据源IP、目的地IP和端口封装成数据包,不需要建立连接
  • 每个数据包的大小限制在64KB内
  • 发送不管对方是否准备好,接收方收到也不确认,故是不可靠的
  • 可以广播发送 ,发送数据结束时无需释放资源,开销小,速度快

UDP通信

DatagramPacket:数据包对象

构造器 说明
public DatagramPacket(byte[] buf, int length, InetAddress address, int port) 创建发送端数据包对象 buf:要发送的内容,字节数组 length:要发送内容的字节长度 address:接收端的IP地址对象 port:接收端的端口号
public DatagramPacket(byte[] buf, int length) 创建接收端的数据包对象 buf:用来存储接收的内容 length:能够接收内容的长度
方法 说明
public int getLength() 获得实际接收到的字节个数

DatagramSocket:发送端和接收端对象

构造器 说明
public DatagramSocket() 创建发送端的Socket对象,系统会随机分配一个端口号。
public DatagramSocket(int port) 创建接收端的Socket对象并指定端口号
方法 说明
public void send(DatagramPacket dp) 发送数据包
public void receive(DatagramPacket p) 接收数据包

UDP实现广播

// 发送端
public class Sender {
    public static void main(String[] args) throws Exception {
        DatagramSocket ds = new DatagramSocket(7777);
        byte[] msg = "泥嚎".getBytes();
        DatagramPacket dp = new DatagramPacket(msg, 0, msg.length,
                InetAddress.getByName("255.255.255.255"), 7777);    // 广播
        ds.send(dp);
        ds.close();
    }
}
// 接收端
public class Receiver {
    public static void main(String[] args) throws Exception {
        byte[] msg = new byte[1024 * 64];
        DatagramPacket dp = new DatagramPacket(msg, msg.length);
        DatagramSocket ds = new DatagramSocket(7777);
        while (true) {
            Thread.sleep(200);
            ds.receive(dp);
            System.out.println("来自" + dp.getAddress().getHostAddress()
                               + ":" + dp.getPort() + "的广播消息:" + new String(dp.getData()));
        }
    }
}

UDP实现组播

//发送端
public class Sender {
    public static void main(String[] args) throws Exception {
        MulticastSocket ds = new MulticastSocket(7777);
        byte[] msg = "泥嚎".getBytes();
        DatagramPacket dp = new DatagramPacket(msg, 0, msg.length, InetAddress.getByName("224.0.1.1"), 7777);
        ds.send(dp);
        ds.close();
    }
}
//接收端
public class Receiver {
    public static void main(String[] args) throws Exception {
        byte[] msg = new byte[1024 * 64];
        DatagramPacket dp = new DatagramPacket(msg, msg.length);
        MulticastSocket ds = new MulticastSocket(7777);
        ds.joinGroup(InetAddress.getByName("224.0.1.1"));	//加入组播地址

        while (true) {
            Thread.sleep(200);
            ds.receive(dp);
            System.out.println("来自" + dp.getAddress().getHostAddress()
                               + ":" + dp.getPort() + "的组播消息:" + new String(dp.getData()));
        }
    }
}

TCP通信

Socket(客户端)

构造器 说明
public Socket(String host , int port) 创建发送端的Socket对象与服务端连接,参数为服务端程序的ip和端口。
方法 说明
OutputStream getOutputStream() 获得字节输出流对象
InputStream getInputStream() 获得字节输入流对象

ServerSocket(服务端)

构造器 说明
public ServerSocket(int port) 注册服务端端口
方法 说明
public Socket accept() 等待接收客户端的Socket通信连接 连接成功返回Socket对象与客户端建立端到端通信

标签:DatagramPacket,Java,编程,网络,ds,msg,new,public,dp
From: https://www.cnblogs.com/timqiu/p/16727540.html

相关文章

  • JavaScript 中的 5 大 ES6 特性
    JavaScript中的5大ES6特性介绍ECMAScript2015(或ES6)是JavaScript的第六版和最新版,它指定了现代Web应用程序的JavaScript实现标准。ES6是编写JavaScript......
  • 与异步 JavaScript 同步
    与异步JavaScript同步介绍如果您是JavaScript开发人员,您可能听说过JavaScript是一种单线程、非阻塞、同步、并发的编程语言,具有很大的灵活性。尽管确实如此,但Jav......
  • day-3 jdk的安装与Java环境的配置。(补发,昨天实验室关门了qaq我没钥匙)
    卸载jdk删除Java的安装目录删除系统高级设置中环境变量的Java—home删除path中Java相关的目录cmd中查看Java-version 安装jdk下载jdk版本记住安装......
  • JavaWeb--JDBC:概述,DriverManager,Connection,Statement,ResultSet,PreparedStatement、数
    第一节  JDBC概述1、JDBC概念JDBC就是使用java语言操作关系数据库的一套API全称:(JavaDataBaseConnectivity)Java数据库连接2、JDBC本质......
  • Java踩坑
    一.基础关键字与标识符,一般全小写的就是关键字命名规则硬性规范标识符包含英文字母26个(区分大小写),0-9数字,$(美元符号)和_下划线标识符不能以数字开头标识符不能......
  • 尼翠德Java初面
    前言:随着新冠疫情的爆发,全球经济的萧条,国内经济形势也不是太好,各行各业也不例外。今年的金九银十机会也不多,感觉像铜九铁十。而且有的要求笔试,还要做算法题,要求比较高。尤......
  • JavaScript 中的 Web 组件介绍:创建一个 hello-world 的 Web 组件
    JavaScript中的Web组件介绍:创建一个hello-world的Web组件WebComponents是一套不同的技术,允许您创建可重用的自定义html元素。它的伟大之处在于对组件的逻辑和......
  • 力扣217(java&python)-存在重复元素(简单)
    题目:给你一个整数数组nums。如果任一值在数组中出现至少两次,返回true;如果数组中每个元素互不相同,返回false。 示例1:输入:nums=[1,2,3,1]输出:true示例2:输入......
  • Java开发环境搭建
    Java开发环境搭建·Java三大版本JavaSE:标准版(桌面程序,控制台开发......)JavaME:嵌入式开发(手机,小家电......)JavaEE:企业级开发(web端,服务器开发...)·JDK,JRE,JVM......
  • java SE 狂神笔记
    1.包机制:区别于类名的命名空间,一般利用公司域名倒置作为包名(www.baidu.com——>com.baidu.www)2.super注意点:a.super调用父类的构造方法,必须在构造方法的第一个;......