Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сетевое программирование в vb.net 2 
:(
    Опции темы
Skywalker
Дата 7.5.2004, 09:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Еще раз здравствуйте smile.gif
На этот раз у меня 2 вопроса:
1) Можно ли послать какой-либо запрос на весь диапазон ай-пи?(широкое вещание)(Простот как сетевые игры узнают что есть другие клиенты этой игры в сети?)
2)Можно ли TcpListenerу добавить событие, например Pending ? Если да то как?

Заренее благодарен за вашу помощь...


--------------------
"Мы в ответе за тех, кого приручили" Антуан де Сент Экзюпери, Маленький принц
PM MAIL WWW ICQ   Вверх
Kurt
Дата 8.5.2004, 03:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлеченный
***


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

Репутация: 20
Всего: 36



Цитата
1) Можно ли послать какой-либо запрос на весь диапазон ай-пи?(широкое вещание)(Простот как сетевые игры узнают что есть другие клиенты этой игры в сети?)

Прости, я слабовато разбираюсь в этой области, что ты подразумеваешь под "послать запрос"?
Соединение через сокеты? Не понимаю немного смысла вопроса..
Если тебе надо, чтобы клиенты игры узнавали о других клиентах, не проще ли выделить некий сервер (его IP всегда известен), к-й будет хранить информацию о других клиентах и выдавать по мере надобности..
Цитата
2)Можно ли TcpListenerу добавить событие, например Pending ? Если да то как?

Поясни, пожалуйста, (как я уже говорил, я с этим еще не работал..) что такое pending. withstupid.gif
Следует ли понимать твой вопрос как "как добавить к классу новое событие"?. Если да, то могу отписать общий ответ, не привязываясь к TcpListener'у.
Или что-то другое имеется ввиду?..


--------------------
Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед)
...
Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн)
PM ICQ   Вверх
Skywalker
Дата 8.5.2004, 07:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



по вопросу 1:
Просто понимаешь, сетвые игры как-то узнают какие карты(например quake3) были созданы...
по вопросу 2:
Как можно классу добавить событие?

Это сообщение отредактировал(а) Skywalker - 8.5.2004, 07:42


--------------------
"Мы в ответе за тех, кого приручили" Антуан де Сент Экзюпери, Маленький принц
PM MAIL WWW ICQ   Вверх
stron
Дата 8.5.2004, 09:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Консультант
***


Профиль
Группа: Комодератор
Сообщений: 1654
Регистрация: 17.7.2003
Где: Питер

Репутация: 4
Всего: 36



Цитата

Просто понимаешь, сетвые игры как-то узнают какие карты(например quake3) были созданы...

Если ничего не напутал (уже многое забыл), то
Они посылают широковещательные пакеты.
В каждой сети есть IP зарезервированный для этой цели
Напр.:
сеть 192.168 / 16, т.е. 192.168.0.1 - 192.168.255.255,
так в ней ip 192.168.255.255-широковещательный
вообще-то про эти тонкости лучше поспрашивать в соотв. форуме

А на клиенте сидит прога, кот. слушает какой-нибудь порт


--------------------
подписи нет
PM ICQ   Вверх
Kurt
Дата 8.5.2004, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлеченный
***


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

Репутация: 20
Всего: 36



Как добавить событие в класс? ИМХО, не сложно.
Первое, что нужно сделать, это объявить делегата, чтоб вызывать нужный нам метод при срабатывании события. Это делается, например, так (ессно, string-параметр тут тока для примера - но это не важно):

C#
Код
public delegate void MyHandler(string event_message);


VB.NET
Код
Public Delegate Sub MyHandler(ByVal event_message As String)


Managed C++
Код
__delegate void MyHandler(String* event_message);


Далее следует непосредственно объявления событий, с помощью ключевого слова event ("EqualNumbers" - так называется мое событие):

C#
Код
public static event MyHandler EqualNumbers;


VB.NET
Код
Public Shared Event EqualNumbers As MyHandler


Managed C++
Код
static __event MyHandler* EqualNumbers;


Все. Теперь осталось сгенерировать добавленное событие в теле какого-нибудь метода класса, просто вызвав EqualNumbers.
Чтобы было понятнее, я написал небольшой пример. Тут 2 класса - один непосредственно содержит событие, а другой навешивает на него обработчик и выдает сообщение при его срабатывании. Здесь событие генерируется, когда в цикле сучайная величиа совпадет с заданной (после этого я сразу выхожу из цикла - тут незачем дальше работать..).
Все. Единственное, что хотелось бы добавить, что новые события, конечно, могут быть и классов-наследников - это вовсе не обязательно новый класс.

