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