Java Socket网络编程学习笔记(一)

本文回顾了Socket的基本概念及其在网络通信中的作用,并提供了简单的客户端和服务端示例。此外,还介绍了如何利用Socket搭建简易版Tomcat服务器。

0.前言

  其实大概半年前就已经看过网络编程Socket的知识了(传统IO),但是因为长时间的不使用导致忘的一干二净,最近正好准备校招,又重新看了网络编程这一章,
  是传统IO(BIO)相关的内容,故在此记录!!记完笔记就去看nio的网络编程啦!!!

1.基础概念

首先看一下socket单词的翻译:
  socket n. 插座;窝,穴;牙槽

  IP: 电脑的身份证
  
  端口号: 识别你电脑上的不同程序

场景: 小宇用电脑QQ发消息问小燕吃饭了没,小燕说吃了哦。
    为啥子小宇发消息,是小燕收到,而不是小红小白收到,
        这个就是IP这位大哥的作用啦,小宇给消息加上了IP,在广阔的网络中,消息小弟根据IP大哥的引路找到了小燕的电脑。

    再问:为啥是小燕的QQ收到了消息,而不是小燕的谷歌浏览器收到消息,这时候端口大哥就可以出场了,
       消息到了小燕电脑,IP大哥就不管事了,由端口号大哥引路找到了QQ这个程序
  

  socket百度是这样定义的

    网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。

    那么简单理解下: 也就是每个程序上都有一个插座,只要我们用一根有双向插头的线(得给这个线加上IP和端口号哦),哐,一连,这两个程序就可以互相交流啦。

    当然连接的时候需要经过三次挥手,释放的时候需要进过四次挥手。 最近在重温计算机网络,这部分以后再加上去哈!

2.简单的示例

   首先服务端需要暴露出一个端口 也可以说监听一个端口,客户端根据IP和端口进行连接,服务器接收到了这个连接请求,同意,再创建一个Socket和那个客户端的Socket进行连接。

  

  客户端:连接得需要ip地址和端口吧,顺便发送点什么。

package com.socket;

import java.io.OutputStream;
import java.net.Socket;

public class TCPClient {
    public static void main(String[] args) throws Exception {
        //系统随机选择一个端口 连接指定的ip地址和端口
        Socket socket = new Socket("127.0.0.1", 8888);
        OutputStream os = socket.getOutputStream();
        os.write("吃了嘛".getBytes());
        os.close();
        socket.close();
    }
}

  服务器端:服务器首先也得搞个插头,但是他不是谁想连就可以连,这样太不合理,别人连了得先得到服务器端得同意

  

package com.socket;

import java.net.ServerSocket;
import java.net.Socket;

public class TCPServer {
    public static void main(String[] args) throws Exception {
        //Server起一个插座(套接字)监听一个连接
        ServerSocket serverSocket = new ServerSocket(8888);
        //服务器端总不能停吧,写一个死循环
        while (true) {
            //serverSocket获得同意,再建立一个socket
            Socket socket = serverSocket.accept();
            System.out.println("client is connect!!!!!");
        }
    }
}

 3.破产版Tomcat

  客户端:浏览器

  服务端:MyTomcat , 因为要在浏览器中显示所以必须要弄成HTTP协议的。所以这里封装了两个类,分别是Request和Reponse。

  因为是破产版的 所以下面这张图的很多功能都没实现!!! 而且在NIO的网络模型中应该不是利用InputStream获得请求报文了

  

 

  

package com.socket.tomcat;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;

public class Request {

    //请求方法
    private String method;

    private String url;

    public Request(InputStream inputStream) throws Exception {
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "utf-8"));
        String[] input = bufferedReader.readLine().split(" ");
        this.method = input[0];
        url = input[1];
    }

    public String getMethod() {
        return method;
    }

    public void setMethod(String method) {
        this.method = method;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }
}
package com.socket.tomcat;

import java.io.OutputStream;

public class Reponse {
    private OutputStream outputStream;

    public static String repsonsedHead = "HTTP/1.1 200 \r\n" + "Content-Type:text/html\r\n" + "\r\n";

    public Reponse(OutputStream outputStream) {
        this.outputStream = outputStream;
    }

    public void write(String msg) throws Exception {
        outputStream.write((repsonsedHead + msg).getBytes());
    }
}
package com.socket.tomcat;

import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class MyTomcat {

    public static void main(String[] args) throws Exception {

        ServerSocket serverSocket = new ServerSocket(8080);

        while (true) {
            Socket socket = serverSocket.accept();

            InputStream is = socket.getInputStream();
            //获得请求
            Request request = new Request(is);

            System.out.println("请求方法:" + request.getMethod());
            System.out.println("请求路径:" + request.getUrl());

            OutputStream os = socket.getOutputStream();
            Reponse reponse = new Reponse(os);
            reponse.write("Java!");

            is.close();
            os.flush();
            os.close();
            socket.close();

        }

    }
}

 

 

