Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java网络问题:Java.net.ConnectException:连接被拒绝:连接_Java_Sockets_Exception_Networking - Fatal编程技术网

Java网络问题:Java.net.ConnectException:连接被拒绝:连接

Java网络问题:Java.net.ConnectException:连接被拒绝:连接,java,sockets,exception,networking,Java,Sockets,Exception,Networking,当我运行一个简单的网络程序时,我无法用Java进行任何网络连接,即使使用本地主机, 错误: java.net.ConnectException: Connection refused: connect at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.PlainSocketImpl.doConnect(Unknown Source) at java.net.PlainSocketImpl.connectToA

当我运行一个简单的网络程序时,我无法用Java进行任何网络连接,即使使用本地主机, 错误:

java.net.ConnectException: Connection refused: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(Unknown Source)
at java.net.PlainSocketImpl.connectToAddress(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 EchoClient.main(EchoClient.java:8)

我使用windows 7,我已关闭windows防火墙,并且没有防病毒软件。

请仔细检查您的本地EchoServer是否已启动并在端口1234上运行。如果没有服务器在该端口上运行,您将无法连接。

正如我在评论中所写,请检查服务器(类似EchoServer?)是否已启动并正在运行


但是,当你成功连接时,还有其他问题<代码>pw.println(stdIn.nextLine())可能不会将内容发送到服务器,您需要执行
pw.flush()
要真正发送内容,或者您可以使用自动刷新创建您的
PrintWriter

 pw = new PrintWriter(clientOut, true);

如果您需要
EchoServer
我刚刚编写了一个可以与您的客户端一起使用的服务器,如果您添加了我上面描述的刷新:

public class EchoServer {
    public static void main(String[] args) throws IOException {
        ServerSocket ss = new ServerSocket(1234);

        while (true) {
            // accept the connection 
            Socket s = ss.accept();

            try {
                Scanner in = new Scanner(s.getInputStream());
                PrintWriter out = new PrintWriter(s.getOutputStream(), true);

                // read a line from the client and echo it back
                String line;
                while ((line = in.nextLine()) != null) 
                    out.println(line);

            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                s.close();
            }
        }
    }
}

您可以使用telnet localhost 1234试试,我在Windows 7中的解决方案是打开“简单TCP/IP服务”。此处描述:

您似乎需要连接到服务器!您启动了“EchoServer”吗?它可能很有用:关于套接字的所有内容:旁注:您应该在“finally”块中调用这些close()方法,以确保即使主块中出现异常,它们也会发生。否则,您的程序将泄漏资源。顺便说一句,close()总是执行flush(),因此如果在finally块中关闭,则不需要显式刷新。@Andrew Swan:
close()
是在客户端需要响应后完成的,这将导致“死锁”…只需在cmd提示符netstat-aon | findstr“1234”中运行此命令即可,要查看端口1234上运行的任何进程,问题不在于pw.flush();问题在于Socket client=newsocket(InetAddress.getLocalHost(),1234);如果我删除除此之外的所有内容,我仍然会收到一个错误,并且您已经启动了服务器?如果您没有服务器,您可以尝试我提供的服务器代码-我也用您的客户机(+flushing)尝试过,它可以工作!
public class EchoServer {
    public static void main(String[] args) throws IOException {
        ServerSocket ss = new ServerSocket(1234);

        while (true) {
            // accept the connection 
            Socket s = ss.accept();

            try {
                Scanner in = new Scanner(s.getInputStream());
                PrintWriter out = new PrintWriter(s.getOutputStream(), true);

                // read a line from the client and echo it back
                String line;
                while ((line = in.nextLine()) != null) 
                    out.println(line);

            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                s.close();
            }
        }
    }
}