黑马程序员技术交流社区

标题: 【石家庄校区】网络编程笔记。Skr [打印本页]

作者: 陈叶_cy    时间: 2018-8-24 18:48
标题: 【石家庄校区】网络编程笔记。Skr
本帖最后由 陈叶_cy 于 2018-8-24 19:59 编辑

网络编程笔记

1、软件结构
        C/S结构:Client/Server结构,指 客户端 和 服务器 结构,常见程序:QQ、迅雷
        B/S结构:Browser/Server结构,指 浏览器 和 服务器 结构,常见程序:IE、谷歌
        网络编程:在一定的“协议”下,实现两台计算机的通信的程序
2、网络通信协议
        通信协议是对计算机必须遵守的规则,只有遵守这些规则,计算机之间才能进行通信
        协议中对数据的传输格式、传输速率、传输步骤等做了统一规定,通信双方必须同时遵守,最终完成数据交换
3、网络通信协议分类
        UDP协议:User Datagram Protocol,用户数据报协议
                特点:1、无连接的不可靠协议
                          2、数据按包发送,64K一个包
                          3、速度快效率高,容易丢包
                用于视频直播,网络电话
        TCP协议:Transmission Control Protocol,传输控制协议
                特点:1、需要建立连接的可靠协议
                          2、数据传输无大小限制
                                 3、速度慢效率低
                用于文件下载、浏览网页
4、网络编程三要素
        1、通道协议
        2、IP地址:互联网协议地址,是网络中计算机的唯一标识(IPV4、IPV6)
                特殊IP:“127.0.0.1”,“localhost”,代表自己的电脑
        3、端口号:计算机中进程的唯一标识
                范围0~65535的整数,其中0~1024不建议使用
                通道的两端是2个计算机中的2个程序在相互通信,所以2个程序都要有端口号
                常用端口号:80网络端口,数据库mysql3306,oracle1521
               
        域名:便于记忆的主机名称,可以解析到某个IP地址,这样通过域名就能找到对应IP
5、TCP通信协议
        TCP服务端 java.net.ServerSocket类
                  构造方法 ServerSocket(int port):创建一个TCP服务端,并监听指定端口
                  成员方法 Socket accept():监听数据,会阻塞,收到数据后返回Socket对象
                                    void close():关闭服务端ServerSocket

        TCP客户端 java.net,Socket类
                  构造方法 Socket(String ip, int port):创建TCP客户端对象
                  成员方法 OutputStream getOutputStream():获取输出流对象,用于发送数据
                                 InputStream getInputStream():获取输入流,用于接受数据
                                 void shutdownOutput():关闭输出流,告知服务端数据发送完毕
                                 void close():关闭客户端Socket
                    
        两端之间以 IO字节流 进行通信
        服务端没有IO留,是通过获取到每个客户端对象(Socket)的IO流来进行通信的

        java.net.Socket类:TCP客户端
                  void shutdownOutput():关闭输出流,告知服务端数据发送完毕
       
        服务端优化
                 1、写入文件名相同导致覆盖:上传文件命名规则:域名+毫秒值+随机数
                 2、上传一个文件服务端就结束了,如何让服务端不停止,一致接受文件上传:
                            将serverSocket.accept()直到最后的操作放入死循环中
                3、同一个线程读大文件比较慢,改成多线程:
                           得到Socket客户端对象后的操作全都放在子线程中执行
               
模拟B/S案例(Browser/Server)






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2