Java_QQ_源程序代码

合集下载

Java实现QQ登陆

Java实现QQ登陆

Java实现QQ登陆图②:图③:好了,效果就是这样了,虽然实现了基本功能,但是还是不完美,比如说好友面板不能随着窗口改变大小而改变,不过应该已经可以解决了,只是还没实践,下面就发上源代码:一共有三个类:MemberModel.java //显示类QQ似好友标签信息的模板类;TestPane.java //添加多个模板的容器类;TestFrame.java //窗体类;核心部分是前面两个类,注意,第二个类的布局方式不能为空,否则不能是容器显示滚动条,这是实现这个面板功能的一个难题,因为我不怎么会使用其他的布局方式,就只经常用空布局,经过这次才知道,光用空布局是不行的,空布局的应用受到了太多的限制。

在TestPane.java中添加好友信息的方式应该是代码添加黑名单信息的方式,可在其他类中调用方法,传递参数(数组)过来,然后对信息模板进行初始化,还有面板上的信息模板从程序刚开始运行就生成了,只是设置了不可见,后点击相关分类标签后的可视与不可视是同理的,也就是说你有多少个好友就一直会有多少个JLabel存在你的面板上,只是你可能看不见他们,我感觉自己的实现方式不是很好。

还有在我所用的这种布局方式中,显示Label的宽度是一定的,我不知道怎么设置他的宽度和高度,所以通过在Label上添加了一个白色图标(185 X 60)来使Label变宽,然后再添加模板JPanel,如果网友们还有好的解决方法,希望不吝赐教。

