【常用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, "测试成功!");
        
    }
    
}

 

posted @ 2020-12-17 09:30  Mr.chris  阅读(185)  评论(0编辑  收藏  举报