Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.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 无法通过internet连接到ServerSocket_Java_Sockets_Serversocket - Fatal编程技术网

Java 无法通过internet连接到ServerSocket

Java 无法通过internet连接到ServerSocket,java,sockets,serversocket,Java,Sockets,Serversocket,大家好,我创建了一个简单的聊天室应用程序,但我无法连接到服务器发送和接收数据,以下是我的部分代码: 服务器端: import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import java.util.regex.Pattern; public class L

大家好,我创建了一个简单的聊天室应用程序,但我无法连接到服务器发送和接收数据,以下是我的部分代码:

服务器端:

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.regex.Pattern;

public class Listener {

public static void start() {
    try {
        final ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
        serverSocketChannel.configureBlocking(true);
        serverSocketChannel.socket().bind(new InetSocketAddress(GetConfigs.getServerListenerPort()));
        final List<Operator> operators = new ArrayList<>();
        final int nOperators = 64;
        for (int i = 0; i < nOperators; i++) {
            operators.add(i, new Operator());
        }
        final int parallelism = Runtime.getRuntime().availableProcessors();
        ForkJoinPool pool = new ForkJoinPool(parallelism);
        pool.submit(() -> new Thread(() -> {
            int i = 0;
            while (true) {
                try {
                    operators.get(i).newOperation(serverSocketChannel.accept());
                    i++;
                    if (i == nOperators) {
                        i = 0;
                    }
                } catch (IOException ignored) {
                }
            }
        })).fork().invoke().start();
    } catch (IOException e) {
        Logging.log.error(e);
    }
}
它在局域网连接上工作

请帮帮我…

我猜:
我今天也遇到了同样的问题,我的客户端服务器在我的wifi上工作,但没有与外部的客户端一起工作。我在路由器上转发了端口,但问题是它没有转发到我运行服务器程序的计算机上。我换了衣服后,它工作了。

这里有一个简单的测试。Ssh连接到LAN之外的计算机,这是一台无法连接的计算机。尝试两件事:

ping <ip address you connect to>
ping

telnet
如果ping失败,很有可能您正在使用“内部”IP地址,比如192.168.x.y(或其他类似的地址)。尝试从您的服务器计算机使用


如果ping成功而telnet失败,您可能会遇到防火墙问题:请在路由器上设置端口转发,在防火墙上戳一个洞,然后执行任何需要的操作。具体需要什么取决于您的具体设置。

可能的重复--即使链接的问题涉及JDBC连接,问题也是一样的,答案中的诊断步骤适用
serverSocket=new serverSocket(GetConfigs.getServerListenerPort())
服务器上的端口是否打开?我以为您刚刚问了这个问题,并确定网络配置正在禁止连接尝试。您是否认为再次询问会修复网络设置?你知道答案了,网络上的某些东西阻止了连接尝试。将该网络配置为允许在正确端口及其固定端口上使用正确协议的通信。但是你应该认真考虑我在你为这个问题提出的第一个帖子上的评论。ARM将在发送第一位数据后立即关闭客户端套接字。这意味着如果不重新建立连接,您将无法再发送更多数据。此外,客户端将无法读取或向服务器发送任何内容。或路由器、域控制器或防火墙。。。。这就是为什么我们不能给你一个确切的答案,具体是什么在网络上是造成问题的部分原因。我们所知道的是,它可以在局域网上工作(大概是通过简单的网络设置),但在您的环境中不起作用。
ping <ip address you connect to>
telnet <ip address you connect to> <port you connect to>