seesoe Posted March 22, 2009 Share Posted March 22, 2009 hello, im trying to create a very simple socket server im trying to make a socket client out of php that will send a string to the au3 socket server here is what i got so far (i forgot where i got it from but it was some place on this forum, i changed how its displayed a little) #include "TCP.au3" TrayTip('SERVER:',"Creating server...",10,1) $hServer = _TCP_Server_Create(4321) sleep(6000) TrayTip('SERVER:',"Server is runnning...",30) _TCP_RegisterEvent($hServer, $TCP_NEWCLIENT, "NewClient"); Whooooo! Now, this function (NewClient) get's called when a new client connects to the server. _TCP_RegisterEvent($hServer, $TCP_DISCONNECT, "Disconnect"); And this,... this will get called when a client disconnects. While 1 WEnd Func NewClient($hSocket, $iError); Yo, check this out! It's a $iError parameter! (In case you didn't noticed: It's in every function) TrayTip('SERVER:',"New client connected."&@CRLF&"Sending this: Bleh!",30) ; send something _TCP_Send($hSocket, "Bleh!") EndFunc ; client lost Func Disconnect($hSocket, $iError) TrayTip('SERVER:',"Client disconnected.",30) EndFunc i tried to use 2 different php socket client codes that send hello world but php is getting a timed out error also i know something is going on between them but not correctly because when the server is running and i run the au3 socket server i instantly get a client disconnected message. <?php $host = "server ip"; $port = 4321; // nat opened port $timeout = 6000; $sk = fsockopen($host,$port,$errnum,$errstr,$timeout); if (!is_resource($sk)) { exit("connection fail: ".$errnum." ".$errstr); } else { fputs($sk, "hello world"); $dati = ""; while (!feof($sk)) { $dati.= fgets ($sk, 1024); } } fclose($sk); echo($dati); ?> Link to comment Share on other sites More sharing options...
ProgAndy Posted March 22, 2009 Share Posted March 22, 2009 This works for me: #include "TCP.au3" TrayTip("SERVER","Creating server...",10,1) $hServer = _TCP_Server_Create(4321) sleep(1000) TrayTip(";SERVER","Server is runnning...",30) _TCP_RegisterEvent($hServer, $TCP_RECEIVE, "Received"); Function "Received" will get called when something is received _TCP_RegisterEvent($hServer, $TCP_NEWCLIENT, "NewClient"); Whooooo! Now, this function (NewClient) get's called when a new client connects to the server. _TCP_RegisterEvent($hServer, $TCP_DISCONNECT, "Disconnect"); And this,... this will get called when a client disconnects. While 1 Sleep(10) WEnd Func Received($hSocket, $sReceived, $iError); And we also registered this! Our homemade do-it-yourself function gets called when something is received. TrayTip("SERVER", "We received this: "& $sReceived, 30); (and we'll display it) EndFunc Func NewClient($hSocket, $iError); Yo, check this out! It's a $iError parameter! (In case you didn't noticed: It's in every function) TrayTip("SERVER","New client connected."&@CRLF&"Sending this: Bleh!",30) ; send something _TCP_Send($hSocket, "Bleh!") EndFunc ; client lost Func Disconnect($hSocket, $iError) TrayTip("SERVER","Client disconnected.",30) EndFunc <?php $host = "127.0.0.1"; $port = 4321; // nat opened port $timeout = 6000; $sk = fsockopen($host,$port,$errnum,$errstr,$timeout); if (!is_resource($sk) || $errnum) { exit("connection fail: ".$errnum." ".$errstr); } else { stream_set_blocking($sk, false); fwrite($sk, "hello world"); $dati = ""; while (!feof($sk)) { $chunk = fgets ($sk, 1024); if ($chunk !== False) { $dati.= $chunk; break; } } echo $dati; } fclose($sk); ?> *GERMAN* [note: you are not allowed to remove author / modified info from my UDFs]My UDFs:[_SetImageBinaryToCtrl] [_TaskDialog] [AutoItObject] [Animated GIF (GDI+)] [ClipPut for Image] [FreeImage] [GDI32 UDFs] [GDIPlus Progressbar] [Hotkey-Selector] [Multiline Inputbox] [MySQL without ODBC] [RichEdit UDFs] [SpeechAPI Example] [WinHTTP]UDFs included in AutoIt: FTP_Ex (as FTPEx), _WinAPI_SetLayeredWindowAttributes Link to comment Share on other sites More sharing options...
seesoe Posted March 22, 2009 Author Share Posted March 22, 2009 are you running that locally? or on remote host with port forwarded? Link to comment Share on other sites More sharing options...
ProgAndy Posted March 22, 2009 Share Posted March 22, 2009 I run it locally with PHP 5. *GERMAN* [note: you are not allowed to remove author / modified info from my UDFs]My UDFs:[_SetImageBinaryToCtrl] [_TaskDialog] [AutoItObject] [Animated GIF (GDI+)] [ClipPut for Image] [FreeImage] [GDI32 UDFs] [GDIPlus Progressbar] [Hotkey-Selector] [Multiline Inputbox] [MySQL without ODBC] [RichEdit UDFs] [SpeechAPI Example] [WinHTTP]UDFs included in AutoIt: FTP_Ex (as FTPEx), _WinAPI_SetLayeredWindowAttributes Link to comment Share on other sites More sharing options...
seesoe Posted March 22, 2009 Author Share Posted March 22, 2009 i think that is my problem, im running it on a remote server, and i have my router open on port 4321. is it possible like this? or do i need more ports open or something or some extra settings somewhere?.. Link to comment Share on other sites More sharing options...
ProgAndy Posted March 22, 2009 Share Posted March 22, 2009 (edited) It should be possible, i think. Have you tried the scrpts i posted? i changed them a bit. And if it doesn't work i can't help you since i can't reproduce it... Edited March 22, 2009 by ProgAndy *GERMAN* [note: you are not allowed to remove author / modified info from my UDFs]My UDFs:[_SetImageBinaryToCtrl] [_TaskDialog] [AutoItObject] [Animated GIF (GDI+)] [ClipPut for Image] [FreeImage] [GDI32 UDFs] [GDIPlus Progressbar] [Hotkey-Selector] [Multiline Inputbox] [MySQL without ODBC] [RichEdit UDFs] [SpeechAPI Example] [WinHTTP]UDFs included in AutoIt: FTP_Ex (as FTPEx), _WinAPI_SetLayeredWindowAttributes Link to comment Share on other sites More sharing options...
seesoe Posted March 22, 2009 Author Share Posted March 22, 2009 (edited) yeah, i still got the same results, im trying to get this to work now expandcollapse popuperror_reporting(E_ALL); echo "<h2>TCP/IP Connection</h2>\n"; /* Get the port for the WWW service. */ $service_port = 4321; /* Get the IP address for the target host. */ $address = gethostbyname('host name'); /* Create a TCP/IP socket. */ $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); if ($socket === false) { echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n"; } else { echo "OK.\n"; } echo "Attempting to connect to '$address' on port '$service_port'..."; $result = socket_connect($socket, $address, $service_port); if ($result === false) { echo "socket_connect() failed.\nReason: ($result) " . socket_strerror(socket_last_error($socket)) . "\n"; } else { echo "OK.\n"; } stream_set_blocking($socket, false); $in = "Hello World!\r\n"; $out = ''; echo "Sending request..."; socket_write($socket, $in, strlen($in)); echo "OK.\n"; echo "Reading response:\n\n"; while ($chunk = socket_read($socket, 2048, PHP_NORMAL_READ)) { if ($chunk !== False) { $out.= $chunk; break; } echo $out; } echo "Closing socket..."; socket_close($socket); echo "OK."; can you tell me if that worked for you with the same server you posted? Edited March 22, 2009 by seesoe Link to comment Share on other sites More sharing options...
Kip Posted March 22, 2009 Share Posted March 22, 2009 i think that is my problem, im running it on a remote server, and i have my router open on port 4321.Webhosts don't allow you to create servers. And you (the client) don't need to forward ports, only the server. And since the server is a webhost you can't forward any ports on their routers. MailSpons: Fake SMTP server for safe email testing Dutch postcode & address API. Link to comment Share on other sites More sharing options...
seesoe Posted March 22, 2009 Author Share Posted March 22, 2009 that is incorrect, my computer is running the autoit socket server, and the webhost is running the client php script Link to comment Share on other sites More sharing options...
ProgAndy Posted March 22, 2009 Share Posted March 22, 2009 It works, but the receive.code is not correct. It should be this: while ($chunk = socket_read($socket, 2048, PHP_NORMAL_READ)) { if ($chunk !== False) { $out.= $chunk; break; } } echo $out; and for PHP_NORMAL_READ, you have to add a lf in the autoit-send or you have to remove this parameter. _TCP_Send($hSocket, "Bleh!"&@LF) *GERMAN* [note: you are not allowed to remove author / modified info from my UDFs]My UDFs:[_SetImageBinaryToCtrl] [_TaskDialog] [AutoItObject] [Animated GIF (GDI+)] [ClipPut for Image] [FreeImage] [GDI32 UDFs] [GDIPlus Progressbar] [Hotkey-Selector] [Multiline Inputbox] [MySQL without ODBC] [RichEdit UDFs] [SpeechAPI Example] [WinHTTP]UDFs included in AutoIt: FTP_Ex (as FTPEx), _WinAPI_SetLayeredWindowAttributes Link to comment Share on other sites More sharing options...
seesoe Posted March 22, 2009 Author Share Posted March 22, 2009 ok thank you, i removed that parameter, and i moved the echo out the loop. i just wanted to make sure the client script works and the server script works, so that i can see what exactly is going on. Link to comment Share on other sites More sharing options...
seesoe Posted March 22, 2009 Author Share Posted March 22, 2009 i did a test with a remote vnc server of mine with a autoit socket client and it worked fine, i guess im done where i need to move on to a php forum Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now