即时通信软件为我们提供了诸多的方便,使我们逐步享受信息时代的便捷。大家最熟悉的即时通信软件就是QQ了,因为它几乎已经融入了我们每个人的日常生活。没有了QQ,没有了手机,我们或许真的“活不了了”。由此可见,生活在信息时代的人们对即时通信、聊天软件有巨大的需求,这样的软件也将为我们节省大量的时间和金钱,或许还能成为我们发家致富的工具,比如:产品的推介、售后服务及技术交流等。
然而,既然已经有了QQ如此强大的即时通信软件,我们再去做这样的软件还有什么竞争力吗?QQ已经深入人心,要想再去做可能没有任何竞争力。此时,我们可以换一个角度,调整用户对象。如今,企业内部信息在这个信息时代就是金钱,尤其是一些大企业的内部信息,如果这些信息泄露,可能会造成巨大的经济损失,甚至将导致企业破产。但是,为了便捷企业员工之间的交流,做这样的一个企业内部即时通信、聊天软件还是很有市场的。我们的目标就是做的像QQ,但面向企业内部使用。
企业内部为了方便员工之间便捷的交流,需要开发一款适合企业内部员工进行即时通信的软件,这样的软件既满足了企业内部员工之间便捷的交流,同时,也防止企业内部信息的外流,开发这样一块面向企业内部的即时通信软件,对于企业来说获益良多。
在开发这款软件时,为了使习惯了使用QQ的用户,更加方便的使用本软件,我们将很大程度上,模仿QQ的用户界面设计,以适应用户的使用习惯,方便用户使用。
java学习交流,资源分享可关注小编头条号,点击微头条或者私信发 java获取!欢迎私信小编。
【私信方法】文章上方处点击“作者头像”,进入作者首页,在作者主页上方点击“ 关注” 旁边的 “发私信” 即可。
做了一个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学习交流,资源分享可关注小编头条号,点击微头条或者私信发 java获取!欢迎私信小编。
【私信方法】文章上方处点击“作者头像”,进入作者首页,在作者主页上方点击“ 关注” 旁边的 “发私信” 即可。
【微信 、编程语言、java、互联网、程序员】
领取专属 10元无门槛券
私享最新 技术干货