如果這是一個重復的問題,我真的很抱歉,但我在其他執行緒中嘗試了很多答案,但沒有一個對我有用。
我正在嘗試使用 TLSv1.2 協議通過 SSLSocket 向遠程服務器發送 ISO8583 訊息,我使用密鑰庫配置了證書并嘗試發送示例 ISO8583 訊息:08002220010000800000900000011312115000000180105000003
0800:MTI
2220010000800000:二進制十六進制編碼位圖(僅存在欄位 3、7、11、24、41)
900000:程序代碼
0113121150:傳輸日期和時間
000001:STAN
801:功能代碼
05000003:終端 ID
然后,我將訊息轉換為位元組陣列并使用套接字 OutputStream 發送,但服務器沒有回應,并且在嘗試讀取 InputStream 時凍結。
出于這個問題的目的,我選擇測驗手動設定的示例訊息,而不使用任何打包方法。
我對 ISO8583 很陌生,所以我不完全知道我做錯了什么。
這是迄今為止我嘗試過的代碼,非常感謝那些愿意幫助我的人。
Thread thread = new Thread(() -> {
try {
X509TrustManager[] tmm;
KeyStore ks = KeyStore.getInstance("BKS");
InputStream is = getResources().openRawResource(R.raw.tunrootca2);
ks.load(is, KEY_PASSWORD.toCharArray());
tmm=tm(ks);
SSLContext ctx = SSLContext.getInstance("TLSv1.2");
ctx.init(null, tmm, null);
SSLSocketFactory SocketFactory = ctx.getSocketFactory();
SSLSocket socket = (SSLSocket) SocketFactory
.createSocket(REMOTE_ENDPOINT, REMOTE_ENDPOINT_PORT);
String sampleMessage = "080022200100008000009000000113120000000180105000003";
byte[] bytesMessage = sampleMessage.getBytes(StandardCharsets.UTF_16LE);
byte[] bytes = packData(bytesMessage);
OutputStream out = socket.getOutputStream();
out.write(bytes);
byte[] buffer = new byte[256];
InputStream in = socket.getInputStream();
int read;
while((read = in.read(buffer)) != -1) {
String output = new String(buffer, 0, read);
Log.v("SOCKET_OUTPUT", output);
}
} catch (Exception e) {
e.printStackTrace();
}
});
thread.start();
});
PackData 函式
static byte[] packData(byte[] data) {
int len = data.length;
byte buf[] = new byte[len 2];
buf[0] = (byte) (len >> 8 & 255);
buf[1] = (byte) (len & 255);
System.arraycopy(data, 0, buf, 2, len);
return buf;
}
uj5u.com熱心網友回復:
設定套接字通信可能很棘手。如果可能的話,我建議使用 WebSockets 進行通信,因為它們已經設定了通信協議的連接方式。
但是,如果您要堅持使用普通套接字:
在你的 write 呼叫之后,呼叫 flush();
out.write(bytes); out.flush();如果 1 不起作用,事情會變得更棘手。由于您不控制其中的服務器端部分,因此很難知道您需要向他們發送什么才能讓他們向您發送一些東西。您可以嘗試發送換行符。但除此之外,您發送的內容與另一端的服務器所期望的內容不匹配
- - 編輯 - -
我查閱了 ISO 8583 并對您正在嘗試做的事情有了更好的了解。你可以忽略我之前關于使用 WebServer 套接字的建議。
uj5u.com熱心網友回復:
您缺少基礎知識。您不能使用字串連接構建 ISO 訊息。您必須為這些啟用欄位設定正確的位圖。也許嘗試遵循以下示例。它將指導您了解基礎知識。
https://kodejava.org/how-do-i-pack-an-iso-8583-message/
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/411707.html
標籤:
