客戶端程序/*
 * Created on 2004/11/25
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
package fts.chat;import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.JTextField;/**
 * @author zhl-wang 
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
public class chatPanl extends JFrame implements ActionListener ,Runnable{JTextArea m_textarea;      
JTextField m_textfield;
JButton ok;
JButton no;
Container c;
DataInputStream m_in;
DataOutputStream m_out;public chatPanl(){
super("聊天程序");m_in = null;
m_out = null;
c = getContentPane();
setSize(426,266);
m_textarea = new JTextArea(10,100);
m_textfield = new JTextField("",100);
ok = new JButton("send");
no = new JButton("cancel");try{
Socket m_socket;
m_socket = new Socket("192.168.151.72",5555);
m_in = new DataInputStream(m_socket.getInputStream());
m_out = new DataOutputStream(m_socket.getOutputStream());
}
catch (Exception e){
System.out.println("Error:"+e);
}new Thread(this).start();
c.setLayout(new BorderLayout());
c.add(m_textarea,BorderLayout.SOUTH);
c.add(m_textfield,BorderLayout.CENTER);
c.add(ok,BorderLayout.EAST);
c.add(no,BorderLayout.WEST);
ok.addActionListener(this);
no.addActionListener(this);
m_textarea.setEditable(false);
show();
}public static void main(String[] args) {
chatPanl app = new chatPanl();
app.addWindowListener(new MyWindowListener());
}/* (non-Javadoc)
 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
 */
public void actionPerformed(ActionEvent e) {
if (e.getSource()==ok){
String v = m_textfield.getText();
m_textfield.setText("");
try {
m_out.writeUTF(v);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
else if(e.getSource()==no){
m_textfield.setText("");
}
}/* (non-Javadoc)
 * @see java.lang.Runnable#run()
 */
public void run() {
try{
while (true){
String s = m_in.readUTF();
if (s!=null){
m_textarea.append(s+"\n");
}
}
}
catch (Exception e){
m_textarea.append("Bye welcome next enter the chat");
m_textfield.setVisible(false);
}
}public void stop(){
try{
m_out.writeUTF("leave");
}
catch (IOException e){}
}
}

解决方案 »

  1.   

    服务端
    /*
     * Created on 2004/11/24
     *
     * TODO To change the template for this generated file go to
     * Window - Preferences - Java - Code Style - Code Templates
     */
    package fts.chat;import java.net.ServerSocket;
    import java.net.Socket;
    import java.util.Vector;/**
     * @author zhl-wang 
     *
     * TODO To change the template for this generated type comment go to
     * Window - Preferences - Java - Code Style - Code Templates
     */
    public class chatserver {
    public static void main(String args[]){
    ServerSocket socket = null;
    Vector m_threads = new Vector();
    System.out.println("Listen...");try{
    socket = new ServerSocket(5555);
    }
    catch (Exception e){
    System.out.println("new ServerSocket() failed!");
    return;
    }
    try{
    int nid = 0;
    while(true){
    Socket s = socket.accept();
    System.out.println("accepted");
    ServerThread st = new ServerThread(s,m_threads);
    st.setID(nid++);
    m_threads.addElement(st);
    new Thread(st).start();
    for (int i=0;i<m_threads.size();i++){
    ServerThread st1 = (ServerThread)m_threads.elementAt(i);
    st1.write("<#>welcome "+"to enter chatroom");
    }
    System.out.println("Listen again...");
    }
    }
    catch (Exception e){
    System.out.println("Server is down");
    }
    }
    }
    thread/*
     * Created on 2004/11/24
     *
     * TODO To change the template for this generated file go to
     * Window - Preferences - Java - Code Style - Code Templates
     */
    package fts.chat;import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.io.IOException;
    import java.net.Socket;
    import java.util.Vector;/**
     * @author zhl-wang
     *
     * TODO To change the template for this generated type comment go to
     * Window - Preferences - Java - Code Style - Code Templates
     */
    public class ServerThread implements Runnable {
    Vector m_threads;
    Socket m_socket = null;
    DataInputStream m_in = null;
    DataOutputStream m_out = null;
    int m_nid;public ServerThread(Socket s, Vector threads){
    m_socket = s;
    m_threads = threads;
    try{
    m_in = new DataInputStream(m_socket.getInputStream());
    m_out = new DataOutputStream(m_socket.getOutputStream());
    }
    catch (Exception e){}
    }/* (non-Javadoc)
     * @see java.lang.Runnable#run()
     */
    public void run() {
    System.out.println("thread is running");
    boolean flag = true;
    try{
    while (flag){
    String s = m_in.readUTF();
    if (s==null) break;
    if (s.intern().equals("leave")){
    for (int i=0;i<m_threads.size();i++){
    ServerThread st = (ServerThread)m_threads.elementAt(i);
    st.write("***"+getID()+"leave..."+"***");
    flag = false;
    }
    }
    else{
    for (int i=0;i<m_threads.size();i++){
    ServerThread st = (ServerThread)m_threads.elementAt(i);
    st.write("<"+getID()+">"+s);
    }
    }
    }
    }
    catch (Exception e){}
    m_threads.removeElement(this);
    try{
    m_socket.close();
    }
    catch (Exception e){
    System.out.println("Connect is dowm");
    }
    }public void write(String msg){
    synchronized(m_out){
    try{
    m_out.writeUTF(msg);
    }
    catch (IOException e){}
    }
    }public int getID(){
    return m_nid;
    }public void setID(int nid){
    m_nid = nid;
    }
    }
      

  2.   

    看完了,不错啊!只是有点不明白服务器端那个Vector传来传去是干吗用的!呵呵测试其实很简单,只要把这两段程序一起打开就行了。但是要先打开服务器端,然后打开客户端!
    就这样,不用其他软件!
      

  3.   

    http://community.csdn.net/Expert/topic/3593/3593933.xml?temp=5.527896E-02
    你好,这是我做的