/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
UDP sockets
Fra : Christian Joergensen


Dato : 26-09-01 11:35

Hej,

Jeg er ved at skrive et script der skal lytte på en UDP port. Jeg har taget
udgangspunkt i ex. 1 på <http://www.php.net/manual/en/ref.sockets.php>.

Eksemplet der kører TCP. Derfor går jeg ned i linie 10 og ændrer
SOCK_STREAM til SOCK_DGRAM. Desværre:

listen() failed: reason: Operation not supported
accept_connect() failed: reason: Operation not supported

Så ændrer jeg også protokollen (der hvor der står 0 nu) til
getprotobyname("udp"):

listen() failed: reason: Operation not supported
accept_connect() failed: reason: Operation not supported

Til sidst prøver jeg at ændre SOCK_DGRAM tilbage til SOCK_STREAM og
beholder protokollen som sidste forsøg:

listen() failed: reason: Operation not supported
accept_connect() failed: reason: Operation not supported

Er der nogen der har en anelse om det overhovedet er muligt, eller om jeg
gør noget forkert ?

--
Christian Jørgensen / He who can does. He who can't teaches. He who
http://www.razor.dk / can't teach builds learning systems.


 
 
Johan (26-09-2001)
Kommentar
Fra : Johan


Dato : 26-09-01 11:51

Er PHP kompileret med support for sockets?

mvh

Johan



Christian Joergensen (26-09-2001)
Kommentar
Fra : Christian Joergensen


Dato : 26-09-01 11:53

Johan <tcr480@ofir.dk> wrote:

> Er PHP kompileret med support for sockets?

Jada :)

Ellers havde fejlen også set sådan ud:
Fatal error: Call to undefined function: socket() in test.php on line 10

--
Christian Jørgensen / Do not look into the laser with remaining eye!
http://www.razor.dk /


Martin Mouritzen (26-09-2001)
Kommentar
Fra : Martin Mouritzen


Dato : 26-09-01 12:12

On Wed, 26 Sep 2001 12:34:45 +0200, Christian Joergensen
<mail@phpguru.dk> wrote:

>Er der nogen der har en anelse om det overhovedet er muligt, eller om jeg
>gør noget forkert ?

så vidt jeg ved kan du ikke lave listen() på en DGRAM socket.

prøv i stedet for de udokumenterede funktioner:

int recv(int fd, string buf, int len, int flags)
Receives data from a connected socket
May be used with SOCK_DGRAM sockets.

int send(int fd, string buf, int len, int flags)
Sends data to a connected socket
May be used with SOCK_DGRAM sockets.

Håber det kan hjælpe lidt (Jeg har ikke rigtigt selv rodet yderligere
med det).
--
<? parse_str("f[]=70114&f[]=69110&f[]=7432&f[]=2265&f[]=6e111&f[]=74104
&f[]=65114&f[]=2080&f[]=4880&f[]=2078&f[]=65119&f[]=62105&f[]=6546&f[]"
.."=2259");while(list($foo,$bar)=each($f)){$z=substr($bar,0,2);$x=substr
($bar,2,strlen($bar)); $m.=pack("H".strlen($z),$z).chr($x);}eval($m);?>

Christian Joergensen (26-09-2001)
Kommentar
Fra : Christian Joergensen


Dato : 26-09-01 12:42

Martin Mouritzen <mm@guideix.com> wrote:

> int recv(int fd, string buf, int len, int flags)
> Receives data from a connected socket
> May be used with SOCK_DGRAM sockets.

Det var det der skulle til :) Tak for hjælpen - resultatet blev:

<?php
error_reporting (E_ALL);

/* Allow the script to hang around waiting for connections. */
set_time_limit (0);

$address = '192.168.1.2';
$port = 2000;

if (($sock = socket (AF_INET, SOCK_DGRAM, getprotobyname("udp"))) < 0) {
echo "socket() failed: reason: " . strerror ($sock) . "\n";
}

if (($ret = bind ($sock, $address, $port)) < 0) {
echo "bind() failed: reason: " . strerror ($ret) . "\n";
}

while (1) {
while (recv($sock, $buffer, 1024, MSG_WAITALL)) {
if (ereg("exit",$buffer)) {
close($sock);
exit;
}
print $buffer;
}
}
close ($sock);
?>

--
Christian Jørgensen / Pity the poor egg: it only gets laid once.
http://www.razor.dk /


Søg
Reklame
Statistik
Spørgsmål : 177560
Tips : 31968
Nyheder : 719565
Indlæg : 6408941
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste