Re: sockets

From: Date: Mon, 09 Apr 2001 20:23:53 +0000
Subject: Re: sockets
References: 1  Groups: php.general 
Request: Send a blank email to php-general+get-47872@lists.php.net to get a copy of this message
No, your problem is most likely that you didn't do anything with the telnet negotiation phase. Read the RFC on telnet, and you will find that there is a whole client-server negotiation phase going on. Kinda like a modem handshake. It is really quite difficult, and no one has ported a Telnet class to PHP yet. (big big task) There is a Net::Telnet class in perl that I ended up using to write a script to do something similar, and pass results back to the php script that called it. Telnet is simply not as easy as opening a socket. If you don't send the right set of characters as the first block, it won't work. On 4/9/01 10:16 AM, "Matthias Winkelmann" <winkelmann@someon.com> wrote: > Hi! > > I'm trying to speed up a big application by splitting it into a codebase > acting as a server and the actual scripts communicating with the server > using sockets. > > I got the server working, at least it works when I send a request via > telnet. When I try to let a script act as the client I get no response. I > think the problem is the length parameter in the read()-function. > Not all requests and results are 2048 bytes, but I have no idea what to use > as a delimiter instead. > Here are the scripts so far: > > Server: > > // Socket was created, bind & listen executed > do { > if (($msgsock = accept_connect($sock)) < 0) { // wait for request > echo "accept_connect() failed: reason: " . strerror ($msgsock) . > "\n"; > break; > } > do { > $buf = ''; > $ret = read ($msgsock, $buf, 2048); // read request > echo "request: $ret <br>"; > if ($ret < 0) { > echo "read() failed: reason: " . strerror ($ret) . "\n"; > break 2; > } > if ($ret == 0) { > break 2; > } > $buf = trim ($buf); > > $talkback = eval($buf); // > request verabeiten > write ($msgsock, $talkback, strlen ($talkback)); // write result to > socket > echo "$buf\n"; > } while (true); > close ($msgsock); > } while (true); > > > > Client: > > > // Socket was created; submitting request > > write ($socket, $in, strlen ($in)); > while (read ($socket, $out, 2048)) // reading response. what if > the response is < 2048 bytes? > { > echo $out; > } > > > As I said: The server works perfectly using telnet, but the script-client > does not give any output, allthough the connection was created successfully. > > Thanks in advance for any answers. I hope I was able to describe the problem > well enough. > > Matt >

« previous php.general (#47872) next »