1
我正在使用easySocket udf和下面的代碼通過tcp/ip發送一個2字節的實際消息頭長度。但是,UTF-8字符(即()(8D hex)被接收爲?(3F hex))。我已經使用了下面的代碼,我也檢查了stackoverflow。有沒有辦法發送長度相當於字節的字節,這樣就不會有字符編碼?謝謝。ColdFusion套接字流,UTF-8字符串未在目標上正確接收
<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="64178" 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>
明確指定實際上作爲我在TCP/IP上發送的chr(141)而工作的編碼的接收方式不同。但是,解釋我發送的消息的實際長度仍然存在問題。標題的長度是2個字節,然後是實際的消息。有沒有辦法將實際字符字節發送到流而不使用編碼? –
「實際字符字節」是什麼意思?不知道我跟着。 – Leigh
對不起,如果我把你弄糊塗了。我的意思是將一個0-255的整數轉換成一個字節並通過tcp/ip發送。感謝您的支持,感謝。 –