• 【常用API】之Socket编程


    网络编程的 URL对象:

    URL对象,用于读取互联网指定路径响应返回客户端的所有的字符串内容。(网页内容)

    如果读取是网页,就是开发浏览器,或者互联网数据爬虫。

    如果读取的是一个xml,那么就是企业合作之间的数据交互。

    【互联网的概念,服务器的概念,各种协议的概念等,好好复习前端课程】

    实例化url对象: URL url = new URL("http://网址");
    使用对象中的各种方法。

    读取内容:
    基础流: InputStream
    基础读取流: InputStreamReader
    缓冲流: BufferedReader

    获取到的是服务器响应会发客户端浏览器的内容,
    但是如果是由 脚本生成的内容,获取不到的,VUE类型的。

    实例

    package com.xzm.网络编程URL;
    
    import java.net.MalformedURLException;
    //导入java中负责网络编程的包文件
    import java.net.URL;
    //导入java中负责IO操作的包文件
    import java.io.*;
    
    
    public class 读取网络信息 {
    
        public static void main(String[] args) {        
            try {
                
                //创建网络对象URL
                URL u = new URL("https://www.sina.com.cn/");
            
                //提取各种信息
                System.out.println("域名:"+ u.getHost() );
                System.out.println("路径:"+ u.getPath() );
                System.out.println("端口:"+ u.getPort() );
                
                //========================================
                //【读取内容,变成字符串信息】
                try {
                    
                    //第一步:基于url对象,获取返回出来的一个基础流
                    //        强制异常:网址打不开
                    InputStream is = u.openStream();
                    
                    
                    //第二步:基于基础流,创建一个读取操作,指定编码
                    InputStreamReader isr = new InputStreamReader(is, "utf-8");
                    
                    
                    //第三步:创建高层缓冲字符输入流
                    //            把信息先全部读取到缓冲,然后再操作。
                    BufferedReader br = new BufferedReader(isr);
                    
                    
                    //一行行读取
                    //代码结合的方式
                    // while中,执行了变量赋值,提供括号先执行
                    // 然后再进行 关系判断
                    int i=1;//行号
                    String line;                
                    while((line=br.readLine()) != null) 
                    {
                        System.out.println(i +": "+ line);
                        i++;
                    }
                    
                    //关闭结束
                    br.close();
                    isr.close();
                    is.close();
                    
                    
                    
                    
                } catch (IOException e) {
                    e.printStackTrace();
                }
            
            } catch (MalformedURLException e) {
                e.printStackTrace();
            }        
        }
    
    }

    Socket 互联网-通讯-编程:

    互联网应用程序分两类架构:

    C/S模型:庞客户端模型 【客户端】====【服务器】
    对客户端要求高,不易于版本控制。
    服务器端压力很小。
    客户端与服务器共同承担运算。


    B/S模型:总服务器端模型 【浏览器】====【服务器】
    客户端只需要很少的资源就可以。
    所有的压力,全部基于服务器。
    几乎所有的运算都由服务器处理。
    【由于这个问题,如今前端项目,都是将脚本,css单独获取发送客户端】
    【利用框架VUE,通过接口请求服务器。】

    服务端:

    package com.xzm.通讯编程Socket;
    
    import java.io.IOException;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    public class Server {
    
        /**
         * 【服务器端】
         */
        public static void main(String[] args) {
            try {
                
                //创建一个服务器端的 通讯对象,同时指定监听的端口
                //端口号是一个数值
                ServerSocket ss = new ServerSocket(8888);            
                System.out.println("服务器已运行:");
                
                //由于不知道会有多少用户连接
                //使用while无限循环-->服务器运行之后,不关闭
                while(true)
                {
                    //创建一个基本的socket对象,它是需要与客户端对应挂钩的
                    //不能实例化,他是客户端的
                    //调用服务器端Socket的accept阻塞方法
                    //这个方法会阻塞线程,一旦有客户端链接
                    //就返回客户端
                    Socket sk = ss.accept();
                    System.out.println("有一个链接");
                
                }
                
                
                
                
                
                
                
                
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
    }

    客户端

    package com.xzm.通讯编程Socket;
    
    import java.io.IOException;
    import java.net.Socket;
    import java.net.UnknownHostException;
    
    public class Client {
    
        /**
         * 【客户端】
         * @param args
         */
        public static void main(String[] args) {
            
            
            try {
                
                //创建普通的通讯对象
                //(IP地址,端口)
                Socket sk = new Socket("127.0.0.1", 8888);
                
                
            } catch (Exception e) {
                System.out.println("服务器无响应!");
            }
    
            
        }
    
    }

    窗体(图形化)编程

    package com.xzm.窗体编程;
    
    //导入需要的包
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    
    import javax.swing.*;
    
    public class Test {
    
        public static void main(String[] args) {
            
            // GUI图形化界面编程:
            //包:java.awt.*;    javax.swing.*;
            
            //窗体类: JFrame        
            //设置窗体的默认样式: true=java,false=系统
            JFrame.setDefaultLookAndFeelDecorated(false);
            
            //创建一个窗体
            JFrame jf = new JFrame();
            
            //设置
            jf.setTitle("我的第一个软件");
            jf.setLayout(null);//默认布局==null
            jf.setBounds(100,100,500,500);//显示的位置与大小(x轴,y轴,宽度,高度)
            //设置关闭按钮-结束进程
            jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            
            //多行文本框
            JTextArea jta = new JTextArea();
            jta.setBounds(5,5,480,300);
            jta.setLineWrap(true);//支持多行
            jf.add(jta);//加入到窗体中
            
            //文本框
            JTextField jtf = new JTextField();
            jtf.setBounds(5, 310, 450, 30);
            jf.add(jtf);
            
            //按钮
            JButton btn = new JButton("发送");
            btn.setBounds(5, 350, 100, 30);
            //注册事件
            btn.addActionListener(new fasong());
            jf.add(btn);
            
            
            
            //最后-设置显示
            jf.setVisible(true);        
        }
    
    }
    
    //自定义类,实现触发响应事件
    class fasong implements ActionListener{
    
        @Override
        public void actionPerformed(ActionEvent arg0) {
            //弹出窗口
            JOptionPane.showMessageDialog(null, "测试成功!");
            
        }
        
    }
  • 相关阅读:
    mysql常用时间列表的查询——七天内、本月、本周、某天
    js取数组获取最大值的四种方式
    Mysql按周,按月,按日,按小时分组统计数据
    Mysql中的sum函数为null时的解决办法
    Maven 中 dependencyManagement 标签使用
    嵌入式printf函数运用基于ti 16位MCU
    md5实现对用户名与密码的保护
    c# md5 算法实现
    define a struct
    file.open异常处理
  • 原文地址:https://www.cnblogs.com/jiarenanhao/p/14147897.html
Copyright © 2020-2023  润新知