关于socket通信,聊天小程序无法正常运行

初学java,编写一个客户端与服务器端互相通话的小程序,却无法正常运行,求大神帮忙看看怎么回事儿
这是服务器端代码:
import java.io.*;
import java.net.*;
import java.awt.event.*;
import javax.swing.*;

public class ServerSocketFrame extends JFrame {
private PrintWriter writer;
private BufferedReader reader;
private ServerSocket server;
private Socket socket;

private  JPanel jp = new JPanel();
private JTextArea jt = new JTextArea();
private JScrollPane js = new JScrollPane(jt);
private JTextField jName = new JTextField();
JLabel jl = new JLabel();

public ServerSocketFrame() {
    jp.setLayout(null);
    jName.setBounds(130, 15, 100, 20);
    jp.add(jName);
    js.setBounds(360, 80, 300, 300);
    jp.add(js);
    this.add(jp);
    this.setTitle("chat sever");
    this.setBounds(200, 200, 1000, 800);
    this.setVisible(true);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    getServer();
}

public void getServer() {
    try {
        jName.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                writer.print(jName.getText());
                jt.append("服务器端发消息:"+jName.getText()+"\n");
                jName.setText("");
            }
        });
        server = new ServerSocket(8888);
        jt.append("服务器套接字创建成功" + "\n");

        jt.append("等待客户端连接" + "\n");
        while(true){
        socket = server.accept();
        reader = new BufferedReader(new InputStreamReader(
                socket.getInputStream()));
        writer = new PrintWriter(socket.getOutputStream(), true);
    //  Thread.sleep(10000);
        //writer.print("nihao");



        //writer.print("wojiaolizeyu");

            String line = reader.readLine();

                jt.append("接受客户端发来的信息" + line + "\n");
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

    finally {
        try {
            reader.close();
            socket.close();
        } catch (Exception e) {
            e.printStackTrace();

        }
    }
}

public static void main(String[] args) {
    new ServerSocketFrame();
}

/*public void actionPerformed(ActionEvent e) {
    writer.print(jName.getText());
    jt.append("服务器发送的信息:" + jName.getText() + "\n");
    jName.setText("");
    writer.flush();

}
*/

}

这是客户端代码:
import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class ClientSocketFrame extends JFrame {
JPanel jp = new JPanel();
private JTextArea jt = new JTextArea();
private JScrollPane js = new JScrollPane(jt);
private JTextField jName = new JTextField();
JLabel jl = new JLabel();
PrintWriter writer;

BufferedReader reader;
Socket socket;

public ClientSocketFrame() {
    jp.setLayout(null);
    jName.setBounds(130, 15, 100, 20);
    jp.add(jName);
    js.setBounds(360, 80, 300, 300);
    jp.add(js);
    this.add(jp);
    this.setTitle("chat sever");
    this.setBounds(200, 200, 1000, 800);
    this.setVisible(true);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    getClient();
}

public void getClient() {
    try {
        jName.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                writer.print(jName.getText());
                jt.append("客户发消息:"+jName.getText()+"\n");
                jName.setText("");
            }
        });
        socket = new Socket("127.0.0.1", 8888);
        System.out.println(socket);
        jt.append("尝试连接..." + "\n");
    while (true) {      
            writer = new PrintWriter(socket.getOutputStream(), true);
            reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        jt.append("完成连接"+"\n");



    System.out.println("dsf");




    String line=reader.readLine();
    System.out.println("eff");
           System.out.println(line);
            jt.append("接收服务器发来的信息" + line + "\n");

    System.out.println("haha");

}

}
catch(Exception e){
e.printStackTrace();
}

finally {
try {
reader.close();
socket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}

public static void main(String[] args) {
    new ClientSocketFrame();
}

/* public void actionPerformed(ActionEvent e) {
writer.print(jName.getText());
jt.append("客户端发送消息"+jName.getText() + "\n");
jName.setText("");

}*/

}

求各路大神帮忙看看这个小程序哪里出问题了,多谢大家了!

调试,先检查是数据发送的问题还是接收的问题

检查网络设置

既然你有
catch (Exception e) {
e.printStackTrace();
}
看看有没有错误,贴出来

这应该是不对的,每次循环后,就连接就直接close掉了。

 finally {
        try {
            reader.close();
            socket.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

可以看一下例子
http://blog.csdn.net/gxy3509394/article/details/7899923

先运行服务端,然后运行客户端,接下来看客户端是否连接上服务端,服务端是否收到客户端请求

跟我的一样,我也刚学,后来我试了下,好像只要客户端中事务监听器不和socket的创建不都在构造函数里就可以了,但具体为什么我也不清楚,求大神指教!

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class Client extends JFrame{
Socket socket = null;
PrintWriter pw=null ;
JTextField tf = new JTextField();
JTextArea ta = new JTextArea();

public Client() {
        tf.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e) {
                String str = tf.getText();
                ta.append("客户端说:" + str + "\n");
                tf.setText("");
                System.out.println(str);
                pw.println(str);
            }
        });
        JLabel label = new JLabel("请输入聊天内容:");
        this.setLayout(null);
        label.setBounds(10, 10, 100, 50);
        tf.setBounds(120, 25, 200, 20);
        ta.setBounds(0, 50, 400, 300);
        add(label);
        add(tf);
        add(ta);
        this.setSize(400, 300);
        this.setLocationRelativeTo(null);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
}
public void start()
{
        try {
            socket = new Socket("localhost", 8088);
            pw = new PrintWriter(new OutputStreamWriter(
                    socket.getOutputStream()),true);
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
}
public static void main(String[] args) {
    Client client = new Client();
    client.start();
}

}