2021-03-08

网络编程

一、概述

1、计算机网络:

地理位置不同、通过通信线路、在网络操作系统、网络管理软件和网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统

2、网络编程的目的:

3、想要达到的效果:

1、如何确定网络上的一台主机:IP地址、端口、定位某个资源

2、找到主机如何确定传输数据:

网络编程主要针对传输层的应用协议:TCP、UDP

二、网络通信的要素

如何实现网络通信?

1、通信双方的地址:ip、端口号。

2、规则:网络通信的协议;TCP/IP模型

三、IP地址

1、ip地址:InetAddress类

​ 唯一定位一台网络网络上的计算机。

​ 127.0.0.1:本机localhost

​ ip地址的分类:

​ ①:根据ip地址分类:ipv4、ipv6

​ ipv4:127.0.0.1 4个字节组成,0-255 2011年已经用尽

​ ipv6:8个无符号整数

​ ②:公网(互联网)/私网(局域网)

​ ABCD类地址

​ 192.18.xx.xx专门给组织内部使用

​ 域名:域名的诞生就是为了解决记忆ip问题

四、端口port

1、端口表示计算机上一个程序的进程

①不同的进程有不同的端口号,用来区分软件

②被规定0-65535

③TCP、UDP分别有0-65535,理论上可以同时跑65535*2

④端口分类:

​ 公有端口:0-1023,会被内置程序使用 如:HTTP:80端口 HTTPs:443端口 TFP:21 Telent:23

​ 程序注册端口:1024-49151分配给用户或者程序。 Tomcat:8080 MySQL:3306 Oracle:1521

​ 动态、私有:49152-65535

netstat -ano//查看所有端口
netstat -ano|findstr   //查看指令的端口

五、通信协议

在这里插入图片描述

TCP/IP协议簇:

​ TCP协议:用户传输协议 -----打电话:

​ 连接、稳定

​ 三次握手、四次挥手 [客户端client、服务端server]

​ 客户端、服务端

​ 传输完成释放连接

​ UDP协议:用户数据报协议------发短信:

​ 不连接、不稳定

​ 不管有没有准备好都可以发送

​ IP协议:网络互连协议

六、客户端服务器实现文件上传

//文件上传案例的客户端
/*
* 1、客户端:建本地字节输入流;
*           创建Socket对象,创建网络字节输出流对象OutputStream,使用fis.read读取文件,使用OutputStream.write(),上传文件
*           使用网络字节输入流,读取服务器回写的数据
*           释放资源
* 2、服务器:创建ServerSocket对象,accept获取客户端socket,使用网络字节输入流InputStream,使用read();
*           使用本地字节输出流,把读取的文件保存到本地;
*           使用网络字节输出流,回复上传成功
*           释放资源
* */
public class Upload_Client {
    public static void main(String[] args) throws IOException {
        FileInputStream fis = new FileInputStream("C:\\1.jpg");
        Socket socket = new Socket("127.0.0.1", 8888);
        OutputStream os = socket.getOutputStream();
        int len=0;
        byte[] bytes=new byte[1024];
        while((len=fis.read(bytes))!=-1){
            os.write(bytes,0,len);
        }
        socket.shutdownOutput();//避免阻塞问题
        InputStream is = socket.getInputStream();
        while((len=is.read(bytes))!=-1){
            System.out.println(new String(bytes,0,len));
        }
        fis.close();
        socket.close();
    }
}



//文件上传案例的服务器端
/*
 * 1、客户端:建本地字节输入流;
 *           创建Socket对象,创建网络字节输出流对象OutputStream,使用fis.read读取文件,使用OutputStream.write(),上传文件
 *           使用网络字节输入流,读取服务器回写的数据
 *           释放资源
 * 2、服务器:创建ServerSocket对象,accept获取客户端socket,使用网络字节输入流InputStream,使用read();
 *           使用本地字节输出流,把读取的文件保存到本地;
 *           使用网络字节输出流,回复上传成功
 *           释放资源
 * */

public class Upload_Server {
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(8888);
        while (true){//让服务器一直处于监听状态
            Socket socket = serverSocket.accept();
            //为了提升效率,使用多线程技术,每次accept一个就开一个线程
            new Thread(new Runnable() {
                @Override
                public void run() {
                    try{
                        InputStream is = socket.getInputStream();
                        File file=new File("e:\\upload");
                        if(!file.exists()){
                            file.mkdirs();//不存在则创建
                        }
                        String fileName="itcase"+System.currentTimeMillis()+new Random().nextInt()+".jpg";
                        FileOutputStream fos = new FileOutputStream(file+"\\"+fileName);
                        int len=0;
                        byte[] bytes = new byte[1024];
                        while((len=is.read(bytes))!=-1){
                            fos.write(bytes,0,len);
                        }
                        socket.getOutputStream().write("上传成功!".getBytes());
                        fos.close();
                        socket.close();
                    }catch (IOException e){
                        System.out.println(e);
                    }

                }
            }).start();
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值