构建简单的聊天客户端

时间:2011-07-07 18:37:36

标签: java chat inputstream outputstream

我正在建立一个只能发送和接收消息的简单聊天客户端。

我使用在我自己的计算机上运行的服务器将发送给它的任何消息发回给连接到服务器的所有用户。

当我通过单击“发送按钮”向服务器发送消息时,服务器不会按照预期将消息发回给我。所以要么我的输出流不工作,要么输入消息的监听器不工作,但无法弄清楚出了什么问题。

我可能会补充说,我没有收到任何错误消息/异常并连接到服务器

public class Chatt extends JFrame implements Runnable{
    private JPanel topPanel = new JPanel();
    private JPanel bottomPanel = new JPanel();
    private JTextArea chattArea = new JTextArea();
    private JButton sendButton = new JButton("Skicka");
    private JLabel chattPerson = new JLabel("Du chattar med: ");
    private JTextField chattField = new JTextField(15);
    private Thread thread;
    private int port;
    private String ip;
    private DataInputStream in;
    private DataOutputStream out;
    private Socket s;


    public Chatt(String ip, int port){
        this.ip=ip;
        this.port=port;
        Konstruktor();
        }
    public Chatt(){
        ip="127.0.0.1";
        port=2000;
        Konstruktor();
        }
    public Chatt(String ip){
        this.ip=ip;
        port=2000;
        Konstruktor();
        }

    public void Konstruktor(){
        setLayout(new BorderLayout());

        chattArea.setSize(70, 50);  
        add(chattArea, BorderLayout.CENTER);

        bottomPanel.setLayout(new BoxLayout(bottomPanel, BoxLayout.X_AXIS));
        bottomPanel.add(sendButton);
        bottomPanel.add(chattField);
        sendButton.addActionListener(new sendListener());
        add(bottomPanel, BorderLayout.SOUTH);

        topPanel.setLayout(new BoxLayout(topPanel, BoxLayout.X_AXIS));
        topPanel.add(chattPerson);
        add(topPanel, BorderLayout.NORTH);

        try {
            //s = new Socket("atlas.dsv.su.se", 9494);
            s=new Socket(ip, port); 
            } 
        catch (UnknownHostException e) {
                System.out.println("Connection failed");
                } 
        catch (IOException e) {
                    }
        try{
        in= new DataInputStream(new BufferedInputStream(s.getInputStream()));
        out= new DataOutputStream(new BufferedOutputStream(s.getOutputStream()));
        }
        catch(UnknownHostException e){
                System.out.println("Host unknown");
            }
        catch(IOException e){

        }
        thread = new Thread(this);
        thread.start();

        setTitle("Connected to "+ip+" på port "+port);
        chattArea.setEditable(false);
        setSize(400, 500);
        setVisible(true);
        setResizable(false);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }
    public void run() {

            while(true){
                System.out.println("tråden igång");
                try {
                    String temp = in.readUTF();
                    System.out.println(temp);
                    chattArea.append(temp);
                } catch (IOException e) {

                }

            }       
    }


    public class sendListener implements ActionListener{
        public void actionPerformed(ActionEvent e){
            String chattString = chattField.getText();
                try {
                    out.writeUTF(chattString);
                    out.flush();
                    } 
                catch (IOException e1) {

                    }
                chattArea.append("Du: "+chattString+"\n");
                chattField.setText("");

            }

    }



    public static void main(String[] args){
        //new Chatt("127.0.0.1", 2000);
        //new Chatt();
        new Chatt("127.0.0.1");
    }

}

1 个答案:

答案 0 :(得分:1)

我可以确认聊天服务器无法正常工作。我确实构建了自己的服务器并且发送/恢复消息工作正常,所以我的代码没有任何问题。