2018,java大佬带你开发,仿QQ企业内部通讯软件

即时通信软件为我们提供了诸多的方便,使我们逐步享受信息时代的便捷。大家最熟悉的即时通信软件就是QQ了,因为它几乎已经融入了我们每个人的日常生活。没有了QQ,没有了手机,我们或许真的“活不了了”。由此可见,生活在信息时代的人们对即时通信、聊天软件有巨大的需求,这样的软件也将为我们节省大量的时间和金钱,或许还能成为我们发家致富的工具,比如:产品的推介、售后服务及技术交流等。

然而,既然已经有了QQ如此强大的即时通信软件,我们再去做这样的软件还有什么竞争力吗?QQ已经深入人心,要想再去做可能没有任何竞争力。此时,我们可以换一个角度,调整用户对象。如今,企业内部信息在这个信息时代就是金钱,尤其是一些大企业的内部信息,如果这些信息泄露,可能会造成巨大的经济损失,甚至将导致企业破产。但是,为了便捷企业员工之间的交流,做这样的一个企业内部即时通信、聊天软件还是很有市场的。我们的目标就是做的像QQ,但面向企业内部使用。

企业内部为了方便员工之间便捷的交流,需要开发一款适合企业内部员工进行即时通信的软件,这样的软件既满足了企业内部员工之间便捷的交流,同时,也防止企业内部信息的外流,开发这样一块面向企业内部的即时通信软件,对于企业来说获益良多。

在开发这款软件时,为了使习惯了使用QQ的用户,更加方便的使用本软件,我们将很大程度上,模仿QQ的用户界面设计,以适应用户的使用习惯,方便用户使用。

在这里我有一个专门为java小白和大神们学习交流准备的一个裙:

Java:四7.五8.二0.零2.五(邀请码:寂静)

做了一个java版的仿QQ聊天软件。首先要了解Socket通信的结构和可能会使用到的核心框架:

首先通信有两方才能进行,最基本的两方为服务器和客户端。服务器主要需要创建一个ServerSocket来与客户端达成连接。之后执行accept语句来等待客户端的加入。此方法在连接传入之前一直阻塞,即不会执行之后的语句。

客户端建立一个Socket并且传入host地址和port号参数来和服务器匹配。API解释为创建一个流套接字并将其连接到指定 IP 地址的指定端口号。此时,服务器和客户端就已经连接完成了,可以执行服务器accept语句之后的内容。

通信的双方想要进行信息的交换就会有信息的输入和输出,此时就要利用Java中的IO流,即InputStream和OutputStream。比如输入流InputStream的分类就如下。

我先要实现的仿QQ软件可能以后会不仅有文件的传输还会包括图片、文件等。应用DataInputStream就需要自己写相关的协议,所以就偷懒使用了ObjectInputStream,即对象传输流。

客户端使用InputStream将用户输入的信息传输到程序内,通过Socket传输到服务器用OutputStream将信息读出来,再用InputStream读入程序内,用Socket传给另外一个客户端,该客户端的OutputStream再将内容读出来打印到界面上,这就是信息传输的基本流程。

现在开始实现功能。首先要制作一个QQ的登录界面。

创建好一个Login登录界面类,主要用来实现登录界面的设计和登录信息的录入和传出。

因为这个类有界面,所以该类继承JFrame。

publicclass Login extends JFrame

效果如图,可以发现该界面分为三个部分,最上面的图片,中间的输入框、文字、按钮、复选框、标签。最下面的三个按钮。

首先制作上面,即Java中布局的北部。

// 定义北部组件

JLabel jbl1;

定义一个JLabel即一个用于短文本字符串或图像或二者的显示区。因为界面在运行程序时就形成,并且之后没有变化,所以可以放在这个Login类的构造函数里编写。

