Java高级(六)Java网络编程
1.理解网络相关概念
1.有那些大的局域网?(fq)
万维网 因特网
内网 局域网
网络可以传输资料 共享资料 交流通信
IP(Internet protocol)地址(计算机的身份证号,临时唯一的)
交换机
网站:IP静态的, 唯一的
IPV4
IPV6
Dos命令 :ipconfig,查看windows系统的IP地址
Linux: ifconfig,查看Linux系统的IP地址
测试网络连通:ping(死亡之ping)
公网的端口号:80
2.我们知道可以通过Ip地址:端口号的方式访问某个计算机上某个程序 那么我们为什么平时访问网站(程序)的时候没有输入ip地址
www.baidu.com 域名解析系统,通过DNS域名解析系统 映射到计算机的Ip地址,NDS 域名解析系统
com 商业网站
cn 中国的网站
org 非盈利组织
gov 政府机构
edu 教育机构
3.访问百度的时候:
百度 域名/百度ip:端口号
运行这个百度程序的计算机就是服务器
服务器:给用户提供服务的机器
网络服务器: 配置需要足够高! 就是一个高配置 专门运行企业软件相关的计算机。
4.使用基于TCP协议的Socket(套接字)编程
TCP 三次握手
第一次
第一次握手:建立连接时,客户端包到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。
第二次
第二次握手:服务器收到syn包,必须确认客户的SYN,同时自己也发送一个SYN包,即SYN+ACK包,此时服务器进入SYN_RECV状态
第三次
第三次握手:[客户端]收到[服务器的SYN+ACK包,向[服务器发送确认包ACK,此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。
完成三次握手,客户端与服务器开始传送数据
5.使用基于UDP协议的Socket编程
Java网络编程
网络概述:相互连接的计算机
IP地址: 计算机在网络中地址的表示 网络地址+主机地址32位,由4个8位二进制数组成,二进制不好记(0-1),转化为十进制(0-9)
网络地址:标识计算机或网络设备所在的网段
主机地址:标识特定主机或网络设备 192.168.1.225 网络地址 主机地址
A类IP地址:第一个数为1-126 前8位 后24位
B类IP地址:第一个数为128-191 前16位 后16位
C类IP地址:第一个数为192-223 前24位 后8位
D类IP地址:第一个数为224-239 用于组播通信
E类IP地址:第一个数为240-225 用于科研
0.0.0.0 表示本机
127.0.0.1 表示本机回环地址,通常用在本机上ping此地址来检查TCP/IP协议安装是否正确
255.255.255.255:表示当前子网,一般用于向当前子网广播信息
网络的分类:局域网 城域网 广域网
协议:为了在网络中不同计算机之间进行通信而建立的规则,标准或约定的集合
网络分层模型:
ISO参考模型 | 作用 | TCP/IP模型(TCP传输控制协议IP网络互连协议) |
---|---|---|
物理层 | 建立,维护,断开物理连接 | 物理层 由底层网络定义协议 |
数据链路层 | 建立逻辑连接,进行硬件地址寻址,差错效验等功能 | 网络接口层 |
网络层 | 进行逻辑地址寻址,实现不同网络之间的路径选择 | 互联网层 ICMP IGMP IP ARP RSRP |
传输层 | 定义传输数据的协议端口号,流量控制和差错恢复 | 传输层 TCP UDP |
会话层 | 建立,管理和终止会话 | |
表示层 | 数据的表示,安全,和压缩 | |
应用层 | 网络服务和最终用户的接口 | 应用层 HTTP FTP TFTP SMTP |
ipconfig 查看本机的ip地址
ping 测试网络是否通畅
网络服务器:具有较高计算能力的计算机
1.邮件服务器:负责电子邮件收发管理的设备
2.web服务器:程序 Apache Tomcat http:\协议 开源 轻巧 免费
B/S 浏览器访问,隐形升级 更注重于B/S开发
C/S QQ下载安装客户端 , 更新安装包
Socket简介(插孔插座)
什么是Socket?(套接字)
提供给应用程序的接口
Socket分类 java.net
流式套接字(SOCK_STREAM) 【数据安全 TCP】
面向连接、可靠的数据传输服务
数据报式套接字(SOCK_DGRAM) 【高效,数据不安全 UDP】
无连接服务,需要(IP,端口号) 请求 (方法监听请求)
A--------------------->---------------B
输入流 | 输出流 |
---|---|
Socket,ServerSocket accept();监听方法 | |
服务器端:创建ServerSocket对象 | 客户端:Socket() 发送IP地址,端口输出流 |
accept()方法监听电话 输入流 |
服务器:
while(true){ //服务器一直处于监听状态
SocketServer socketserver=new SocketServer(5000); //端口号,服务器搜索客户端的Socket对象
Socket socket=socketserver.accept(); //接收客户端的Socket对象
MyThread thread=new MyThread(socket);//使用线程的构造方法将客户端传过来的Socket对象返回
thread.start();//启动线程
}
/*线程:(用继承Thread类的方式来写线程)*/
public class MyThread extends Thread{
private Socket socket;//定义一个空线程
public MyThread(Socket socket){//带有参数的构造方法,参数是一个线程
this.socket=socket;
}
public void run(){ //run方法,启动线程是,就调用了run()方法
输入流
InputStream is=socket.getInputStream();
BufferedReader br=new BufferedReader(new InputStreamReader(is));
String info;
while((info=br.readLine())!=null){
System.out.print(info);
}
//获取客户端的ip地址
InetAddress ia=socket.getInetAddress();
String ip=ia.getHostAddress;
System.out.print(ip);
String str="登录成功";
//输出流
OutputStream os=socket.getOutputStream();
os.write(str.getBytes());
os.flush();
}
}
客户端:
Socket socket=new Socket("服务器Ip地址",端口号);
OutputStream os=socket.getOutputStream();
os.write(str);
socket.shutdownOutput();
InputStream is=socket.getInputStream();
BufferedReader br=new BufferedReader(new InputStreamReader(is));
String info;
while((info=br.readLine())!=null){
System.out.print(info);
}
多个客户端与服务器进行交互
服务器:一直监听客户请求,
一旦听到客户请求,立刻创建一个线程,开启线程
线程:(用继承Thread类的方式来写线程)
接收客户的请求,并给客户一个响应
客户端:发送请求到服务器
接收服务器的响应
如何获得客户端IP地址
InetAddress ia=socket.getInetAddress();
String ip=ia.getHostAddress();
基于UDP协议的Socket编程
服务端与客户端的通信 | TCP | UDP |
---|---|---|
是否连接 | 面向连接 | 面向非连接 |
传输可靠性 | 可靠 | 不可靠 |
速度 | 慢 | 块 |
DatagramSocket
DatagramPacket
礼物 --数据(字符串)
包裹 --DatagramPacket
快递点–DatagramSocket
寄礼物 --send()
收礼物 --receive()
获取IP地址的方式
InetAddress ia=InetAddress.getByName("localhost");
//DatagramPacket(字符串数组,字符串数组长度,IP地址,端口)的构造方法四个参数
DatagramSocket socket=new DatagramSocket();
socket.send(/*DatagramPacket类型的参数*/);
socket.receive(/*DatagramPacket类型的参数*/);
String str=new String (/*数组,开始位置,数组长度*/);
简述域名解析原理
在浏览器中输入域名www.taobao.com,主机在向www.taobao.com发出请求之前要先知道他的IP地址。主机会调用域名解析程序,向设定的DNS服务器发送信息,请求获得www.taobao.com的IP地址,如果本地DNS没有储存相应的信息,他会发送信息到跟DNS服务器获得.comDNS服务器的IP,然后向.comDNS服务器发送查询请求获得taobao.comDNS服务器的IP地址,最终获得www.taobao.com的IP地址