for flooders
:: Главная :: Решения :: Статьи :: Сайт М. Дроздова :: Файловый архив :: Книга по VFP 9 :: Русский Help Online :: OFF-LINE Форум
   Л и с о в о д ы   в с е х   с т р а н,  о б ъ е д и н я й т е с ь !!!  

Список Форумов  :: Обсуждаем проекты
   :: Помощь сайту :: 

Клиент-серверный чат на WinSock-e
CTAC-Ko

Сообщений: 27
Откуда: Ивано-Франковск
Дата: 04.11.10 23:09:31ОтветитьЦитировать
Привет!

Я как-то давно наваял для себя клиент-серверный чат, а сейчас вот кое-как выдернул его из своих классов и решил выложить. По ходу навносил разных изменений, так что не все мб гладко работать будет...
Собственно мб этот чат кому-то будет интересен? Я запросы на такой встречал, а вот реализации - ни разу. Предлагались идеи юзать netsend - но это не то, да и возможности не те (когда начинал - пробовал его), ms messenger, но опять же проблемы - у одних установлен, у других - нет и тд и тп, а это - взял да и присовокупил к основному приложению.
Есть, правда, варианты и по-лучше, например встроенный чат в MS-SQL, но я юзаю бесплатный мускул, а этот вариант чата переписал так, что SQL-сервер вообще не нужен и не используется.

Если дельных практических советов дадите, а еще лучше прямо кодом - будет вообще супер!

Какие в нем заложены возможности и какие плюсы:

- система работает на фоне основного приложения
- Instant Messenger, т.е. сообщения приходят по факту их отправки
- можно отправить спецкоманду, например заставить всех клиентов выйти из программы (для автоапдейта напр.)
- клиентская часть не требует winsock.ocx и нет связанных с этим проблем - весь socket написан на WinAPI (код не мой, поделился местный формучанин Константин, за что ему большое спасибо)
- серверная часть использует winsock.ocx, поскольку автор класса socket не написал интерфейс Listen, т.к. ему не было нужды, о чем мне и сообщил, а я не осилил
- если программа клиента свернута в трей - клиент о приходе сообщения оповещается всплывающим тултипом
- если прогамма свернута на панель или не в фокусе - "накрыта сверху" другой программой - клиент оповещается мерцанием окна на панели задач
- если клиент получает Urgent-сообщение, то прога "вылазит" с ним "наверх"

Минусы:
- размер сообщения ограничен до 254 символов
- невзрачный гуи
- глюки и грабли

Чего не хватает - передачи файлов, модных смайлов и разных шрифтов в истории переписки, костылей для стабильности работы и участия комьюнити

Скачать можно здесь или здесь. Странно, но клик по ссылке может приводить к 404, хз почему, но если набрать ссылку в браузер - все ок, а если ее схавает на лету дауновлоадер какой-то, то тоже скачивает... ссыла - хттп://stas.mail15.com/Chat_VFP.zip



Исправлено: CTAC-Ko, 01.02.12 15:18
Ratings: 0 negative/0 positive

Re: Клиент-серверный чат на WinSock-e
CTAC-Ko

Сообщений: 27
Откуда: Ивано-Франковск
Дата: 05.11.10 14:43:36ОтветитьЦитировать
Еще кое-что подправил - практически полностью рабочий вариант.
Не хватает еще отправки истории переписки с сервера и удаление из списка ников с историей переписки.

Однако по ходу прошу помощи - время от времени сообщения как бы не "доходят" клиенту, т.е. они как бы доходят, но не срабатывает их прием/обработка, т.е. не срабатывает событие получения данных. Похоже на некую буфферизацию - происходит некое накопление. Но ровно в момент когда такой клиент отправит сообщение - то зависшие на приеме сообщения тут же "падают" пачкой. Как с энтим бороться - ума не приложу...



Исправлено: CTAC-Ko, 05.11.10 23:22
Ratings: 0 negative/0 positive

Re: Клиент-серверный чат на WinSock-e
ssa
[Модератор]

Сообщений: 11911
Откуда: Москва
Дата: 05.11.10 15:02:37ОтветитьЦитировать
Цитата:
Ошибка 404. Документ не найден.
Error 404. Document not found.
Запрашиваемый документ отсутствует на сервере.


