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聊天源代码相关推荐

  1. java仿qq思路_java仿QQ聊天软件OIM艰辛之路(开源项目)

    既然QQ能仿ICQ, 咱java也来个仿QQ. 在我刚学完java后,就想做点什么项目锻炼下自己的技能.凑巧的是,我一个同样学java的朋友在做一个仿qq的项目,不过他做的实在太丑了. 然后他想让我也 ...

  2. linux(ubuntu)下基于java的在线音乐仿qq播放器,

    linux下基于java的在线音乐仿qq播放器,界面挺漂亮,界面全都是本人自己用java来画的,主要是我自己喜欢用ubuntu,但是由于没有人去做它的播放器,就自己来了,可以在线,有专辑图片,播放列表 ...

  3. 复习Java第二个项目仿QQ聊天系统 03(两种通信类、登录以及注册功能完善) Java面试题并发编程相关知识生活【记录一个咸鱼大学生三个月的奋进生活】025

    记录一个咸鱼大学生三个月的奋进生活025 复习Java(仿QQ聊天系统03两种通信类.登录以及注册功能完善) TcpSocket类(与服务器进行通信) Server类(服务器类) TcpMessage ...

  4. Android仿QQ ios dialog,仿QQ退出向上菜单

    Android仿QQ ios dialog,仿QQ退出向上菜单 EasyDialog两种模式 仿QQ退出向上菜单,自定义向上菜单              github地址:https://githu ...

  5. java如何开发游戏大厅_java仿qq游戏大厅的设计与实现

    摘要:由于生活节奏的越来越快,人们越来越少的外出游玩.现在的人们为了生活,为了工作,为了家庭无时无刻不在紧张的环境中度过.而一些简单的小游戏则成为了人们放松的主要方式,本文用java语言开发了客户端/ ...

  6. 【Java课程设计】仿QQ多人聊天室(基于TCP协议与JavaSwing)附下载

    仿QQ多人聊天室 下载地址:链接:https://pan.baidu.com/s/1dLFjSxwTA4gL5lI0B4UGuQ  提取码:2qs0 有两个项目,分别是服务器chatterServer ...

  7. java 仿qq空间_仿QQ空间和微信朋友圈,高解耦高复用高灵活

    先看看效果: 用极少的代码实现了 动态详情 及 二级评论 的 数据获取与处理 和 UI显示与交互,并且高解耦.高复用.高灵活. 动态列表界面MomentListFragment支持 下拉刷新与上拉加载 ...

  8. 复习Java第二个项目仿QQ聊天系统 01(界面部分) Java面试题Redis的过期策略和内存淘汰策略生活【记录一个咸鱼大学生三个月的奋进生活】023

    记录一个咸鱼大学生三个月的奋进生活023 复习Java(仿QQ聊天系统01界面部分) 设置背景(ImgPanel)类 登录界面(LoginFrame)类 注册界面(RegisterFrame)类 好友 ...

  9. java发送qq邮箱_Java 发送QQ邮箱邮件

    如果需要提供用户名和密码给e-mail服务器来达到用户认证的目的,你可以通过如下设置来完成: props.put("mail.smtp.auth", "true" ...

最新文章

  1. sshd_config中文手册2
  2. 图.exe 已触发了一个断点。 出现了_学术简报︱基于保护综合重要度的最小断点集优选方法...
  3. pls-00302: 必须声明 组件_vue学习手册-单文件组件使用
  4. 【javascript】js实现复制、粘贴
  5. django settings 定义的变量不存在_Django基础框架搭建
  6. Kubernetes学习总结(15)—— Kubernetes 实战之部署 Mysql 集群
  7. 计算机应用教程卢湘鸿,计算机应用教程
  8. 南邮CTF逆向题第三道Py交易解题思路
  9. 使用IPMi获取服务器的硬件信息,如风扇转速、cpu等
  10. 淡季累库,黑色短期高位震荡看待(20210104).PDF
  11. 企业跨境电商平台服务解决方案,跨境电子商务贸易业务框架搭建运维
  12. Android客户端与服务器端socket通讯
  13. gensim Word2Vec 训练和使用
  14. LinkedIn领英账号达到一周添加好友邀请上限后怎么办?学会这四式三招,你也能解决LinkedIn领英账号添加好友的每周数量限制...
  15. mysql 突然报错 1878 Temporary file write failure
  16. CSS3实现垂直居中的八种方式
  17. 闲鱼基于 Flutter 的移动端跨平台应用实践
  18. qt之CheckBox选中与未选中的使用
  19. 特征提取算法(1)——纹理特征提取算法LBP
  20. 龙狼三国神龙守护者刷新工具

热门文章

  1. Fedora31升级Fedora32命令行模式操作过程
  2. python 新年_新年快乐! python实现绚烂的烟花绽放效果
  3. OPPOR9SK_官方线刷包_救砖包_解账户锁
  4. Vue3.0 10分钟上手体验-Vite
  5. vivoX30是android5的吗,vivo X30配置怎么样 vivo X30手机配置及发售时间介绍
  6. [从零学习汇编语言] - 计算机中的硬件与软件
  7. IEEE 754浮点数简介与C代码实现
  8. SSL 2289——庆功会
  9. 安卓开发裕语言程序---调用qq收藏作为远程更新实例
  10. 专访币印潘志彪:一直想把算力控制权交还矿工