韩顺平Java基础网络通信系统

项目结构

客户端:

 服务端:

 

客户端(QQClient)

qqcommon 包下

 User类:

package com.hspedu.qqcommon;

import java.io.Serializable;

// 表示一个用户/客户信息
public class User implements Serializable {

    private static final long  serialVersionUID=1L;  //序列化

    private String userId; // 用户id/用户名
    private String passwd; // 用户密码

    public User() {
    }

    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;
    }
}
Message类:
package com.hspedu.qqcommon;

import java.io.Serializable;

/*
    表示客户端和服务端通信时的消息对象
 */

public class Message implements Serializable {
    private static final long serialVersionUID=1L;
    private String sender; // 发送者
    private String getter; // 接收者
    private String content; // 消息内容
    private String sendTime; // 发送时间
    private String mesType; // 消息类型

    //进行扩展 和文件相关的成员
    private byte[] fileBytes;
    private int fileLen=0; //大小长度
    private String dest;// 将文件传输到哪里
    private String src;// 源文件路径

    public byte[] getFileBytes() {
        return fileBytes;
    }

    public void setFileBytes(byte[] fileBytes) {
        this.fileBytes = fileBytes;
    }

    public int getFileLen() {
        return fileLen;
    }

    public void setFileLen(int fileLen) {
        this.fileLen = fileLen;
    }

    public String getDest() {
        return dest;
    }

    public void setDest(String dest) {
        this.dest = dest;
    }

    public String getSrc() {
        return src;
    }

    public void setSrc(String src) {
        this.src = src;
    }

    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(String s) {
        return sendTime;
    }

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

MessageType接口:

package com.hspedu.qqcommon;
/*
    表示消息类型
 */
public interface MessageType {
    //1.在接口中定义了一些常量
    //2.不同的常量的值,表示不同的消息类型
    String MESSAGE_LOGIN_SUCCESS="1"; // 表示登录成功
    String MESSAGE_LOGIN_FAIL="2"; // 表示登录失败
    String MESSAGE_COMM_MES = "3"; // 普通信息包
    String MESSAGE_GET_ONLINE_FRIEND="4";// 要求返回在线用户列表
    String MESSAGE_RET_ONLINE_FRIEND="5";// 返回在线用户列表
    String MESSAGE_CLIENT_EXIT="6";// 客户端请求退出
    String MESSAGE_TO_ALL_MES = "7"; // 群发消息包
    String MESSAGE_FILE_MES="8";// 文件消息(发送文件)

}

view包下

菜单入口:

package com.hspedu.qqclient.view;

import com.hspedu.qqclient.service.FileClientService;
import com.hspedu.qqclient.service.MessageClientService;
import com.hspedu.qqclient.service.UserClientService;
import com.hspedu.qqclient.utilitys.Utility;
import org.junit.jupiter.api.Test;

/*
客户端的菜单界面
 */
public class QQView {
    private boolean loop = true;// 控制是否显示菜单那
    private String key = ""; // 接收用户的键盘输入
    private UserClientService userClientService = new UserClientService();// 对象是用于登录/注册用户
    private MessageClientService messageClientService = new MessageClientService();//对象用户私聊/群聊
    private FileClientService fileClientService=new FileClientService();// 该用户对象用于传输文件

    public static void main(String[] args) {
        new QQView().mainMenu();
        System.out.println("退出客户端。。。");
    }

    //显示主菜单
    public void mainMenu() {

        while (loop) {
            System.out.println("==========欢迎登录网络通信系统===========");
            System.out.println("\t\t 1 登录系统");
            System.out.println("\t\t 9 退出系统");
            System.out.println("请输入你的选择:");
            key = Utility.readString(1);

            //根据用户的输入,来处理不同的逻辑
            switch (key) {
                case "1":
                    System.out.print("请输入用户名:");
                    String userId = Utility.readString(50);
                    System.out.print("请输入密  码:");
                    String passwd = Utility.readString(50);
                    // 到服务器验证该用户是否合法
                    if (userClientService.checkUser(userId, passwd)) {
                        System.out.println("==========欢迎(用户 " + userId + ") 登录成功 ===========");
                        //进入二级菜单
                        while (loop) {
                            System.out.println("\n==========网络通信系统二级菜单(用户" + userId + " )===========");
                            System.out.println("\t\t 1 显示在线用户列表");
                            System.out.println("\t\t 2 群发消息");
                            System.out.println("\t\t 3 私聊消息");
                            System.out.println("\t\t 4 发送文件");
                            System.out.println("\t\t 9 退出系统");
                            System.out.println("请输入你的选择:");
                            key = Utility.readString(1);
                            switch (key) {
                                case "1":
                                    userClientService.onlineFriendList();
                                    break;
                                case "2":
                                    System.out.println("请输入相对大家说的话:");
                                    String s = Utility.readString(50);
                                    //调用一个方法,把消息封装成message对象,发送给服务端
                                    messageClientService.sendMessageToAll(s,userId);
                                    break;
                                case "3":
                                    System.out.println("请输入想聊天的用户号(在线): ");
                                    String getterId = Utility.readString(50);
                                    System.out.println("请输入想说的话: ");
                                    String content = Utility.readString(50);
                      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值