java qq 源代码_Java 仿QQ聊天源代码
Java 仿QQ聊天源代码介绍,本源码实现了群聊和私聊。
截图如下:
代码文件清单如下:
Client.java、ClientThread.java、Server.java、ServerThread.java共四个java文件
因为本人的能力有限,如果你觉得那里有不合理的地方可以给我留言或者q我
下面是Client.java代码内容:
package cc;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Inet4Address;
import java.net.Socket;
import java.net.UnknownHostException;
import javax.swing.JButton;
import javax.swing.JColorChooser;
import javax.swing.JComboBox;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.UIManager;
public class Client extends JFrame implements ActionListener {
private JPanel jp;
private JButton connect, send, exit;
private JTextArea ja;
private Socket socket = null;
public JTextArea getJa() {
return ja;
}
public void setJa(JTextArea ja) {
this.ja = ja;
}
private JTextField juser, jmess;
private JScrollPane jsp;
private JComboBox jcb;
public JComboBox getJcb() {
return jcb;
}
public void setJcb(JComboBox jcb) {
this.jcb = jcb;
}
public Client() {
try {
UIManager
.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
into();
this.setBounds(100, 200, 390, 350);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public void into() {
jp = new JPanel();
jp.setLayout(null);
this.add(jp);
juser = new JTextField();
juser.setBounds(60, 15, 150, 20);
jp.add(juser);
connect = new JButton("Connect");
connect.addActionListener(this);
connect.setBounds(220, 15, 80, 20);
jp.add(connect);
ja = new JTextArea();
ja.setLineWrap(true);
ja.setSize(350, 220);
jsp = new JScrollPane(ja, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
jsp.setBounds(20, 40, 340, 220);
jp.add(jsp);
// 添加用于发送信息的文本框
jmess = new JTextField();
jmess.setBounds(15, 275, 130, 20);
jp.add(jmess);
// 添加用户名称的下拉菜单
jcb = new JComboBox();
jcb.addItem("USERS");
jcb.setBounds(152, 275, 80, 20);
jp.add(jcb);
// 添加发送按钮
send = new JButton("发送");
send.setBounds(235, 273, 60, 25);
send.addActionListener(this);
send.setEnabled(false);
jp.add(send);
// 添加推出按钮
exit = new JButton("退出");
exit.setBounds(300, 273, 60, 25);
exit.addActionListener(this);
exit.setEnabled(false);
jp.add(exit);
}
public static void main(String[] args) {
new Client().setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
String name = e.getActionCommand();
if (name.equals("Connect")) {
if (juser.getText().equals("")) {
JOptionPane jop = new JOptionPane();
jop.showMessageDialog(this, "用户名不能为空!!");
System.out.println("用户名为空!!");
} else {
try {
// 获取ip和用户名格式 USERS:iP:user
socket = new Socket("127.0.0.1", 8090);
// scoket=new Socket(loclhost, 8090)
String ip = Inet4Address.getLocalHost().getHostAddress();
StringBuffer sr = new StringBuffer("USERS:");
sr.append(ip).append(":").append(juser.getText().trim());
OutputStream os = socket.getOutputStream();
PrintWriter pw = new PrintWriter(os);
pw.println(sr.toString());
pw.flush();
ClientThread ct = new ClientThread(this, socket);
ct.start();
send.setEnabled(true);
exit.setEnabled(true);
connect.setEnabled(false);
} catch (UnknownHostException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
if (name.equals("发送")) {
System.out.println(socket.toString());
// 群聊
StringBuffer mess = new StringBuffer("MESS");
System.out.println("以下是信息!");
System.out.println(jcb.getSelectedItem().toString());
if (jcb.getSelectedItem().toString().equals("USER")) {
mess.append(":").append("USERS").append(":")
.append(juser.getText().trim()).append(":")
.append(jmess.getText().trim());
try {
PrintWriter pw = new PrintWriter(socket.getOutputStream());
System.out.println(mess.toString());
pw.println(mess.toString());
pw.flush();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
jmess.setText("");
} else {
mess.append(":").append(jcb.getSelectedItem().toString()).append(":")
.append(juser.getText().trim()).append(":")
.append(jmess.getText().trim());
try {
PrintWriter pw = new PrintWriter(socket.getOutputStream());
System.out.println("我是私聊"+mess.toString());
pw.println(mess.toString());
pw.flush();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
jmess.setText("");
}
}
}
}
java qq 源代码_Java 仿QQ聊天源代码相关推荐
- java仿qq思路_java仿QQ聊天软件OIM艰辛之路(开源项目)
既然QQ能仿ICQ, 咱java也来个仿QQ. 在我刚学完java后,就想做点什么项目锻炼下自己的技能.凑巧的是,我一个同样学java的朋友在做一个仿qq的项目,不过他做的实在太丑了. 然后他想让我也 ...
- linux(ubuntu)下基于java的在线音乐仿qq播放器,
linux下基于java的在线音乐仿qq播放器,界面挺漂亮,界面全都是本人自己用java来画的,主要是我自己喜欢用ubuntu,但是由于没有人去做它的播放器,就自己来了,可以在线,有专辑图片,播放列表 ...
- 复习Java第二个项目仿QQ聊天系统 03(两种通信类、登录以及注册功能完善) Java面试题并发编程相关知识生活【记录一个咸鱼大学生三个月的奋进生活】025
记录一个咸鱼大学生三个月的奋进生活025 复习Java(仿QQ聊天系统03两种通信类.登录以及注册功能完善) TcpSocket类(与服务器进行通信) Server类(服务器类) TcpMessage ...
- Android仿QQ ios dialog,仿QQ退出向上菜单
Android仿QQ ios dialog,仿QQ退出向上菜单 EasyDialog两种模式 仿QQ退出向上菜单,自定义向上菜单 github地址:https://githu ...
- java如何开发游戏大厅_java仿qq游戏大厅的设计与实现
摘要:由于生活节奏的越来越快,人们越来越少的外出游玩.现在的人们为了生活,为了工作,为了家庭无时无刻不在紧张的环境中度过.而一些简单的小游戏则成为了人们放松的主要方式,本文用java语言开发了客户端/ ...
- 【Java课程设计】仿QQ多人聊天室(基于TCP协议与JavaSwing)附下载
仿QQ多人聊天室 下载地址:链接:https://pan.baidu.com/s/1dLFjSxwTA4gL5lI0B4UGuQ 提取码:2qs0 有两个项目,分别是服务器chatterServer ...
- java 仿qq空间_仿QQ空间和微信朋友圈,高解耦高复用高灵活
先看看效果: 用极少的代码实现了 动态详情 及 二级评论 的 数据获取与处理 和 UI显示与交互,并且高解耦.高复用.高灵活. 动态列表界面MomentListFragment支持 下拉刷新与上拉加载 ...
- 复习Java第二个项目仿QQ聊天系统 01(界面部分) Java面试题Redis的过期策略和内存淘汰策略生活【记录一个咸鱼大学生三个月的奋进生活】023
记录一个咸鱼大学生三个月的奋进生活023 复习Java(仿QQ聊天系统01界面部分) 设置背景(ImgPanel)类 登录界面(LoginFrame)类 注册界面(RegisterFrame)类 好友 ...
- java发送qq邮箱_Java 发送QQ邮箱邮件
如果需要提供用户名和密码给e-mail服务器来达到用户认证的目的,你可以通过如下设置来完成: props.put("mail.smtp.auth", "true" ...
最新文章
- sshd_config中文手册2
- 图.exe 已触发了一个断点。 出现了_学术简报︱基于保护综合重要度的最小断点集优选方法...
- pls-00302: 必须声明 组件_vue学习手册-单文件组件使用
- 【javascript】js实现复制、粘贴
- django settings 定义的变量不存在_Django基础框架搭建
- Kubernetes学习总结(15)—— Kubernetes 实战之部署 Mysql 集群
- 计算机应用教程卢湘鸿,计算机应用教程
- 南邮CTF逆向题第三道Py交易解题思路
- 使用IPMi获取服务器的硬件信息,如风扇转速、cpu等
- 淡季累库,黑色短期高位震荡看待(20210104).PDF
- 企业跨境电商平台服务解决方案,跨境电子商务贸易业务框架搭建运维
- Android客户端与服务器端socket通讯
- gensim Word2Vec 训练和使用
- LinkedIn领英账号达到一周添加好友邀请上限后怎么办?学会这四式三招,你也能解决LinkedIn领英账号添加好友的每周数量限制...
- mysql 突然报错 1878 Temporary file write failure
- CSS3实现垂直居中的八种方式
- 闲鱼基于 Flutter 的移动端跨平台应用实践
- qt之CheckBox选中与未选中的使用
- 特征提取算法(1)——纹理特征提取算法LBP
- 龙狼三国神龙守护者刷新工具
热门文章
- Fedora31升级Fedora32命令行模式操作过程
- python 新年_新年快乐! python实现绚烂的烟花绽放效果
- OPPOR9SK_官方线刷包_救砖包_解账户锁
- Vue3.0 10分钟上手体验-Vite
- vivoX30是android5的吗,vivo X30配置怎么样 vivo X30手机配置及发售时间介绍
- [从零学习汇编语言] - 计算机中的硬件与软件
- IEEE 754浮点数简介与C代码实现
- SSL 2289——庆功会
- 安卓开发裕语言程序---调用qq收藏作为远程更新实例
- 专访币印潘志彪:一直想把算力控制权交还矿工