宝示西木 2015-04-02 03:42 采纳率: 0%
浏览 1901

关于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("");

}*/

}

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

  • 写回答

4条回答 默认 最新

  • threenewbee 2015-04-02 03:48
    关注

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

    检查网络设置

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

    评论

报告相同问题?

悬赏问题

  • ¥100 求数学坐标画圆以及直线的算法
  • ¥35 平滑拟合曲线该如何生成
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 自己瞎改改,结果现在又运行不了了
  • ¥15 链式存储应该如何解决