Многопоточность UDP работает на одной машине с несколькими клиентами, но не на разных машинах. - PullRequest
0 голосов
/ 11 апреля 2019

Я создал клиент-серверную программу, которая хорошо работает на той же машине, но я не могу запустить ее на разных ноутбуках.

Я проверил порты и адрес многоадресной рассылки, и все совпадает.

Это мой клиент:

import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;

public class BroadcastClient {
    public InetAddress address;
    public byte[] buffer;
    public DatagramPacket packet;
    public String str, str2;
    public MulticastSocket socket;

    public BroadcastClient() throws Exception{
        socket = new MulticastSocket(1502);
        System.out.println("Waiting for messages from server");
        transmit();
    }

    public void transmit(){
        try{
            //receive data using port
            address = InetAddress.getByName("233.0.0.1");

            //register client to the group multicast
            socket.joinGroup(address);

            while (true){
                buffer = new byte[256];
                packet = new DatagramPacket(buffer, buffer.length);

                //receive data from server
                socket.receive(packet);
                str = new String(packet.getData());
                System.out.println("Received message: " + str);
            }
        }catch (Exception e){
            System.out.println("error: " + e);

        }finally {
            try {
                //remove client from multicast group
                socket.leaveGroup(address);

                //close socket
                socket.close();

            }catch (Exception e){
                System.out.println("Error: "+ e);
            }
        }
    }
}

А это мой сервер:

import com.sun.xml.internal.ws.policy.privateutil.PolicyUtils;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.Inet4Address;
import java.net.InetAddress;

public class BroadcastServer {

    BufferedReader in = null;
    String str = null;
    byte[] buffer;
    DatagramPacket packet;
    InetAddress address;
    int port;
    DatagramSocket socket;

    public BroadcastServer() throws IOException {
        System.out.println("Sending message");

        //create to receive
        socket = new DatagramSocket();

        transmit();

    }

    public void transmit() {

        try {

            in = new BufferedReader(new InputStreamReader(System.in));

            while (true) {

                System.out.println("Send to everyone");

                str = in.readLine();

                buffer = str.getBytes();
                address = InetAddress.getByName("233.0.0.1");

                //send data to port 1502
                packet = new DatagramPacket(buffer, buffer.length, address, 1502);

                //send messages to all clients
                socket.send(packet);

            }

        } catch (Exception e) {

            System.out.println("Error 2: " + e);

        } finally {

            try {
                in.close();
            } catch (Exception e) {
                System.out.println("Error3: " + e);
            }
        }
    }
}


Вот как я их называю:

Клиент:


public class UDPClient {

    public static void main(String[] args) throws Exception {
        BroadcastClient client = new BroadcastClient();
    }
}

Сервер:

public class UDPServer {

    public static void main(String[] arg) throws Exception {
        //start
        BroadcastServer server = new BroadcastServer();
    }
}

Я что-то упустил?Я не могу понять это вообще.Роутер может быть моей проблемой?

...