site logo
  • Կայքի մասին
  • Ծրագրավորում
  • Ժեշտ
  • Անվտանգություն
  • Հարց ու Պատասխան (ՀուՊ)
Փետրվար 15, 2013  |  By Neo In

Ցանցային Չատ Բատով!

Ես հասկանում եմ, որ հոդվածը շատ երկար է, սակայն չէի ցանկանում այն բաժանել, բացի դրանից այն երկար է կոդի պատճառով, այնպես, որ ՄԻ ԱԼԱՐԵՔ! :-)

 

 

 

 

 

 

 

Ինչ է պետք միացնելու համար?

 

  1. Copy անել կոդը, որը հոդվածի վերջում է
  2. Ստեղծել Bat ֆայլ
  3. Տեղադրել ցանցային պնակում
  4. Միացնել մի քանի համակարգիչներից

 

Նախաբան :-) Հիմանական տերմիններ

1. %chat% — խմբի անուն

2. %nick% — օգտանուն

3. Ֆայլ “%chat%_history” — Խմբի ամբողջ պատմությամբ ֆայլ

4. Ֆայլ “%chat%” — խմբի վերջին հաղորդագրությամբ ֆայլ

5. Ֆայլ “%chat%_cs” — սինխրոնիզացիայի համար օգտագործվող ֆայլ

Բացենք չատի ծրագիրը (կոդը տրված է հոդվածի վերջում)` Ամենասկզբում վերցնում ենք խմբի անունը, օգտանունը և հետո կոդը սկսում է ինքն իրան 3 արգումենտներով` Talk_widget, Խմբի անուն, Օգտանուն

 

:auth
echo Enter chat filename to connect ("abc" for example):
set /p chat=^>
echo Enter your nick:
set /p nick=^>
start call %0 talk_widget %chat% %nick%

 


Հիմա ծրագրի վերնամասում գրում ենք խմբի անունը և օգտանունը (տող №3). Եթե գոյություն ունի %chat%_history  ֆայլը, ապա  դուրս ենք բերում էկրանին նրա պարունակությունը (տող №4). Հետո, ցիկլում, վերլուծում ենք  %chat%  ֆայլի պարունակությունը և համեմատում անցաց վերլուծման հետ. Եթե փոփոխություն է տեղի ունեցել, ապա դուրս ենք բերում էկրանին.

 

:listener
cls
call title "| Chat: %chat% | User: %nick% |"
if exist %chat%_history type %chat%_history
if not exist %chat% echo. 2>%chat%

:listener_loop
ping 127.0.0.1 -n 1 -w 20 > nul
set oldtext=%text%
set /p text=<%chat%
if not "%text%" == "%oldtext%" echo %text%
goto listener_loop

 

Ամենասկզբում կոդը ունի հետևյալ կառուցվածքը: միացնելուց, կոդը ստուգում է արգումենտները, և եթե առաջինը talk_widget-ն է, ապա այն կատարում է  գործողություններ միայն տեքստի ուղարկման հետ կապված. Դրա բացակայության դեպքում, կոդը կատարում է ստանալու և ցույց տալու ֆունկցիա: Սկզբում կոդը միացվում է առանց արգումենտների, վերցնելով միայն խմբի անունը և օգտանունը, իսկ հետո միացնում է կոդը talk_widget արգումենտով, այնուհետև սկսում է դուրս բերել տվյալները էկրանին:

if "%~1" == "talk_widget" goto talker

:listener
......
:talker
......

 

Հիմա բացատրեմ, թե ինչպես է աշխատում այն կոդը, որը տվյալներ է վերցնում օգտվողից. Սկզբում այն փոփոխում է վերնամասը (տող №5). Հետո ֆայլում տպում է վերջին հաղորդագրությունը-ավելացնում իր միանալու մասին տեղեկություն և ավելացնում չատի պատմությունը. Վերջին հաղորդագրության ֆայլին դիմելուց օգտագործվում է կրիտիկական բաժինների պարզագույն մեխանիզմ (ներքևում կդիտարկենք դրա աշխատանքը):Հետո ցիկլում  (տող 11-19) կատարվում է օգտվողից տվյալների ստացում և նրանց գրանցումը վերջին հաղորդագրության ֆայլում և խմբի պատմության ֆայլում:

