MultiServis.Net //PHP El Kitabı

<<= Önceki Sayfa | PHP Ana Sayfa | Sonraki Sayfa =>>

PHP ile bir TCP istemcisi yazalim... Yazar: Serkan Tarih: 01/03/02

Problem : Uzaktaki makineye soket acarak baglanmak istiyorsunuz.

Cozum: TCP ile uzaktaki bir makineye baglanmak icin fsockopen () hazir fonksiyonu kullanilir.

Not: Baska bir sunucuya izin almadan soket acarak baglanmak istemedigim icin php.org.tr'in egitim sunucusunu kullaniyorum.(turk-php.com virtual host uzerinde oldugu icin istedigim sonucu alamiyorum…)

<?php

$baglanti = fsockopen("www.php.org.tr", 80, $errno, $errstr, 30);

if (!$baglanti) {
die($errstr);
}

fputs($baglanti, "GET / /HTTP/1.0 \r\n\r\n");
while (!feof($baglanti)) {
$satir = fgets($baglanti, 2048);
echo $satir;
}
fclose ($baglanti);
?>

Bir diger cozum ise PHP'nin soket kutuphanesini kullanmaktir.(PHP icerisinden bu modulu kullanabilmek icin configure betigi --enable-sockets parametresi ile calistirilmalidir.)

<?php
$url = 'www.php.org.tr';

$serv_port = getservbyname('www', 'tcp');
$adres = gethostbyname($url);

$sock = socket (AF_INET, SOCK_STREAM, 0);
if ($sock < 0) {
die(strerror($sock));
}

$res = connect($sock, $adres, $serv_port);
if ($res < 0) {
die(strerror($res));
}

$veri = "HEAD / HTTP/1.0 \r\n\r\n";

write ($sock, $veri, strlen($veri));

while (read($sock, $cevap, 2048)) {
print $cevap;
}

close ($sock);
?>

Her iki programda ayni islevi gormektedir.Ilk programda fsockopen () hazir fonksiyonu yardimiyla sokete baglanmak icin bir arayuz olustrulmustur.

Ikinci programda, programciya daha fazla kontrol sunan soket modulu kullanilmistir.Bu kutuphane ile daha dusuk seviyeli C API'lerine direkt erisim saglanmaktadir.

Serkan Hadi Ceylani
serkan@turk-php.com

Kaynak : ISBN 0-672-31924-1

<<= Önceki Sayfa | PHP Ana Sayfa | Sonraki Sayfa =>>