------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive

Re: Клиент-серверный чат на WinSock-e
Igor Korolyov

Сообщений: 30655
Дата: 05.11.10 17:42:46ОтветитьЦитировать
В сокетах есть такая ерунда - сервер может "накапливать" данные в буфере и слать их потом кучей. Ещё надо понимать что пакеты имеют ограниченный размер, и потому большие пачки будут приходить кусками. Надо параметры инициализации смотреть. Ну а клиент, который на чистом АПИ сделан... Надо изучать как там колбэки реализуются, как работа с буфером идёт и т.п.


------------------
WBR, Igor
Ratings: 0 negative/0 positive

Re: Клиент-серверный чат на WinSock-e
Igor Korolyov

Сообщений: 30655
Дата: 05.11.10 17:53:23ОтветитьЦитировать
Сергей, может на здешний FTP помочь файлик человеку положить? А то всякие корявые файло-обменники будут мучать
P.S. Файл у меня в FF скачивается если скопировать в строку URL этот адрес хттп://stas.mail15.com/Chat%20VFP.zip - по клику идут какие-то редиректы и 404 - может пробел виноват, а может ещё что.
P.P.S. Автору - стоит хотя-бы левые файлы повыкидать (.bak, .fxp коль уж есть prg) и заPACKовать библиотеки классов - по крайней мере messager.vcx
И в конфиге default=D:\Chat VFP это моветон


------------------
WBR, Igor
Ratings: 0 negative/0 positive

Re: Клиент-серверный чат на WinSock-e
CTAC-Ko

Сообщений: 27
Откуда: Ивано-Франковск
Дата: 05.11.10 23:11:46ОтветитьЦитировать
ссылку поправил. странно вообще-то, первый архив когда выложил, создавая эту тему - качался ок. а тут заменил файл на серваке - не качается. это бесплатный хостинг, так что без фтп вполне можно обойтись, тем более что я его пользую уже больше 5ти лет - все гуд, не подводил. Правда весь сайт "недавно" ушел в qip и мне не понравились изменения, но...
Вобщем речь-то идет о 250кб-зип-архиве - какой смысл там еще что-то паковать и выкидывать?
хотя конфиг выкинул вообще раз уже моветон...

Вобщем единственная пока самая толстая проблема - это накопление данных в сокете. Вот ея бы порешить! Оно конечно можно оформить костыль в виде таймера, который будет ежесекундно отсылать 1 байт неведомо куда, но очень не хочется этого делать.
Вообще-то я давно вынашиваю надежду на тему замены выньсокета чем-то иным, но не знаю чем, тем более что как-то один знакомый дельфист обмолвился что мол выньсокет - нах, это набор граблей, надо свое написать. Только он не берется, т.е. ему катастрофически не хватает на это времени - я его прошу уж не первый год, так мб есть что-то еще наподобии, но по-стабильнее, чтоли, которое полностью на апи можно описать? Хотя с другой стороны я потрачу нереальное кол-во времени с необязательным успехом на написание кода под такую возможность...

Есть еще 1 проблема - почему-то не всегда срабатывают вынь-апи функции вывода проги "из тени":
DECLARE Long ShowWindow IN Win32API Long, Long  
  DECLARE Long BringWindowToTop in Win32API Long  
  ShowWindow(_VFP.HWnd,5) &&5=MAXIMIZED  
  BringWindowToTop(_VFP.HWnd)
- т.е. этот код отрабатывает, а прога себе остается неактивным окном, т.е. накрытым сверху другим приложением (TC,FF,OO, словом неважно каким). Причем вот если прога при этом была свернута в трей, то всегда все срабатывает нормально и прога становится он топ, а вот если накрыта - то не всегда. Такое впечатление что надо окно проги сначала свернуть, тада все отработает, однако чезанах?


Исправлено: CTAC-Ko, 05.11.10 23:53
Ratings: 0 negative/0 positive

Re: Клиент-серверный чат на WinSock-e
Igor Korolyov

