Java笔记第十弹
网络编程三要素
1、IP地址--设备的标识
2、端口--应用程序的标识
3、协议--常见的协议有UDP协议和TCP协议
IP地址
1、IPv4(二进制数据)
2、IPv6
常用命令:
ipconfig:查看本机IP地址
ping IP地址:检查网络是否连通
特殊的IP地址:
127.0.0.1:是回送地址,可以代表本机地址,一般用来测试使用
InetAddress的使用(类)
//表示InetAddress协议的地址
//方法
static InetAddress getByName(String host);//确定主机名称的IP地址,主机名称可以是机器名称,也可以是IP地址
String getHostName();//获取此IP地址的主机名
String getHostAddress();//返回文本显示中的IP地址字符串
相关应用:
import java.net.InetAddress;
import java.net.UnknownHostException;
public class Main{
public static void main(String[] args) throws UnknownHostException {
InetAddress ia=InetAddress.getByName("刘紫锦");//可以是主机名,也可以是IP地址
String name=ia.getHostName();
String ip=ia.getHostAddress();
System.out.println("主机名:"+name);
System.out.println("Ip地址:"+ip);
}
}
端口(设备上应用程序的唯一标识)
协议
1、UDP协议
消耗小,通信效率高,通常都会用于音频、视频和普通数据的传输
2、TCP协议
三次握手--保证连接的可靠性
可以保证传输数据的安全性和可靠性
UDP通信程序
UDP发送数据
//步骤:
//创建发送端的Socket对象(DatagramSocket)
//创建数据,并把数据打包
//调用DatagramSocket象的方法发送数据
//关闭发送端
相关应用:
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.net.DatagramSocket;
public class Main{
public static void main(String[] args) throws UnknownHostException, SocketException {
//创建对象
DatagramSocket ds=new DatagramSocket();
//创建数据,并把数据打包
//构造一个数据包
byte[] by="hello,udp,我来啦!".getBytes();
int length=by.length;
InetAddress ia=InetAddress.getByName("liuzijin");
int port=10086;//端口号
DatagramSocket dp=new DatagramSocket(by,by.length,InetAddress.getByName("liuzijin"),10086);
//发送数据
ds.send(dp);
//关闭发送端
ds.close();
}
}
UDP接收数据
import java.net.UnknownHostException;
import java.net.DatagramSocket;
import java.net.SocketException;
public class Main{
public static void main(String[] args) throws UnknownHostException, SocketException {
//创建接收对象
DatagramSocket ds=new DatagramSocket(10086);
byte[] by=new byte[1024];
DatagramSocket dp=new DatagramSocket(by,by.length);
ds.receive(dp);
//返回数据缓冲区
byte[] bb=dp.getData();
String dataString=new String(bb,0,bb.getLength());
System.out.println("数据是:"+dataString);
ds.close();
}
}
案例:
//send.java
import java.io.*;
import java.net.InetAddress;
import java.net.DatagramSocket;
public class Main{
public static void main(String[] args) throws IOException {
DatagramSocket ds=new DatagramSocket();
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String line;
while((line=br.readLine())!=null){
if("886".equals(line)){
break;
}else{
byte[] by=line.getBytes();
DatagramSocket dp=new DatagramSocket(by,by.length,InetAddress.getByName("liuzijin"),12345);
ds.send(dp);
ds.close();
}
}
}
}
//receive.java
import java.io.*;
import java.net.DatagramSocket;
public class Main{
public static void main(String[] args) throws IOException {
DatagramSocket ds=new DatagramSocket(12345);
while(true) {
byte[] by = new byte[1024];
DatagramSocket dp = new DatagramSocket(by, by.length);
ds.receive(dp);
System.out.println("数据是:" + new String(dp.getData(), 0, dp.getLength()));
}
}
}
Java笔记第十弹的更多相关文章
- Java笔记(十四) 并发基础知识
并发基础知识 一.线程的基本概念 线程表示一条单独的执行流,它有自己的程序计数器,有自己的栈. 1.创建线程 1)继承Thread Java中java.lang.Thread这个类表示线程,一个类可以 ...
- Java笔记(三十)……正则表达式
概述 符合一定规则的表达式 专门用于操作字符串 特点: 用于一些特定的符号来表示一些代码操作,这样就可以简化书写 所以学习正则表达式,就是在学习一些特殊符号的使用 好处: 可以简化对字符串的复杂操作 ...
- Java笔记(二十九)……网络编程
概述 网络模型 网络通讯的要素 ip地址:网络中设备的标识符 端口:用于标识同一台设备上不同的进程,有效端口:0~65535,其中0~1024是系统使用端口或者保留端口 TCP与UDP UDP特点: ...
- Java笔记(二十八)……IO流下 IO包中其他常用类以及编码表问题
PrintWriter打印流 Writer的子类,既可以接收字符流,也可以接收字节流,还可以接收文件名或者文件对象,非常方便 同时,还可以设置自动刷新以及保持原有格式写入各种文本类型的print方法 ...
- Java笔记(二十六)……IO流上 字节流与字符流
概述 IO流用来处理设备之间的数据传输 Java对数据的操作时通过流的方式 Java用于操作流的对象都在IO包中 流按操作的数据分为:字节流和字符流 流按流向不同分为:输入流和输出流 IO流常用基类 ...
- Java笔记(二十五)……其他常用API
System类 工具类全部都是静态方法 常用方法 获取系统属性信息 static PropertiesgetProperties() static StringgetProperty(String k ...
- Java笔记(二十四)……集合工具类Collections&Arrays
Collections 集合框架的工具类,方法全部为静态 Collections与Collection的区别 Collection是集合框架的一个顶层接口,里面定义了单列集合的共性方法 Collect ...
- Java笔记(二十二)……Collection集合
概述 为什么会出现集合类 面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式 数组和集合类同是容器,有何不同 数组虽然也可以存储 ...
- Java笔记(二十)……线程间通信
概述 当需要多线程配合完成一项任务时,往往需要用到线程间通信,以确保任务的稳步快速运行 相关语句 wait():挂起线程,释放锁,相当于自动放弃了执行权限 notify():唤醒wait等待队列里的第 ...
- Java笔记(十九) 反射
反射 反射是在运行时获取类型的信息,再根据这些信息进行操作. 一.Class类 每个已加载的类在内存中都有一份类信息,每个对象都有指向它的类信息的引用. 在Java中,类信息对应的类就是java.la ...
随机推荐
- vector 用法2
vector 是向量类型,它可以容纳许多类型的数据,如若干个整数,所以称其为容器.vector 是C++ STL的一个重要成员,使用它时需要包含头文件: 复制代码 代码如下: #include< ...
- jeecg 导出加批注
public static void main(String[] args) throws IOException { // 创建工作簿对象 XSSFWorkbook wb = new XSSFWor ...
- cell批量改名字
本帖最后由 wanchengchen 于 2021-7-19 10:41 编辑下面是在论坛上学习到的脚本,发上来大家一起学习,使用的是virtuoso6.1.7:layout改名字:procedure ...
- 【STM32】简述串口中断流程
串口中断的实现(函数名参考MX生成代码) 初始化: 1.void MX_USART1_UART_Init() 基于UART_HandleTypeDef huart,对huart的成员进行配置,并将数据 ...
- Markdown基本使用教程
Markdown学习 标题 一个'#+空格'是一级标题,'##+空格'二级标题 字体 hello: 斜体'+内容+' hello:加粗'+内容+' hello hello 引入 引用来源 分割线 '三 ...
- centos8 安装 spdk
1. 下载 2.配置 ./configure --enable-debug --disable-tests --without-isal --without-ocf --with-uring --w ...
- md5加密js内容
避免以后都得百度,直接留一份存档 /* * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message * Diges ...
- HTTP请求向服务器传参方式
请求HttpRequest 提示: 用户发送请求时携带的参数后端需要使用,而不同的发送参数的方式对应了不同的提取参数的方式 所以要学会如何提取参数,我们就需要先了解前端传参数有哪些方式 回想一下,利用 ...
- 了解windows下的npm
之前一直使用Ubuntu系统,对于需要的软件.安装包,都可以使用apt或者apt-get进行安装,本人也是用过python,对于python库的安装,也可以通过pip或者conda来实现,那么,在wi ...
- 圣诞树代码_HTML
这个冬天给TA栽不一样的圣诞树 直接上效果 <!DOCTYPE html> <html lang="en" > <head> <meta ...