关键字: Java        
服务器端:java 代码
import java.io.*;    
import java.net.*;    
import java.awt.*;    
import java.awt.event.*;    
import javax.swing.*;    
import java.util.*;    
public class ChatServe extends JFrame implements ActionListener{    
    //文本区域类,用于向对方发送信息    
    private JTextField jtf=new JTextField();    
    //文本域类,用于记录双方聊天记录    
    private JTextArea jta=new JTextArea();    
    //来自客户端的信息    
    private DataInputStream msgFromClient;    
    //发往客户端的信息    
    private DataOutputStream msgToClient;    
    public static void main(String[] args) {    
        new ChatServe();    
    }    
    public ChatServe(){//服务器端类的构造函数    
        //建立一个写信息的面板    
        JPanel p=new JPanel();    
        p.setLayout(new BorderLayout());    
        p.add(new JLabel("写信息:"),BorderLayout.WEST);    
        p.add(jtf,BorderLayout.CENTER);    
        jtf.setHorizontalAlignment(JTextField.LEFT);    
            
        getContentPane().setLayout(new BorderLayout());    
        //把聊天记录区加到内容面板并加上一个滚动条    
        getContentPane().add(p,BorderLayout.SOUTH);    
        getContentPane().add(new JScrollPane(jta),BorderLayout.CENTER);    
        //触发事件监听器    
        jtf.addActionListener(this);    
            
        setTitle("聊天程序服务器端");    
        setSize(500,300);    
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);    
        setVisible(true);    
        
    try{    
        //建立服务器SOCKET    
        ServerSocket serverSocket=new ServerSocket(8000);    
        jta.append("聊天服务器开始时间"+new Date()+'\n');    
        Socket socket=serverSocket.accept();    
        msgFromClient=new DataInputStream(socket.getInputStream());    
        msgToClient=new DataOutputStream(socket.getOutputStream());    
           
    }     
        catch(IOException ex){    
        System.out.println(ex);    
    }    
        
}    
    public void actionPerformed(ActionEvent e){    
        String actionCommand=e.getActionCommand();    
        if(e.getSource() instanceof JTextField){    
           try{    
                String ToClient=jtf.getText().trim();    
                msgToClient.writeBytes(ToClient);    
                msgToClient.flush();    
                    
                jta.append("服务器:"+ToClient+'\n');    
                String FromClient=msgFromClient.readUTF();    
                
                jta.append("客户端:"+msgFromClient+'\n');    
                   
           }    
           catch(IOException ex){    
               System.out.println(ex);    
    }    
                
        }    
    }    
}     客 户端:java 代码
import java.io.*;    
import java.net.*;    
import java.awt.*;    
import java.awt.event.*;    
import javax.swing.*;    
import java.util.*;    
public class ChatClient extends JFrame implements ActionListener{    
    //文本区域类,用于记录双方聊天内容    
    private JTextField jtf=new JTextField();    
    private JTextArea jta=new JTextArea();    
    private DataInputStream  msgFromServer;    
    private DataOutputStream msgToServer;    
    public static void main(String[] args) {    
        new ChatClient();    
    }    
    public ChatClient(){//服务器端类的构造函数    
        JPanel p=new JPanel();    
        p.setLayout(new BorderLayout());    
        p.add(new JLabel("写信息:"),BorderLayout.WEST);    
        p.add(jtf,BorderLayout.CENTER);    
        jtf.setHorizontalAlignment(JTextField.LEFT);    
            
            
        getContentPane().setLayout(new BorderLayout());    
        //把聊天记录区加到内容面板并加上一个滚动条    
        getContentPane().add(p,BorderLayout.SOUTH);    
        getContentPane().add(new JScrollPane(jta),BorderLayout.CENTER);    
            
        jtf.addActionListener(this);    
            
        setTitle("聊天程序客户端");    
        setSize(500,300);    
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);    
        setVisible(true);    
        