:talker
set chat=%~2
set nick=%~3
cls
call title "| Chat: %chat% | User: %nick% |"
call ::cs_in
echo (%TIME% %nick% connected)>%chat%
call ::cs_out
echo (%TIME% %nick% connected)>>%chat%_history

:talker_loop
cls
echo Dear %nick%, type message to send:
set /p msg=^>
call ::cs_in
echo [%TIME% %nick%]: %msg%>%chat%
call ::cs_out
echo [%TIME% %nick%]: %msg%>>%chat%_history
goto talker_loop

 

 

Ֆայլի կրիտիկական բաժին մտնելու ֆունկցիան, որը օգտագործվում է սինխրոնիզացիայի համար, ցիկլում գրում է կամայական թիվ. Մինչև այն չհայտնվի այնտեղ 2-րդ անգամ ստուգելուց. Եթե ֆունկցիան սկսելու ժամանակ ֆայլը գոյություն ունի, ապա մի փոքրիկ դադար է լինում. Դադարները լինում են ի շնորհիվ  ping>nul.

 

:cs_in
if exist "%chat%_cs" ping 127.0.0.1 -n 1 -w 50 > nul
set cs_value=%RANDOM%

:cs_in_loop
echo %cs_value%>%chat%_cs
set /p ret=<%chat%_cs
if "%ret%" == "%cs_value%" exit /b
ping 127.0.0.1 -n 1 -w 10 > nul
goto :cs_in_loop

 

Կրիտիկական բաժնից դուրս գալու ֆունկցիան ուղղակի ջնջում է սինխրոնիզացիայի ֆայլը:

 

:cs_out
del %chat%_cs
exit /b

 

Իսկ հիմա արդյունքը!

 

Մենք ստացանք չատ, որը ունի հետևյալ ֆունկցիաները: 1. Խմբերի բաժանված չատ (շատ խմբեր, շատ օգտվողներ) 2. Նոր մասնակիցներին հնարավորություն է տրվում ստանալ չատի պատմությունը 3. Հաղորդակցվել ցանցում (տեղադրել ֆայլը ընդհանուր պնակում և շփվել տարբեր համակարգիչներից)

 

Միացնելուց, ծրագիրը հարցնում է խմբի անունը և օգտանունը.

 

Տվյալները մուտքագրելուց հետո բացվում է 2-րդ պատուհանը, որտեղ կարող եք գրել:

 

 

