java版的QQ小程序

转载自:http://blog.csdn.net/lihongxun945/article/details/6114290

这是一个简单的java版的QQ小程序。

包括一个简单的服务器和一个简单的客户端。

运行时,先运行服务器,然后在运行客户端,就可以进行聊天了。

默认的配置是localhost,端口4545,更改ip就可以在两天电脑上进行聊天了。

目前不支持内网和外网之间的访问,也不支持多人聊天。

因为这只是一个简单的例子,感兴趣的同学可以通过改进,实现多人聊天和内外网之间的访问。

效果图:

下载地址:http://download.csdn.net/source/2958843

源代码:

QQServer.java

[java] view plaincopy

  1. //axun @copy right
  2. package axun.com;
  3. import java.io.BufferedReader;
  4. import java.io.DataInputStream;
  5. import java.io.DataOutputStream;
  6. import java.io.InputStream;
  7. import java.io.OutputStream;
  8. import java.net.ServerSocket;
  9. import java.net.Socket;
  10. import java.awt.*;
  11. import java.awt.event.*;
  12. import javax.swing.*;
  13. public class QQServer{
  14. private JFrame f=new JFrame("QQ服务器端");
  15. private JPanel pleft=new JPanel(new BorderLayout());
  16. private JPanel pright=new JPanel();
  17. private List list=new List();
  18. private TextArea t1=new TextArea();
  19. private TextArea t2=new TextArea();
  20. private Button b=new Button("发送");
  21. //一下是 网络通信用的变量
  22. DataOutputStream dos=null;
  23. BufferedReader br=null;
  24. DataInputStream dis=null;
  25. public QQServer(){
  26. f.setSize(400,300);
  27. f.setLayout(new BorderLayout());
  28. f.add(pleft,BorderLayout.WEST);
  29. f.add(pright,BorderLayout.CENTER);
  30. pleft.add(list);
  31. pright.setLayout(new GridLayout(3,1));
  32. pright.add(t1);
  33. pright.add(t2);
  34. pright.add(b);
  35. f.setVisible(true);
  36. f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  37. b.addActionListener(new bListener());
  38. }
  39. public void Addt1(String s){
  40. t1.append(s);
  41. }
  42. public void addList(String s){
  43. list.addItem(s);
  44. }
  45. public static void main(String[] args) throws Exception{
  46. QQServer server=new QQServer();
  47. InputStream in=null;
  48. OutputStream out=null;
  49. String string=null;
  50. ServerSocket ss=new ServerSocket(4545);
  51. Socket s=null;
  52. s=ss.accept();
  53. server.addList(s.toString());
  54. in=s.getInputStream();
  55. out=s.getOutputStream();
  56. server.dis=new DataInputStream(in);
  57. server.dos=new DataOutputStream(out);
  58. Listen1 l=new Listen1(server,server.dis);
  59. Thread t=new Thread(l);
  60. t.start();
  61. }
  62. class bListener implements ActionListener{
  63. public void actionPerformed(ActionEvent e) {
  64. try{
  65. dos.writeUTF(t2.getText());
  66. Addt1("发送:"+"/n");
  67. Addt1("    "+t2.getText()+"/n");
  68. t2.setText("");
  69. }catch(Exception ep){
  70. Addt1("消息发送失败!/n");
  71. }
  72. }
  73. }
  74. }
  75. class Listen1 implements Runnable{
  76. private QQServer server=null;
  77. private DataInputStream dis=null;
  78. private String s=null;
  79. Listen1(QQServer server,DataInputStream dis){
  80. this.server=server;
  81. this.dis=dis;
  82. }
  83. public void run() {
  84. // TODO Auto-generated method stub
  85. try{
  86. while(true){
  87. s=dis.readUTF();
  88. server.Addt1("收到:"+"/n");
  89. server.Addt1("    "+s+"/n");
  90. }
  91. }catch(Exception e){
  92. server.Addt1("Error!:"+s+"/n");
  93. }
  94. }
  95. }

QQClient.java

[java] view plaincopy

  1. //axun @copy right
  2. package axun.com;
  3. import java.io.BufferedReader;
  4. import java.io.DataInputStream;
  5. import java.io.DataOutputStream;
  6. import java.io.InputStream;
  7. import java.io.OutputStream;
  8. import java.net.Socket;
  9. import java.awt.*;
  10. import javax.swing.*;
  11. import java.awt.event.*;
  12. public class QQClient {
  13. private JFrame f=new JFrame("QQ客户端");
  14. private TextArea t1=new TextArea();
  15. private TextArea t2=new TextArea();
  16. private Button b=new Button("发送");
  17. //一下是 网络通信用的变量
  18. DataOutputStream dos=null;
  19. BufferedReader br=null;
  20. DataInputStream dis=null;
  21. public void Addt1(String s){
  22. t1.append(s);
  23. }
  24. public QQClient(){
  25. f.setSize(400,300);
  26. f.setLayout(new GridLayout(3,1));
  27. t1.setEditable(false);  //不可编辑
  28. f.add(t1);
  29. f.add(t2);
  30. f.add(b);
  31. f.setVisible(true);
  32. f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  33. b.addActionListener(new bListener());
  34. }
  35. public static void main(String[] args) throws Exception {
  36. QQClient client=new QQClient();
  37. InputStream in=null;
  38. OutputStream out=null;
  39. String string=null;
  40. Socket s=new Socket("localhost",4545);
  41. out=s.getOutputStream();
  42. in=s.getInputStream();
  43. client.dis=new DataInputStream(in);
  44. client.dos=new DataOutputStream(out);
  45. Listen2 l=new Listen2(client,client.dis);
  46. Thread t=new Thread(l);
  47. t.start();
  48. }
  49. class bListener implements ActionListener{
  50. public void actionPerformed(ActionEvent e) {
  51. try{
  52. dos.writeUTF(t2.getText());
  53. Addt1("发送:"+"/n");
  54. Addt1("    "+t2.getText()+"/n");
  55. t2.setText("");
  56. }catch(Exception ep){
  57. }
  58. }
  59. }
  60. }
  61. class Listen2 implements Runnable{
  62. private QQClient client=null;
  63. private DataInputStream dis=null;
  64. private String s=null;
  65. Listen2(QQClient client,DataInputStream dis){
  66. this.client=client;
  67. this.dis=dis;
  68. }
  69. public void run() {
  70. // TODO Auto-generated method stub
  71. try{
  72. while(true){
  73. s=dis.readUTF();
  74. client.Addt1("收到:"+"/n");
  75. client.Addt1("    "+s+"/n");
  76. }
  77. }catch(Exception e){
  78. }
  79. }
  80. }
