java网络学习笔记

一:InetAddress类

1.什么是InetAddress

此类表示Internet协议(IP)地址。

2.常见用法:

            InetAddress inetAddress = InetAddress.getByName("www.jd.com");//通过域名创建一个InetAddress对象
            InetAddress inetAddress1 = InetAddress.getLocalHost();//创建本机的InetAddress对象
            InetAddress inetAddress2= InetAddress.getByName("127.0.0.1");//通过IP创建InetAdress对象
            System.out.println(inetAddress);//得到域名+IP的字符串--www.jd.com/180.97.189.3
            System.out.println("ip:"+inetAddress.getHostAddress());//ip
            System.out.println("域名:"+inetAddress.getHostName());//域名//或者自己电脑的名字
            System.out.println(inetAddress1);

3.补充说明

本机IP:127.0.0.1
IPv4:
IPv4.的IP地址由32位二进制数组成,为便于使用,常以XXX.XXX.XXX.XXX形式表现,每组XXX代表小于或等于255的10进制数,该表示方法称为点分十进制。 例如維基媒體的一个IP位址是208.80.152.2。 位址可分为A、B、C、D、E五大类,其中E类属于特殊保留地址。
IPv6:
IPv6 地址的长度为128 位,由八个16 位字段组成,相邻字段用冒号分隔。 IPv6 地址中的每个字段都必须包含一个十六进制数字,而IPv4 地址则以点分十进制表示法表示

二:Socket

1.什么是Socket

Socket:套接字
该类实现客户端套接字(也称为“套接字”)。 套接字是两台机器之间通讯的端点。
套接字的实际工作由SocketImpl类的实例执行。 应用程序通过更改创建套接字实现的套接字工厂,可以配置自己创建适合本地防火墙的套接字。

2.Socket常用方法

Socket socket = new Socket(InetAddress serverIp,String port);
//通过InetAddress对象和端口号创建连接型Socket类对象
 socket.getInputStream();//得到输入流,返回InputStrea对象
 socket.getOutputStream();//获取输出流,返回OutputStream对象
 socket.close();//关闭连接
 ServerSocket serverSocket = new ServerSocket(String port);//通过端口号创建接受型ServerSocket类对象
 serverSocket.accept();//等待用户连接,并返回一个Socket对象,用于接收用户传输的信息
 serverSocket.close();//关闭连接

3.Socket应用案例

TCP功能实现

4.DatagramSocket和DatagramPacket 类

1.DatagramSocket介绍

此类表示用于发送和接收数据报数据包的套接字。

数据报套接字是分组传送服务的发送或接收点。 在数据报套接字上发送或接收的每个数据包都被单独寻址和路由。 从一个机器发送到另一个机器的多个分组可以不同地路由,并且可以以任何顺序到达。

示例: DatagramSocket s = new DatagramSocket(null); s.bind(new InetSocketAddress(8888));其中相当于: DatagramSocket s = new DatagramSocket(8888);这两种情况都将创建一个DatagramSocket,可以在UDP端口8888上接收广播。

2.DatagramPacket 介绍

该类表示数据报包。
数据报包用于实现无连接分组传送服务。 仅基于该数据包中包含的信息,每个消息从一台机器路由到另一台机器。 从一台机器发送到另一台机器的多个分组可能会有不同的路由,并且可能以任何顺序到达。 包传送不能保证

3.UDP的使用步骤

发送端:

		//1.建立连接
        DatagramSocket socket = null;
        //2.获得连接对象
        //获取对方的IP和端口号进行连接
        InetAddress Ip = null;
        int port = 9999;
        //4.创建数据包
        String msg = "你好";
        DatagramPacket packet = null;
        try {
            socket = new DatagramSocket();
            Ip = InetAddress.getByName("localhost");
            //数据,数据的长度起始,发送的地址
            packet = new DatagramPacket(msg.getBytes(),0,msg.getBytes().length,Ip,port);
            //5.发送包
            socket.send(packet);

        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            //6.关闭资源
            if (socket != null){
                socket.close();
            }
        }

接收端:

        DatagramSocket socket = null;
        try {
            //1.开启自己的端口(客户端连接的端口)
            socket = new DatagramSocket(9999);
            //2.接收数据
            byte[] buffer = new byte[1024];
            DatagramPacket packet = new DatagramPacket(buffer,0,buffer.length);
            socket.receive(packet);//堵塞接收
            //3.处理数据
            byte[] target = packet.getData();
            int len=0;
            if (target.length!=0){
                for (int i=0;i<target.length;i++){
                    if (target[i]=='\0'){
                        len=i;
                        break;
                    }
                }

            }
            //4.输出数据
            System.out.println("from:"+packet.getAddress());
            System.out.println(new String(target,0,len));

        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            if (socket!=null){
                socket.close();
            }
        }

4.UDP实现在线聊天案例

UDP实现在线聊天案例

三,URL

内容比较简单直接上实例代码

package URL;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;

import java.net.URL;

public class URLTest {
    public static void main(String[] args) {
        HttpURLConnection connection = null;
        InputStream in = null;
        FileOutputStream fos = null;
        try {
            //获取百度的HTML页面//也可以获取URL对应的音频,视屏
            URL url = new URL("https://www.baidu.com/");
            //通过URL打开连接
            connection = (HttpURLConnection) url.openConnection();
            //获取连接的输入流
            in = connection.getInputStream();
            //保存文件
            fos = new FileOutputStream("1.html");//文件后缀与获取的文件对应
            byte[] buffer = new byte[1024];
            int len = 0;
            while((len = in.read(buffer))!=-1){
                fos.write(buffer,0,len);
            }
            //获取连接的状态
            String msg = connection.getResponseMessage();
            System.out.println("连接状态:"+msg);
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            //关闭资源
            if (fos!=null){
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (in !=null){
                try {
                    in.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (connection != null){
                connection.disconnect();
            }
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值