下面是源码:MemberModel.java 的源代:package coolbaby6;import javax.swing.ImageIcon;import javax.swing.JPanel;import javax.swing.JButton;import java.awt.Color;import java.awt.Rectangle;import javax.swing.JLabel;import java.awt.Dimension;import java.awt.Font;public class MemberModel{private static final long serialVersionUID = 1L;public JButton jButton = null;//显示好友头像;public JPanel jPanel = new JPanel();//模板容器;private JLabel lb_nickName = null;//显示昵称;private int pic;private String nickname = null;private JLabel lb_mood = null;//显示心情;public MemberModel(int pic, String nickname, int len) {super();this.pic = pic;//头像编(有多种方法可以实现,这种最简单)this.nickname = nickname;//昵称;initialize();}private void initialize() {lb_mood = new JLabel();lb_mood.setBounds(new Rectangle(51, 30, 131, 20));lb_mood.setFont(new Font("Dialog", Font.PLAIN, 12));lb_mood.setText("世界上最遥远的距离不是生与死,而是我站在你面前你却不知道我爱你!");lb_mood.addMouseListener(new java.awt.event.MouseAdapter() {public void mouseEntered(java.awt.event.MouseEvent e) {exchangeEnter();lb_mood.setToolTipText(lb_mood.getText());}public void mouseExited(java.awt.event.MouseEvent e) {exchangeExited();}});lb_nickName = new JLabel();lb_nickName.setBounds(new Rectangle(52, 10, 80, 20));lb_nickName.setFont(new Font("Dialog", Font.BOLD, 14));lb_nickName.setText(nickname);jPanel.setSize(new Dimension(185, 60));jPanel.setLayout(null);jPanel.add(getJButton(), null);jPanel.add(lb_nickName, null);jPanel.add(lb_mood, null);jPanel.addMouseListener(new java.awt.event.MouseAdapter() {public void mouseExited(java.awt.event.MouseEvent e) {exchangeExited();//鼠标移出模板区,改变背景颜色;}public void mouseEntered(java.awt.event.MouseEvent e) {exchangeEnter();//鼠标移进模板区,改变背景颜色;}});}private void exchangeEnter() {jPanel.setBackground(new Color(192,224,248));}private void exchangeExited() {jPanel.setBackground(null);}private JButton getJButton() {if (jButton == null) {jButton = new JButton();jButton.setBounds(new Rectangle(8, 10, 40, 40));jButton.setBackground(new Color(236, 255, 236));jButton.setIcon(new ImageIcon("head/"+pic + ".jpg"));jButton.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseExited(java.awt.event.MouseEvent e) {exchangeExited();//鼠标移出模板区,改变背景颜色;}public void mouseEntered(java.awt.event.MouseEvent e) {exchangeEnter();//鼠标移进模板区,改变背景颜色;}});}return jButton;}}TestPane.java 的源代码:package coolbaby6;import javax.swing.BorderFactory;import javax.swing.JPanel;import javax.swing.JLabel;import javax.swing.BoxLayout;import javax.swing.ImageIcon;public class TestPane extends JPanel {private static final long serialVersionUID = 1L;private JLabel jLabel = null;private JLabel jLabel1 = null;private JLabel jLabel11 = null;private JLabel jLabel12 = null;private int clickF=0;private int clickB=0;public TestPane() {super();initialize();}private void initialize() {jLabel12 = new JLabel();jLabel12.setIcon(new ImageIcon("img/bg.jpg"));jLabel12.add(new MemberModel(3,"CoolBabY3",200).jPanel);jLabel12.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2)); jLabel11 = new JLabel();jLabel11.setIcon(new ImageIcon("img/bg.jpg"));jLabel11.add(new MemberModel(2,"CoolBabY2",200).jPanel);jLabel11.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2)); jLabel1 = new JLabel();jLabel1.setIcon(new ImageIcon("img/bg.jpg"));jLabel1.add(new MemberModel(1,"CoolBabY1",200).jPanel);jLabel1.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2)); jLabel = new JLabel();jLabel.setText("我的好友");jLabel.setIcon(new ImageIcon("img/ico.jpg"));jLabel.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2)); jLabel.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent e) {clickF+=1;if(clickF%2==1){jLabel1.setVisible(false);jLabel11.setVisible(false);jLabel12.setVisible(false);jLabel.setIcon(new ImageIcon("img/ico2.jpg"));update();}else{jLabel1.setVisible(true);jLabel11.setVisible(true);jLabel12.setVisible(true);jLabel.setIcon(new ImageIcon("img/ico.jpg"));update();}}});this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));this.setSize(200, 408);this.setLocation(20, 5);this.add(jLabel, null);this.add(jLabel1, null);this.add(jLabel11, null);this.add(jLabel12, null);addJLabel();}private void update(){//更新UI界面;this.updateUI();}private void clickBlack2(JLabel []jb){//点击标签,将后面的标签全部设为不可视; for(int i=1;i<jb.length;i++){try{jb[i].setVisible(false);}catch(Exception e){e.printStackTrace();}}update();}private void clickBlack(JLabel []jb){//点击标签,将后面的标签全部设为可视;for(int i=1;i<jb.length;i++){try{jb[i].setVisible(true);}catch(Exception e){e.printStackTrace();}}update();}private void addJLabel(){//添加黑名单的内容;final JLabel []jb=new JLabel[7];jb[0] = new JLabel();jb[0].setText("黑名单");jb[0].setIcon(new ImageIcon("img/ico2.jpg"));jb[0].setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));jb[0].addMouseListener(new java.awt.event.MouseAdapter() {public void mouseClicked(java.awt.event.MouseEvent e) {clickB+=1;if(clickB%2==1){clickBlack(jb);jb[0].setIcon(new ImageIcon("img/ico.jpg"));}else{clickBlack2(jb);jb[0].setIcon(new ImageIcon("img/ico2.jpg"));}}});this.add(jb[0],null);for(int i=1;i<jb.length;i++){jb[i]=new JLabel();jb[i].setIcon(new ImageIcon("img/bg.jpg"));jb[i].setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));jb[i].add(new MemberModel((i+3),"CoolBabY"+(i+3),200).jPanel);jb[i].setVisible(false);this.add(jb[i],null);}}TestFrame.java 的源代码:package coolbaby6;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.ScrollPaneConstants;import javax.swing.SwingUtilities;public class TestFrame {private JFrame jFrame = null;private JPanel jContentPane = null;private JScrollPane scrollPane=null;public static void main(String[] args) {SwingUtilities.invokeLater(new Runnable() {public void run() {TestFrame application = new TestFrame();application.getJFrame().setVisible(true);}});}private JFrame getJFrame() {if (jFrame == null) {jFrame = new JFrame();jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);jFrame.setSize(230, 700);jFrame.setTitle("模拟实现QQ面板功能");jFrame.setContentPane(getJContentPane());}return jFrame;}private JScrollPane getScrollPane(){//给添加好友的容器JPanel添加滚动条;if(scrollPane==null){scrollPane=new JScrollPane(new TestPane());scrollPane.setBounds(20,5, 190, 600);scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLL BAR_NEVER );//不显示水平滚动条;return scrollPane;}private JPanel getJContentPane() {//实例化底层的容器JPanel;if (jContentPane == null) {jContentPane = new JPanel();jContentPane.setLayout(null);jContentPane.add(getScrollPane());}return jContentPane;}}能成功编译成功我的源代码的方略:①、建一个项目,按我的类名建3个类,将源代码拷贝进去;②、在项目根目录下建一个名为img的文件夹,将要用到的图片放进去。

Java调用本地命令

Java调用本地命令

Java调⽤本地命令参考:⼀、Process类ProcessBuilder.start()创建⼀个本机进程,并返回⼀个Process⼦类的⼀个实例,该实例可以获取进程的相关信息,也可以控制进程。

这个进程没有⾃⼰的终端,它的操作结果io都重定向到了它的⽗进程,⽗进程通过getInputStream(),getOutputStream(),getErrorStream()为⼦进程提供输⼊和获取输出,⽽对于io流如果有缓冲⼤⼩限制,则可能出现阻塞,导致死锁情况。

可使⽤destory()⽅式强制杀掉⼦进程,exitValue()返回执⾏结果,如果⼦进程需要等待返回,调⽤waitFor()⽅法将当前线程等待,直到⼦进程退出。

⼆、Runtime类Runtime.getRuntime().exec() 获得的就是Process类,exec()⽅法有多个重载可以使⽤,针对不同的情况设置不同的参数。

另外需要注意的是执⾏的windows和linux的明林的写法是不同的。

public static void main(String[] args) {String command = "notepad.exe txt.txt";try {Process process = Runtime.getRuntime().exec(command);BufferedInputStream bis = new BufferedInputStream(process.getInputStream());BufferedReader br = new BufferedReader(new InputStreamReader(bis));String line;while ((line = br.readLine()) != null) {System.out.println(line);}process.waitFor();if (process.exitValue() != 0) {System.out.println("error!");}bis.close();br.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}三、Apache Common-Exec强烈建议使⽤apache的第三⽅库,该库提供了更加详细的设置和监控⽅法等等。

本科毕业论文-基于JAVA的聊天系统的设计与实现【范本模板】

本科毕业论文-基于JAVA的聊天系统的设计与实现【范本模板】

摘要随着互联网的快速发展,网络聊天工具已经作为一种重要的信息交流工具,受到越来越多的网民的青睐.目前,出现了很多非常不错的聊天工具,其中应用比较广泛的有Netmeeting、腾讯QQ、MSN-Messager等等。

该系统开发主要包括一个网络聊天服务器程序和一个网络聊天客户程序两个方面。

前者通过Socket套接字建立服务器,服务器能读取、转发客户端发来信息,并能刷新用户列表。

后者通过与服务器建立连接,来进行客户端与客户端的信息交流。

其中用到了局域网通信机制的原理,通过直接继承Thread类来建立多线程。

开发中利用了计算机网络编程的基本理论知识,如TCP/IP协议、客户端/服务器端模式(Client/Server模式)、网络编程的设计方法等。

在网络编程中对信息的读取、发送,是利用流来实现信息的交换,其中介绍了对实现一个系统的信息流的分析,包含了一些基本的软件工程的方法。

经过分析这些情况,该局域网聊天工具采用Eclipse为基本开发环境和java 语言进行编写,首先可在短时间内建立系统应用原型,然后,对初始原型系统进行不断修正和改进,直到形成可行系统关键词:局域网聊天 socket javaAbstractAlong with the fast development of Internet,the network chating tool has already become one kind of important communication tools and received more and more web cams favor. At present, many extremely good chating tools have appeared . for example,Netmeeting, QQ,MSN—Messager and so on. This system development mainly includes two aspects of the server procedure of the network chat and the customer procedure of the network chat。

模拟QQ聊天室需求分析报告(DOC)

模拟QQ聊天室需求分析报告(DOC)

文档名称: 需求分析报告项目名称: 模拟QQ聊天系统项目负责人:班级:学校:1引言1.1 编写目的作为用户与该系统软件开发维护人员共同遵守的软件需求规范说明, 本《软件需求说明书》的主要目的是明确所要开发的软件所应具有的功能、性能, 使系统分析人员和软件设计人员能清楚地了解用户的需求, 并在此基础上进一步提出概要设计和完成后续设计与开发工作, 为软件开发范围、业务处理规范提供依据, 也是应用软件进行合同最终验收的依据。

客户登陆后可以通过服务器转发, 实现一对一和多对多聊天, 闪动托盘图标提示到来信息, 实现呼叫功能, 并播放不同音乐来提示。

系统可以实时显示目前其它用户的状态, 保存并能察看聊天纪录, 并可以申请新的用户号码。

用户登陆成功, 将保存其号码, 以便下次登陆时, 不必再输入而可以直接选择, 显示登陆时间。

服务器端, 向各个客户端发布系统消息。

接受来自客户端的各种信息并分别处理。

自动分配8位用户号码, 并保存该用户, 同时将信息返回给客户端。

用户下线, 将此用户下线消息发给各客户端, 并改写用户在服务器端的状态。

系统易用、美观的图形界面, 可以实现系统托盘。

此外系统还涉与系统数据安全和用户管理的问题、各种代码使用和维护问题、数据安全和数据维护问题、聊天记录和输出等问题, 因此还要求系统具有系统管理和事务处理功能。

总而言之, 要求通过系统的开发, 达到系统项目的总体目标是: 在整个系统的框架下, 结合客户端与服务器端情况的需要实现对数据更新、数据查询、数据统计、数据分析等功能进行有效的管理。

并提供用户友好接口, 满足用户需求的软件。

预期的使用者就是各单位办公区、联系密切的同学朋友与家人、公司同事等, 使用前仔细阅读此软件说明是很必要的, 以便更好的使用、管理和维护此系统!1.2 背景1.待开发软件名称: 模拟QQ聊天工具2.用户: 所有使用QQ的用户。

3、实现软件的单位:4、QQ作为基础的聊天工具, 方便所有计算机用户的交流。

开源源码大全

开源源码大全

开源源码⼤全授权协议介绍先了解下相关词的解释协议和版权信息(License and copyright notice):在代码中保留作者提供的协议和版权信息声明变更(State Changes):在代码中声明对原来代码的重⼤修改及变更公开源码(Disclose Source):代码必需公开。

如果是基于LGPL协议下,则只需使⽤的开源代码公开,不必将整个软件源码公开库引⽤(Library usage):该库可以⽤于商业软件中责任承担(Hold Liable):代码的作者承担代码使⽤后的风险及产⽣的后果商标使⽤(Use Trademark):可以使⽤作者的姓名,作品的Logo,或商标附加协议(Sublicensing):允许在软件分发传播过程中附加上原来没有的协议条款等协议描述要求允许禁⽌Apache⼀个较宽松且简明地指出了专利授权的协议。

协议和版权信息声明变更商⽤分发修改专利授权私⽤附加协议责任承担(禁⽌让作者承担责任,可以理解为免责)商标使⽤GPL 此协议是应⽤最为⼴泛的开源协议,拥有较强的版权⾃由(copyleft )要求。

衍⽣代码的分发需开源并且也要遵守此协议。

此协议有许多变种,不同变种的要求略有不同。

公开源码协议和版权信息声明变更商⽤分发修改专利授权私⽤责任承担附加协议MIT 宽松简单且精要的⼀个协议。

在适当标明来源及免责的情况下,它允许你对代码进⾏任何形式的使⽤。

协议和版权信息商⽤分发修改私⽤附加协议责任承担Artistic Perl社区尤为钟爱此协议。

要求更改后的软件不能影响原软件的使⽤。

协议和版权信息声明变更商⽤分发修改私⽤附加协议责任承担商标使⽤BSD 较为宽松的协议,包含两个变种BSD 2-Clause 和BSD 3-Clause,两者都与MIT协议只存在细微差异。

协议和版权信息商⽤分发修改私⽤附加协议责任承担Eclipse 对商⽤⾮常友好的⼀种协议,可以⽤于软件的商业授权。

包含对专利的优雅授权,并且也可以对相关代码应⽤商业协议。

计算机软件著作权的专业类别

计算机软件著作权的专业类别

计算机软件著作权的专业类别全文共四篇示例,供读者参考第一篇示例:随着计算机软件产业的不断发展壮大,计算机软件著作权也逐渐受到人们的重视和关注。

计算机软件著作权是指对计算机软件作品享有的法律保护权利,包括著作权拥有者享有的复制、发行、展示、表演、广播、信息网络传播等权利。

根据《著作权法》的相关规定,计算机软件作品属于文学作品的一种,因此计算机软件著作权也是在著作权法的保护范围之内。

针对计算机软件著作权的专业类别,它主要包括以下几个方面:一、操作系统软件:操作系统软件是计算机最基础的系统软件,它是计算机硬件与应用软件之间的桥梁。

操作系统软件不仅控制和管理计算机硬件资源,还提供用户与计算机系统之间的界面,使用户可以方便地与计算机进行交互操作。

常见的操作系统软件包括Windows、Mac OS、Linux等。

二、应用软件:应用软件是计算机用户进行各种工作、学习和娱乐活动所需的软件。

应用软件可以根据用户的需求和功能要求进行设计和开发,包括办公软件、图像处理软件、多媒体软件、游戏软件等。

常见的应用软件包括Microsoft Office套件、Adobe Photoshop、QQ等。

三、编程开发工具软件:编程开发工具软件是程序员用来编写、编辑、调试和测试计算机程序的软件工具。

编程开发工具软件提供了各种编程语言和工具,帮助程序员完成软件开发工作。

常见的编程开发工具软件包括Visual Studio、Eclipse、Xcode等。

四、数据库管理软件:数据库管理软件是用来存储和管理大量数据的软件系统。

数据库管理软件提供了各种数据库操作和管理功能,包括数据的增删改查、数据的备份和恢复、数据的安全控制等。

常见的数据库管理软件包括MySQL、Oracle、SQL Server等。

五、网络通信软件:网络通信软件是用来实现计算机之间网络通信和数据传输的软件系统。

网络通信软件包括各种网络协议和通信协议,帮助计算机之间进行数据交换和通信。

腾讯编码规范

腾讯编码规范
本标准适用于腾讯集团(含分公司等各级分支机构)所有使用Java作为开发语言的软件产品。
本标准中“腾讯集团”是指腾讯控股有限公司、其附属公司、及为会计而综合入账的公司,包括但不限于腾讯控股有限公司、深圳市腾讯计算机系统有限公司、腾讯科技(深圳)有限公司、腾讯科技(北京)有限公司、深圳市世纪凯旋科技有限公司、时代朝阳科技(深圳)有限公司、腾讯数码(深圳)有限公司、深圳市财付通科技有限公司。
12附录
附录A《编码安全规范》
附录A
(规范性附录)
编码安全规范
———————————
7.4.3尽量避免单个字符的变量名,除非是一次性的临时变量。临时变量通常被取名为i,j,k,m和n,它们一般用于整型;c,d,e,它们一般用于字符型;
7.4.4不采用匈牙利命名法则,对不易清楚识别出该变量类型的变量应使用类型名或类型名缩写作其后缀,例如:
7.4.5组件或部件变量使用其类型名或类型名缩写作其后缀,例如:
8.3.4避免声明的局部变量覆盖上一级声明的变量,即不要在内部代码块中声明相同的变量名;
8.3.5公共和保护的可见性应当尽量避免,所有的字段都建议置为私有,由获取和设置成员函数(Getter、Setter)访问;
8.3.6定义一个变量或者常量的时候,不要包含包名(类似java.security.MessageDigest digest = null),而要定义成下面的格式,除非是两个包有相同的类名:
常量
类变量
实例变量:
公有字段
受保护字段
友元字段
私有字段
9异常
9.1捕捉异常的目的是为了处理它。
9.2多个异常应分别捕捉并处理,避免使用一个单一的catch来处理。
10习惯
10.1if、for、do、while等语句的执行语句部分无论多少都要加括号"{}";

面向对象程序设计实训

面向对象程序设计实训

1) 观看老师运行一个简单的java聊天程序。

2) 新建一个Hello.java程序,在控制台打印“欢迎使用本聊天系统!”。

