聊天连接不起作用

时间:2014-09-06 19:05:43

标签: java chat

所以我想创建一个简单的聊天客户端,但不知何故连接不起作用。你能帮助我吗?这就是我写的:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import java.util.*;

 public class game implements ActionListener{
    JTextArea incoming;
    JTextField outgoing;
    BufferedReader reader;
    PrintWriter writer;
    Socket sock;

    public static void main(String [] args){
        game g = new game();
        g.go();

    }public void go(){
        JFrame frame = new JFrame("Chat");
        JButton sendB = new JButton("Send");
        JPanel mainPanel = new JPanel();
        incoming = new JTextArea(15,50);

        incoming.setLineWrap(true);
        incoming.setWrapStyleWord(true);
        incoming.setEditable(false);

            JScrollPane s = new JScrollPane(incoming);
            s.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
            s.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);     

        outgoing = new JTextField(25);
        sendB.addActionListener(this);
        mainPanel.add(s);
        mainPanel.add(outgoing);
        mainPanel.add(sendB);
        setUpnetworking();

        Thread readerThread = new Thread( new IncomingReader());
        readerThread.start();

        frame.getContentPane().add(BorderLayout.CENTER, mainPanel);
        frame.setVisible(true);
        frame.setSize(800,500);
        frame.setResizable(false);

    }public void actionPerformed(ActionEvent e){
        try{
            writer.println(outgoing.getText());
            writer.flush();
        }catch(Exception ex){
            ex.printStackTrace();
        }
        outgoing.setText("");
        outgoing.requestFocus();
    }public void setUpnetworking(){
        try {
            sock = new Socket("127.0.0.1", 5000 );
            InputStreamReader streamreader = new InputStreamReader(sock.getInputStream());
            reader = new BufferedReader(streamreader);
            writer = new PrintWriter(sock.getOutputStream());
            System.out.println("Connection Established");
        } catch (IOException exx) {
            exx.printStackTrace();
        }

    }public class IncomingReader implements Runnable{
        public void run(){
            String message;
            try{
                while ((message = reader.readLine()) != null){
                    System.out.println("read" + message);
                    incoming.append(message + "\n");
                }

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

我跑的时候遇到的错误:

java.net.ConnectException: Connection refused: connect
    at java.net.DualStackPlainSocketImpl.connect0(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
    at java.net.PlainSocketImpl.connect(Unknown Source)
    at java.net.SocksSocketImpl.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.<init>(Unknown Source)
    at java.net.Socket.<init>(Unknown Source)
    at game.setUpnetworking(game.java:66)
    at game.go(game.java:45)
    at game.main(game.java:18)
java.lang.NullPointerException
    at game$IncomingReader.run(game.java:79)
    at java.lang.Thread.run(Unknown Source)
java.lang.NullPointerException
    at game.actionPerformed(game.java:57)
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$400(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)

我真的不知道问题是什么:(有人可以帮助我,所以我可以建立一个有用的聊天客户端吗?我使用Eclipse。

对不好,Englisch,我来自荷兰

2 个答案:

答案 0 :(得分:1)

对于聊天应用程序,您需要后端和客户端解决方案。 要跳过服务器端解决方案开发的部分,可以使用某些平台提供的现成的后端和SDK。那应该节省您大量的时间和精力,并且您将能够专注于UI实现。 以下是您可能会考虑使用的一些提供程序:

  • ConnectyCube
  • Firebase
  • 发送鸟

这里也是article比较其中一些功能的功能。

答案 1 :(得分:0)

你真的需要构建一个服务器。你需要经历一些网络。但是,如果你需要一台服务器,我几个月前就做了。单独运行。看看你是否能使它发挥作用。

https://github.com/DhavalKapil/ForwardingServer