Java语言基础(12)网络通信与编程

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();
    }
}
  1. 客户端实现
 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();
    }
}

  1. 客户端实现
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("文件已经上传");
    }
}
  1. 客户端实现
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.【客户端】获取输入流,解析回写数据。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值