[ Pobierz całość w formacie PDF ]
.W systemach Unix porty poni¿ej 1024 s¹ zarezerwowane napotrzeby systemu) oraz nazwê ISP:use IO::Socket;$socket = IO::Socket::INET->new(Proto => 'udp’; PeerPort => 4321, PeerAddr =>'servername.com');Teraz trzeba tylko wys³aæ na serwer dane — u¿yjemy do tego metody send:use IO::Socket;$socket = IO::Socket::INET->new(Proto => 'udp', PeerPort => 4321, PeerAddr =>'servername.com');$socket->send('Hello!');Nastêpnie trzeba napisaæ program serwerowy.Powinien on dzia³aæ w chwiliwys³ania komunikatu z klienta, zatem zaczniemy od dodania IO::Socket iwyœwietlenia komunikatu „Czekam.\n":use IO::Socket;print "Czekam.\n";Nastêpnie stosuj¹c metodê IO::Socket::INET->new, utworzymy na serwerze nowegniazdo, naka¿emy u¿yæ protoko³u (UDP) oraz wska¿emy u¿ywany port:use IO::Socket;print "Czekam.\n";$socket = IO::Socket::INET->new(LocalPort => 4321, Proto => 'udp');Aby móc odbieraæ dane z klienta, u¿yjemy metody recv obiektu $socket,informuj¹c przy tym, ¿e ma byæ odebranych nie wiêcej ni¿ 128 bajtów.Metoda tabêdzie czeka³a na dane, a kiedy siê one pojawi¹, wyœwietli je:use IO::Socket;print "Czekam.\n";$socket = IO::Socket::INET->new(LocalPort=>4321, Proto => 'udp’);$socket->recv($text, 128);print "Odebrano nastêpuj¹cy komunikat: $text\n";Po uruchomieniu programu klienta program na serwerze wyœwietli nastêpuj¹cedane:Czekam.Odebrano nastêpuj¹cy komunikat: Hello!IPC: OLE w Win32Metod¹ obs³ugi komunikacji miêdzyprocesowej w systemie Windows jest u¿ycieserwerów OLE.ActiveState Perl for Win32 obs³uguje OLE; aby tego mechanizmuu¿yæ, tworzy siê w programie obiekt serwera OLE, jak na przyk³ad MicrosoftExcel.Po utworzeniu obiektu mo¿na stosowaæ jego metody.Podczas komunikacji miêdzyprocesowej w Windows istotne staj¹ siê typy danych —za³Ã³¿my na przyk³ad, ¿e mamy program napisany w C++ i chcemy skomunikowaæ siê zprogramem napisanym w Pascalu.Aby unikn¹æ tego typu problemów, pakiet PerlWin32 zawiera zestaw standardowych typów variant (jest to wygodna metodaobs³ugi danych, których typ tak naprawdê trudno okreœliæ).Typy teprzedstawiono w tabeli 11.1, która informuje, na jakie typy danych OLE s¹konwertowane typy Perla przed przekazaniem danych serwerowi OLE.Tabela 11.1.Typy danych OLETyp danych OLE Standardowych typ danychOLE::VT_BOOL Wartoœci logiczne OLE.OLE::VT_BSTR Tekst OLE (char* znany z jêzyka C).OLE::VT_CY Waluta OLE.OLE::VT_DATE Data OLE.OLE::VT_I2 Liczba ca³kowita ze znakiem (2 bajty).OLE::VT_I4 Liczba ca³kowita ze znakiem (4 bajty).OLE::VT_R4 Liczba zmiennoprzecinkowa (4 bajty).OLE::VT_R8 Liczba zmiennoprzecinkowa (8 bajtów).OLE::VT_UI1 Znak bez znaku.Na przyk³ad liczby ca³kowite Perla zostan¹ przekszta³cone na VT_I4, liczbyzmienno-przecinkowe podwójnej precyzji na VT_R8 i tak dalej.Pakiet Perl Win32wykonuje te konwersje automatycznie.Aby utworzyæ w programie obiekt OLE, trzeba w³¹czyæ modu³ OLE:use OLE;Nastêpnie funkcja CreateObject pozwala obiekt utworzyæ.Przyjrzyjmy siêprzyk³adowi.U¿yjemy Microsoft Excela, aby dodaæ do siebie dwie liczy 2, anastêpnie wyœwietlimy wynik.Zaczniemy od zapisania parametrów w zmiennych$operandl i $operand2:use OLE;$operandl = '2';$operand2 = '2';W kolejnym etapie za pomoc¹ funkcji CreateObject utworzymy obiekt OLE$excelobject.Funkcji tej przeka¿emy wartoœæ OLE i wska¿emy typ obiektu OLE,jaki ma zostaæ utworzony — server.class, gdzie server to zarejestrowana nazwaserwera OLE, a class to klasa tworzonego obiektu (zwykle serwery OLE obs³uguj¹wiele ró¿nych klas —jeœli ma siê szczêœcie, w dokumentacji serwera mo¿naznaleŸæ informacjê o tym, jakich metod mo¿na u¿yæ w poszczególnych klasach).Wnaszym przypadku utworzymy arkusz Excela:use OLE;$operandl = '2';$operand2 = '2';$excelobject = CreateObject OLE 'Excel.Sheet';Teraz mo¿emy ju¿ swobodnie u¿ywaæ metod nowego obiektu.Najpierw za³adujemy$operandl do komórki (1,1) arkusza, zaœ $operand2 do komórki (2,1) i wynikwyliczenia sumy umieœcimy w komórce (3,1):use OLE;$operandl = '2' ;$operand2 = '2' ;$excelobject = CreateObject OLE 'Excel.Sheet';$excelobject->Cells(1,1)->{Value} = $operandl;$excelobject->Cells(2,1)->{Value} = $operand2;$excelobject->Cells(1,1)->{Formula} = '=R1C1 + R2C1';W tym momencie pozosta³o ju¿ tylko wyœwietliæ wynik:use OLE;$operandl = '2';$operand2 = '2';$excelobject = CreateObject OLE 'Excel.Sheet';$excelobject->Cells(l,1)->(Value) = $operandl;$excelobject->Cells(2,1)->{Value} = $operand2;$excelobject->Cells(l,1)->{Formula) = '=R1C1 + R2C1';$sum = $excelobjact->Cells(3,l)->{Value);$excelobject->Quit();print "Microsoft Excel twierdzi, ¿e ","$operandl + $operand2 = $sum.\n";Microsoft Excel twierdzi, ¿e 2 + 2 = 4.Rozdzia³ 12.Funkcje wbudowane: obs³uga plikówW skrócieW tym rozdziale zajmiemy siê obs³ug¹ plików w Perlu, szczególnie funkcjamiu¿ywanymi do obs³ugi plików fizycznych (czyli znajduj¹cych siê na dysku), nazwplików i katalogów.Jest to kolejny obszerny temat w Perlu i choæ nie bêdziemo¿liwe omówienie go tutaj w ca³oœci, to przynajmniej poznamy go na tyle, abymóc siê w nim poruszaæ (jedn¹ z przyczyn obszemoœci tego tematu jest obecnoœæwielu powtórzeñ.Motto Perla — „da siê to zrobiæ na wiêcej ni¿ jeden sposób" —w przypadku obs³ugi plików jest wyj¹tkowo prawdziwe).Uwaga dla osób z „uniksofobi¹": obs³uga plików w Perlu by³a oparta pierwotniena systemie plików Unix, co nadal w du¿ym stopniu jest widoczne — u¿ywa siêuprawnieñ plików systemu Unix, odnoœników symbolicznych i tak dalej.Przydatnemo¿e byæ zrobienie kilku eksperymentów z posiadan¹ wersj¹ Perla, szczególniejeœli chodzi o ustawianie uprawnieñ do plików
[ Pobierz całość w formacie PDF ]
Darmowy hosting zapewnia PRV.PL