韩顺平Java P684-P690 学习笔记

目录

Socket介绍

序列化


 

端口 服务 接受和发送数据,需要一个端口,

数据通道

检查网络状态

都是对应端口的

udp就是喊一嗓子,有没有听到看你的

说的很对。自己网络编程学习的还是不好,不能够自己完全做出来

项目

多用户通讯系统

非常好的项目

骑士周游算法

推消息,私聊,发文件

编程能力和代码演示能力

项目结构

 使用集合来充当内存的数据库

 设计到的UI界面

如何办

核心功能体现就可以了

通过项目巩固之前的知识

类图、流程图、模块分配,数据库,架构,支撑多少,数据库量设计工作

原型设计,原型开发

组建团队、符合设计

.net 技术  基本工资+项目提成

实现阶段,程序员,模块完成,功能实现,实现阶段,理解,自己测试自己的模块

测试工程师自己也要测一下,负责集成测试

测试阶段,测试工程师,白盒测试,单元测试,黑盒测试,集成测试

有些bug不是好解决的,有问题的,一番排查

马氏三角杀 头疼  低耦合 

程序员流动性非常强

一边实现一边做测试

发现问题,马上解决

实施阶段,实施工程师

把这个项目正确部署到客户的平台,并保证运行正常

还是开发阶段的

重新review,对开发能力并不是很好,对环境配置部署要玩的转,身体要好,经常出差

待遇,对个人提升并不是很高

如果不是很喜欢,再走产品设计或者项目管理 

找一个人来对接,发现bug 解决bug

升级,架构师和项目经理

性能那不是小儿科吗 

文档可以很小,压缩

传输和保存,故意不加索引

本着自己的实力来做好

项目越大,需要分析就会很久

一边写项目,一边做设计

 

无异常退出

 

用控制台来演示就可以了

当前服务列表

核心功能

请输入想聊天的

实现公网,真正意义上的通讯系统

多用户,多线程

 多用户及时通讯系统

Socket介绍

Socket是一种计算机网络编程接口,用于在不同主机之间进行通信。它提供了一组函数和方法,允许程序通过网络发送和接收数据。

在网络通信中,Socket被用作应用层与传输层之间的接口。它可以在客户端和服务器之间建立连接,并通过套接字进行双向数据传输。

Socket使用TCP/IP协议栈进行通信,其中TCP(Transmission Control Protocol)负责可靠的数据传输,而IP(Internet Protocol)则负责寻址和路由。

Socket编程允许开发者创建基于客户端-服务器模型的应用程序。服务器端程序监听指定的端口,等待客户端的连接请求。一旦建立连接,服务器和客户端之间就可以通过Socket进行数据交换。

Socket提供了各种操作函数和方法,包括创建Socket、绑定地址、监听连接、接受连接、发送数据、接收数据等。这些函数和方法使开发者能够控制网络通信的细节,例如设置超时、处理错误和异常等。

Socket可以用于各种网络应用,如网页浏览器、电子邮件客户端、文件传输工具、即时通信软件等。它是实现网络通信的基础,为应用程序提供了可靠和灵活的数据传输方式。

总之,Socket是一个重要的网络编程接口,通过它可以实现不同主机之间的通信,并在应用层和传输层之间提供了便捷的接口。它是构建各种网络应用的基础,为开发者提供了灵活和可靠的网络通信机制。

 

在Java程序中,构造器(Constructor)是一种特殊的方法,用于创建对象并初始化对象的状态。当使用关键字new实例化一个类时,构造器会被调用来初始化该对象的成员变量

为什么要使用构造器生成一个构造对象呢?以下是几个重要的理由:

  1. 对象初始化:构造器用于初始化对象的状态,为对象的成员变量赋初值。通过构造器,可以确保对象在被创建时处于有效和可用的状态,避免了手动初始化对象的繁琐过程。

  2. 参数传递与赋值:构造器可以接受参数并将其赋值给对象的成员变量。在上述代码中,构造器User(String userId, String passwd)接受两个参数,并将其分别赋值给对象的userIdpasswd成员变量。这样,在创建对象时就可以方便地将所需的数据传递给构造器,并初始化对象的状态。

  3. 重载与灵活性:一个类可以定义多个不同的构造器,通过参数个数、类型和顺序的不同,实现构造器的重载。这使得在创建对象时具有更多的灵活性。例如,可以定义一个无参构造器和一个有参构造器,在不同的场景下使用不同的构造器来满足需求。

  4. 面向对象编程的原则:构造器的使用符合面向对象编程的原则,封装了对象的初始化过程,使得对象的创建和初始化作为一个整体来处理。这样可以更好地管理对象的状态和行为,并提高代码的可读性和维护性。

        总而言之,构造器在Java程序中扮演着重要的角色,通过使用构造器生成一个构造对象,可以方便地进行对象的初始化、参数传递和赋值,增加代码的灵活性和可读性,符合面向对象编程的原则。