Сообщений: 30655
Дата: 07.11.10 17:50:00ОтветитьЦитировать
1) Я не про ВЕСЬ конфиг файл говорил, а конкретно про сточку с абсолютным путём. Впрочем DEFAULT я бы и в "относительном" виде не задавал в конфиге (в ярлыке запускающем проге ещё куда ни шло).
2) Если речь идёт про ActiveX WinSock Control - то эт ладно, можно и писать замены, если же ВООБЩЕ про сам виндовый АПИ - то это IMHO глупость.
3) У меня как-то так написан был вывод на первый план - но писалось ОЧЕНЬ давно (под 98 винду ещё), да и выводиться на первый план ЧУЖОЕ окно - от другого процесса (это из кода блокировки повторного запуска).
IF IsIconic(m.lhWnd) > 0  
   ShowWindowAsync(m.lhWnd, SW_RESTORE)  
  ENDIF  
  SetForegroundWindow(m.lhWnd)
При том настоятельно советую почитать статью MSDN описывающую SetForegroundWindow - там много полезного указано. В частности указано что далеко не всегда "фоновому" процессу в принципе позволено выходить на первый план самостоятельно - и это в принципе правильно, если я например набиваю текст в ворде, то "всплывшая" прога получающая часть нажатий кнопок безмерно раздражает - поморгать, посигналить - это нормально...


------------------
WBR, Igor
Ratings: 0 negative/0 positive

Re: Клиент-серверный чат на WinSock-e
CTAC-Ko

Сообщений: 27
Откуда: Ивано-Франковск
Дата: 07.11.10 23:35:51ОтветитьЦитировать
1) да в том конфиге только 1 еще строчка была - про 1251ю кодировку и все.
2) на винапи переведен только винсок (класс Socket) чтобы не юзать ActiveX WinSock Control как таковой.
статью почитаю, спс. однако вывод на передний план нужен при повторном запуске и при выводе приложения из трея, для случаев перекрытия окна приложения другим, а также для urgent-мессаг, а отсыл таких мессаг позволен только юзерам с админ-правами, а для обычных сообщений в таких случаях реакция именно поморгать, посигналить, побалунить.



Исправлено: CTAC-Ko, 07.11.10 23:37
Ratings: 0 negative/0 positive

Re: Клиент-серверный чат на WinSock-e
CTAC-Ko

Сообщений: 27
Откуда: Ивано-Франковск
Дата: 08.11.10 09:33:01ОтветитьЦитировать
Обновился - еще фиксы, подключил отправку проги в трей и вывод на передний план через SetForegroundWindow.
Ratings: 0 negative/0 positive

Re: Клиент-серверный чат на WinSock-e
VictorK
Автор

Сообщений: 211
Откуда: Москва
Дата: 31.01.12 10:09:18ОтветитьЦитировать
День добрый СТАС-Ко.
Вы не могли бы подправит ссылку, не работает.
Ratings: 0 negative/0 positive

Re: Клиент-серверный чат на WinSock-e
CTAC-Ko

Сообщений: 27
Откуда: Ивано-Франковск
Дата: 01.02.12 12:15:51ОтветитьЦитировать
добавил там еще одну ссылку, если не работает - напишите. Самое смешное, что я уже находил решение основной проблемы, но так как оно никому особо не надо было, то уже и забыл в чем там было дело. Как-то пытался вспомнить, чтобы выложить с исправлениями, но так и не вспомнил...
Ratings: 0 negative/0 positive

Re: Клиент-серверный чат на WinSock-e
VictorK
Автор

Сообщений: 211
Откуда: Москва
Дата: 01.02.12 14:13:42ОтветитьЦитировать
Не работает к сожалению вторая ссылка.
Ratings: 0 negative/0 positive

Re: Клиент-серверный чат на WinSock-e
CTAC-Ko

Сообщений: 27
Откуда: Ивано-Франковск
Дата: 01.02.12 15:19:12ОтветитьЦитировать
поправил ее, в попыхах копипейстнул левую ссылку
Ratings: 0 negative/0 positive

Re: Клиент-серверный чат на WinSock-e
VictorK
Автор

Сообщений: 211
Откуда: Москва
Дата: 01.02.12 15:41:44ОтветитьЦитировать
Спасибо Вам большое.
Ratings: 0 negative/0 positive



Извините, только зарегистрированные пользователи могут писать в этом форуме.

On-line: 35 and Guests: 35


© 2000-2018 Fox Club 
Яндекс.Метрика