1

以下のeasySocket udfとコードを使用して、実際のメッセージの 2 バイトのヘッダー長を tcp/ip 経由で送信しています。ただし、UTF-8 文字 (つまり、( ) (8D hex) は ? (3F hex) として受信されます)。次のコードを使用し、stackoverflow でも確認しました。文字エンコーディングが含まれないように、長さに相当するバイトを送信する方法はありますか? ありがとう。

    <cffunction name="easySocket" access="private" returntype="any" hint="Uses Java Sockets to connect to a remote socket over TCP/IP" output="false">

        <cfargument name="host" type="string" required="yes" default="localhost" hint="Host to connect to and send the message">
        <cfargument name="port" type="numeric" required="Yes" default="8080" hint="Port to connect to and send the message">
        <cfargument name="message" type="string" required="yes" default="" hint="The message to transmit">

        <cfset var result = "">
        <cfset var socket = createObject( "java", "java.net.Socket" )>
        <cfset var streamOut = "">
        <cfset var output = "">
        <cfset var input = "">

        <cftry>
            <cfset socket.init(arguments.host,arguments.port)>
            <cfcatch type="Object">
                <cfset result = "#cfcatch.Message#<br>Could not connected to host <strong>#arguments.host#</strong>, port <strong>#arguments.port#</strong>.">
                <cfreturn result>
            </cfcatch>
        </cftry>

        <cfif socket.isConnected()>
            <cfset streamOut = socket.getOutputStream()>

            <cfset output = createObject("java", "java.io.PrintWriter").init(streamOut)>
            <cfset streamInput = socket.getInputStream()>

            <cfset inputStreamReader= createObject( "java", "java.io.InputStreamReader").init(streamInput)>
            <cfset input = createObject( "java", "java.io.BufferedReader").init(InputStreamReader)>


            <cfset output.print(chr(1) & chr(141) & arguments.message)>
            <cfset output.flush()>

            <cfset result='Success: '& arguments.message >
            <cfset socket.close()>
        <cfelse>
            <cfset result = "Could not connected to host <strong>#arguments.host#</strong>, port <strong>#arguments.port#</strong>.">
        </cfif>

        <cfreturn result>
    </cffunction>

    <cfset txt_msg ='<COS MSG_TYPE_ID="0100" MCC="5999" POS_ENTRY_MODE="012" POS_COND="00" CARD_NUMBER="6417801234567890" ACQUIRER_ID="00000002" TERMINAL_ID="CAL100  " PROC_CODE="300000" STAN="000129" RETRIEVAL_REFERENCE="330145181129" DATE_LOCAL_TRAN="1111" TIME_LOCAL_TRAN="173654" TRANSM_DATE_TIME="1111173654" CARD_ACPT_ID_CODE="TESTDTA" CARD_ACPT_NAME_LOC="TSTESTSTE" />'>

    <cfoutput>#easySocket('172.16.0.23','9095',txt_msg)#</cfoutput>
4

1 に答える 1