一、网络
网络:网线连接起来的计算机,用于数据共享,信息传输。
二、协议
协议:网络中计算机之间通信的规则
常用协议:
- IP:网际协议,用于计算机之间基本的信息传输,传输的数据包正不正确就保证不了。
- TCP:传输控制协议,用于控制传输数据的准确性,可以准确传输。
- HTTP:超文本传输协议,可以通过超链接访问超文本信息。
- FTP:文件传输协议,通过FTP共享文件信息,其他用户可以从FTP上下载需要的资源。
- SMTP:简单邮件传输协议,发邮件用的。
三、IP地址
二进制 | 11000000.00001001.00010000.00001100 |
---|---|
十进制 | 192 .9.16.12 |
- 目前大部分都是用十进制的表示方式,简单。
- 网络号:指网络中计算机所在的网络
- 主机号:网络中标识的计算机
- IP地址分5类,根据网络号+主机号进行分类,每类所容纳的数量是不一样的。
IP分类 | 起始位置 | 终止位置 | 网络号位数 | 主机号位数 |
---|---|---|---|---|
A类 | 0.0.0.0 | 127.255.255.255 | 7 | 24 |
B类 | 128.0.0.0 | 191.255.255.255 | 14 | 16 |
C类 | 192.0.0.0 | 223.255.255.255 | 21 | 8 |
D类 | 224.0.0.0 | 239.255.255.255 | - | - |
E类 | 240.0.0.0 | 255.255.255.255 | - | - |
四、InetAddress
InetAddress类是用来封装IP的类,IP封装
常用方法:
- getLocalHost():获取本机的IP封装
- getByName(String):根据主机名或IP地址获得一个IP封装
- getHostName():根据IP封装获取主机名
- getHostAddress():根据IP封装获取IP地址
package com.gaj.day04;
import java.net.InetAddress;
import java.net.UnknownHostException;
/**
* InetAddress类
* @author Jan
*
*/
public class Demo4 {
public static void main(String[] args) throws UnknownHostException {
// 获取本机的主机名/IP地址
System.out.println(InetAddress.getLocalHost());
// 根据主机名或IP地址获得一个IP封装
InetAddress inetAddress = InetAddress.getByAddress(new byte[] {(byte)192, (byte)168, (byte)227, 1});
// InetAddress inetAddress = InetAddress.getByName("Katarina");
// 获取主机的主机名
System.out.println(inetAddress.getHostName());
// 获取主机的IP地址
System.out.println(inetAddress.getHostAddress());
}
}
五、域名
DNS:域名解析器,根据域名找到对应IP
六、端口
端口:用于实现程序之间的通信,根据端口找到对应程序。
常用公认端口:
协议 | 端口 |
---|---|
简单邮件传输协议 | 25 |
文件传输协议 | 21 |
超文本传输协议 | 80 |
七、URL
URL:统一资源定位器。
- 格式:protocol://hostname[:port]/path/[?query]#fragment
- 格式:协议://主机名:[:端口号]/路径/[?查询字符串]#片段
常用方法:
- getProtocol():获取协议
- getHost():获取主机名称/IP
- getPort():获取端口号
- getDefaultPort():获取默认端口号
- getQuery():获取查询字符串
- getRef():获取引用参照
package com.gaj.day04;
import java.net.MalformedURLException;
import java.net.URL;
/**
* URL 统一资源定位器
* @author Jan
*
*/
public class Demo5 {
public static void main(String[] args) throws MalformedURLException {
URL url = new URL("https://www.baidu.com:80/s?id=abc#ref=def");
System.out.println(url.getProtocol());
System.out.println(url.getHost());
System.out.println(url.getPort());
System.out.println(url.getDefaultPort());
System.out.println(url.getQuery());
System.out.println(url.getRef());
}
}
八、数据传输
- Java的Java.net包含了所有的用于网络操作的类
- C/S:客户端/服务器,需要在客户端和服务器安装软件
- B/S:浏览器/服务器
- TCP:安全的传输
- UDP:非安全的传输,速度较快
三次握手:
- 客户端向服务器发送请求信息
- 服务器收到请求信息后,向客户端发送确认信息
- 客户端收到确认信息后,回一个确认信息给服务器
Socket/ServerSocket
ServerSocket:用来创建服务器
package com.gaj.day04;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
/**
* 服务端
* @author Jan
*
*/
public class Server {
public static void main(String[] args) throws IOException {
// 建立一个服务器 端口
ServerSocket serverSocket = new ServerSocket(1234);
// 获得一个socket 服务器的socket和客户端的socket互相通信
// accept()是一个阻塞方法,需要进行三次握手,才能返回一个socket
Socket socket = serverSocket.accept();
// 获取双向流
// socket底层自带IO字节流
InputStream is = socket.getInputStream();
OutputStream os = socket.getOutputStream();
// 对流进行包装
Scanner scanner = new Scanner(is); // 读
// true 表示自动刷新缓冲区(有缓冲区的需要flush刷新缓冲区)
PrintWriter printWriter = new PrintWriter(os, true); // 写
// 发送信息给客户端
printWriter.println("您的请求已连接到服务器,请留言");
Scanner sc = new Scanner(System.in); // 服务器控制台输入
String s; // 用于保存服务器说的话
while(true){ // 循环对话
System.out.println("客户端:" + scanner.nextLine()); // 接收一行客户端说的话
s = sc.nextLine(); // 服务器说一句话
printWriter.println(s); // 将服务器的话发送到客户端
if(s.equals("quit")){ // 如果输入quit则退出会话
break;
}
}
// 关闭流
sc.close();
is.close();
os.close();
printWriter.close();
scanner.close();
socket.close();
serverSocket.close();
}
}
Socket:用来创建客户端
package com.gaj.day04;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
/**
* 客户端
*
* @author Jan
*
*/
public class Clinet {
public static void main(String[] args) throws UnknownHostException, IOException {
// 建立一个客户端 服务器IP ,服务器端口
Socket socket = new Socket(InetAddress.getLocalHost(), 1234);
// 获取socket底层的流
InputStream is = socket.getInputStream();
OutputStream os = socket.getOutputStream();
// 包装流
Scanner scanner = new Scanner(is); // 读
PrintWriter printWriter = new PrintWriter(os, true); // 写 true:刷新缓冲区
// 接收客户端发来的信息
Scanner sc = new Scanner(System.in); // 客户端控制台输入
String s; //用于保存客户端说的话
while(true){ // 循环对话
System.out.println("服务器:" + scanner.nextLine()); // 接收一行服务器的话
s = sc.nextLine(); // 客户端说一句话
printWriter.println(s); // 将客户端说的话通过包装流发送到服务器
if(s.equals("quit")){ // 如果输入quit则退出会话
break;
}
}
// 关闭流
sc.close();
is.close();
os.close();
printWriter.close();
scanner.close();
socket.close();
}
}