javaTCP通话程序

怎么样让服务器和客户端都能获取到对方的消息,并且输出在方框内。

package CNT;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.InetAddress;
import java.net.Socket;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class AClient extends JFrame implements ActionListener, Runnable {
    private Socket socket;
    private int Port = 1200;
    private String ip;

    private JTextArea area = new JTextArea("聊天内容:\n");
    private JTextField field = new JTextField("");

    public AClient(){
        this.setTitle("客户端");
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.add(field,BorderLayout.NORTH);
        field.addActionListener(this);
        this.add(area, BorderLayout.CENTER);
        this.setSize(350, 290);
        this.setLocation(550, 200);
        this.setVisible(true);
        try{
            ip = "127.0.0.1";
            socket = new Socket(ip,Port);
            OutputStream os = socket.getOutputStream();
            PrintStream ps = new PrintStream(os);
            ps.println("客户端连接");
            new Thread(this).start();
        }catch (Exception ex){
        }
    }
    public void run(){
        try{
            while(true){
                InputStream is = socket.getInputStream();
                BufferedReader bf = new BufferedReader(new InputStreamReader(is));
                String str = bf.readLine();
                area.append(str + '\n');
            }
        }catch (Exception ex){
        }
    }
    public void actionPerformed(ActionEvent e){
        try{
            OutputStream os = socket.getOutputStream();
            InputStream is = socket.getInputStream();
            PrintStream ps = new PrintStream(os);
            ps.println("客户端说:" + field.getText());
            field.setText("");
        }catch (Exception ex){
        }
    }
    public static void main(String[] args) {

        new AClient();
    }
}
package CNT;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class AServer extends JFrame implements ActionListener,Runnable {
    private int Port = 1200;
    private ServerSocket SS;
    private Socket socket;

    private JTextArea area = new JTextArea("聊天内容:"+'\n');
    private JTextField field = new JTextField("");

    public AServer(){
        this.setTitle("服务器");
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.add(area,BorderLayout.CENTER);
        this.add(field,BorderLayout.NORTH);
        field.addActionListener(this);
        this.setSize(350, 290);
        this.setLocation(550, 200);
        this.setVisible(true);
        try{
            SS = new ServerSocket(Port);
            socket = SS.accept();
            new Thread(this).start();
        }catch(Exception ex){
        }
    }
    public void run(){
        try{
            while(true){
                InputStream is = socket.getInputStream();
                BufferedReader br = new BufferedReader(new InputStreamReader(is));
                String str = br.readLine();
                area.append(str + '\n');
            }
        }catch(Exception ex){
        }
    }
    //执行的操作
    public void actionPerformed(ActionEvent e){
        try{
            OutputStream os = socket.getOutputStream();
            PrintStream ps = new PrintStream(os);
            ps.println("服务器说:" + field.getText());
            field.setText("");
        }catch(Exception ex){
        }
    }
    public static void main(String[] args){
        new AServer();
    }
}

你应该把try写在while里面,这样读取数据超时了就继续读取
否则只要超时就直接退出了
此外,你应该多写异步方法,接收到数据之后自动调用方法,而不是搞个线程一直在这阻塞着