用JAVA开发一个简单的聊天软件
给个简单的客户端的例子,lz对比自己的码看看有什么出入 (注意:ClientHandler是inner class)package chap15;import java.io.*;import java.net.*;import java.util.*;public class VerySimpleChatServer{ArrayList clientOutputStreams;public class ClientHandler implements Runnable {BufferedReader reader;Socket sock;public ClientHandler(Socket clientSOcket) {try {sock = clientSOcket;InputStreamReader isReader = new InputStreamReader(sock.getInputStream());reader = new BufferedReader(isReader);} catch (Exception ex) { ex.printStackTrace(); }}public void run() {String message;try {while ((message = reader.readLine()) != null) {System.out.println("read " + message);tellEveryone(message);}} catch (Exception ex) { ex.printStackTrace(); }}}public static void main(String[] args) {new VerySimpleChatServer().go();}public void go() {clientOutputStreams = new ArrayList();try {ServerSocket serverSock = new ServerSocket(5000);while(true) {Socket clientSocket = serverSock.accept();PrintWriter writer = new PrintWriter(clientSocket.getOutputStream());clientOutputStreams.add(writer);Thread t = new Thread(new ClientHandler(clientSocket));t.start();System.out.println("got a connection");}} catch (Exception ex) { ex.printStackTrace(); }}public void tellEveryone(String message) {Iterator it = clientOutputStreams.iterator();while (it.hasNext()) {try {PrintWriter writer = (PrintWriter) it.next();writer.println(message);writer.flush();} catch (Exception ex) { ex.printStackTrace(); }}}}
求一JAVA 聊天小程序使用图形用户界面。
能实现一个聊天室中多人聊...
服务端代码如下:import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.event.*;import java.net.*;import java.io.*;/* * 聊天服务端的主框架类 */public class ChatServer extends JFrame implements ActionListener{ public static int port = 8888;//服务端的侦听端口 ServerSocket serverSocket;//服务端Socket Image icon;//程序图标 JComboBox combobox;//选择发送消息的接受者 JTextArea messageShow;//服务端的信息显示 JScrollPane messageScrollPane;//信息显示的滚动条 JTextField showStatus;//显示用户连接状态 JLabel sendToLabel,messageLabel; JTextField sysMessage;//服务端消息的发送 JButton sysMessageButton;//服务端消息的发送按钮 UserLinkList userLinkList;//用户链表 //建立菜单栏 JMenuBar jMenuBar = new JMenuBar(); //建立菜单组 JMenu serviceMenu = new JMenu ("服务(V)"); //建立菜单项 JMenuItem portItem = new JMenuItem ("端口设置(P)"); JMenuItem startItem = new JMenuItem ("启动服务(S)"); JMenuItem stopItem=new JMenuItem ("停止服务(T)"); JMenuItem exitItem=new JMenuItem ("退出(X)"); JMenu helpMenu=new JMenu ("帮助(H)"); JMenuItem helpItem=new JMenuItem ("帮助(H)"); //建立工具栏 JToolBar toolBar = new JToolBar(); //建立工具栏中的按钮组件 JButton portSet;//启动服务端侦听 JButton startServer;//启动服务端侦听 JButton stopServer;//关闭服务端侦听 JButton exitButton;//退出按钮 //框架的大小 Dimension faceSize = new Dimension(400, 600); ServerListen listenThread; JPanel downPanel ; GridBagLayout girdBag; GridBagConstraints girdBagCon;/** * 服务端构造函数 */ public ChatServer(){ init();//初始化程序 //添加框架的关闭事件处理 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.pack(); //设置框架的大小 this.setSize(faceSize); //设置运行时窗口的位置 Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); this.setLocation( (int) (screenSize.width - faceSize.getWidth()) / 2, (int) (screenSize.height - faceSize.getHeight()) / 2); this.setResizable(false); this.setTitle("聊天室服务端"); //设置标题 //程序图标 icon = getImage("icon.gif"); this.setIconImage(icon); //设置程序图标 show(); //为服务菜单栏设置热键'V' serviceMenu.setMnemonic('V'); //为端口设置快捷键为ctrl+p portItem.setMnemonic ('P'); portItem.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_P,InputEvent.CTRL_MASK)); //为启动服务快捷键为ctrl+s startItem.setMnemonic ('S'); startItem.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_S,InputEvent.CTRL_MASK)); //为端口设置快捷键为ctrl+T stopItem.setMnemonic ('T'); stopItem.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_T,InputEvent.CTRL_MASK)); //为退出设置快捷键为ctrl+x exitItem.setMnemonic ('X'); exitItem.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_X,InputEvent.CTRL_MASK)); //为帮助菜单栏设置热键'H' helpMenu.setMnemonic('H'); //为帮助设置快捷键为ctrl+p helpItem.setMnemonic ('H'); helpItem.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_H,InputEvent.CTRL_MASK)); } /** * 程序初始化函数 */ public void init(){ Container contentPane = getContentPane(); contentPane.setLayout(new BorderLayout()); //添加菜单栏 serviceMenu.add (portItem); serviceMenu.add (startItem); serviceMenu.add (stopItem); serviceMenu.add (exitItem); jMenuBar.add (serviceMenu); helpMenu.add (helpItem); jMenuBar.add (helpMenu); setJMenuBar (jMenuBar); //初始化按钮 portSet = new JButton("端口设置"); startServer = new JButton("启动服务"); stopServer = new JButton("停止服务" ); exitButton = new JButton("退出" ); //将按钮添加到工具栏 toolBar.add(portSet); toolBar.addSeparator();//添加分隔栏 toolBar.add(startServer); toolBar.add(stopServer); toolBar.addSeparator();//添加分隔栏 toolBar.add(exitButton); contentPane.add(toolBar,BorderLayout.NORTH); //初始时,令停止服务按钮不可用 stopServer.setEnabled(false); stopItem .setEnabled(false); //为菜单栏添加事件监听 portItem.addActionListener(this); startItem.addActionListener(this); stopItem.addActionListener(this); exitItem.addActionListener(this); helpItem.addActionListener(this); //添加按钮的事件侦听 portSet.addActionListener(this); startServer.addActionListener(this); stopServer.addActionListener(this); exitButton.addActionListener(this); combobox = new JCom...
用java做一个两个人之间的聊天软件
客户端:package clientsocket; import java.io.*; import java.net.*; import java.awt.*; import java.awt.event.*; public class Main { private Socket s; private DataInputStream dis; private DataOutputStream dos; private TextArea ta; private TextField tf; public static void main(String[] args) { Main m=new Main(); m.createUI(); m.connect(); m.createThread(); } public void connect(){ try{s=new Socket("127.0.0.1",8888);//127.0.0.1是你自己的ip号 dos=new DataOutputStream(s.getOutputStream()); dis=new DataInputStream(s.getInputStream());} catch(IOException e){ e.printStackTrace();} } public void createUI(){ Frame f=new Frame("Client"); ta=new TextArea(); tf=new TextField(); Button send=new Button("发送"); Panel p=new Panel(); p.setLayout(new BorderLayout()); p.add(tf,"Center"); p.add(send,"East"); f.add(ta,"Center"); f.add(p,"South"); MyClientListener listener=new MyClientListener(this); send.addActionListener(listener); tf.addActionListener(listener); f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); f.setSize(400,400); f.setLocation(600,0); f.setVisible(true); } public void createThread(){ MyClientReader reader=new MyClientReader(this); reader.start(); } public void close(){ try{ dis.close(); dos.close(); s.close(); } catch(IOException e){ e.printStackTrace();} } public DataInputStream getDataInputStream(){ return dis;} public DataOutputStream getDataOutputStream(){return dos;} public TextArea getTextArea(){return ta;} public TextField getTextField(){return tf;} } class MyClientListener implements ActionListener{ private Main client; public MyClientListener(Main client){ this.client=client; } public void actionPerformed(ActionEvent e){ TextField tf=client.getTextField(); String info=tf.getText(); client.getTextArea().append("自己说:"+info+"\n"); try{ client.getDataOutputStream().writeUTF(info); } catch(IOException e1){e1.printStackTrace();} if (info.equals("bye")){ client.close(); System.exit(0); } tf.setText(""); tf.requestFocus(); } } class MyClientReader extends Thread { private Main client; public MyClientReader(Main client){ this.client=client; } public void run(){ String info; DataInputStream dis=client.getDataInputStream(); TextArea ta=client.getTextArea(); try{ while (true){ info=dis.readUTF(); ta.append("对方说:"+info+"\n"); if (info.equals("bye")){ client.close(); System.exit(0); } } } catch(IOException e){ e.printStackTrace(); } } } 服务器端:package serversocket; import java.io.*; import java.net.*; import java.awt.*; import java.awt.event.*; public class Main { private ServerSocket ss; private Socket s; private DataInputStream dis; private DataOutputStream dos; private TextArea ta; private TextField tf; public static void main(String[] args) { Main m=new Main(); m.createUI(); m.connect(); m.createThread(); } public void connect(){ try{ss=new ServerSocket(8888); s=ss.accept(); dos=new DataOutputStream(s.getOutputStream()); dis=new DataInputStream(s.getInputStream());} catch(IOException e){ e.printStackTrace();} } public void createUI(){ Frame f=new Frame("Server"); ta=new TextArea(); tf=new TextField(); Button send=new Button("发送"); Panel p=new Panel(); p.setLayout(new BorderLayout()); p.add(tf,"Center"); p.add(send,"East"); f.add(ta,"Center"); f.add(p,"South"); MyServerListener listener=new MyServerListener(this); send.addActionListener(listener); tf.addActionListener(listener); f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); f.setSize(400,400); f.setLocation(600,0); f.setVisible(true); } public void createThread(){ MyServerReader reader=new MyServerReader(this); reader.start(); } public void close(){ try{ dis.close(); dos.close(); s.close(); ss.close(); } catch(IOException e){ e.printStackTrace();} } public DataInputStream getDataInputStream(){ return dis;} public DataOutputStream getDataOutputStream(){return dos;} public TextArea getTextArea(){return ta;} public TextField getTextField(){return tf;} } class MyServerListener implements ActionListener{ private Main client; public MyServerListener(Main client){ this.client=client; } public void actionPerformed(ActionEvent e){ TextField tf=client.getTextField(); String info=tf.getText(); client.getTextArea().append("自己说:"+info+"\n"); try{ client.getDataOutputStream().writeUTF(info); } catch(IOException e1){e1.printStackTrace();} if (info.equals("bye")){ client.close(); System.exit(0); } tf.setText(""); tf.requestFocus(); } } class MyServerReader extends Thread { private Main client; public MyServerReader(Main client){ this.client=...
转载请注明出处51数据库 » java 小的聊天软件
間单