Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Работа с сетью > Проблема c MulticastSocket


Автор: Sokolll 11.11.2009, 21:31
Пишу приложение для широковещательной рассылки сообщений через UDP.
Сервер может только посылать сообщения, клиенты только принимать.

На сервере использую DatagramSocket, на клиенте - MulticastSocket.
На компе, подключенном к локальной сети, все работает нормально. А вот из дома  - комп подключен к интернету без локальной сети,  - клиент сообщения не принимает. 

Код сервера:
Код

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

public class Server {

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

   public Server() throws IOException {
    System.out.println("Sending messages");
     // Создается объект DatagramSocket, чтобы 
    // принимать запросы клиента
    socket = new DatagramSocket();
    // Вызов метода transmit(), чтобы передавать сообщение всем 
   // клиентам, зарегистрированным в группе
    transmit();
 }

    public void transmit() {
    try {
        in = new BufferedReader(new InputStreamReader(System.in));
        while (true) {
            System.out.println("Введите строку для передачи клиентам: ");
            str = in.readLine();
            buffer = str.getBytes();
            address = InetAddress.getByName("233.0.0.1");
            // Посылка пакета датаграмм на порт номер 1502
            packet = new DatagramPacket( buffer,    buffer.length,         address,      1502);
                
            //Посылка сообщений всем клиентам в группе
            socket.send(packet);
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            // Закрытие потока и сокета
            in.close();
            socket.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

   public static void main(String arg[]) throws Exception {
    // Запуск сервера
    new Server();
 }
 }
 



Код клиента:
Код

import java.net.*;

public class Client {
    private static InetAddress address;
    private static byte[] buffer;
    private static DatagramPacket packet;
    private static String str;
    private static MulticastSocket socket;

    public static void main(String arg[]) throws Exception {
        System.out.println("Ожидание сообщения от сервера");
        try {
            // Создание объекта MulticastSocket, чтобы получать 
                       // данные от группы, используя номер порта 1502
            socket = new MulticastSocket(1502);

            address = InetAddress.getByName("233.0.0.1");

            // Регистрация клиента в группе
            socket.joinGroup(address);
            while (true) {
                buffer = new byte[256];
                packet = new DatagramPacket(buffer, buffer.length);
                // Получение данных от сервера
                socket.receive(packet);
                str = new String(packet.getData());
                System.out.println(  "Получено сообщение: " + str.trim());
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                // Удаление клиента из группы 
                socket.leaveGroup(address);
            // Закрытие сокета
                socket.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}



Искал в интернете - пишут что, для подключений не LAN надо как то по другому писать, а как именно не нашел.
Причем необходимо сделать с использованием именно multicastsocket - задание лабораторной.



Автор: fixxer 12.11.2009, 11:54
Широковещательные пакеты UDP не маршрутизируются между сетями.

Автор: Sokolll 12.11.2009, 13:57
Хм... Ясно, спасибо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)