在线小说阅读系统

1. 任务需求

  • 任务1:创建客户端、服务器端,完成简单通信

  • 任务2:完成登录、注册、退出、返回功能

  • 任务3:完成小说查询列表的功能

  • 任务4:完成在线阅读小说功能

  • 任务5:完成下载小说功能

  • 任务6:完成上传小说功能

客户端,服务端创建,简单通信——socket,serversocket,线程运用,拥塞式的接受客户连接,线程处理客户发送的请求信息。

客户端与服务端之间的每一次线程处理应该就是:

(ps:原先想法是对txt文件使用rendLine()方法,这样需要客户端与服务端进行频繁多次的交互,并不高效。)

第一步:完成登录,注册功能,获取书单列表功能,主要在于xml文件的读写操作需要熟练掌握

第二部分:上传文件,下载文件:要想要可以使用StringBuilder,可以完成字符串的拼接,最终达到存储整个txt文件的效果,在对应使用map集合,与对应键值存储,一起发送到服务端,达成高效的传输交流。

第三部分 在线小说阅读

错误处理:

注册失败:账户密码相同 || 账户相同

登录失败:账户,密码没有对应相等

在线阅读,下载书籍必须先经过获取书单功能,才可以对应选择书籍,继续进行操作

在线阅读已经是第一页时,继续选择第一页,会强制退出在线阅读

遇到问题:对于输入输出之间关流并没有十分明白

Socket 类提供了 shutdown() 方法,用于关闭套接字连接的某一部分。这个方法可以用来关闭套接字的读写功能,而不是完全关闭套接字。这样做的好处是允许发送或接收剩余的数据,而不需要完全断开连接。

shutdown() 方法有两种重载形式:

  1. shutdownInput():关闭套接字的输入流,阻止接收更多的数据。

  2. shutdownOutput():关闭套接字的输出流,阻止发送更多的数据。

示例代码:

Socket socket = new Socket("hostname", port);
// ... 进行数据通信 ...
​
// 关闭输入流,但保持连接以便接收剩余数据
socket.shutdownInput();
​
// 关闭输出流,并关闭连接
socket.shutdownOutput();

当调用 shutdownInput()shutdownOutput() 方法时,套接字会进入一个关闭的状态。在关闭状态下,如果尝试写入一个已经关闭了输入的套接字,或者读取一个已经关闭了输出的套接字,将会抛出 IOException

此外,当调用 close() 方法关闭套接字时,会先调用 shutdownOutput()(如果还没有调用过),然后关闭输入流,最后关闭套接字连接。

请注意,在实际编程中,应该始终检查 shutdown() 方法的返回值,以确定调用是否成功。如果返回 false,表示套接字无法进入关闭状态,可能是由于远程主机已经关闭或网络问题。

在处理套接字时,正确使用 shutdown() 方法是一个好的编程实践,它可以确保在关闭连接之前,所有的数据都已经正确传输和接收。

详细掌握:

  • xml文件的读写方式

  • 客户端与服务端之间的交互

  • 客户端和服务端之间的功能函数的理解与对应流程图——着重:在线小说阅读方式

扩展:

  • 集合流

  • properise文件使用——在配制文件添加下载路径的配制项

在Java编程中,properties文件是一种简单的键值对格式的配置文件,通常用于存储应用程序的配置参数。properties文件通常用于以下场景:

  • 应用程序配置:存储应用程序运行时需要的参数,如数据库连接信息、API密钥、服务器地址等。

  • 资源国际化:存储不同语言的本地化字符串,以支持应用程序的国际化。

properties文件的特点:

  • 键和值由等号=分隔。

  • 文件编码通常是ISO-8859-1,但也可以使用其他编码,如UTF-8。

  • 注释以#!开头。

  • 行尾的空白字符会被忽略。

  • 可以使用反斜杠\作为续行符。

properties文件示例:

# 这是一个properties文件示例
# 数据库配置
db.url=jdbc:mysql://localhost:3306/mydb
db.user=root
db.password=secret
# API配置
api.key=1234567890abcdef
# 国际化
greeting=Hello, World!

在Java中读取properties文件:

你可以使用java.util.Properties类来加载和读取properties文件。

import java.util.Properties;
import java.io.FileInputStream;
import java.io.IOException;
public class PropertiesExample {
    public static void main(String[] args) {
        Properties prop = new Properties();
        
        try {
            // 加载properties文件
            FileInputStream input = new FileInputStream("config.properties");
            prop.load(input);
            
            // 读取配置参数
            String dbUrl = prop.getProperty("db.url");
            String dbUser = prop.getProperty("db.user");
            String dbPassword = prop.getProperty("db.password");
            
            System.out.println("Database URL: " + dbUrl);
            System.out.println("Database User: " + dbUser);
            System.out.println("Database Password: " + dbPassword);
            
            // 关闭输入流
            input.close();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
}

在上面的例子中,PropertiesExample类从名为config.properties的文件中读取配置信息。 确保config.properties文件位于正确的路径,或者在读取文件时指定正确的文件路径。

注意事项:

  • properties文件中的键和值默认是字符串类型,如果需要其他类型,需要手动转换。

  • 处理配置文件时,应考虑异常处理和资源管理(例如,使用try-with-resources语句来自动关闭资源)。

  • 在生产环境中,敏感信息(如密码)不应直接存储在properties文件中,而应使用更安全的方式来管理。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值