软件结构:

C/S结构:全称为Client/Server结构,是指客户端和服务器结构,常见程序有QQ等

B/S结构:全称为Browser/Server结构,是指浏览器和服务器结构,常见浏览器有谷歌等

 

网络通信协议:对数据的传输格式、传输速率、传输步骤等做了统一规定,通信双方必须同时遵守才能完成数据交换

TCP/IP协议:传输控制协议/因特网互联协议,是internet最基本、最广泛的协议。他定义了计算机如何联入因特网,以及数据如何在它们之间传输的标准。他的内部包含一系列的用于处理数据通信的协议,并采用了4层的分层模型,每一层都呼叫它的下一层所提供的协议完成自己的需求。

链路层:用于定义物理传输通道,通常是对某些网络连接设备的驱动协议,例如针对光纤、网线提供的驱动

网络层:用于将传输的数据进行分组,将分组数据发送到目标计算机或者网络

运输层:主要使网络程序进行通信,在进行网络通信时,可以采用TCP协议,也可以采用UDP协议

应用层:主要负责应用程序的协议,例如HTTP,FTP协议

 

UDP:用户数据报协议,消耗资源小,通信效率高,是无连接通信协议,简单说就是当一台计算机向另外一台计算机发送数据时,发送端不会确认接收端是否存在,就会发出数据,同样接收端在收到数据时,也不会向发送端反馈是否收到数据,常用于音频、视频和普通数据传输。

TCP:传输控制协议,是面向连接的通信协议,在传输数据前要经过“三次握手” 后建立逻辑连接,再传输数据,他提供了两台计算机之间可靠无差错的数据连接,常用来下载文件和浏览网页。

 

网络编程三要素:

1、协议

2、IP地址:互联网协议地址,用来给一个网络中的计算机设备做唯一的编号。

    IPv4:一个32位的二进制数,通常被分成4个字节,表示成a.b.c.d的形式,其中a,b,c,d都是0-255之间的十进制整数,那么最多可以表示42亿

    IPv6:采用128位地址长度,每16个字节一组,分成8组十六进制数

    常用命令:ipconfig,ping

    特殊IP地址:127.0.0.1,localhost

3、端口号:是一个逻辑端口,我们无法直接看到,可以使用一些软件查看端口号

     当我们使用网络软件一打开,那么操作系统就会位网络软件分配一个随机的端口号或者网络软件打开的时候和系统要指定端口号

     端口号是由两个字节组成,取值范围在0-65535之间

     注意:1024之前的端口号我们不能使用,已经被系统分配给已知的网络软件

     常用端口号:80,网络端口

                       数据库:3306,mysql;1521,oracle

                       tomcat服务器:8080

 

TCP通信程序:TCP通信能实现两台计算机之间的数据交互,通信两端要严格区分客户端(Client)和服务端(Server)

两端通信时的步骤:1、服务端程序,需要事先启动,等待客户端端连接

                           2、客户端主动连接服务器端,连接成功才能通信。服务端不可以主动连接客户端

 

java.net.Socket:此类实现客户端套接字(也可以叫“套接字”)。套接字是两台机器间通信的端点

构造方法:Socket(String host , int  port)创建一个流套接字并将其连接到指定主机上的指定端口号

               参数:String host:服务器主机的名称/服务器IP地址

                        int port:服务器的端口号

成员方法:OutputStream getOutputStream ()返回此套接字的输出流

               InputStream getInputStream()返回此套接字的输入流

               void close()关闭此套接字

实现步骤:1、创建一个客户端对象Socket,构造方法绑定服务器的IP地址和端口号

               2、使用Socket对象中的方法getOutputStream()获取网络字节输出流OutputStream对象

               3、使用网络字节输出流的OutputStream对象中的方法write,给服务器发送数据

               4、使用socket对象中的方法getInputStream()获取网络字节输入流InputStream对象

               5、使用网络字节输入流InputStream对象中的方法read,读取服务器回写的数据

               6、释放资源

注意:1、客户端和服务器进行交互,必须使用Socket中提供的网络流,不能使用自己创建的流对象

         2、当我们创建客户端对象Socket的时候,就会去请求服务器和服务器经过3次握手建立连接通路

              这是如果服务器没有启动,就会抛出异常

              如果服务器已经启动,那么就可以进行交互

 

java.net.ServerSocket:此类实现服务器套接字

构造方法:ServerSocket(int port)创建绑定到特定端口的服务器套接字

服务器端必须明确一件事情,必须得知道是哪个客户端请求的服务器

所以可使用accept方法获取到请求的客户端对象Socket

成员方法:Socket accept()侦听并接受到此套接字的连接

服务器实现步骤:1、创建服务器ServerSocket对象和系统要指定的端口号

                        2、使用ServerSocket对象中的方法accept,获取到请求的客户端对象Socket

                        3、使用Socket对象中的方法getInputStream()获取网络字节输入流InputStream对象

                        4、使用网络字节输入流InputStream中的方法read,读取客户端发送的数据

                       5、使用Socket对象中的方法getOutputStream()获取网络字节输出流OutputStream对象

                       6、使用网络字节输出流OutputStream对象中的方法write给客户端回写数据

                       7、释放资源

 

文件传输示例代码:



public class Demo {

    public static void main(String[] args)throws  Exception {
        ServerSocket serverSocket = new ServerSocket(8888);
        Socket clientSocket = new Socket("127.0.0.1",8888);
        File file =new File("c/a.txt");
        FileInputStream fis = new FileInputStream(file);
        OutputStream os=clientSocket.getOutputStream();
        int len = 0;
        byte[] bytes = new byte[1024];

        while ((len=fis.read(bytes))!=-1){
            //System.out.println(len);
            byte[] wri=Arrays.copyOf(bytes,len);
            os.write(wri);
        }

        Socket socket = serverSocket.accept();
        InputStream inputStream = socket.getInputStream();
        byte[] buffer =new byte[1024];
        int len1= 0;
        while ((len1=inputStream.read(buffer))!=-1){
            String str = new String(Arrays.copyOf(buffer,len1),0,len1,"UTF-8");
            System.out.println(str);
        }

        fis.close();
        socket.close();



    }