网络编程三要素

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. MongoDB和sql语句的对照

    左边是mongodb查询语句,右边是sql语句.对照着用,挺方便. db.users.find() select * from users db.users.find({"age" ...

  2. get 和 post 请求在缓存方面的区别

    get 请求类似于查找的过程,用户获取数据,可以不用每次都与数据库连接,所以可以 使用缓存. post 不同,post 做的一般是修改和删除的工作,所以必须与数据库交互,所以不能使用 缓存.因此 ge ...

  3. LCP 34. 二叉树染色

    class Solution: def maxValue(self, root: TreeNode, k: int) -> int: def dfs(root): # 空节点价值全为0 res ...

  4. 建议收藏| 学python的看过来,Python 史上最全第三方库收集

    发现一个宝藏网站: GitHub 上有一个 Awesome - XXX 系列的资源整理,这个系列以"全"闻名,但凡是有一定知识度的领域.语言.框架等,都有自己的 awesome-x ...

  5. js处理树形数组扁平化

        // 树形数组扁平化 const extractTree = (data: TagsParams[]) => { if (!data.length) return []; const l ...

  6. 5、Excel—在做车辆费用汇总的时候,复制出来的数据跟同事的一样,但是合计总数就不一样

    在做车辆费用汇总的时候,复制出来的数据跟同事的一样,但是合计总数就不一样, 刚开始以为是数值问题,明明两份Excel都是同样的数据,为什么合计就不一样呢?(根据同事那份的数据,然后手动在自己的exce ...

  7. <魔域之书> Roguebook 存档修改器

    魔域之书 这个多周目游戏还挺不错的,游戏是Unity3d做的,网上没有找到现成的修改器,自己用CE修改的话,由于是基于虚拟机的游戏,在Dnsyp中看了,源码,游戏数据都存在不同的 Observable ...

  8. 1=C到底是哪个C

  9. copy file from remote server to local

    scp -r root@IP:/path/to/file(file path on the server) /path/to/filedestination(local path)

  10. 根据id 删除树结构中的数据

    根据id 删除树结构中的数据  filterHandle(data, id) {                         var newData = data.filter(x => x ...