C#
Код

using System;

namespace Delegate1
{
class ClassWithNewEvent
{
 public delegate void MyHandler(string event_message);

 public static event MyHandler EqualNumbers;

 public void TestNumbers(int number)
 {
  Random myRnd = new Random();
  int RndNumber;
  while(true)
  {
   RndNumber = myRnd.Next(number+5);
   if(number.Equals(RndNumber))
   {
    EqualNumbers("Yes! We've done it!!!");
    break;
   }
  }
  return;
 }


}

class ClassTest
{
 [STAThread]
 static void Main()
 {
  Console.WriteLine("Press <Enter>");
  Console.Read();
  ClassWithNewEvent wneObject = new ClassWithNewEvent();
  ClassWithNewEvent.EqualNumbers += new ClassWithNewEvent.MyHandler(OnMyEvent);
  wneObject.TestNumbers(5);
  Console.Read();
  Console.Read();
  return;
 }

 public static void OnMyEvent(string messageFromEvent)
 {
  Console.WriteLine("Message from our event: "+messageFromEvent);
  return;
 }

}
}


VB.NET
Код

Module Delegate1

   Class ClassWithNewEvent

       Public Delegate Sub MyHandler(ByVal event_message As String)

       Public Shared Event EqualNumbers As MyHandler

       Public Sub TestNumbers(ByVal number As Integer)

           Dim myRnd As Random = New Random()
           Dim RndNumber As Integer

           While True
               RndNumber = myRnd.Next(number + 5)
               If RndNumber.Equals(number) Then
                   RaiseEvent EqualNumbers("Yes! We've done it!!!")
                   Exit While
               End If
           End While

       End Sub


   End Class

   Sub Main()
       Console.WriteLine("Press <Enter>")
       Console.Read()
       Dim wneClass As ClassWithNewEvent = New ClassWithNewEvent()
       AddHandler ClassWithNewEvent.EqualNumbers, AddressOf OnMyEvent
       wneClass.TestNumbers(5)
       Console.Read()
       Console.Read()
   End Sub

   Public Sub OnMyEvent(ByVal messageFromEvent As String)
       Console.WriteLine("Message from our event: " + messageFromEvent)
   End Sub

End Module


Managed C++ (я для простоты не стал выделять хедер..)
Код

#using <mscorlib.dll>
#using <System.dll>

using namespace System;

__gc class ClassWithNewEvent
{
public:
__delegate void MyHandler(String* event_message);

static __event MyHandler* EqualNumbers;

void TestNumbers(int number)
 {
  Random * myRnd = new Random();
  int  RndNumber;
  while(true)
  {
   RndNumber = myRnd->Next(number+5);
   if(number == RndNumber)
   {
    EqualNumbers("Yes! We've done it!!!");
    break;
   }
  }
  return;
 }

};
__gc class ClassTest
{
public:
void OnMyEvent(String * messageFromEvent)
{
 Console::Write("Message from our event: ");
 Console::WriteLine(messageFromEvent);
 return;
};

void TestIt()
{
 Console::WriteLine(S"Press <Enter>");
 Console::Read();
 ClassWithNewEvent* wneObject = new ClassWithNewEvent();
 ClassWithNewEvent::EqualNumbers += new ClassWithNewEvent::MyHandler(this,OnMyEvent);
 wneObject->TestNumbers(5);
 Console::Read();
 Console::Read();
 return;
}
};

void main()
{
ClassTest* ct = new ClassTest();
ct->TestIt();
return;
}


Все. Надеюсь, кому-нибудь поможет.


--------------------
Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед)
...
Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн)
PM ICQ   Вверх
$T@L!N
Дата 8.5.2004, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Kurt
Спкасибо большое, попробую разобраться smile.gif
PM MAIL   Вверх
$T@L!N
Дата 8.5.2004, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



сообщение выше от Ская, я просто у друга сижу....
PM MAIL   Вверх
Kurt
Дата 9.5.2004, 02:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлеченный
***


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

Репутация: 20
Всего: 36



Да не за что.
Давай разбирайся!
Правда, мне бы очень хотелось узнать результат "разборок". smile.gif Просто на будущее, можь, чего не так..

З.Ы. Потом мне пришлешь свою игру. smile.gifwink.gif


--------------------
Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед)
...
Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн)
PM ICQ   Вверх
Skywalker
Дата 9.5.2004, 09:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Дело в том что я сейчас просто учусь, я не игру делаю smile.gif


--------------------
"Мы в ответе за тех, кого приручили" Антуан де Сент Экзюпери, Маленький принц
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




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


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

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