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

© wuwangshan 中级黑马   /  2018-3-13 18:28  /  1199 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

【网络编程】

       

【Socket】(套接字)[锁k特]
        Socket就是封装了IP地址+端口号;

【网络通信三要素】

        1. IP地址:为了找到目标计算机
                点分十进制表示法:比如 192.168.1.1

        2. 端口号: 为了找到目标应用程序 取值 0~65535 , 0~1023 作为系统使用或者保留
               
       
        3. 传输协议:传输数据所遵守的规则
                1 . UDP:
                        1.1 面向无连接
                        1.2 不可靠(不安全)
                        1.3 有大小限制(64K)
                        1.4 效率高
                        应用场景:视频聊天
                2 . TCP
                        2.1 面向连接(三次握手)
                        2.2 可靠(可靠)
                        2.3 没有大小限制
                        2.4 效率低
                        应用场景:文件下载
                通讯的规则
                常见协议
               

网络编程至少需要几个Socket?
答:2个


【InetAddress】[爱赖特 饿拽丝]

        InetAddress:此类表示互联网协议 (IP) 地址。


        //static InetAddress getByName(String host)

        InetAddress address = InetAddress.getByName("itheima");
        通过主机名来获取IP地址

        InetAddress address = InetAddress.getByName("192.168.1.107");
        通过IP地址获取IP地址

        String hostAddress = address.getHostAddress();
        //192.168.1.107 返回IP地址

        String hostName = address.getHostName();
        //itheima        返回主机名


        getLocalHost()(获取本地ip地址)[落阔 厚丝特]


【协议】

        【UDP协议】

         使用UDP协议发送数据
                创建发送端Socket对象
                创建数据并打包
                发送数据   ds.send(dp);
                释放资源

* DatagramSocket:[得特 个软 锁k特]此类表示用来发送和接收数据,基于UDP协议的
*
* DatagramSocket() :创建Socket对象并随机分配端口号
* DatagramSocket(int port) :创建Socket对象并指定端口号
*/


        使用UDP协议接收数据
                创建接收端Socket对象
                接收数据  ds.receive(dp);//
                                接收之前得新建一个空的数据包
                解析数据
                输出数据
                释放资源

        InetAddress address = dp.getAddress();
        获取发送端的IP对象

        byte[] data = dp.getData();
        获取接收到的数据,也可以直接使用创建包对象时的数组

        int length = dp.getLength();
        获取具体收到数据的长度





【TCP协议】

使用TCP协议发送数据

                创建发送端Socket对象(创建连接)
        Socket s = new Socket(InetAddress.getByName("itheima"),10086);
               
                获取输出流对象
        OutputStream os = s.getOutputStream();

                发送数据
        String str = "hello tcp,im comming!!!";
        os.write(str.getBytes());

                释放资源
               

使用TCP协议接收数据 ServerSocket [色玩 锁k特] accept[饿k C可特]

                创建接收端Socket对象
        ServerSocket ss = new ServerSocket(10086);

                监听(阻塞)
        Socket s = ss.accept();

                获取输入流对象
        InputStream is = s.getInputStream();

                获取数据
        byte[] bys = new byte[1024];
        int len;//用于存储读到的字节个数
        len = is.read(bys);

                输出数据
        InetAddress address = s.getInetAddress();
        System.out.println("client ---> " + address.getHostName());
        System.out.println(new String(bys,0,len));

                释放资源
        s.close();



http协议    应用层

UDP TCP         传输层












1 个回复

倒序浏览
很不错哦小伙子,只有你持之以恒
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马