时间: 2024-10-13 12:27:13

java版的QQ小程序的相关文章

Java版贪吃蛇小游戏的实现

使用的IDE eclipse JDK版本 1.6 辅助类 Coordinate.java package com.nn.util; /** *坐标点 */ public class Coordinate { public int x; public int y; public Coordinate(int newX, int newY) { x = newX; y = newY; } public boolean equals(Coordinate other) { if (x == other

Java Static关键字之小程序

对于学习static我们先来看两个例子: 1 public class Cat { 2 private static int sid = 0; 3 private String name; 4 int id; 5 Cat(String name) { 6 this.name = name; 7 id = sid++; 8 } 9 public void info(){ 10 System.out.println 11 ("My name is "+name+" No.&quo

java 学习 ——文本编辑框小程序

简易的文本编辑框小程序: import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.io.*; class TextEditorFrame extends JFrame{ File file=null; Color color=Color.red; TextEditorFrame(){ initTextPane(); initAboutDialog(); initToolBar(); initMen

「小程序JAVA实战」微信小程序工程结构了解(五)

转自:https://idig8.com/2018/08/09/xiaochengxu-chuji-05/ 微信小程序工程结构 audio,button,canvas,checkbox 都是由4个文件构成,而且他们的目录名称和文件内部的名称「保持一致」,这点特别重要. 主目录结构 app.js 外部的全局的js,可以当作一个父类,把这个全局文件理解成java里面的一个类,这样理解对于java开发的容易理解些. app.json 全局的配置文件,有点类似java web开发的resource目录下

JAVA的第一个小程序:Hello world

1.新建记事本文件helloworld.java 2.在记事本输入下面代码: class Demo{ public static void main(String[] args) { System.out.println("hello java"); } } 3.在cmd进入记事本文件的文件夹目录下 4.命令:javac helloworld.java  ------>   文件夹会出现类文件Demo.class 5.命令:java Demo  ------->就可以运行该

java的第一个小程序

1.2.2编写的第一个JAVA public class Hellow World{ //程序框架 public static void main (String [] args){ //main 方法框架 System.out.println("Hello World!"); //编写的代码输出语句 } } 注释的简单介绍: 单行注释 // 多行注释/* */

ADO.NET学习系列(四)---窗体版的登录小程序

1.需求分析:做一个登录的小程序,基于Winform的窗体小程序.基本要求:登录成功:弹框显示登录成功,登录失败就弹框显示失败. 扩展功能:登录次数超过3次,就”锁定“用户,提示登录错误次数过多,不能登录.用户点击之后,就退出程序:登录成功,就把错误字段清零. 这里我们在数据库表中,加一个错误字段,类型为int,初始值设置为0. 相信;这个小程序对于大家来说,是超级简单的.我这里也是来熟悉一下,把基础知识再巩固一下. 2.用到的技术:ADO.NET,存储过程. 3.项目实现: 首先我们新建一个窗

Java仿短视频小程序全栈开发实战视频教程+课程代码

第1章 微信小程序初学入门第2章 微信小程序的基础组件学习第3章 form表单组件与小程序前后端通信第4章 产品介绍与数据库规划介绍第5章 开发用户登录注册与用户信息第6章 上传视频业务流程开发第7章 视频展现页开发第8章 开发视频的留言板第9章 开发短视频后台办理体系第10章 项目上线与发布 下载地址:百度网盘 原文地址:http://blog.51cto.com/13870071/2142671

Java Servlet:服务器小程序

servlet:服务器小程序 servlet是一个接口,接口是一种规范,因此servlet是一种规范 一个类声明为抽象类的原因: 不包含抽象方法,不想被实例化 包含抽象方法,子类有对抽象方法的不同实现 什么是Servlet容器? Servlet容器,顾名思义里面存放着Servlet对象.我们为什么能通过Web服务器映射的URL访问资源?肯定需要写程序处理请求,主要3个过程: 接收请求:web服务器 处理请求: servlet 响应请求:web服务器 servlet容器: tomcat Jetty