网络编程三要素

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笔记第十弹的更多相关文章

  1. Java笔记(十四) 并发基础知识

    并发基础知识 一.线程的基本概念 线程表示一条单独的执行流,它有自己的程序计数器,有自己的栈. 1.创建线程 1)继承Thread Java中java.lang.Thread这个类表示线程,一个类可以 ...

  2. Java笔记(三十)……正则表达式

    概述 符合一定规则的表达式 专门用于操作字符串 特点: 用于一些特定的符号来表示一些代码操作,这样就可以简化书写 所以学习正则表达式,就是在学习一些特殊符号的使用 好处: 可以简化对字符串的复杂操作 ...

  3. Java笔记(二十九)……网络编程

    概述 网络模型 网络通讯的要素 ip地址:网络中设备的标识符 端口:用于标识同一台设备上不同的进程,有效端口:0~65535,其中0~1024是系统使用端口或者保留端口 TCP与UDP UDP特点: ...

  4. Java笔记(二十八)……IO流下 IO包中其他常用类以及编码表问题

    PrintWriter打印流 Writer的子类,既可以接收字符流,也可以接收字节流,还可以接收文件名或者文件对象,非常方便 同时,还可以设置自动刷新以及保持原有格式写入各种文本类型的print方法 ...

  5. Java笔记(二十六)……IO流上 字节流与字符流

    概述 IO流用来处理设备之间的数据传输 Java对数据的操作时通过流的方式 Java用于操作流的对象都在IO包中 流按操作的数据分为:字节流和字符流 流按流向不同分为:输入流和输出流 IO流常用基类 ...

  6. Java笔记(二十五)……其他常用API

    System类 工具类全部都是静态方法 常用方法 获取系统属性信息 static PropertiesgetProperties() static StringgetProperty(String k ...

  7. Java笔记(二十四)……集合工具类Collections&Arrays

    Collections 集合框架的工具类,方法全部为静态 Collections与Collection的区别 Collection是集合框架的一个顶层接口,里面定义了单列集合的共性方法 Collect ...

  8. Java笔记(二十二)……Collection集合

    概述 为什么会出现集合类 面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式 数组和集合类同是容器,有何不同 数组虽然也可以存储 ...

  9. Java笔记(二十)……线程间通信

    概述 当需要多线程配合完成一项任务时,往往需要用到线程间通信,以确保任务的稳步快速运行 相关语句 wait():挂起线程,释放锁,相当于自动放弃了执行权限 notify():唤醒wait等待队列里的第 ...

  10. Java笔记(十九) 反射

    反射 反射是在运行时获取类型的信息,再根据这些信息进行操作. 一.Class类 每个已加载的类在内存中都有一份类信息,每个对象都有指向它的类信息的引用. 在Java中,类信息对应的类就是java.la ...

随机推荐

  1. IntelliJ IDEA 工具识别不了 过大Java文件 引用识别的不了的文件报错

    之前出现过proto 生成的文件过大 idea 识别不了 引用消息报错. 解决方案 1.找到IntelliJ IDEA 桌面快捷键图标 右键属性 2.打开文件位置,找到所在目录 3.找到idea.pr ...

  2. web server 接口调用测试

    1.新建工程 ,鼠标右击new 2.设置web server接口访问链接,然后下一步 生成代码 3.生成客户端代码 4.创建测试类 调用服务

  3. ngnix开启高可用网关集群--好记性不如烂笔头

    #1.开启高可用网关集群--------------------好记性不如烂笔头--------------------------- #gzip on; #开启网关集群 upstream gatew ...

  4. JavaScript基础知识整理(引用类型-Date)

    Date Date类型可以用来保存时间,保存的日期可以精确到1970年1月1日之后或之前的100000000天. 要创建Date类型对象,可以使用new操作符加构造函数. var now = new ...

  5. ZSTUOJ刷题⑨:Problem H.--尖兵

    Problem H: 尖兵 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 4691  Solved: 2112 Description 星光人已经出发了 ...

  6. APP性能测试——冷启动耗时测试

    冷启动耗时: 即后台没有该应用的进程(我们使用am force-stop命令结束app运行),打开软件,直到进入到首页activity页面,并计算耗时. 示例代码: import os import ...

  7. html 手机端适配不同手机高度 ,把内容居中显示

    手机端适配不同手机高度 ,把内容居中显示,可以将div.img.section.span.p等等元素,设置 top:50%; margin-top:xxvw; 这样可以保证主题内容居中显示.

  8. Vue中的input输入框无法输入强制渲染

    刚开始以为是键盘的问题,然后发现别的地方都可以输入,唯独这个input无法输入,可能因为我循环嵌套了三次,太深入无法渲染 后来我发现这个方法可以使用 1 <el-input 2 v-model= ...

  9. CSS 常用样式-盒子实体化三属性

    如果想在浏览器中具体看到一个盒子占有的实际位置,需要设置盒子可以实体化的三属性. 实体化属性:

  10. 使用SecureCRT通过SSH连接远程Linux设备

    Ubuntu安装和配置ssh教程 https://blog.csdn.net/future_ai/article/details/81701744 以SecureCRT为例: 把电脑和设备连接在同一个 ...