Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Помогите плиз! Проблемы с сетью... Добавлено: 08.04.08 13:27  

Автор вопроса:  Yanex | Web-сайт: Progr.Do.am | ICQ: 387761649 
Создаю небольшой чат для локалки. Работаю через протокол UDP (юзаю Winsock на Visual Basic 6.0). Чат уже практически закончен, но я столкнулся с непредвиденной трудностью.

Когда я отсылаю сообщение, оно почему-то доходит далеко не до всех компьютеров... А только до двух-трех из шести. Иногда вообще никуда не доходит.

Грешил на глючную сеть, где я проверял прогу. Но дома попробовал с виртуалкой - то же самое! :( Даже сделал видео. Если кому не жалко 200 КБ траффика, можно его скачать по ссылке http://www.progr.do.am/clip0009.rar.

Как я делал (очень сильно упрощенный пример, но глюки все те же):
1. Поместил на форму txt (TextBox), List1 (ListBox) и ws (Winsock).

2. Код формы следующий:

Private Sub Form_Load()
ws.Protocol = sckUDPProtocol
ws.LocalPort = 6789
ws.RemotePort = 6789
ws.RemoteHost = "255.255.255.255"
List1.ListIndex = -1
End Sub

Private Sub txt_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyReturn Then
    ws.SendData txt.Text
    txt.Text = ""
End If
End Sub

Private Sub ws_DataArrival(ByVal bytesTotal As Long)
On Error Resume Next
Dim msg As String
ws.GetData msg

List1.AddItem msg
List1.ListIndex = List1.ListIndex + 1
End Sub


Больше ничего в проект не входит. У меня, конечно, сделано с именами юзеров, приватом и прочим, но сути это не меняет.

Так что это может быть? Может, кто-то уже встречался с подобным?

P.S.: после перезагрузки одной из копий программ на ней начинают отображаться новые мессаги, но это ненадолго и в скором времени исчезает опять. На видео я пытался это продемонстрировать, но 3 копии - явно мало. На большем числе машин все это видно очень хорошо...

P.P.S.: Может, для UDP-протокола лучше юзать другой контрол?

Ответить

  Ответы Всего ответов: 11  

Номер ответа: 1
Автор ответа:
 Harter



Вопросов: 32
Ответов: 167
 Профиль | | #1 Добавлено: 08.04.08 21:18
Может, кто-то уже встречался с подобным?


Да :)

Ответить

Номер ответа: 2
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #2 Добавлено: 09.04.08 01:58
Не факт, что в фции ws_DataArrival метод ws.GetData возвратит все данные одним цельным пучком. Попробуй всё что приходит пихать в переменную, накапливать в ней полученные данные. А далее парсить эти данные...

Ответить

Номер ответа: 3
Автор ответа:
 Yanex



ICQ: 387761649 

Вопросов: 32
Ответов: 169
 Web-сайт: Progr.Do.am
 Профиль | | #3
Добавлено: 09.04.08 08:42
Попробуй всё что приходит пихать в переменную


Да в том и проблема, что приходит не все... Даже если в DataArrival добавить строчку MsgBox "Test", мессага будет показываться далеко не при всех отправлениях.

Ответить

Номер ответа: 4
Автор ответа:
 J. Smith



ICQ: ненавижу 

Вопросов: 40
Ответов: 477
 Web-сайт: Не хочу ломать голову, если её уже сломал кто-то другой.
 Профиль | | #4
Добавлено: 09.04.08 08:53
Я тоже написал LAN чат использовал TCP в WinSock, но таких странностей не наблюдал. Напиши так, чтобы при отправке каждого сообщения поновой устанавливался конект и после отправки обрывался.

Ответить

Номер ответа: 5
Автор ответа:
 J. Smith



ICQ: ненавижу 

Вопросов: 40
Ответов: 477
 Web-сайт: Не хочу ломать голову, если её уже сломал кто-то другой.
 Профиль | | #5
Добавлено: 09.04.08 09:02
:( Тут коллеги считают что у WinSock контрола сносит крышу когда он долго слушает сеть.

Ответить

Номер ответа: 6
Автор ответа:
 Yanex



ICQ: 387761649 

Вопросов: 32
Ответов: 169
 Web-сайт: Progr.Do.am
 Профиль | | #6
Добавлено: 09.04.08 13:01
Я не через TCP делал, через UDP... Но крышу сносит все равно.

Ответить

Номер ответа: 7
Автор ответа:
 AWP



ICQ: 345685652 

Вопросов: 96
Ответов: 1212
 Web-сайт: xawp.narod.ru
 Профиль | | #7
Добавлено: 10.04.08 00:15
через UDP есть вероятность что сообщения не дойдут. Делай TCP. И удобнее и надежнее. Если ты конечно файлы большие сообщениями передавать не будитшь...

Ответить

Номер ответа: 8
Автор ответа:
 Harter



Вопросов: 32
Ответов: 167
 Профиль | | #8 Добавлено: 11.04.08 02:06
Мне дурачку кто нибуь обьяснит почему:
.RemoteHost = "255.255.255.255", а если зделаешь .RemoteHost = "155.155.155.155" (например) то сразу нифига не работает!


ВАПЩЕ ЗАЧЕМ В UDP HOST?

Ответить

Номер ответа: 9
Автор ответа:
 Harter



Вопросов: 32
Ответов: 167
 Профиль | | #9 Добавлено: 11.04.08 14:56
If тебе ещё нужна помошь Then
MsgBox "Вот мой совет: Зделай одну ""Главную"" программу с .RemoteHost(IP) ""255.255.255.255"" - это будет главный компьютер! Потом делаешь отдельную прогу: Она будет подключаться по указонаму IP (главного компа) - тоесть если ты будешь открывать хоть 100 программ, все они будут подключены к главному компу!!! (сам пробовал, всё работает отлично!)
End If

Ответить

Номер ответа: 10
Автор ответа:
 Yanex



ICQ: 387761649 

Вопросов: 32
Ответов: 169
 Web-сайт: Progr.Do.am
 Профиль | | #10
Добавлено: 11.04.08 15:31
Да, скорее всего так и придется. Уже начал переделывать...

Но хотелось бы сделать без серверной части проги: так, к примеру, работает Vypress Chat (через UDP, между прочим). И никакой потери пакетов, что интересно.

Как у него так получается?

Ответить

Номер ответа: 11
Автор ответа:
 Wolf4D



Вопросов: 20
Ответов: 131
 Web-сайт: www.madnesstudio.ru
 Профиль | | #11
Добавлено: 11.04.08 22:16
UDP - протокол без встроенной системы проверки того, дошёл ли пакет. TCP имеет такую проверку встроенную. А Vypress Chat может иметь свои хитрые методы такой "проверки".

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам