网络编程三要素

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. iOS开发之UIImage压缩处理

    IOS中UIImage的数据量压缩有两种方式,一种是图片尺寸不变,降低图片分辨率,代码方法为: //1.0为压缩系数,介于0~1之间.压缩系数越小,会大大降低图片清晰度 NSData *data = ...

  2. 三分钟梳理TDengine安装部署的逻辑

      ​小 T 导读:TDengine,是涛思数据面对高速增长的物联网大数据市场和技术挑战推出的创新性的大数据处理产品,除却读写性能.存储压缩能力强大之外,还有安装简单.操作难度低等优势.今天我们就从常 ...

  3. window.parent.postMessage 解决iframe父子页面域名不一样出现的跨域问题

    window.parent.postMessage 解决iframe父子页面域名不一样出现的跨域问题 内嵌 iframe 页面,一般使用 window.parent 或 window.top 来获取父 ...

  4. lua 添加的时候去重

    result = {} ids = {1,9,6,7}affs = {3,2,4,5,6}count =0for s in *ids result[s]=sfor p, v in pairs resu ...

  5. 2022-07-10 第一小组 张明旭 前端CSS学习记录

    今天是正式学习的第二天,昨天那个作业项目真的难,自己做一会就得问这问那,还有大神带一带(?_?)... 今天学习的内容是前端中的CSS,男上加男..... 知识点: Css层叠式表(网页美化) 1.定 ...

  6. 【编程】Python3 正则表达式使用笔记

    前言 Python 从1.5版本开始使用re模块来处理正则表达式.我们可以使用"re模块"或"re.compile方法"来创建正则表达式对象(re.RegexO ...

  7. int 和vachar后面的数字代表的含义

    在创建数据表的时候,我们经常会给每一个字段设置一个长度,例如:int(5).varchar(10) 等等,但是他们代表的意思是什么呢?是该列允许存储值的最大宽度吗? 场景1:为什么我设置成 int(1 ...

  8. 在NCBI中下载SRA数据

    目前,在NCBI中下载SRA数据主要有三种方式: 利用Aspera工具下载. 利用SRA Toolkit下载. 利用wget命令直接下载 第三种最为方便.其中的关键是得到下载数据的链接,即ftp的地址 ...

  9. 关于git错误:Git未能顺利结束(退出码 128)的解决办法

    如图: 问题原因: 主要是:用户名.邮箱.用户密钥跟github官网上配置的不一致 https://blog.csdn.net/weixin_52517585/article/details/1269 ...

  10. visio使用直线绘图后不能更改

    选中图形->开发工具->行为