网络编程(TCP编程、UDP编程)

网络编程
    内存
    IO
    数据通过网络进行交互(网络--内存)
    
    软件系统架构C/S B/S
    
    网络基础:
        网络模型
            ISO:应用层,表示层,会话层,传输层,网络层,数据链路层,物理层
            TCP/IP:应用层(业务功能/HTTP、FTP等/变量),传输层(分组/TCP UDP/流,数据报包),网络层(路由/IP/数据帧),数据链路层(010101111)
        概念
            TCP:建立在连接的基础上的。在传输数据之前,客户端和服务器会先建立连接
                建立连接需要3次握手
                    1、客户端发送请求
                    2、服务器会响应
                    3、客户端会发送确认请求
                断开连接需要4次握手
                特点:可靠,点到点传输
                    效率低
                适用的场景:对数据的质量传输有要求的
            UDP:无连接。发送方只管发,接收方只管接。
                特点:不太可靠
                    1对1,1对多,多对1
                    效率高
                适用场景:对数据的质量传输要求不高。视频会议,语音通话
            IP:唯一地指定网络上某一台主机
                IPv4 32位
                IPv6 128位
                ipconfig  172.16.60.140
                本机的回环地址:127.0.0.1/localhost
                
                域名:www.baidu.com---dns服务器(解析成IP)
                
            端口号:
                一台主机上某个程序的唯一标识
                所有的程序,系统会默认给分配一个端口号
                程序也可以自己指定
                端口号可用的范围[0,65535]
                [0,1023]已经被系统占用
                
                常用端口号:
                    tomcat:8080 mysql:3306 sqlserver:1433  oracle:1521

如何编程?
jdk 包java.net 

TCP编程:
    Socket 客户端                    
        Socket(String host, int port) 创建一个流套接字并将其连接到指定主机上的指定端口号。
            host:既可以用IP,也可以用域名
        InputStream getInputStream() 返回此套接字的输入流。 
        OutputStream getOutputStream()  
        void shutdownOutput() 禁用此套接字的输出流。 
            对于 TCP 套接字,任何以前写入的数据都将被发送,并且后跟 TCP 的正常连接终止序列
        void close() 
    ServerSocket 服务器
        ServerSocket(int port)
        Socket accept() 侦听并接受到此套接字的连接。在连接传入之前一直阻塞。 
            并没有维护写入流和读取流
            是要客户端的流对象
        void close()      

    案例:文件上传
        客户端 1.jpg  - 网络-- 服务器 1.jpg
        
        客户端:
            文件---内存  InputStream
            内存---网络数据  socket. OutputStream
        服务端
            网络数据--内存  socket.InputStream
            内存---文件 OutputStream
UDP:
        无连接,不可靠,
        传输速度快,可以支持1对1,1对多,多对1,多对多
        
        DatagramSocket 既可以表示发送方,还可以表示接收方
            发送或接收的包都是单独编址和路由的
            从一台机器发送到另一台机器的多个包可能选择不同的路由,也可能按不同的顺序到达。 
            接收包时,应该将 DatagramSocket 绑定到通配符地址
            DatagramSocket()  ---发送
            DatagramSocket(int port) 创建数据报套接字并将其绑定到本地主机上的指定端口。
            DatagramSocket(int port, InetAddress laddr)  创建数据报套接字,将其绑定到指定的本地地址。---接收
            
            void receive(DatagramPacket p)  从此套接字接收数据报包。在接收到数据报前一直阻塞
             void send(DatagramPacket p) 从此套接字发送数据报包。 
             
             void close() 关闭此数据报套接字。 
            
        DatagramPacket 数据报包
            DatagramPacket(byte[] buf, int length) 用来接收长度为 length 的数据包。
            DatagramPacket(byte[] buf, int length, InetAddress address, int port) 
                  构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。
                  
              byte[] getData() 返回数据缓冲区。
              int getLength() 返回将要发送或接收到的数据的长度。
              int getPort()  
              InetAddress getAddress()   
              
              setData(byte[] buf) 
              setPort(int iport) 
              setSocketAddress(SocketAddress address) 
            
        InetAddress 互联网协议 (IP) 地址
            static InetAddress getByName(String host)在给定主机名的情况下确定主机的 IP 地址。 
            String getHostName() 获取此 IP 地址的主机名。 
        
        //即时聊天工具 QQ 微信  发信息
        // Client
            一个线程处理 发送
            一个线程处理 接收

Guess you like

Origin blog.csdn.net/qq_52253798/article/details/119416319