java实现聊天功能室功能难不难?


泻药
过来人的经验告诉你
别选语言,选项目!!!
别选语言,选项目!!!
别选语言,选项目!!!
重要的事情说三遍
项目才是最终决定你要去哪个公司或者选哪个研究方向的最终因素!!!
先说个人
大学期间
大一的时候学c语言,天天面对命令行的黑框框,欲哭无泪,啥也不学不会,考试直接背题、背代码过的,并准备大二转金融
大二的时候开始用java,跟着网上的视频,写了几个QQ界面和坦克大战的游戏才开始对编程感兴趣
然后用c#捉急的写了几个桌面的管理系统,然后感觉上道了
开始疯狂的写Android程序,写了两个程序拿了两个项目奖,一个校级,一个国家级的
后面跟着课程设计写了个微博、c语言的游戏
大三的时候参加全国的一个综合编程比赛
客户端用win32写,服务端java写jsp、ssh,算法c\c++实现客户端的、JAVA实现服务端的
最后因此保研
研究生期间
写arm汇编搞编译器、oc写iOS应用
写JAVA、scala搞Hadoop、Sparks的内核代码
写Python搞数据分析、机器学习、深度学习、docker内核
当然shell写linux脚本、lua写测试脚本
go语言搞ceph文件系统
C++刷leetcode
最后庆幸没有把自己局限在哪种语言上
号外号外:
写了一点我读研后对这个行业的方向选择的粗浅认知,大家可以随便看看,可以了解下将来可能选择的方向
另外,分享一下我之前整理的Python的整套的学习材料,后面我会更新更多的资源,包括我在大学期间做的一些小项目
分割线++++++++++++++++++++++++++++上面是原答案
写的答案难得有人看
我就针对一些问题统一回复一下
评论区答疑
1.关于先打基础还是先选项目
基础最好是有的,但是没有基础的话,那也建议先从兴趣开始
就是怎么对编程感兴趣的问题
我就是先学c语言,最后差点没转专业,因为语法实在是难,而且不容易做出可视化的产品来提高自己的成就感
我大二的时候学JAVA,模仿着做做QQ、做做游戏,做做网站,才感觉编程竟然可以做这些有意思的东西
如果是C做这些,虽然可以做,但是教学资源少,语法难,容易从入门到放弃
所以我还是建议大家选感兴趣的项目入手,不然容易转专业,哈哈~
2.我不是大牛
我是从小白成长过来的,到现在都不是大牛,身边的人,几乎都比我厉害
但是按照我个人的经验来走的话,比较不容易放弃编程吧
3.怎么找到一份好工作
1)有项目经验:在大学里面的话就是多参加比赛,获奖
2)算法过关:没有参加过算法比赛的同学,刷刷leetcode
3)基础知识:计算机网络、操作系统等
其实就上面的三点,基础要稳,算法和项目经验要出色的
最近弄了个公众号玩儿,『韭菜的野蛮生长』,机器人会自动回复,我会定期看留言,欢迎大家找我玩儿,哈哈
编辑于 2019-05-17 08:42
题主说想成为非常厉害的人,那么坑定是 Scheme(SICP 前三章) 然后 Haskell (Learn Haskell for a great good + conceptual mathematics + 我也没什么 dependent type 书推荐)基本上就入门编程了。入门编程没有更快的方式了。
编辑器可以选择 neovim+spacevim 或者 emacs+ spacemacs 都行,只要不依赖 remote plugin 或者依赖 orgmode 基本上两个差别不太大。(唯一一点是如果是 mac osx 下面的 homebrew,用 emacs-plus 而不是 emacs)
操作系统大概什么都行,只要不是 Windows。不是 Windows 不好,而是总是碰到「你问我支不支持 Windows,我肯定没法支持 Windows 了。我没有 Windows 又没人提 pr 你要我怎么支持」
OOP 是很简单的东西;只有 phper 没办法随手实现 class 才会吹这个
发布于 2018-11-01 07:29}