3) 新建一个Test类,在test类中打印下面表达式的运算结果,设a=3,b=-5,f=true:(1) --a % b ++ (2) (a>=1&&a<=12?a:b)4) 阅读TestWhat的源代码,编译并运行,并在老师的要求下使代码规范化。

5) 编写并运行一个字符界面的Java Application,接收用户输入的一个字符,并把该字符打印在屏幕上。

6) 新建一个工程,新建一个包(basic),新建一个类,在类里面写一个方法用来判断三角形的三条边能否构成三角形,并要求能判断出是等腰等边还是普通三角形,在main函数里面实例化对象,调用该方法。

7) 新建另一包(test),然后新建另一个类,测试能不能调用步骤1中的方法.8)Java API有一个类java.util.GregorianCalendar,可用来获得某个日期的年、月、日,用无参数的构造函数创建当前日期的实例,get(GregorianCalendar.YEAR),get(GregorianCalendar.MONTH),get(GregorianCalendar.DAY_OF_MONTH)返回日期的年、月、日。

写程序显示当前的年、月、日。

9)创建聊天程序中的用户类(User),用户拥有自己的名称、出生年份、年龄、密码等信息。

其中年龄要通过出生年份计算出来。

10)考虑以上User类各种方法的访问性,并设计出合理的访问控制修饰符。