转载于:https://www.cnblogs.com/dddyyy/p/10583612.html

标题SpringBoot智能在线预约挂号系统研究AI更换标题第1章引言介绍智能在线预约挂号系统的研究背景、意义、国内外研究现状及论文创新点。1.1研究背景与意义阐述智能在线预约挂号系统对提升医疗服务效率的重要性。1.2国内外研究现状分析国内外智能在线预约挂号系统的研究与应用情况。1.3研究方法及创新点概述本文采用的技术路线、研究方法及主要创新点。第2章相关理论总结智能在线预约挂号系统相关理论,包括系统架构、开发技术等。2.1系统架构设计理论介绍系统架构设计的基本原则和常用方法。2.2SpringBoot开发框架理论阐述SpringBoot框架的特点、优势及其在系统开发中的应用。2.3数据库设计与管理理论介绍数据库设计原则、数据模型及数据库管理系统。2.4网络安全与数据保护理论讨论网络安全威胁、数据保护技术及其在系统中的应用。第3章SpringBoot智能在线预约挂号系统设计详细介绍系统的设计方案,包括功能模块划分、数据库设计等。3.1系统功能模块设计划分系统功能模块,如用户管理、挂号管理、医生排班等。3.2数据库设计与实现设计数据库表结构,确定字段类型、主键及外键关系。3.3用户界面设计设计用户友好的界面,提升用户体验。3.4系统安全设计阐述系统安全策略,包括用户认证、数据加密等。第4章系统实现与测试介绍系统的实现过程,包括编码、测试及优化等。4.1系统编码实现采用SpringBoot框架进行系统编码实现。4.2系统测试方法介绍系统测试的方法、步骤及测试用例设计。4.3系统性能测试与分析对系统进行性能测试,分析测试结果并提出优化建议。4.4系统优化与改进根据测试结果对系统进行优化和改进,提升系统性能。第5章研究结果呈现系统实现后的效果,包括功能实现、性能提升等。5.1系统功能实现效果展示系统各功能模块的实现效果,如挂号成功界面等。5.2系统性能提升效果对比优化前后的系统性能
在金融行业中,对信用风险的判断是核心环节之,其结果对机构的信贷政策和风险控制策略有直接影响。本文将围绕如何借助机器学习方法,尤其是Sklearn工具包,建立用于判断信用状况的预测系统。文中将涵盖逻辑回归、支持向量机等常见方法,并通过实际操作流程进行说明。 、机器学习基本概念 机器学习属于人工智能的子领域,其基本理念是通过数据自动学习规律,而非依赖人工设定规则。在信贷分析中,该技术可用于挖掘历史数据中的潜在规律,进而对未来的信用表现进行预测。 二、Sklearn工具包概述 Sklearn(Scikit-learn)是Python语言中广泛使用的机器学习模块,提供多种数据处理和建模功能。它简化了数据清洗、特征提取、模型构建、验证与优化等流程,是数据科学项目中的常用工具。 三、逻辑回归模型 逻辑回归是种常用于分类任务的线性模型,特别适用于二类问题。在信用评估中,该模型可用于判断借款人是否可能违约。其通过逻辑函数将输出映射为0到1之间的概率值,从而表示违约的可能性。 四、支持向量机模型 支持向量机是种用于监督学习的算法,适用于数据维度高、样本量小的情况。在信用分析中,该方法能够通过寻找最佳分割面,区分违约与非违约客户。通过选用不同核函数,可应对复杂的非线性关系,提升预测精度。 五、数据预处理步骤 在建模前,需对原始数据进行清理与转换,包括处理缺失值、识别异常点、标准化数值、筛选有效特征等。对于信用评分,常见的输入变量包括收入水平、负债比例、信用历史记录、职业稳定性等。预处理有助于减少噪声干扰,增强模型的适应性。 六、模型构建与验证 借助Sklearn,可以将数据集划分为训练集和测试集,并通过交叉验证调整参数以提升模型性能。常用评估指标包括准确率、召回率、F1值以及AUC-ROC曲线。在处理不平衡数据时,更应关注模型的召回率与特异性。 七、集成学习方法 为提升模型预测能力,可采用集成策略,如结合多个模型的预测结果。这有助于降低单模型的偏差与方差,增强整体预测的稳定性与准确性。 综上,基于机器学习的信用评估系统可通过Sklearn中的多种算法,结合合理的数据处理与模型优化,实现对借款人信用状况的精准判断。在实际应用中,需持续调整模型以适应市场变化,保障预测结果的长期有效性。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值