Իսկ հիմա նույն BAT-ը բացենք ցանցի մեկ այլ համակարգչից (ֆայլը գտնվում է բաց* պնակում

 

 

Մուտքագրելով նույն խմբի անունը և նոր օգտանուն, դուք կմտնեք չատ-սենյակ

 

Իսկ հիմա փորձենք փոխանակվել հաղորդագրություններով:

 

 

Իսկ հիմա նույնը, բայց 3-րդ համակարգչից

 

 

Եվ կտեսնենք այս պատկերը`

 

 

Ուշադրություն! Windows XP-ՕՀ-ի վրա ծրագիրը նորմալ աշխատում է, սակայն կա անհասկանալի 64 bit- անոց Windows 7-վրա: կոդը ցանցային պնակից միացնելու ժամանակ //***. Կոդի 3-րդ տողը` pushd “%~dp0″ շատ երկար է աշխատում. Շատ երկար է աշխատում հենց  %~dp0, դրա համար փորձեք echo %~dp0. Եթե 2-3 րոպե սպասեք ամեն ինչ նորմալ կլինի:

 

Զգուշացում: Ցանցային պնակից կոդը ամեն անգամ միացնելուց, My Computer-ում կհայտնվեն ցանցային դիսկեր` Z,Y,X, սակայն դրանք կվերանան համակարգիչը վերսկսելուց հետո (Restart):

 

Ահա և ամբողջ կոդը:

@rem BatChat
@echo off
cls
pushd "%~dp0"
echo Current DIR: "%CD%"
if "%~1" == "talk_widget" goto talker

rem ================================================
rem ////////////////////
:auth
echo Enter chat filename to connect ("abc" for example):
set /p chat=^>
echo Enter your nick:
set /p nick=^>
start call %0 talk_widget %chat% %nick%

rem ////////////////////
:listener
cls
call title "| Chat: %chat% | User: %nick% |"
if exist %chat%_history type %chat%_history
if not exist %chat% echo. 2>%chat%

:listener_loop
ping 127.0.0.1 -n 1 -w 20 > nul
set oldtext=%text%
set /p text=<%chat% if not "%text%" == "%oldtext%" echo %text% goto listener_loop rem //////////////////// rem ================================================ rem //////////////////// rem // %2 - chat name // rem // %3 - user nick // rem //////////////////// :talker set chat=%~2 set nick=%~3 cls call title "| Chat: %chat% | User: %nick% |" call ::cs_in echo (%TIME% %nick% connected)>%chat%
call ::cs_out
echo (%TIME% %nick% connected)>>%chat%_history

:talker_loop
cls
echo Dear %nick%, type message to send:
set /p msg=^>
call ::cs_in
echo [%TIME% %nick%]: %msg%>%chat%
call ::cs_out
echo [%TIME% %nick%]: %msg%>>%chat%_history
goto talker_loop
rem ////////////////////

rem ================================================

rem ////////////////////
:cs_in
if exist "%chat%_cs" ping 127.0.0.1 -n 1 -w 50 > nul
set cs_value=%RANDOM%

:cs_in_loop
echo %cs_value%>%chat%_cs
set /p ret=<%chat%_cs if "%ret%" == "%cs_value%" exit /b ping 127.0.0.1 -n 1 -w 10 > nul
goto :cs_in_loop
rem ////////////////////

rem ////////////////////
:cs_out
del %chat%_cs
exit /b
rem ////////////////////

rem ================================================

Սկզբնաղյուր: Հայ Հաքեր Բլոգ

Ցանցային Չատ Բատով!, 10.0 out of 10 based on 5 ratings
բատ բատնիկ բացատրություն ծրագիր ծրագրավորում Ծրագրավորում Ծրագրեր կլիենտ կոնսոլ հրահանգներ Ուսումնական նյութեր չատ սերվեր
Previous StoryՀայերեն Unicode Phonetic ստեղնաշարի թարմացում
Next StoryՈւրախանալու 5 ձև կամ VBS ծրագրեր

Comments: no replies

Join in: leave your comment Cancel Reply

(will not be shared)

Որոնում

Նշագրեր

*Nix-եր (18) android (17) C++ (19) C և C++ (27) Excel (10) html (10) Network Administration (16) System Administration (28) Windows 7 (14) Ալգորիթմներ (15) Անվտանգություն (29) ԳՆՈՒ/Լինուքս (16) Թեյնիկներին (57) Ժեշտ (44) Լակոնիկ (21) Լինուքս/Յունիքս հրամաններ (29) Լուսանկարչություն և մշակում (15) Խելախոսներ (19) Ծրագրավորման լեզուներ (16) Ծրագրավորում (64) Ծրագրեր (48) Հայականացում (28) Հումոր (11) Ուսումնական նյութեր (34) Սոցցանցային Հմտություններ (19) Վեբ (25) Վերլուծություն (10) Վորդպրես (21) ՏՏ և փիլիսոփայություն (21) Տվյալների բազաներ (12) Օպերացիոն համակարգեր (27) Օֆիսային ծրագրեր (22) անդրոիդ (16) բաշ (10) ինտերնետ (11) խելախոսներ (13) համացանց (15) հայատառ (10) հայերեն (11) հայերեն ստեղնաշար (11) հայկական սոֆթ (11) ստեղնաշար (10) սքրիփթ (14) վինդոուս (12) տեսանյութ (23)
Copyright ©2017 ThemeFuse. All Rights Reserved