Страница: 1 | 2 | 3 |
Вопрос: LAN .Net
Добавлено: 22.05.09 13:40
Автор вопроса: AWР | Web-сайт:
Я всегда работал с сетью через WinSock. Дайте самый короткий пример чата по локалной сети через .Net(чтобы не таскать с программой компоненты винсока). я видел в МДСН только неработающие примеры. к тому же цикл wile true заставлял комп зависать.
Ответы
Всего ответов: 32
Номер ответа: 1
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #1
Добавлено: 22.05.09 18:07
Что именно хочешь сделать? Примеры в MSDN рабочие, сам проверял.
Смотри классы TcpListner, TcpClient, может еще че-то.
Номер ответа: 2
Автор ответа:
AWР
ICQ: 345685652
Вопросов: 38
Ответов: 106
Web-сайт:
Профиль | | #2
Добавлено: 22.05.09 18:08
необязательно полноценного чата.
Код Создания подключения, код Подключения и отправки/приема любой строки
Номер ответа: 3
Автор ответа:
AWР
ICQ: 345685652
Вопросов: 38
Ответов: 106
Web-сайт:
Профиль | | #3
Добавлено: 22.05.09 18:10
смотрел. попроборвал неполучилось. из за цикла wile true вообще завис. тем более в МСДН всегда лишнего кода наворочают, так что нифига непонятно. короче говоря есть свои примеры?
Номер ответа: 4
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #4
Добавлено: 22.05.09 19:44
какой именно пример ты смотрел? Приведи код.
Номер ответа: 5
Автор ответа:
AWР
ICQ: 345685652
Вопросов: 38
Ответов: 106
Web-сайт:
Профиль | | #5
Добавлено: 22.05.09 21:49
ну вот запуск сервера
а это вроде соединение
НО! я не понимаю как узнать что соединение было произведено или что передана информация
Номер ответа: 6
Автор ответа:
AWР
ICQ: 345685652
Вопросов: 38
Ответов: 106
Web-сайт:
Профиль | | #6
Добавлено: 22.05.09 21:54
Непонимаю я МСДНовский пример вобщем. нетрудно=напишите свой в минимум строк
Номер ответа: 7
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #7
Добавлено: 22.05.09 22:22
В первом куске кода TcpLitner запускается для прослушки порта. Возьмите пример из MSDN и смотрите дальше, там в цикле идет server.AcceptTcpClient и так далее. Внимательнее смотрите документацию к этому классу.
Номер ответа: 8
Автор ответа:
AWР
ICQ: 345685652
Вопросов: 38
Ответов: 106
Web-сайт:
Профиль | | #8
Добавлено: 23.05.09 21:47
server.AcceptTcpClient
вот это должно выполнятся при попытке подключения ..."подключающегося". а там стоит принимать всегда
While true
*****
*****
очень не нравится. Разве нельзя как в винсоке поставить на событие при попытках подключения.
Номер ответа: 9
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #9
Добавлено: 23.05.09 21:59
Что конкретно тебе не нравится?
AcceptTcpClient выполняет ожидание подключения клиента.
То что этот метод обернут в бесконечный цикл While True означает что сервер будет бесконечно долго обрабатывать входящие подклюения клиентов. По крайней мере пока поток не упадет с исключением или не будет убит под действием внешних сил (Thread.Abort например, по сути то же падение с исключенем).
Событий у этого класса нет, поэтому поставить ты ничего не сможешь.
В реальном приложении этот код нужно будет запускать в отдельном потоке, чтоб он не мешал работе основного потока.
Можно также принимать клиентов не через AcceptTcpClient, а асинхронным методом BeginAcceptTcpClient, в этом случае основной поток продолжит работу дальше.
Номер ответа: 10
Автор ответа:
AWР
ICQ: 345685652
Вопросов: 38
Ответов: 106
Web-сайт:
Профиль | | #10
Добавлено: 23.05.09 22:07
я перевел код в более понятный мне:
а если писать
Номер ответа: 11
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #11
Добавлено: 23.05.09 22:41
окна нет. приложение зависло....или ждет чего то
а если писать
Может потому что ты пустил этот код в оснвном потоке и он заблокировал его выполнение? Ждет подключения клиентов...
то ошибка вылазит...
Реально, рассказал даже информативнее чем On Error Resume NExt рассказывает
Там у ошибок названия бывают. А еще иногда описания и источники.
Вот простейший примре с делегатами, не претендующий ни на что, тем не менее работающий и иллюстрирующий идею.
Обработку ошибок, двунаправленый обмен и т.п. нужно будет добавить самому по своему усмотрению.
Номер ответа: 12
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #12
Добавлено: 23.05.09 23:31
В процедуре AcceptClient стоит вызов Listener.BeginAcceptSocket(AddressOf AcceptClient, Listener) для того чтоб принять следующего клиента (несколько клиентов будут работать параллельно, можешь попробовать, запустив несколько telnet'ов, подключив их к приложению)
Номер ответа: 13
Автор ответа:
AWР
ICQ: 345685652
Вопросов: 38
Ответов: 106
Web-сайт:
Профиль | | #13
Добавлено: 23.05.09 23:38
Окно у меня зависает всегда когда есть цикл
даже если цикл пуст.
некак не могу понять как работать с этими классами. впрочем я уже забил и стал пользоваться винсоком. хотяб события есть
Номер ответа: 14
Автор ответа:
Ra$cal
ICQ: 8068014
Вопросов: 18
Ответов: 817
Web-сайт:
Профиль | | #14
Добавлено: 23.05.09 23:59
ггг. найкс, ты понимаешь что такое поток? что такое основной поток? как вообще работает гуевая часть? это ж основы. если ты не понимаешь, почему при запуске цикла while true зависает гуй, то рано тебе с сетевыми штуками работать. почитай статьи\буки на эту тему. тут просто чужим кодом не отделаешься.
Номер ответа: 15
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #15
Добавлено: 24.05.09 00:00
Окно у меня зависает всегда когда есть цикл
А что в VB6 если в форме запустить такой код, окно не повиснет???
Naix, ты серьезно или прикидываешься? Ты запускаешь бесконечный цикл в основном потоке формы. Почему ты
удивляешься что форма повисла? Она должна повиснуть, это именно то чего ты добился, запустив в ней бесконечный цикл (безусловно, это не то чего ты хотел добиться, но это уже тонкости).
Я тебе предложил 2 варианта решения этой проблемы (запустить отдельный поток, использовать асинхронные операции), более того один из них даже полностью реализовал (убив на это N-дцать минут своего времени).
Тем не менее ты все-таки предпочел третий - заюзать на форму винсок, унаследованый из 98 года.
PS Хинт, запусти код
что выведет на экран?