Страница: 1 |
Страница: 1 |
Вопрос: Помогите плиз! Проблемы с сетью...
Добавлено: 08.04.08 13:27
Автор вопроса: Yanex | Web-сайт:
Создаю небольшой чат для локалки. Работаю через протокол UDP (юзаю Winsock на Visual Basic 6.0). Чат уже практически закончен, но я столкнулся с непредвиденной трудностью.
Когда я отсылаю сообщение, оно почему-то доходит далеко не до всех компьютеров... А только до двух-трех из шести. Иногда вообще никуда не доходит.
Грешил на глючную сеть, где я проверял прогу. Но дома попробовал с виртуалкой - то же самое! :( Даже сделал видео. Если кому не жалко 200 КБ траффика, можно его скачать по ссылке http://www.progr.do.am/clip0009.rar.
Как я делал (очень сильно упрощенный пример, но глюки все те же):
1. Поместил на форму txt (TextBox), List1 (ListBox) и ws (Winsock).
2. Код формы следующий:
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-сайт:
Профиль | | #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-сайт:
Профиль | | #6
Добавлено: 09.04.08 13:01
Я не через TCP делал, через UDP... Но крышу сносит все равно.
Номер ответа: 7
Автор ответа:
AWP
ICQ: 345685652
Вопросов: 96
Ответов: 1212
Web-сайт:
Профиль | | #7
Добавлено: 10.04.08 00:15
через UDP есть вероятность что сообщения не дойдут. Делай TCP. И удобнее и надежнее. Если ты конечно файлы большие сообщениями передавать не будитшь...
Номер ответа: 8
Автор ответа:
Harter
Вопросов: 32
Ответов: 167
Профиль | | #8
Добавлено: 11.04.08 02:06
Мне дурачку кто нибуь обьяснит почему:
Номер ответа: 9
Автор ответа:
Harter
Вопросов: 32
Ответов: 167
Профиль | | #9
Добавлено: 11.04.08 14:56
MsgBox "Вот мой совет: Зделай одну ""Главную"" программу с .RemoteHost(IP) ""255.255.255.255"" - это будет главный компьютер! Потом делаешь отдельную прогу: Она будет подключаться по указонаму IP (главного компа) - тоесть если ты будешь открывать хоть 100 программ, все они будут подключены к главному компу!!! (сам пробовал, всё работает отлично!)
End If
Номер ответа: 10
Автор ответа:
Yanex
ICQ: 387761649
Вопросов: 32
Ответов: 169
Web-сайт:
Профиль | | #10
Добавлено: 11.04.08 15:31
Да, скорее всего так и придется. Уже начал переделывать...
Но хотелось бы сделать без серверной части проги: так, к примеру, работает Vypress Chat (через UDP, между прочим). И никакой потери пакетов, что интересно.
Как у него так получается?
Номер ответа: 11
Автор ответа:
Wolf4D
Вопросов: 20
Ответов: 131
Web-сайт:
Профиль | | #11
Добавлено: 11.04.08 22:16
UDP - протокол без встроенной системы проверки того, дошёл ли пакет. TCP имеет такую проверку встроенную. А Vypress Chat может иметь свои хитрые методы такой "проверки".