JAVA基础 网络编程

JAVA基础 网络编程

网络我们每天都会用到的,在我们生活中占的地位也在不断的提高,我们下面就简单了解下网络编程的内容。

想要学习网络编程,首先就需要了解网络编程包含哪些内容。

网络编程包括 IP节点,端口,URL,传输协议。下面我们就分别了解下

IP

IP是定义节点的,有两个重要的版本需要我们了解下,一个是IPV4,是4个字节32位的;另一个是127.0.0.1 ,一般192.168.0.0~192.168.255.255 供组织内部使用的IP,而我们本地的IP,也叫localhost ,IP是127.0.0.1

IP与域名:

DNS|域名解析器

InetAddress :getLocalHost,getHostAddress,getByName,

端口 port

端口是区分软件的,同一协议下端口是不能冲突的(即同一协议端口不能重复

端口是2个字节 用0~65535之间的整数表示端口号

一般8000以内的端口号时预留的端口号。

我们常见的端口号也是需要了解的:

​ 80: http
​ 8080: tomcat
​ 3306: mysql
​ 1521: oracle

InetSocketAddress : 此类实现IP套接字地址(IP地址+端口号)它也可以是一对(主机名+端口号)。

InetSocketAddress(int port) ;InetSocketAddress(String hostname, int port)

InetSocketAddress(InetAddress addr, int port)

getAddress;getHostName;getPort

URL

统一资源定位符。是互联网的三大基石(html,http,url)之一。指向万维网的资源的指针.

URL的组成:协议 http url.getProtocol()

​ 域名 ww.XXX.com url.getHost()

​ 端口号 默认是80 url.getPort()

​ 访问的资源 index.html url.getFile()或url.getPath()

​ 请求参数 username=zhangsan&password=123 url.getQuery()

​ 锚链接 a url.getRef()

http://www.xxx.com:80/index.html?username=zhangsan&password=123#a

爬虫

我们可以简单通过URL写个小爬虫。结合我们之前学习到的IO流进行读取。

public static void main(String[] args) throws IOException {
        //1.定位互联网中的某个资源
        URL url = new URL("http://www.XXX.com");

        //2.打开一个到此URL资源的一个输入流
        //InputStream openStream() 打开与此 URL的连接并返回 InputStream以从该连接读取。
        //InputStreamReader
        BufferedReader is = new BufferedReader(new InputStreamReader(url.openStream()));
        String msg  = null;
        while((msg = is.readLine())!=null){
            System.out.println(msg);
        }
        is.close();
    }

协议

传输协议有分为UDP和TCP,尤其是TCP更是需要我们掌握的。

**UDP:**是非面向面连接的,不安全的,协议简单,开销小效率高,只管写只管发送 一般不超过60k。

**TCP:**是面向连接,安全的,协议复杂,效率低,没有大小限制。

SOCKET 套接字

相当于在传输层为应用层提供了一个接口,我们可以通过套接字Socket实现传输,不同的协议实现的方法不同,因此我们称为面向Socket编程。

UDP协议

DatagramSocket 定义发送端|接收端 Datagram(数据包)
DatagramPacket 打包

步骤:

发送端接收端
1.定义发送端 DatagramSocket(int port)
2.准备数据
3.打包
4.发送 send(DatagramPacket)
5.关闭
1.定义接收端 DatagramSocket(int port)
2.打包准备接收数据
3.接收 receive(DatagramPacket)
4.处理数据
5.关闭
发送端
 public static void main(String[] args) throws IOException {
        System.out.println("-----------------发送端------------------");
        //1.定义发送端 DatagramSocket(int port)
        DatagramSocket send = new DatagramSocket(8888);
        //2.准备数据
        byte[] arr = "晚安伽卡他卡".getBytes();
        //3.打包
        //DatagramPacket(byte[] buf, int offset, int length, SocketAddress address)
        DatagramPacket packet = new DatagramPacket(arr,0,arr.length,new InetSocketAddress("localhost",9999));
        //4.发送  send(DatagramPacket)
        send.send(packet);
        //5.关闭
        send.close();
    }
接收端
  public static void main(String[] args) throws Exception{
        System.out.println("-----------------接收端------------------");
        //1.定义接收端 DatagramSocket(int port)
        DatagramSocket rec = new DatagramSocket(9999);
        //2.打包准备接收数据
         byte[] arr = new byte[1024];
         //接收数据的包裹
        DatagramPacket packet = new DatagramPacket(arr,0,arr.length);
        //3.接收 receive(DatagramPacket)
        rec.receive(packet);

        //4.处理数据
         byte[] datas = packet.getData();
         int len = packet.getLength();
        System.out.println("接收数据个数"+len);
        System.out.println("接收数据"+datas.length);
        System.out.println(new String(datas,0,len));
        //5.关闭
        rec.close();

    }

TCP协议

客户端服务端
基于IO流,一个客户端就是一个Socket,包含输入输出
1.定义客户端 Socket
2.IO操作,获取输出流->写出
3.关闭
tcp基础流程->服务器端
1.定义我是服务器端 ServerSocket(int port)
2.阻塞式监听
3.IO操作: 获取输入流
4.关闭资源
客户端
 public static void main(String[] args) throws IOException {
        System.out.println("tcp使用单项用户登录-->客户端");
        //1.定义客户端
        Socket client = new Socket("localhost",8989);
        //2.io
        DataOutputStream out = new DataOutputStream(new BufferedOutputStream(client.getOutputStream()));
        out.writeUTF("username=laopei&password=1234");

        out.flush();
        //3.关闭
        out.close();
        client.close();
    }
服务端
 public static void main(String[] args) throws IOException {
        System.out.println("tcp实现单项登录-服务端");
        //1.定义服务端
        ServerSocket server = new ServerSocket(8989);

        //2.监听
        Socket client = server.accept();

        //3.io
        DataInputStream in = new DataInputStream(new BufferedInputStream(client.getInputStream()));
        String str = in.readUTF();
        System.out.println(str);

        //存储用户输入的用户名和密码
        String name = "";
        String pwd = "";
        //校验
        String[] arr = str.split("&");
        for(String ss:arr){
            System.out.println(ss);
            String[] s = ss.split("=");
            if("username".equals(s[0])){
                name = s[1];
            }else if("password".equals(s[0])){
                pwd = s[1];
            }
        }
        if("laopei".equals(name) && "1234".equals(pwd)){
            System.out.println("登录成功");
        }else{
            System.out.println("用户名或密码错误..");
        }

        //关闭
        in.close();
        client.close();
        server.close();

    }

同样也可以结合多线程等进行多客户端连接的操作。大家可以试下。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值