Veröffentlicht von & unter ColdFusion.

Einen einfaches IO via Socket bietet ColdFusion von Haus aus nicht. Wer eine Socketverbindung benötig, kann aber einfach auf die Java-Funktionalitäten zugreifen. Hier eine UDF, die ich für einen Telnetzugriff geschrieben habe. Natürlich kann man die UDF für jede beliebige Socketverbindung benutzen. In writeLines wir ein Array für die einzelnen Befehle übergeben. Bei readLines gibt man an wie viele Zeilen man zurück bekommen möchte. Host und Port erklären sich von selbst, denke ich ;o).

<cffunction name=“socketIO“ returntype=“array“ access=“public“ output=“true“>
<cfargument name=“host“ type=“string“ required=“true“>
<cfargument name=“port“ type=“numeric“ required=“true“>
<cfargument name=“writeLines“ type=“array“ required=“true“>
<cfargument name=“readLines“ type=“numeric“ required=“false“ default=“1″>

<cfscript>
response = arrayNew(1);

// connection objects
input  = createObject(„java“,“java.io.BufferedReader“);
output  = createObject(„java“,“java.io.PrintStream“);
socket  = createObject(„java“,“java.net.Socket“);
inStr  = createObject(„java“,“java.io.InputStreamReader“);

// socket init
socket.init(arguments.host,arguments.port);
socket.setSoTimeout(500);

// init input/output stream
input.init(inStr.init(socket.getInputStream()));
output.init(socket.getOutputStream(),true);

// lines to stream
for(i=1; i LTE arrayLen(writeLines); i=i+1){
output.println(writeLines[i]);
}

// read requested lines from input stream
for(i=1; i LTE readLines; i=i+1){
try{
response[i] = input.readLine();
//writeOutput(response[i] & „<br>“);
}catch(Any err){
//writeOutput(err.message & „<br>“ & err.detail & „<br>“);
break;
}
}

// close streams/buffers/sockets
try{
input.close();
output.close();
socket.close();
inStr.close();

}catch(Any err){
//error handling
}

return response;
</cfscript>
</cffunction>

Hier ein Beispiel eines Aufrufs:

<cfscript>
reqArray = arrayNew(1);
reqArray[1] = ‚cl 8767 #chr(13)##chr(10)#)‘;
reqArray[2] = ‚pl 8767 #chr(13)##chr(10)#)‘;
reqArray[3] = ’sl 8767 #chr(13)##chr(10)#)‘;
socketOut = socketIO(‚127.0.0.1′,’51234′,reqArray,’20‘);
</cfscript>

<cfdump var=’#socketOut#‘>

WebSite auslesen:

<cfscript>
reqArray = arrayNew(1);
reqArray[1] = ‚GET / #chr(13)##chr(10)#)‘;
socketOut = socketIO(‚web.de‘,’80‘,reqArray,’200′);
</cfscript>

<cfdump var=’#socketOut#‘>

Mit dieser Grundlage werde ich ein Webpost für Teamspeak unter ColdFusion realisieren. So wird es dann auch möglich sein aktive Teamspeak User und Serverstatus mit ColdFusion darzustellen.

Eine alternative zu meiner UDF wäre noch ein CFX Tag für ColdFusion. Das CFX_JSocket Tag ist unterhttp://www.activsoftware.com/products/productdetail.cfm/id/1013 zu finden und ist kostenlos. Für meine Zwecke ist mir aber der Aufwand der CFX installation zu groß, zudem hatte ich mit der CFX Probleme wenn ich zu viele „LINES“ angebeben hatte.