Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема c MulticastSocket 
:(
    Опции темы
Sokolll
Дата 11.11.2009, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 8.4.2007

Репутация: нет
Всего: 0



Пишу приложение для широковещательной рассылки сообщений через 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 - задание лабораторной.



PM MAIL   Вверх
fixxer
Дата 12.11.2009, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 14.9.2006
Где: Саратов, Россия

Репутация: нет
Всего: 27



Широковещательные пакеты UDP не маршрутизируются между сетями.

Это сообщение отредактировал(а) fixxer - 12.11.2009, 11:57


--------------------
user posted image
PM MAIL ICQ   Вверх
Sokolll
Дата 12.11.2009, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 8.4.2007

Репутация: нет
Всего: 0



Хм... Ясно, спасибо.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Работа с сетью | Следующая тема »


 




[ Время генерации скрипта: 0.0518 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.