从一台计算机向连接到同一WLAN的另一台计算机发送数据

时间:2019-01-21 22:37:44

标签: java networking udp datagram

该代码是一个简单的程序,可以将东西从一台计算机发送到另一台计算机。如果客户端和服务器连接到不同的网络,则可以使用该功能,但当其位于同一网络时,则无法使用。 (已为所有正在使用的端口启用端口转发)

这是针对一个类似于区块链的不同程序。我不确定是否是路由器问题。我的猜测是,端口转发将无法在网络客户端之间内部进行,这似乎是路由器问题。帮助!

客户端:

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.Inet4Address;
import java.net.InetAddress;
import java.util.Arrays;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) throws Exception{
        String ipaddress = "70.121.56.92";
        DatagramSocket reciever = new DatagramSocket(3535);
        DatagramPacket pacc = new DatagramPacket(new byte[98],98);
        Scanner s = new Scanner(System.in);
        if (s.nextLine().equals("0")) {
            reciever.receive(pacc);
            System.out.println(Arrays.toString(pacc.getData()));
        }
    }
}

服务器端:

import java.net.*;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) throws Exception{
        Scanner kb=new Scanner(System.in);
        DatagramSocket me=new DatagramSocket(3537);
        String msg="";
        while(!msg.equals("stop")){
            System.out.print("msg: ");
            msg=kb.nextLine();
            byte[] bs=new byte[msg.length()];
            for(int i=0; i <msg.length(); ++i){
                bs[i] = (byte) msg.charAt(i);
            }
            DatagramPacket dgp=new DatagramPacket(bs, bs.length, InetAddress.getByName("70.121.**.9*"//this is my public router address), 3535 );
            me.send(dgp);
        }
    }
}

在另一个网络上,它显示了我在服务器控制台上的客户端中输入的字符串。在同一网络上,它卡在了reciever.recieve()方法内

1 个答案:

答案 0 :(得分:0)

路由器可能通过端口转发机制将通过其WAN连接接收的数据包路由到LAN上的计算机。如果您从LAN发送到服务器正在执行的WAN地址,则路由器很可能没有通过端口转发机制将地址“折返”到LAN中。

通过将服务器发送到客户端计算机的实际LAN地址,您可以轻松地对此进行验证。

我不认为这是路由器的缺陷。我认为这就是NAT的方式。