I’m currently working on an ISO 8583 messaging system where I send a message to a server, but after sending the message, the console only prints ISO 8583 message sent to the server.
and nothing happens after that. I don’t receive any response, and there are no errors or exceptions thrown.
Here is the relevant part of my code:
val messageFactory = MessageFactory<IsoMessage>()
messageFactory.useBinaryMessages = true
val clearMessage = messageFactory.newMessage(0x800)
clearMessage.setValue(3, "810000", IsoType.NUMERIC, 6)
clearMessage.setValue(11, "000001", IsoType.NUMERIC, 6)
clearMessage.setValue(12, getLocalTransactionTime(), IsoType.NUMERIC, 6)
clearMessage.setValue(13, getLocalTransactionDate(), IsoType.NUMERIC, 4)
clearMessage.setValue(43, "P1CPJS9201100068P78HHAS0001100046".padEnd(40), IsoType.ALPHA, 40)
val tcn = generateRandomTCN2()
clearMessage.setValue(63, byteArrayOf(0x01.toByte(), 0x00, 0x08) + tcn, IsoType.BINARY, 11)
val messageBytes = clearMessage.writeData()
sendToServer(messageBytes)
fun sendToServer(messageBytes: ByteArray) {
val serverAddress = "server_ip"
Socket(serverAddress, serverPort).use { socket ->
val outputStream = socket.getOutputStream()
outputStream.write(messageBytes, 8, 8)
outputStream.write(messageBytes.size)
if (socket.isConnected) {
println("Server connection established.")
println("Failed to connect to the server.")
println("ISO 8583 message sent to the server.")
receiveFromServer(socket)
private fun receiveFromServer(socket: Socket) {
val inputStream = socket.getInputStream()
val responseBytes = ByteArray(4096)
val bytesRead = inputStream.read(responseBytes)
val responseFactory = MessageFactory<IsoMessage>()
responseFactory.useBinaryMessages = true
val receivedResponse = responseFactory.parseMessage(responseBytes, 0)
println("nReceived ISO 8583 Response Message:")
println(receivedResponse.debugString())
println("No response received from the server.")
<code>fun mainSend() {
try {
val messageFactory = MessageFactory<IsoMessage>()
messageFactory.useBinaryMessages = true
val clearMessage = messageFactory.newMessage(0x800)
clearMessage.setValue(3, "810000", IsoType.NUMERIC, 6)
clearMessage.setValue(11, "000001", IsoType.NUMERIC, 6)
clearMessage.setValue(12, getLocalTransactionTime(), IsoType.NUMERIC, 6)
clearMessage.setValue(13, getLocalTransactionDate(), IsoType.NUMERIC, 4)
clearMessage.setValue(43, "P1CPJS9201100068P78HHAS0001100046".padEnd(40), IsoType.ALPHA, 40)
val tcn = generateRandomTCN2()
clearMessage.setValue(63, byteArrayOf(0x01.toByte(), 0x00, 0x08) + tcn, IsoType.BINARY, 11)
val messageBytes = clearMessage.writeData()
sendToServer(messageBytes)
} catch (e: Exception) {
e.printStackTrace()
}
}
fun sendToServer(messageBytes: ByteArray) {
val serverAddress = "server_ip"
val serverPort = port
Socket(serverAddress, serverPort).use { socket ->
val outputStream = socket.getOutputStream()
outputStream.write(messageBytes, 8, 8)
outputStream.write(messageBytes.size)
outputStream.flush()
if (socket.isConnected) {
println("Server connection established.")
} else {
println("Failed to connect to the server.")
}
println("ISO 8583 message sent to the server.")
receiveFromServer(socket)
}
}
private fun receiveFromServer(socket: Socket) {
val inputStream = socket.getInputStream()
val responseBytes = ByteArray(4096)
val bytesRead = inputStream.read(responseBytes)
if (bytesRead > 0) {
val responseFactory = MessageFactory<IsoMessage>()
responseFactory.useBinaryMessages = true
val receivedResponse = responseFactory.parseMessage(responseBytes, 0)
println("nReceived ISO 8583 Response Message:")
println(receivedResponse.debugString())
} else {
println("No response received from the server.")
}
}
</code>
fun mainSend() {
try {
val messageFactory = MessageFactory<IsoMessage>()
messageFactory.useBinaryMessages = true
val clearMessage = messageFactory.newMessage(0x800)
clearMessage.setValue(3, "810000", IsoType.NUMERIC, 6)
clearMessage.setValue(11, "000001", IsoType.NUMERIC, 6)
clearMessage.setValue(12, getLocalTransactionTime(), IsoType.NUMERIC, 6)
clearMessage.setValue(13, getLocalTransactionDate(), IsoType.NUMERIC, 4)
clearMessage.setValue(43, "P1CPJS9201100068P78HHAS0001100046".padEnd(40), IsoType.ALPHA, 40)
val tcn = generateRandomTCN2()
clearMessage.setValue(63, byteArrayOf(0x01.toByte(), 0x00, 0x08) + tcn, IsoType.BINARY, 11)
val messageBytes = clearMessage.writeData()
sendToServer(messageBytes)
} catch (e: Exception) {
e.printStackTrace()
}
}
fun sendToServer(messageBytes: ByteArray) {
val serverAddress = "server_ip"
val serverPort = port
Socket(serverAddress, serverPort).use { socket ->
val outputStream = socket.getOutputStream()
outputStream.write(messageBytes, 8, 8)
outputStream.write(messageBytes.size)
outputStream.flush()
if (socket.isConnected) {
println("Server connection established.")
} else {
println("Failed to connect to the server.")
}
println("ISO 8583 message sent to the server.")
receiveFromServer(socket)
}
}
private fun receiveFromServer(socket: Socket) {
val inputStream = socket.getInputStream()
val responseBytes = ByteArray(4096)
val bytesRead = inputStream.read(responseBytes)
if (bytesRead > 0) {
val responseFactory = MessageFactory<IsoMessage>()
responseFactory.useBinaryMessages = true
val receivedResponse = responseFactory.parseMessage(responseBytes, 0)
println("nReceived ISO 8583 Response Message:")
println(receivedResponse.debugString())
} else {
println("No response received from the server.")
}
}
I’m using Kotlin and J8583, and the message is being sent to a specific server using Socket over IP.
The message seems to be sent successfully, but the server does not respond after that.
I’m not sure if the issue is with how I’m reading the response, the message format, or the connection to the server.
-
Am I sending the message correctly based on the ISO 8583 standard?
-
Is my receiveFromServer
function correct in reading the response, or am I missing something?
-
Could this issue be related to any known socket communication problems or the ISO 8583 message structure?