【问题标题】:Socket works on command line but fails on Swing套接字在命令行上工作,但在 Swing 上失败
【发布时间】:2011-10-21 23:49:12
【问题描述】:

这个问题是这个问题的后续问题: BufferedReader readLine method hangs and block program

我现在有一个运行流畅的服务器和一个客户端,但后来我尝试使用 swing 实现一个 GUI 界面。使用相同的代码,套接字构造函数失败。

我的课是这样的:

public class TCPClient {

    public BufferedWriter ostream = null;
    public BufferedReader istream = null;
    public TCPClient(String host, String port) throws UnknownHostException {
    InetAddress ip = InetAddress.getByName(host);

    try {
        Socket socket = new Socket(host, Integer.parseInt(port));

        ostream = new BufferedWriter(socket.getOutputStream());
        istream = new BufferedReader(new InputStreamReader(socket.getInputStream()));


    } catch (IOException ex) {
        Logger.getLogger(TCPClient.class.getName()).log(Level.SEVERE, null, ex);
    }

}

此代码在从主函数调用时完美运行。在swing中,我有一个按钮调用以下方法:

private void enviarMsgTCP() throws IOException {
    screenOutput.append("Sent:\n" + mensagem.getText() + "\n");
    if (client == null){
        try {
            client = new TCPClient(destIp.getText(), port.getText());
        } catch (UnknownHostException ex) {
            Logger.getLogger(GUI.class.getName()).log(Level.SEVERE, null, ex);
            saidaTexto.append("Não foi possível se conectar ao host.\n");
        }
    }

使用此代码,下面的行(在 TCPClient 中)会引发异常:

Socket socket = new Socket(host, Integer.parseInt(port));

异常堆栈跟踪:

21/10/2011 21:44:42 cliente.ClienteTCP <init>
GRAVE: null
java.net.ConnectException: Connection refused: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
at java.net.Socket.connect(Socket.java:529)
at java.net.Socket.connect(Socket.java:478)
at java.net.Socket.<init>(Socket.java:375)
at java.net.Socket.<init>(Socket.java:218)

可能是什么? 再次感谢

【问题讨论】:

    标签: java sockets


    【解决方案1】:

    连接被拒绝意味着在连接时指定的 IP:port 上没有任何东西在监听。

    你怎么还有DataOutputStream?

    【讨论】:

    • 哦,我从另一个线程粘贴代码以腾出一些时间。那是一个错误。关于这个问题,我让服务器在听。我改变了我的主类并尝试了,没有重新启动服务器以使用我的文本界面并且它可以工作。
    猜你喜欢
    • 2014-08-18
    • 1970-01-01
    • 2019-04-21
    • 2012-10-15
    • 2013-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多