Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.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 我可以ping我的本地主机,但我可以';与其他IP地址连接_Java_Udp_Ping - Fatal编程技术网

Java 我可以ping我的本地主机,但我可以';与其他IP地址连接

Java 我可以ping我的本地主机,但我可以';与其他IP地址连接,java,udp,ping,Java,Udp,Ping,我这里有一个UDP ping客户端。我不知道我是否做得对,但我认为如果我将127.0.0.1设置为IP地址,它会起作用。但如果我把它设置为,比如,谷歌的IP地址,它就不会。我得到一个异常:java.net.SocketTimeoutException:Receive超时 import java.io.*; import java.net.*; import java.util.*; public class PingClient { private static final int

我这里有一个UDP ping客户端。我不知道我是否做得对,但我认为如果我将
127.0.0.1
设置为IP地址,它会起作用。但如果我把它设置为,比如,谷歌的IP地址,它就不会。我得到一个异常:
java.net.SocketTimeoutException:Receive超时

import java.io.*;
import java.net.*;
import java.util.*;

public class PingClient {

    private static final int AVERAGE_DELAY = 0;
    public static void main(String[] args) throws Exception    {
        int port = 4997;
        DatagramSocket socket = new DatagramSocket(port);

        for(int i=1;i<=10;i++) {
            byte[] buf = new byte[1024] ;
            Calendar cal=Calendar.getInstance();
            String ping="PING "+ i +" "+cal.getTimeInMillis()+" ms"+"\r\n";
            buf=ping.getBytes("UTF-8");
            InetAddress address = InetAddress.getByName("69.63.176.11");
            DatagramPacket packet = new DatagramPacket(buf, buf.length, address, port);
            packet.setData(buf);
            socket.send(packet);
            Thread.sleep( 10* AVERAGE_DELAY);
            DatagramPacket server_response = new DatagramPacket(new byte[1024], 1024);
            socket.setSoTimeout(1000);
            socket.receive(server_response);
            printData(server_response);
        }   
    }
}
import java.io.*;
导入java.net。*;
导入java.util.*;
公共类PingClient{
专用静态最终整数平均延迟=0;
公共静态void main(字符串[]args)引发异常{
int端口=4997;
DatagramSocket套接字=新DatagramSocket(端口);

对于(inti=1;iPing是互联网时代一只有趣的恐龙

很遗憾,您没有指定所处的平台。在Windows平台上,127.0.0.1(即本地主机地址)将不会通过实际的网络适配器进行路由。Microsoft已优化本地主机路由,以通过堆栈的不同部分,因此无论网络连接如何,它都将一直工作

在基于Unix的主机上,您将能够使用网络嗅探器查看发送到“lo”或环回接口的数据包。无论internet连接如何,这些数据包都会工作

Ping是一个非常古老的协议,它使用ICMP协议。我相信这实际上是一个底层,或者可能与UDP在同一个网络层,但它不是UDP消息

正如另一位成员对这个问题的评论——如果您发送到的端口上没有任何内容,那么您正在编写的客户端将失败

有关“ping”命令作用的详细信息,请参阅

编辑以获取更多信息 我想我看到了问题所在-play中有两个不同的端口号客户端在端口4997上创建套接字,服务器在端口8117上创建套接字。这似乎是不匹配的一部分

我做了一个快速的谷歌搜索,这可能会给你指出正确的方向。更多信息,请参阅


我已经很多年没有编写TCP/UDP级别的东西了,所以很抱歉我不能提供更多实质性的信息。

你说的“我不能ping”是什么意思?异常?没有答案?另外,关于2.,是的,因为127.0.0.1是环回,是您自己的机器。远程计算机上的UDP端口4997上有您希望从中得到答案的东西吗?@fge:我得到一个异常:
java.net.SocketTimeoutException:Receive timeout
@JoachimPileborg:没有。这是我发明的吗问题?抱歉,我还不熟悉。另外,命令行
ping
命令发送的“ping”与您的程序的工作原理完全不同。标准ping使用的是UDP而不是UDP。127.0.0.1是您的本地主机。是的,您可以在没有internet连接的情况下对其进行ping。