11)定义矩形类和它的子类正方形类,并增加一个Printable接口,用于以字符和图形的方式打印矩形和正方形的信息。

(1)定义矩形类,用户输入矩形的长与宽,程序计算其面积和周长;(2)定义矩形类的派生类---正方形类。

正方形类的操作同样是求周长和面积;(3)定义一个接口Printable,其中包括一个方法printWay(),这个方法没有形参,返回值为空;(4)改写矩形类,使之实现Printable接口,用printWay()将矩形的相关信息(长、宽、周长、面积)打印在屏幕上;(5)改写正方形类,重载printWay()方法,将正方形的边长、周长、面积打印在屏幕上;(6)在Printable接口中增加一个新的printWay(char)方法,并改写矩形类、正方形类定义。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2010-06-23 20:24:11 TiBackimport .*;import java.io.*;import java.sql.*;import java.util.*;public class QQServer {public static void main(String args[]) {try {//用户名同步(14)HashMap<String , Socket> hm = new HashMap<String , Socket>() ;// 服务器在8000端口监听(1)ServerSocket ss = new ServerSocket(8000);while (true) {"服务器正在8000端口监听.....");Socket s = ss.accept();MyService t = new MyService();t.setSocket(s);t.setHashMap(hm) ;t.start();}} catch (Exception e) {}}}// 支持多用户登陆(13)class MyService extends Thread {private Socket s;private HashMap<String , Socket> hm ;public void setHashMap(HashMap<String , Socket> hm) {this.hm = hm ;}public void setSocket(Socket s) {this.s = s;}public void run() {try {// 接收客户端发送来的用户名和密码(2)InputStream is = s.getInputStream();InputStreamRead er isr = new InputStreamRead er(is);BufferedReader br = new BufferedRead er(isr);String uandp = br.readLine();// 拆分(4)String u = uandp.split("%")[0];String p = uandp.split("%")[1];// 到数据库中验证(5)Class.forName("");Connection cn = DriverManager.getConnection("jdbc:;databasename=wy", "sa","123");PreparedStatement ps = cn.prepareStatement("select * from username where username=? and password=?"); ps.setString(1, u);ps.setString(2, p);ResultSet rs = ps.executeQuery();// 发送确认信息回客户端(7)OutputStream os = s.getOutputStream();OutputStreamWriter osw = new OutputStreamWriter(os);PrintWriter pw = new PrintWriter(osw, true);if (rs.next()) {pw.println("ok");Thread.sleep(10) ;//将自己的名字发送给其他人(17)for(Socket ts : hm.values()){OutputStream tos = ts.getOutputStream() ;OutputStreamWriter tosw = new OutputStreamWriter(tos) ;PrintWriter tpw = new PrintWriter(tosw , true) ;tpw.println("user%"+u) ;}//将其他人的名字发送给自己(18)for(String tu : hm.keySet()){pw.println("user%"+tu) ;}//将用户名和Socket存入HashMap(15)hm.put(u, s) ;// 接收客户端发送来的信息(11)while (true) {String message = br.readLine();//判断是否退出if(message.equals("{exit}")){for(Socket ts : hm.values()){OutputStream tos = ts.getOutputStream() ; OutputStreamWriter tosw = new OutputStreamWriter(tos) ; PrintWriter tpw = new PrintWriter(tosw , true) ;tpw.println("exit%"+u) ;}hm.remove(u) ;return ;}String to = message.split("%")[0] ;String mess = message.split("%")[1] ;Socket ts = hm.get(to) ;OutputStream tos = ts.getOutputStream() ; OutputStreamWriter tosw = new OutputStreamWriter(tos) ; PrintWriter tpw = new PrintWriter(tosw , true) ;tpw.println("mess%"+mess) ;}} else {pw.println("err");}} catch (Exception e) {}}}2010-06-23 20:24:37 TiBackimport java.awt.*;import ;import ;import .*;import java.io.*;import javax.swing.*;public class QQLogin extends JFrame implements ActionListener { JTextFiel d txtUser = new JTextField();JPasswordFiel d txtPass = new JPasswordField();public QQLogin() {// 设置窗体属性this.setSize(250, 125);this.setTitle("QQ登陆");this.setResizable(false);// new一大堆组件JLabel labUser = new JLabel("用户名");JLabel labPass = new JLabel("密码");JButton btnLogin = new JButton("登陆");JButton btnReg = new JButton("注册");JButton btnCancel = new JButton("取消");// 注册事件btnLogin.addActionListener(this);btnReg.ad dActionListener(this);btnCancel.addActionListener(this);// 布置输入面板JPanel panInput = new JPanel();panInput.setLayout(new GridLayout(2, 2));panInput.add(labUser);panInput.add(txtUser);panInput.add(labPass);panInput.add(txtPass);// 布置按钮面板JPanel panButton = new JPanel();panButton.setLayout(new Fl owLayout());panButton.add(btnLogin);panButton.add(btnReg);panButton.add(btnCancel);// 布置窗体this.setLayout(new BorderLayout());this.ad d(panInput, BorderLayout.CENTER);this.ad d(panButton, BorderLayout.SOUTH);}public static void main(String args[]) {JFrame.setDefaultLookAndFeelDecorated(true); QQLogin w = new QQLogin();w.setVisible(true);}@Overridepublic void actionPerformed(ActionEvent e) {if (e.getActionCommand().equals("登陆")) {String u = txtUser.getText();String p = txtPass.getText();try{//将用户名和密码发送到服务器(3)Socket s = new Socket("",8000) ;OutputStream os = s.getOutputStream() ; OutputStreamWriter osw = new OutputStreamWriter(os) ; PrintWriter pw = new PrintWriter(osw , true) ;pw.println(u+"%"+p) ;//接收服务器发送回来的确认信息(6)InputStream is = s.getInputStream() ; InputStreamRead er isr = new InputStreamRead er(is) ; BufferedReader br = new BufferedRead er(isr) ;String yorn = br.readLine() ;//显示主窗体(8)if(yorn.equals("ok")){QQMain w = new QQMain(u) ;w.setSocket(s) ;w.setVisible(true) ;this.setVisible(false) ;}else {JOptionPane.showMessageDialog(this, "滚") ; }}catch(Exception ee){}}if (e.getActionCommand().equals("注册")) {}if (e.getActionCommand().equals("取消")) { System.exit(0);}}}。

相关文档
最新文档