该代码是一个简单的程序,可以将东西从一台计算机发送到另一台计算机。如果客户端和服务器连接到不同的网络,则可以使用该功能,但当其位于同一网络时,则无法使用。 (已为所有正在使用的端口启用端口转发)
这是针对一个类似于区块链的不同程序。我不确定是否是路由器问题。我的猜测是,端口转发将无法在网络客户端之间内部进行,这似乎是路由器问题。帮助!
客户端:
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()方法内
答案 0 :(得分:0)
路由器可能通过端口转发机制将通过其WAN连接接收的数据包路由到LAN上的计算机。如果您从LAN发送到服务器正在执行的WAN地址,则路由器很可能没有通过端口转发机制将地址“折返”到LAN中。
通过将服务器发送到客户端计算机的实际LAN地址,您可以轻松地对此进行验证。
我不认为这是路由器的缺陷。我认为这就是NAT的方式。