其实我感觉构造器很大的一个作用就是把定义的这老些成员对象们弄成一个统一的整体,变成一个大集合,这样调用起来比较方便。

序列化

序列化是指将对象转换为字节流的过程,以便在网络上传输或保存到持久化存储介质(如文件、数据库)中。反之,将字节流转换回对象的过程称为反序列化。

在Java中,通过实现Serializable接口来实现序列化。Serializable接口是一个标记接口,没有任何方法。当一个类实现了Serializable接口,它就表示该类的对象可以被序列化和反序列化。

序列化的主要目的有以下几个方面:

  1. 对象持久化:在应用程序中,我们可以将某个对象序列化后保存到磁盘上,以便下次启动时恢复对象的状态。例如,可以将用户的配置信息、游戏进度等保存到文件中,以实现数据的持久化。

  2. 远程通信:在网络通信中,需要将对象通过网络传输。由于网络通信只能传输二进制数据,不能直接传输对象,因此需要将对象序列化为字节流,在发送端进行传输,然后再在接收端进行反序列化,将字节流转换回原始对象。

  3. 分布式计算:在分布式系统中,不同的节点之间需要传递对象。通过序列化和反序列化,可以将对象在各个节点之间进行传输,并保持对象的完整性和一致性。

需要注意的是,并非所有的对象都可以进行序列化。例如,静态变量、transient修饰的变量等不能被序列化。如果一个类不需要被序列化,可以通过关键字transient或实现Externalizable接口来控制序列化的过程。

总之,序列化是将对象转换为字节流的过程,用于对象的持久化、远程通信和分布式计算。Java通过实现Serializable接口来实现序列化,使得对象可以在网络间传输或保存到持久化存储介质中。

将对象从对象转换为字节流

Message

package com.hspedu.qqcommon;

/**
 * @author abner
 * @version 1.0
 * 表示客户端和服务器端通信时的消息对象
 */
public class Message {
    private static final long serialVersionUlD = 1L;
    //局域网
    private String sender;
    private String getter;
    private String content;
    private String sendTime;
    private String mesType;//消息类型[在接口中定义消息类型]

    public String getMesType() {
        return mesType;
    }

    public void setMesType(String mesType) {
        this.mesType = mesType;
    }

    public String getSender() {
        return sender;
    }

    public void setSender(String sender) {
        this.sender = sender;
    }

    public String getGetter() {
        return getter;
    }

    public void setGetter(String getter) {
        this.getter = getter;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public String getSendTime() {
        return sendTime;
    }

    public void setSendTime(String sendTime) {
        this.sendTime = sendTime;
    }
}

MessageType

package com.hspedu.qqcommon;

/**
 * @author abner
 * @version 1.0
 * 表示消息类型有哪些
 */
public interface MessageType {
    //在接口中定义了一些常量
    //不同的常量的值,表示不同的消息类型
    String MESSAGE_LOGIN_SUCCEED = "1";//登录成功
    String MESSAGE_LOGIN_FAIL = "2";//登录失败
    //







}
User
package com.hspedu.qqcommon;

/**
 * @author abner
 * @version 1.0
 * 表示一个客户端
 *
 */
public class User {
    private static final long serialVersionUlD = 1L;
    private String userId;
    //用户id
    private  String passwd;

    public User(String userId, String passwd) {
        this.userId = userId;
        this.passwd = passwd;
    }

    public String getUserId() {
        return userId;
    }

    public void setUserId(String userId) {
        this.userId = userId;
    }

    public String getPasswd() {
        return passwd;
    }

    public void setPasswd(String passwd) {
        this.passwd = passwd;
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值