1. 什么是计算机网络,计算机网络的作用?
a) 在物理位置上,多台计算机之间使用网线连接起来,就形成了计算机网络。
b) 网络分:局域网和广域网。
c) 计算机网络的作用就是“资源共享”。
2. 计算机网络编程指的是什么?
a) 使用一门计算机语言,实现计算机和计算机之间进行通信。
b) 例如java语言提供的java.net.*;如:Socket和ServerSocket。
3. 关于IP地址?
a) IP地址非常重要,因为IP是网络中每一台计算机的唯一标识。计算机之间进行通信完全靠IP地址进行连接。
b) 计算机和计算机之间通信每台计算机需要安装网卡和网卡驱动。
c) IP地址分为:IPV4和IPV6
i. IPV4目前用的比较多。例如:192.168.1.100
ii. IPV4计算机在存储的时候采用4个字节去存储。255.255.255.255
iii. IPV4最大大概可以表示4亿多台计算机。也就是说在广域网中最多有4亿多个真实IP。
d) 关于IP地址分类:A类网,B类网,C类网
i. A类网:网络ID号.主机号.主机号.主机号
ii. B类网:网络ID号.网络ID号.主机号.主机号
iii. C类网:网络ID号.网络ID号.网络ID号.主机号
4. 关于端口号PORT?
a) Oracle默认的端口是1521
b) Mysql默认的端口是3306
c) WEB网站默认的端口是80
d) Tomcat服务器默认的端口是8080
e) 端口号在计算机中是每一个服务的唯一标识。端口号在同一台计算机上不可以重复。
端口号取值范围:
一般用到的是1~65535。
其中0不使用,1-1023为系统端口,也叫BSD保留端口。
0-1023: BSD保留端口,也叫系统端口,这些端口只有系统特许的进程才能使用;
1024~65535为用户端口,又分为:BSD临时端口(1024-5000)和BSD服务器(非特权)端口(5001-65535)。其中:
1024-5000: BSD临时端口,一般的应用程序使用1024到4999来进行通讯;
5001-65535:BSD服务器(非特权)端口,用来给用户自定义端口。
5. 计算机之间通信需要协议?
a) 位于传输层的协议有:TCP、UDP
b) TCP和UDP区别?
i. TCP协议是面向有连接的协议。面向有连接的协议可以保证网络传输中不会丢失数据包。优点:不会丢失数据包。缺点:速度慢。
ii. UDP协议是面向无连接的协议。面向无连接的协议只负责发送数据,不管对方是否收到,或者是否丢失数据。优点:速度快。缺点:可能丢失数据。
6. 关于HTTP协议?
a) W3C组织定义的HTTP协议。
b) 生产浏览器(Browser)的厂商(微软,谷歌,Mozilla FireFox)都要遵循HTTP协议生产浏览器。
c) 生产服务器(Server)的厂商(IBM,BEA)都要遵循HTTP协议生产服务器。
7. 使用java实现计算机和计算机之间的通信?
a) Socket(客户端套接字)à插头(IP+PORT)
b) ServerSocket(服务器端套接字)à插座(PORT)
8. HTTP1.1协议的详细内容:
GET / HTTP/1.1
Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/msword, application/vnd.ms-excel, application/vnd.ms-powerpoint, */*
Accept-Language: zh-cn
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)
Accept-Encoding: gzip, deflate
Host: 192.168.1.100:8888
Connection: Keep-Alive
空白行
消息正文
HTTP协议四部分组成:消息头,消息报头,空白行,消息正文
9. 客户端向服务器端发送数据
1、服务器端实现
//1、服务器端实现
class Server1 {
public static void main(String[] args) throws IOException {
System.out.println("服务器端启动,等待连接....");
//1.创建ServerSocket对象,绑定端口,开始等待连接
ServerSocket ss=new ServerSocket(6666);
//2.接收连接accept方法,返回socket对象
Socket server=ss.accept();
//3.通过Socket对象,获取输入流
InputStream is=server.getInputStream();
//4 一次性读取数据
//4.1 创建字节数组
byte[] b=new byte[1024];
//4.2 数据读取到字节数组中
int len=is.read(b);
//4.3 解析数组,打印字符串信息
String msg=new String(b,0,len);
System.out.println(msg);
//5.关闭资源
is.close();
server.close();
}
}
2、客户端实现
class Client1 {
public static void main(String[] args) throws IOException {
System.out.println("客户端发送数据");
//1.创建Socket(ip,port),确定连接到哪里
Socket client=new Socket("127.0.0.1",6666);
//2.获取流对象.输出流
OutputStream os=client.getOutputStream();
//3.写出数据
os.write("TCP协议,我学会了!".getBytes());
//4.关闭资源
os.close();
client.close();
}
}
10、服务器端向客户端回写数据
1、服务器端实现
class Server2 {
public static void main(String[] args) throws IOException {
System.out.println("服务器启动,等待连接。。。");
//1.创建ServerSocket对象,绑定端口,开始等待连接
ServerSocket s=new ServerSocket(6666);
//2.接受连接accpet方法,返回Socket对象
Socket server = s.accept();
//3.通过Socket获取输入流
InputStream is = server.getInputStream();
//4 一次性读取数据
//4.1 创建数组对象
byte[] b=new byte[1024];
//4.2 读取数据到字节数组中
int len=is.read(b);
//4.3 解析数组,打印字符串信息
String msg=new String(b,0,len);
System.out.println("服务器接收到的数据:"+msg);
//======回写数据==========
//5 通过socket获取输出流
OutputStream os = server.getOutputStream();
//6.回写数据
os.write("服务器回写数据".getBytes());
//7.关闭资源
os.close();
is.close();
server.close();
}
}
2、客户端实现
class Client2 {
public static void main(String[] args) throws IOException {
System.out.println("客户端 发送数据");
//1. 创建Socket(ip,port),确定连接到哪里
Socket client=new Socket("127.0.0.1",6666);
//2.通过Socket对象,获取输出流对象
OutputStream os = client.getOutputStream();
//3.写出数据
os.write("客户端写数据了".getBytes());
//4.通过Socket,获取输入流对象
InputStream is = client.getInputStream();
//5.读取数据
byte[] b=new byte[1024];
int len=is.read(b);
System.out.println(new String(b,0,len));
//6.关闭资源
is.close();
os.close();
client.close();
}
}
11、文件上传案例
文件上传分析图解:
1【客户端】输入流,从硬盘中读取文件数据到程序中。
2.【客户端】输出流,写出文件数据到服务器。
3.【服务器】输入流,读取文件数据到服务器程序。
4. 【服务器】输出流,写出文件数据到服务器硬盘中。
1、服务器端实现
public class Demo04 {
public static void main(String[] args) throws IOException {
System.out.println("服务器端启动。。。");
//1 创建服务器端ServerSocket
ServerSocket ss=new ServerSocket(6666);
//2.服务端通过ServerSocket建立连接
Socket server= ss.accept();
//3.创建流对象
//3.1 获取输入流,读取文件数据
BufferedInputStream bis=new BufferedInputStream(server.getInputStream());
//3.2 创建输出流,保存到本地
BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("copy.jpg"));
//4.读写数据
byte[] b=new byte[1024*8];
int len;
while ((len=bis.read(b))!=-1){
bos.write(b,0,len);
}
//5.关闭资源
bis.close();
bos.close();
server.close();
System.out.println("文件已经上传");
}
}
2、客户端实现
public class Demo05 {
public static void main(String[] args) throws IOException {
//1.创建流对象
//1.1 创建输入流,读取本地文件
BufferedInputStream bis=new BufferedInputStream(new FileInputStream("text.jpg"));
//1.2 创建输出流对象,写到服务器
Socket socket=new Socket("localhost",6666);
BufferedOutputStream bos=new BufferedOutputStream(socket.getOutputStream());
//2.写出数据
byte[] b=new byte[1024*8];
int len;
while ((len=bis.read(b))!=-1){
bos.write(b,0,len);
bos.flush();
}
System.out.println("文件发送完毕");
//释放资源
bis.close();
bos.close();
socket.close();
}
}
12、信息回写分析图解:
1【客户端】输入流,从硬盘中读取文件数据到程序中。
2.【客户端】输出流,写出文件数据到服务器。
3.【服务器】输入流,读取文件数据到服务器程序。
4. 【服务器】输出流,写出文件数据到服务器硬盘中
5.【服务器】获取输出流,回写数据。
6.【客户端】获取输入流,解析回写数据。