服务器:
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;public class MyServer extends JFrame{
    ServerSocket serverSocket = null;
    Socket s = null;
    BufferedReader serverReader = null;
    PrintWriter serverWriter = null;
    ServerReaderThread srt = new ServerReaderThread();
ServerFindSocket sfs = new ServerFindSocket();
Thread sfsThread = null;

JTextArea jta = new JTextArea(20,10);
    JTextField jt = new JTextField(20);
    JButton button1 = new JButton("开始");
    JButton button2= new JButton("发送");
    JButton button3 = new JButton("清空");
 JPanel panel1 = new JPanel();
 public MyServer(){
 setTitle("Server");
 this.setSize(500, 400);
 panel1.setLayout(new FlowLayout());
 panel1.add(button1);
 panel1.add(jt);
 panel1.add(button2);
 panel1.add(button3);
 this.setLayout(new BorderLayout());
 this.add(panel1,BorderLayout.SOUTH);
 this.add(jta,BorderLayout.CENTER);
 button1.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
openServer();
}
});
 
 button2.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
sendMessage();
jt.setText("");
}
});
 
 button3.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
jta.setText("");
jt.setText("");
}
});
 }
 
 public void openServer(){
 if(serverSocket == null){
 try {
serverSocket = new ServerSocket(9000);

sfsThread = new Thread(sfs);
sfsThread.start();
} catch (Exception e) {
// TODO Auto-generated catch block
closeServer();
e.printStackTrace();
}
 }
 }
 
 public void sendMessage(){
 String temp = jt.getText();
 if(temp.equals("")){
return ;
 }else{
 if(serverWriter != null){
serverWriter.println("服务器说: "+ temp); 
jta.setText(jta.getText()+ "服务器说:" + jt.getText() + "\n");
    serverWriter.flush();
 }
 }
 
 }
//搜索客户端线程
class ServerFindSocket implements Runnable{ public void run() {
// TODO Auto-generated method stub
try {

s = serverSocket.accept();
serverReader =  new BufferedReader(new InputStreamReader(s.getInputStream()));
serverWriter = new PrintWriter(new OutputStreamWriter(s.getOutputStream()),true);
Thread srThread = new Thread(srt);
srt.bCRT = true;
srThread.start();


} catch (Exception e) {
// TODO: handle exception
closeServer();
e.printStackTrace();

}

}

}
//从客户端读取线程
class ServerReaderThread implements Runnable{
public boolean bCRT = true;
String temp = "";
public void run() {
// TODO Auto-generated method stub

 while(true){
 try {
 temp = serverReader.readLine();
if(temp == null){
closeServer();

return ;
}
  } catch (Exception e) {
// TODO: handle exception

// TODO: handle exception

closeServer();
e.printStackTrace();
return ;
     }
jta.setText(jta.getText()+temp+"\n");
}
}

}
public void closeServer(){
try {
if(serverSocket!=null)
serverSocket.close();
if(s!=null)
s.close();
if(serverReader!=null)
serverReader.close();
if(serverWriter!=null)
serverWriter.close();
} catch (Exception e) {
// TODO: handle exception
serverSocket = null;
s = null;
serverReader=null;
serverWriter = null;
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
MyServer frame = new MyServer();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
  
}

解决方案 »

  1.   

    客户端:
    import java.awt.BorderLayout;
    import java.awt.FlowLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.io.PrintWriter;
    import java.net.Socket;
    import java.net.UnknownHostException;import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JTextArea;
    import javax.swing.JTextField;public class MyClient extends JFrame{
    Socket clientSocket = null;
    BufferedReader clientReader = null;
    PrintWriter clientWriter = null;
    ClientReaderThread crt = new ClientReaderThread();

    JTextArea jta = new JTextArea(20,10);
        JTextField jt = new JTextField(20);
        JButton button1 = new JButton("连接");
        JButton button2= new JButton("发送");
        JButton button3 = new JButton("清空");
     JPanel panel1 = new JPanel();
     public MyClient(){
     setTitle("Client");
     this.setSize(500, 400);
     panel1.setLayout(new FlowLayout());
     panel1.add(button1);
     panel1.add(jt);
     panel1.add(button2);
     panel1.add(button3);
     this.setLayout(new BorderLayout());
     this.add(panel1,BorderLayout.SOUTH);
     this.add(jta,BorderLayout.CENTER);
     button1.addActionListener(new ActionListener() {

    @Override
    public void actionPerformed(ActionEvent e) {
    // TODO Auto-generated method stub
    connectServer();
    }
    });
     
     button2.addActionListener(new ActionListener() {

    @Override
    public void actionPerformed(ActionEvent e) {
    // TODO Auto-generated method stub
    sendMessage();
    jt.setText("");
    }
    });
     
     button3.addActionListener(new ActionListener() {

    @Override
    public void actionPerformed(ActionEvent e) {
    // TODO Auto-generated method stub
    jta.setText("");
    jt.setText("");
    }
    });
     }   
     public void connectServer(){
     if(clientSocket == null){
     try {
    clientSocket = new Socket("127.0.0.1" , 9000);
    clientReader  = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
    clientWriter = new PrintWriter(new OutputStreamWriter(clientSocket.getOutputStream()),true);
    Thread crThread = new Thread(crt);
    crt.bCRT=true;
    crThread.start();
    } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
     }
     }
     
     public void sendMessage(){
     String temp = jt.getText();
     if(temp.equals("")){
    return ;
     }else{
     if(clientWriter != null){
     clientWriter.println("客户端说: "+ temp); 
    jta.setText(jta.getText()+ "客户端说:" + jt.getText() + "\n");
    clientWriter.flush();
     }
     }
     }
     public void closeServer(){
    try {
    if(clientSocket != null)
    clientSocket.close();
    if(clientReader!=null)
    clientReader.close();
    if(clientWriter != null)
    clientReader.close();
    } catch (Exception e) {
    // TODO: handle exception
    e.printStackTrace();
    closeServer();

    }
    }
    //客户端读取线程类
    class ClientReaderThread implements Runnable{
    public boolean bCRT = true;
    String temp = "";
    public void run() {
    // TODO Auto-generated method stub
    while(bCRT){
    try {
    temp = clientReader.readLine();
    if(temp == null){
    closeServer();

    bCRT = false;
    }
    } catch (Exception e) {
    // TODO: handle exception
    closeServer();

    e.printStackTrace();
    bCRT = false;
    }
    jta.setText(jta.getText()+temp+"\n");
    }

    }

    }
    public static void main(String[] args) {
    MyClient frame = new MyClient();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
          
    }}
      

  2.   

    http://download.csdn.net/source/536582
    我也写了一个 C/S模式 有界面,有在线列表,能保存聊天记录。这是面试作品,呵呵,做好后就直接进公司了
      

  3.   

    请使用java代码方式发布源码,好看public class A{
    }