    try{    
        //建立SOCKET    
           
        jta.append("聊天服务器开始时间"+new Date()+'\n');    
        Socket socket=new Socket("localhost",8000);    
       msgFromServer=new DataInputStream(socket.getInputStream());    
       msgToServer=new DataOutputStream(socket.getOutputStream());    
           
    }     
        catch(IOException ex){    
        System.out.println(ex);    
    }    
        
}    
    public void actionPerformed(ActionEvent e){    
        String actionCommand=e.getActionCommand();    
        if(e.getSource() instanceof JTextField){    
           try{    
                String ToServer=jtf.getText().trim();    
                msgToServer.writeBytes(ToServer);    
                msgToServer.flush();    
                    
                jta.append("客户端:"+ToServer+'\n');    
                String FromServer=msgFromServer.readUTF();    
                jta.append("服务器:"+FromServer+'\n');    
           }    
           catch(IOException ex){    
               System.out.println(ex);    
    }    
                
        }    
    }    
}    
   
不仅都收不到对方的信息,而且连关闭窗口都关不了,不知道为什么.请! 

解决方案 »

  1.   

    处理Socket一般需要单独开启线程,循环处理,下面发一个我写的聊天室,dos下面的界面,你看看服务器代码import java.net.*;
    import java.io.*;
    import java.util.*;
    public class Server{
    static Vector outList;
    public static void main(String args[]) throws Exception{
    outList = new Vector();
    ServerSocket server = new ServerSocket(2000);
    System.out.println("服务器已经启动");
    while(true){
    Socket c = server.accept();
    ProcessClient p = new ProcessClient(c);
    p.start();
    }
    }
    }
    class ProcessClient extends Thread{
    Socket client;

    public ProcessClient(Socket client){
    this.client = client;
    }
    public void run(){
    DataOutputStream dos = null;
    try{
    System.out.println(client.getInetAddress()+"连接到服务器");
    InputStream in = client.getInputStream();
    DataInputStream dis = new DataInputStream(in);
    OutputStream out = client.getOutputStream();
    dos = new DataOutputStream(out);
    Server.outList.add(dos);
    while(true){
    String msg = dis.readUTF();
    System.out.println(msg);
    for(int i=0;i<Server.outList.size();i++){
    DataOutputStream d =(DataOutputStream) Server.outList.elementAt(i);
    d.writeUTF(client.getInetAddress()+":"+msg);
    }
    }
    }catch(Exception e){
    System.out.println(client.getInetAddress()+"退出了");
    Server.outList.removeElement(dos);
    try{
    client.close();
    }catch(Exception e1){
    }
    }
    }
    }
    客户端代码:import java.net.*;
    import java.io.*;
    public class Client {
    public static void main(String args[]){
    ProcessServer p = new ProcessServer();
    p.start();
    }
    }
    class ProcessServer extends Thread{
    public void run(){
    try{
    Socket server = new Socket("127.0.0.1",2000);
    InputStream in = server.getInputStream();
    DataInputStream dis = new DataInputStream(in);
    ProcessInput p = new ProcessInput(dis);
    p.start();
    OutputStream out = server.getOutputStream();
    DataOutputStream dos = new DataOutputStream(out);
    while(true){
    String userInput = getUserInput();
    dos.writeUTF(userInput);

    }
    }catch(Exception e){

    }
    }

    public String getUserInput(){
    System.out.print("发送信息:");
    InputStreamReader inr = new InputStreamReader(System.in);
    BufferedReader br = new BufferedReader(inr);
    try {
    String s = br.readLine();
    return s;
    } catch (IOException e) {
    e.printStackTrace();
    return "";
    }
    }
    }
    class ProcessInput extends Thread{
    DataInputStream dis;
    public ProcessInput(DataInputStream dis){
    this.dis = dis;
    }
    public void run(){
    while(true){
    try{
    String msg = dis.readUTF();
    System.out.println(msg);
    }catch(Exception e){

    }
    }
    }
    }