Java-网络编程知识点总结

                  
 第一节:网络编程基础                    
                    
        1.1 计算机网络                
                    
          所谓计算机网络,就是把分布在不同区域的计算机与专门的外部设备用通信线路相互连接成一个规模大,而且功能强的网络系统,从而使得计算机之间可以相互传递信息,共享数据、软件等资源。                
                 
            网络分类 :按照地理范围:广域网( Internet) ,城域网( 一个城市、多个城市,长城宽带),局域网(机房)                 
                    
         1.2 网络编程                
                    
            所谓网络编程(不是网站编程),指的就是在同一个网络中不同机器之间的通信。                
                    
         1.3 网络参考模型                    
                    
             OSI参考模型:包括七层:[物理层]、[数据链路层]、[网络层]、[传输层]、[会话层]、[表示层]和[应用层]                    
                    
             TCP/IP参考模型:包括四层:                    
                    
                         **1.链路层**(数据链路层/物理层):包括操作系统中的设备驱动程序、计算机中对应的网络接口卡                    
                    
                         **2.网络层**:处理分组在网络中的活动,比如分组的选路。                    
                    
                          **3.传输层**:主要为两台主机上的应用提供端到端的通信。                    
                    
                          **4.应用层(应用层/表示层/会话层)**:负责处理特定的应用程序细节。                           
                    
  1.4 通信协议                    
                    
> ​    需要通信的设备之间需要实现相同的通信协议                
>                    
> ​    TCP/IP网络分层 :链路层、网络层、传输层、应用层                
>                    
> ​    通信协议分类:                
>                    
> ​        网络层IP协议:IPV4和IPV6,互联网协议            
>                    
> ​        传输层协议:TCP和UDP            
>                    
> ​        应用层协议:HTTP、FTP、SMTP、POP3            
                    
          TCP协议:TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。数据大小无限制。建立连接的过程叫三次握手,断开叫四次断开。                    
                    
          UDP协议:UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是TCP/IP参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,每个包的大小64Kb。                    
                    
          IP协议:[Internet Protocol]网际协议,能使连接到网上的所有计算机网络实现相互通信的一套规则,规定了计算机在因特网上进行通信时应当遵守的规则。IP协议中包含一块非常重要的内容就是为计算机分配了一个唯一标识即IP地址。                    
                    
                    
第二节:计算机之间通信                    
                    

              2.1   IP地址                
                    
 ​         IP地址指的是互联网地址(Internet Protocol Address )    ,是联网设备与互联网之间的唯一标识,在同一个网段中,IP地址是唯一的。            
                   
          IP地址是数字型的,是一个32位的整数,通常将其分成4个8位的二进制数,每8位之间用圆点隔开,    每个8位整数可以转换为一个0~255的十进制整数,例如:202.9.128.88    

               
            2.2    端口                
                    
         数据的发送和接收都需要通过端口出入计算机,端口号用于唯一标识通信实体上进行网络通讯的程序,同一台机器上不能两个程序占用同一个端口。                
                  
           端口号的取值范围:0~65535                
                
 ​       查看端口占用: netstat -ano                    
                   
 ​      端口分类:    公认端口:0~1023         注册端口:1024~49151       动态或私有端口:49152~65535    
                    
   ​    常用端口:    mysql:3306          oracle:1521        tomcat:8080         web服务器(http):80         POP3  110

                               ftp服务器:21           SMTP 25  
               
            
 第三节:基于Tcp的网络编程

       例题一:   客户端发送消息,服务端回复消息

           服务器端:

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class TcpServer {
    public static void main(String[] args)throws Exception {
        //创建服务器套接字 并指定端口号
        ServerSocket listener=new ServerSocket(10090);
        //监听 并返回客户端套接字
        System.out.println("服务器启动成功...");
        Socket socket = listener.accept();
        //获取输入输出流
        BufferedReader fis=new BufferedReader(new InputStreamReader(socket.getInputStream()));
        BufferedWriter fio=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
        //处理数据

        String data=fis.readLine();// 读取到换行符才返回结果
        System.out.println("客户端说:"+data);
        fio.write("你好啊!");
        fio.newLine();
        fio.flush();

        //关闭
        fio.close();
        fis.close();
        socket.close();
        listener.close();


    }
}

 客户端:

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
//   服务器与客户端之间实现相互通信
public class TcpClient {
    public static void main(String[] args)throws  Exception {
        //创建客户端套接字 并指定服务器ip和端口号。
        Socket socket=new Socket("10.9.21.177", 10090);
        //获取输入输出流
        BufferedReader fis=new BufferedReader(new InputStreamReader(socket.getInputStream()));
        BufferedWriter fio=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
        //处理数据
        fio.write("好久不见");
        fio.newLine();
        fio.flush();
        String reply=fis.readLine();
        System.out.println("服务器回复:"+reply);
        //关闭
        fio.close();
        fis.close();
        socket.close();

    }
}

例题二:客户端上传文件到服务端【以图片为例】

服务器端:

import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

//客户端发送图片到服务器中
public class TcpServer {
    public static void main(String[] args) throws Exception{
        //创建服务器套接字, 并指定端口
        ServerSocket listener=new ServerSocket(10091);
        // 监听 返回客户端套接字
        System.out.println("服务器已经启动.....");
        Socket socket = listener.accept();
        // 获取输入流
        InputStream fis = socket.getInputStream();
        //处理数据
        FileOutputStream fio=new FileOutputStream("d:\\aaa.jpg");
        byte[] buf=new byte[1024];
        int len=-1;
        while ((len=fis.read(buf))!=-1){
            fio.write(buf, 0, len);
        }
        //关闭
        fio.close();
        fis.close();
        socket.close();
        listener.close();


    }
}

客户端:

import java.io.FileInputStream;
import java.io.OutputStream;
import java.net.Socket;

public class TcpClient {
    public static void main(String[] args) throws Exception{
        //创建客户端套接字 并指定服务器端口号和ip
        Socket socket=new Socket("10.9.21.177", 10091);
        //获取输出流
        OutputStream fis = socket.getOutputStream();
        //处理数据
        FileInputStream fio=new FileInputStream("copy.jpg");
        byte[] buf=new byte[1024];
        int len=-1;
        while ((len=fio.read(buf))!=-1){
            fis.write(buf, 0, len);
            fis.flush();
        }
        //关闭
        fis.close();
        fio.close();
        socket.close();
        System.out.println("发送完毕!");

    }
}

 

你可能感兴趣的:(Java-网络编程知识点总结)