A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 路人丶 中级黑马   /  2017-12-22 21:47  /  1920 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

今天学习了网络编程,很有意思,因为写代码再也不是一个人玩了,可以跟同桌甚至是全班的人一起玩,实现数据传输,上午跟同桌,把案例改吧改吧,增强了点,能跟同桌一句一句的通话了,晚上又把源拓展的上传日志案例改了一下,可以实现多文件的传输了,总体来说还是很有收获的!
网络编程
一、概述
        网络TCP/IP协议层次结构
                a:链路层:链路层是用于定义物理传输通道,通常是对某些网络连接设备的驱动协议,例如针对光纤、网线提供的驱动。
                b:网络层:网络层是整个TCP/IP协议的核心,它主要用于将传输的数据进行分组,将分组数据发送到目标计算机或者网络。
                c:传输层:主要使网络程序进行通信,在进行网络通信时,可以采用TCP协议,也可以采用UDP协议。
                d:应用层:主要负责应用程序的协议,例如HTTP协议、FTP协议等。
        IP地址:IPV4和IPV6
                                0.0.0.0 ----->255.255.255.255   
                                32位 (2进制,10进制)
                                0000 : 0000 : 0000 : 0000 : 0000 : 0000 : 0000 : 0000
                                FFFF : FFFF : FFFF : FFFF : FFFF : FFFF : FFFF : FFFF  
                                128位(2进制,16进制)
                                IPV4:最大主机数 2的32次方 -1;并不是所有的地址都会被分配,人均入网设备变多,随着社会发展,已不能满足,IPv4地址正在耗尽,而IPv6通过更长的序列提供了更多的IP地址。IPv4向IPv6的迁移正在发生
                                IPV6:最大主机数 2的128次方 - 1;
        InetAddress :该类用于封装一个IP地址,并提供了一系列与IP地址相关的方法
                                a:static InetAddress getByName(String host) 在给定主机名的情况下确定主机的 IP 地址。
                                b:static InetAddress getLocalHost() 返回本地主机。
                                c:String getHostAddress()  返回 IP 地址字符串(以文本表现形式)。
                                d: String getHostName() 获取此 IP 地址的主机名。
二、网络编程数据传输(传输层)
        A:UDP
                无连接,效率高,安全性低
               
        B:TCP
                面向连接,效率低,安全性高
                Client:
                        //创建客户端对象
                        Socket s = new Socket("127.0.0.1", 10086);
                        //创建流对象
                        FileInputStream fis = new FileInputStream("a.txt");
                        OutputStream os = s.getOutputStream();
                       
                        //读写
                        int len;
                        byte[] bys = new byte[1024];
                        while((len=fis.read(bys)) !=-1){
                                os.write(bys, 0, len);
                        }
                        //写完后,跟服务器结束标记
                        s.shutdownOutput();
                        fis.close();
                        //读取服务器回执消息
                        InputStream is = s.getInputStream();
                        byte[] bbs = new byte[1024];
                        int len2 = is.read(bbs);
                        System.out.println(new String(bbs,0,len2));
                        s.close();

                Serive:
                        ServerSocket ss = new ServerSocket(10086);

                while(true){
                        final Socket s = ss.accept();
                        //多线程
                        new Thread(){
                                public void run() {
                                        try {
                                                //流对象
                                                InputStream is = s.getInputStream();
                                                FileOutputStream fos = new FileOutputStream("b"+System.currentTimeMillis()+".txt");
                                               
                                                //接收,写
                                                int len;
                                                byte[] bys = new byte[1024];
                                               
                                                while((len=is.read(bys)) != -1){
                                                        fos.write(bys, 0, len);
                                                }
                                                fos.close();
                                                //上传成功
                                                OutputStream os = s.getOutputStream();
                                                os.write("上传成功".getBytes());
                                                s.close();
                                        }  catch (IOException e) {
                                                System.out.println("网络繁忙,请稍后再试!");
                                                e.printStackTrace();
                                        }
                                };
                        }.start();
                }

7 个回复

倒序浏览
继续努力哈,争取每天都有不一样的收获
回复 使用道具 举报
哇哦,感觉你学到了很多东西哟
回复 使用道具 举报

回复 使用道具 举报
一定要坚持哟~~~加油
回复 使用道具 举报
感觉总结得很到位啊哈哈哈
回复 使用道具 举报
感动,,总结的真好
回复 使用道具 举报
温故而知新    加油哦   继续努力
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马