java 仿QQ聊天代码
2012-12-01 19:47
211 查看
本源码实现了群聊和私聊
截图如下:
代码文件清单如下:
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(""); } } } }
下面是ClientThread.java
=============================================================================================================================
package cc; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.Socket; public class ClientThread extends Thread { private Client client; private Socket socket; private BufferedReader br; private PrintWriter pw; private boolean bo = true; public ClientThread(Client client, Socket socket) { this.client = client; this.socket = socket; try { br = new BufferedReader(new InputStreamReader(socket .getInputStream())); pw = new PrintWriter(new OutputStreamWriter(socket .getOutputStream())); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void run() { while (bo) { try { String mess = br.readLine(); String[] me = mess.split(":"); System.out.println("把用户名传递过来"+mess); if (me[0].equals("USER")) { client.getJcb().removeAllItems(); for (int i = 0; i < me.length; i++) { client.getJcb().addItem(me[i]); } }else if (me[0].equals("MESS")) { client.getJa().append(me[2]+":"+me[3]+"\n"); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
下面是Server.java
===================================================================================================================================
package cc; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.Socket; public class ClientThread extends Thread { private Client client; private Socket socket; private BufferedReader br; private PrintWriter pw; private boolean bo = true; public ClientThread(Client client, Socket socket) { this.client = client; this.socket = socket; try { br = new BufferedReader(new InputStreamReader(socket .getInputStream())); pw = new PrintWriter(new OutputStreamWriter(socket .getOutputStream())); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void run() { while (bo) { try { String mess = br.readLine(); String[] me = mess.split(":"); System.out.println("把用户名传递过来"+mess); if (me[0].equals("USER")) { client.getJcb().removeAllItems(); for (int i = 0; i < me.length; i++) { client.getJcb().addItem(me[i]); } }else if (me[0].equals("MESS")) { client.getJa().append(me[2]+":"+me[3]+"\n"); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
下面是ServerThread,java
=====================================================================================================================
package cc; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.Socket; public class ServerThread implements Runnable { private PrintWriter pw; private Socket socket; private String qqname; private BufferedReader br; public PrintWriter getPw() { return pw; } public void setPw(PrintWriter pw) { this.pw = pw; } public String getQqname() { return qqname; } public void setQqname(String qqname) { this.qqname = qqname; } public String getIp() { return ip; } public void setIp(String ip) { this.ip = ip; } private String ip; public ServerThread(Socket socket) { this.socket = socket; try { br = new BufferedReader(new InputStreamReader( socket.getInputStream())); pw = new PrintWriter(new OutputStreamWriter( socket.getOutputStream())); String mess = br.readLine(); System.out.println("ServerThread"+mess); String[] me = mess.split(":"); ip = me[1]; qqname = me[2]; } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override public void run() { while (true) { try { System.out.println(Thread.currentThread()); System.out.println("aaaa"); String mess = br.readLine(); System.out.println(mess); String[] s = mess.split(":"); System.out.println("你好" + mess); String jishouNeme=s[1]; System.out.println("发送名字"+s[2]+" 接受名字"+jishouNeme); if (s[0].equals("MESS") && s[1].equals("USERS")) { Server.AllUser(mess); } if(s[0].equals("MESS") && !s[1].equals("USERS")){ System.out.println("我是私聊 server"); Server.OnleUser(mess, getQqname(),jishouNeme); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
相关文章推荐
- 一个简单的QQ聊天代码
- 【代码】如何在手机等移动平台上浏览器网页中点击链接跳转到QQ聊天界面
- MSN QQ网页聊天代码
- Java写的QQ代码(客户端)
- 网页中嵌套QQ代码设置在线状态无需加好友聊天
- java调用qq聊天,调用分享
- java网络编程(三) QQ聊天功能类似的C/S建立
- 阅读高手编写的类似QQ聊天的服务端代码业务层设计总结
- 用java实现简单的网络通信,相当于一个最简单的控制台qq(附代码) 推荐
- iOS开源组件__仿写QQ/微信聊天键盘(表情,问题,输入框)纯代码,无依赖
- 代码自定义cell练习-- QQ聊天
- JAVA仿QQ聊天系统4.0(扩展韩顺平的程序的功能及界面)附源码
- QQ免加好友临时聊天代码
- java简单聊天代码
- 在网页中嵌入QQ聊天、阿里旺旺聊天、邮件发送等代码
- 【用户授权设计】java第三方登录(微博,QQ)详细代码
- Java实现简易QQ聊天
- java学习之利用TCP实现的简单聊天示例代码
- Java写的QQ代码(服务端)
- java实现 微博登录、微信登录、qq登录实现代码