【基于Java和Socket等技术的聊天室系统的设计与实现-----这或许就是QQ的原型之一吧!(效果+源码+论文

最后

看完美团、字节、腾讯这三家的面试问题,是不是感觉问的特别多,可能咱们又得开启面试造火箭、工作拧螺丝的模式去准备下一次的面试了。

开篇有提及我可是足足背下了1000道题目,多少还是有点用的呢,我看了下,上面这些问题大部分都能从我背的题里找到的,所以今天给大家分享一下互联网工程师必备的面试1000题

注意不论是我说的互联网面试1000题,还是后面提及的算法与数据结构、设计模式以及更多的Java学习笔记等,皆可分享给各位朋友

最新“美团+字节+腾讯”一二三面问题,挑战一下你能走到哪一面?

互联网工程师必备的面试1000题

而且从上面三家来看,算法与数据结构是必备不可少的呀,因此我建议大家可以去刷刷这本左程云大佬著作的《程序员代码面试指南 IT名企算法与数据结构题目最优解》,里面近200道真实出现过的经典代码面试题

最新“美团+字节+腾讯”一二三面问题,挑战一下你能走到哪一面?

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

用户这一端,我们 以 小红 的窗口为例展示:

可以看到“系统消息”,说明这个功能也已经实现。

在这里插入图片描述

用户退出之后,服务器端显示:

在这里插入图片描述

同时,清屏、保存、退出等基础功能也已经实现,这里不再展示了哈~ ~

项目的界面展示到此结束,不再赘述了。

(二)代码示例


Login.java

import javax.swing.*;

import java.awt.*;

import java.awt.event.*;

import java.net.*;

import java.io.*;

/**

  • 聊天系统登录程序

*/

public class Login extends JFrame implements ActionListener {

private static final long serialVersionUID = -8965773902056088264L;

private JPanel pnlLogin;

private JButton btnLogin, btnRegister, btnExit;

private JLabel lblServer, lblUserName, lblPassword, lblLogo;

private JTextField txtUserName, txtServer;

private JPasswordField pwdPassword;

private String strServerIp;

// 用于将窗口定位

private Dimension scrnsize;

private Toolkit toolkit = Toolkit.getDefaultToolkit();

/**

  • 构造登陆窗体

*/

public Login() {

super(“登录聊天室”);

pnlLogin = new JPanel();

this.getContentPane().add(pnlLogin);

lblServer = new JLabel(“服务器:”);

lblUserName = new JLabel(“用户名:”);

lblPassword = new JLabel(“口 令:”);

txtServer = new JTextField(20);

txtServer.setText(“127.0.0.1”);

txtUserName = new JTextField(20);

pwdPassword = new JPasswordField(20);

btnLogin = new JButton(“登录”);

btnLogin.setToolTipText(“登录到服务器”);

btnLogin.setMnemonic(‘L’);

btnRegister = new JButton(“注册”);

btnRegister.setToolTipText(“注册新用户”);

btnRegister.setMnemonic(‘R’);

btnExit = new JButton(“退出”);

btnExit.setToolTipText(“退出系统”);

btnExit.setMnemonic(‘X’);

/***********************************************************************

  • 该布局采用手动布局 setBounds设置组件位置 * setFont设置字体、字型、字号 * setForeground设置文字的颜色 *

  • setBackground设置背景色 * setOpaque将背景设置为透明

*/

pnlLogin.setLayout(null); // 组件用手动布局

pnlLogin.setBackground(new Color(52, 130, 203));

lblServer.setBounds(50, 100, 100, 30);

txtServer.setBounds(150, 100, 120, 25);

lblUserName.setBounds(50, 130, 100, 30);

txtUserName.setBounds(150, 130, 120, 25);

lblPassword.setBounds(50, 160, 100, 30);

pwdPassword.setBounds(150, 160, 120, 25);

btnLogin.setBounds(50, 200, 80, 25);

btnRegister.setBounds(130, 200, 80, 25);

btnExit.setBounds(210, 200, 80, 25);

Font fontstr = new Font(“宋体”, Font.PLAIN, 12);

lblServer.setFont(fontstr);

txtServer.setFont(fontstr);

lblUserName.setFont(fontstr);

txtUserName.setFont(fontstr);

lblPassword.setFont(fontstr);

pwdPassword.setFont(fontstr);

btnLogin.setFont(fontstr);

btnRegister.setFont(fontstr);

btnExit.setFont(fontstr);

lblUserName.setForeground(Color.BLACK);

lblPassword.setForeground(Color.BLACK);

btnLogin.setBackground(Color.ORANGE);

btnRegister.setBackground(Color.ORANGE);

btnExit.setBackground(Color.ORANGE);

pnlLogin.add(lblServer);

pnlLogin.add(txtServer);

pnlLogin.add(lblUserName);

pnlLogin.add(txtUserName);

pnlLogin.add(lblPassword);

pnlLogin.add(pwdPassword);

pnlLogin.add(btnLogin);

pnlLogin.add(btnRegister);

pnlLogin.add(btnExit);

// 设置背景图片

Icon logo1 = new ImageIcon(“images\loginlogo.jpg”);

lblLogo = new JLabel(logo1);

lblLogo.setBounds(0, 0, 340, 66);

pnlLogin.add(lblLogo);

// 设置登录窗口

setResizable(false);

setSize(340, 260);

setVisible(true);

scrnsize = toolkit.getScreenSize();

setLocation(scrnsize.width / 2 - this.getWidth() / 2, scrnsize.height

/ 2 - this.getHeight() / 2);

Image img = toolkit.getImage(“images\appico.jpg”);

setIconImage(img);

// 三个按钮注册监听

btnLogin.addActionListener(this);

btnRegister.addActionListener(this);

btnExit.addActionListener(this);

} // 构造方法结束

/**

  • 按钮监听响应

*/

@SuppressWarnings({ “deprecation”, “static-access” })

public void actionPerformed(ActionEvent ae) {

Object source = ae.getSource();

if (source.equals(btnLogin)) {

// 判断用户名和密码是否为空

if (txtUserName.getText().equals(“”)

|| pwdPassword.getText().equals(“”)) {

JOptionPane op1 = new JOptionPane();

op1.showMessageDialog(null, “用户名或密码不能为空”);

} else {

strServerIp = txtServer.getText();

login();

}

}

if (source.equals(btnRegister)) {

strServerIp = txtServer.getText();

this.dispose();

new Register(strServerIp);

}

if (source == btnExit) {

System.exit(0);

}

} // actionPerformed()结束

/**

  • 登录事件响应方法

*/

@SuppressWarnings(“deprecation”)

public void login() {

// 接受客户的详细资料

Customer data = new Customer();

data.custName = txtUserName.getText();

data.custPassword = pwdPassword.getText();

try {

// 连接到服务器

Socket toServer;

toServer = new Socket(strServerIp, 1001);

ObjectOutputStream streamToServer = new ObjectOutputStream(toServer

.getOutputStream());

// 写客户详细资料到服务器socket

streamToServer.writeObject((Customer) data);

// 读来自服务器socket的登录状态

BufferedReader fromServer = new BufferedReader(

new InputStreamReader(toServer.getInputStream()));

String status = fromServer.readLine();

写在最后

还有一份JAVA核心知识点整理(PDF):JVM,JAVA集合,JAVA多线程并发,JAVA基础,Spring原理,微服务,Netty与RPC,网络,日志,Zookeeper,Kafka,RabbitMQ,Hbase,MongoDB,Cassandra,设计模式,负载均衡,数据库,一致性哈希,JAVA算法,数据结构,加密算法,分布式缓存,Hadoop,Spark,Storm,YARN,机器学习,云计算…

image

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

ngoDB,Cassandra,设计模式,负载均衡,数据库,一致性哈希,JAVA算法,数据结构,加密算法,分布式缓存**,Hadoop,Spark,Storm,YARN,机器学习,云计算…

[外链图片转存中…(img-8uhmF5jZ-1715483379931)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值