public Login() {

// 实现北部的组件

jbl1 = new JLabel(new ImageIcon("src/abc.PNG"));// 可以放图片

使用ImageIcon类来将一个图片文件引进来,放在定义好的jbl1中。至此北部组件制作完毕,接下来是中部。

// 定义中部组件

// 中部有2个JPanel,由一个选项卡管理

JTabbedPane jtp;

JPanel jp2, jp3;

JLabel jp2_jbl1, jp2_jbl2, jp2_jbl3, jp2_jbl4, jp3_jbl1, jp3_jbl2,

jp3_jbl3, jp3_jbl4;

JButton jp2_jb1, jp3_jb1;

JTextField jp2_jtf, jp3_jtf;

JPasswordField jp2_jpf, jp3_jpf;

JCheckBox jp2_jcb1, jp2_jcb2, jp3_jcb1, jp3_jcb2;

因为有一个选项卡JTabbedPane,所以要设计两个JPanel放到选项卡的两个面里。

如图发现一个JPanel就需要QQ号码、QQ密码、忘记密码、账号保护四个JLabel来存放文字,需要JTextField和JPasswordField来输入QQ号和密码,需要一个JButton用来显示清除号码按钮,需要两个JCheckBox来显示记住密码和隐身登录。全部在程序最开始一式两份一次性定义好。

// 中部

jp2 = new JPanel(new GridLayout(3, 3));//设置好一个3X3的布局

jp2_jbl1 = new JLabel("QQ号码", JLabel.CENTER);//第一个参数为显示的文字,第二个为居中

jp2_jbl2 = new JLabel("QQ密码", JLabel.CENTER);

jp2_jbl3 = new JLabel("忘记密码", JLabel.CENTER);

jp2_jbl3.setForeground(Color.blue);//忘记密码为蓝色

jp2_jbl4 = new JLabel("账号保护", JLabel.CENTER);

jp2_jb1 = new JButton("清除号码");

jp2_jtf = new JTextField();

jp2_jpf = new JPasswordField();

jp2_jcb1 = new JCheckBox("记住密码");

jp2_jcb2 = new JCheckBox("隐身登录");

jp3 = new JPanel(new GridLayout(3, 3));

jp3_jbl1 = new JLabel("手机号码", JLabel.CENTER);

jp3_jbl2 = new JLabel("QQ密码", JLabel.CENTER);

jp3_jbl3 = new JLabel("忘记密码", JLabel.CENTER);

jp3_jbl3.setForeground(Color.blue);

jp3_jbl4 = new JLabel("账号保护", JLabel.CENTER);

jp3_jb1 = new JButton("清除号码");

jp3_jtf = new JTextField();

jp3_jpf = new JPasswordField();

jp3_jcb1 = new JCheckBox("记住密码");

jp3_jcb2 = new JCheckBox("隐身登录");

// 把控件按照顺序加入到jp2中

jp2.add(jp2_jbl1);

jp2.add(jp2_jtf);

jp2.add(jp2_jb1);

jp2.add(jp2_jbl2);

jp2.add(jp2_jpf);

jp2.add(jp2_jbl3);

jp2.add(jp2_jcb1);

jp2.add(jp2_jcb2);

jp2.add(jp2_jbl4);

// 把控件按照顺序加入到jp3中

jp3.add(jp3_jbl1);

jp3.add(jp3_jtf);

jp3.add(jp3_jb1);

jp3.add(jp3_jbl2);

jp3.add(jp3_jpf);

jp3.add(jp3_jbl3);

jp3.add(jp3_jcb1);

jp3.add(jp3_jcb2);

jp3.add(jp3_jbl4);

// 创建选项卡窗口,把两个JPanel放进去,并且分好名字

jtp = new JTabbedPane();

jtp.add("QQ号码", jp2);

jtp.add("手机号码", jp3);

南部组件为三个按钮,全部定义好。并且在构造函数里实现好

// 定义南部组件

JPanel jp1;

JButton jp1_jb1, jp1_jb2, jp1_jb3;

// 南部

jp1 = new JPanel();

jp1_jb1 = new JButton("登录");

jp1_jb1.addActionListener(this);

jp1_jb2 = new JButton("取消");

jp1_jb3 = new JButton("帮助");

然后把北、中、南三个部分的组件全部插入到JFrame中,并且给JFrame设置好大小,关闭的方式,最后设置JFrame可见。

// 把JP1放到南部

this.add(jp1, "South");

this.add(jtp, "Center");

this.add(jbl1, "North");

this.setSize(350, 240);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setVisible(true);

至此界面部分就已经全部设计完成,下面开始实现事件的监听。目前就实现登录,点击登陆后,会读取号码和密码框里的信息然后传给后台进行验证,如果成功,登录界面消失,出现好友列表,如果失败,提示账号或者密码错误。

未完待续,关注小编。持续更新

【微信 、编程语言、java、互联网、程序员】

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180210A0BQAE00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券