Отправка данных с одного компьютера на другой, подключенный к той же WLAN - PullRequest
0 голосов
/ 22 января 2019

Код - это простая программа для отправки материалов с одного компьютера на другой. Это работает, если клиент и сервер подключены к разным сетям, но не будет работать, если это одна и та же сеть. (переадресация портов включена для всех используемых портов)

Это для другой программы, которая работает как блокчейн. Я не уверен, что это проблема маршрутизатора. Я предполагаю, что переадресация портов не будет работать внутри сети между клиентами сети, что может показаться проблемой роутера ПОМОГИТЕ!

Клиентская сторона:

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 голосов
/ 22 января 2019

Маршрутизатор направляет пакеты, полученные по его соединению WAN, к компьютерам в локальной сети, возможно, с использованием механизма переадресации портов. Если вы отправляете из локальной сети на адрес глобальной сети, который делает ваш сервер, то вполне вероятно, что маршрутизатор не «сворачивает» этот адрес в локальную сеть с помощью механизма переадресации портов.

Это можно легко проверить, отправив сервер на фактический адрес локальной сети клиентского компьютера.

Я не думаю, что это дефект роутера; Я думаю, что это так же, как с NAT.

...