首页 > 生活百科 > it技术 > >
2022-09-02毕业设计课程设计socket【小小的项目java(实战+案例)】
目录(一)效果截图展示
(二)代码示例
(三)获取
(一)效果截图展示 项目很基础,展示一些实现的基本界面,如下:【【小小的项目|【基于Java和Socket等技术的聊天室系统的设计与实现-----这或许就是QQ的原型之一吧!(效果+源码+论文+视频介绍等获取~!)】】启动服务器:
这个界面用来记录系统当前有多少用户登录,以及用户的登录状态,用户之间的交互状态等。同时也可以保存日志。
文章图片
启动用户登录界面:文章图片
我们先来注册一下几个用户:(点击上图中的 注册 即可)这是 注册 的初始化界面:文章图片
注册用户:文章图片
这里我们注册一个用户,用户名:小红,口令:123。其中,基本的出错处理都已经实现,比如 注册的用户已经存在,则会提示:文章图片
诸如此,两次密码输入不一致、年龄输入不合法、电子邮箱格式不合法等都会提示消息,告知用户注册失败,这里我们不再展示。我们再注册两个用户,便于演示系统功能:文章图片
文章图片
另一方面,在注册用户成功的同时,来看一下服务器端的显示:可以看到,很清晰的记录了用户的注册。文章图片
下面,我们来分别登录刚刚注册过的三个用户:这是三个用户登录之后,用户 小红 这一端的窗口显示:(当小红首先登录之后,当然在线人数会是 显示 1,随着用户分别登录或退出,在线人数也会依次增加或减少,这是基础功能)文章图片
服务器端显示:也是清楚的记录了用户登录的时间:文章图片
下面再来测试 聊天 这一核心功能:首先是 群聊,顾名思义,就是用户的发言,所有用户都等看到:小红说:大家好!我是小红~文章图片
上面是小红的发言窗口,下面我们以用户 小明的 窗口再来看看:(小刚的窗口也是类似,这里不再展示)可以看出来,群聊这一功能,实现成功。文章图片
下面是私聊这一功能:小明对小红 私聊说:可以交个朋友吗?文章图片
小红这端显示:文章图片
那么此时,我们再来看一下 用户 小刚 这里的显示:文章图片
可以看出来,私聊这个功能,也已经实现。这时,我们来看一下服务器端的显示:文章图片
我们设置的用户的群聊信息在服务器端可以展示,私聊需要额外设计展示方式。同时,服务器端可以向所有用户发送信息:服务端端(即系统)说:大家好!我是服务器。文章图片
用户这一端,我们 以 小红 的窗口为例展示:可以看到“系统消息”,说明这个功能也已经实现。文章图片
用户退出之后,服务器端显示:文章图片
同时,清屏、保存、退出等基础功能也已经实现,这里不再展示了哈~ ~项目的界面展示到此结束,不再赘述了。(二)代码示例
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 = https://www.it610.com/article/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(); if (status.equals("登录成功")) { new
ChatRoom((String) data.custName, strServerIp); this.dispose(); // 关闭流对象 streamToServer.close(); fromServer.close(); toServer.close(); } else { JOptionPane.showMessageDialog(null,
status); // 关闭流对象 streamToServer.close(); fromServer.close(); toServer.close(); } } catch (ConnectException e1) { JOptionPane.showMessageDialog(null, "未能建立到指定服务器的连接!"); } catch
(InvalidClassException e2) { JOptionPane.showMessageDialog(null, "类错误!"); } catch (NotSerializableException e3) { JOptionPane.showMessageDialog(null, "对象未序列化!"); } catch (IOException
e4) { JOptionPane.showMessageDialog(null, "不能写入到指定服务器!"); } } // login()结束 /** * 启动登陆窗体 * @param args */ public static void main(String args[]) { new Login(); } } // Class
Login结束
由于代码行过长,仅展示这一个文件。(三)获取
聊天室系统包含项目所有 源代码以及 论文资料、 视频讲解说明、 项目部署过程、 项目截图、 项目学习路线、已经注册过的用户信息记录等等,需要该项目的朋友请私聊我哈!有空回复
~
上一篇:SSM框架解析|【SSM框架】Mybatis详解10(源码自取)之入参、返回值map
下一篇:Adobe国际认证|Adobe认证专访|003期(跨界摄影师,我眼中的世界与别人不一样)
}

我要回帖

更多关于 java实现聊天功能 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信