我正在开发一个使用DEX / UCS协议发送发票数据的模块。在android上,这意味着使用蓝牙软件狗连接到DEX端口(例如this one)。初始通信正常,我可以毫无问题地发送和接收字节,但是在初次握手之后,我尝试发送查询(ENQ控制字符),它说在我的日志上已发送并且没有错误发生,但是字节从未到达我的字节测试平台。我有一个端口嗅探器,以检查从测试平台发送了什么,并且ENQ从未到达那里。我应该注意,它不是发送的第一个ENQ,在握手开始时一切正常,在ENQ发出1秒之前,我成功发送了另一个控制字符。 这是一些用于将这些字节写入蓝牙软件狗的代码
private static Boolean BidForLine() {
final int MAX_TRIES = 11;
final String PROC_NAME = CLASS_NAME + ".BidForLine";
Boolean blnResult = false;
Logger.writeLog(PROC_NAME, "Start");
int intTryCount = 1;
while ((!blnResult) && (intTryCount <= MAX_TRIES)) {
blnResult = SendEnquiry();
blnResult = blnResult && ReceiveAck(true);
intTryCount++;
}
Logger.writeLog(PROC_NAME, "End:" + blnResult.toString());
return blnResult;
}
private static Boolean SendEnquiry() {
final String PROC_NAME = CLASS_NAME + ".SendEnquiry";
Boolean blnResult = true;
Logger.writeLog(PROC_NAME, "Start");
WriteData(SpecialCharacters.ENQUIRY);
Logger.writeLog(PROC_NAME, "End:" + blnResult.toString());
return blnResult;
}
private static void WriteData(String strData) {
final String PROC_NAME = CLASS_NAME + ".WriteData";
Logger.writeLog(PROC_NAME, "Send:" + DataFormatter.FormatString(strData));
try {
DexBluetoothPort().write(strData);
}
catch (Exception ex) {
Logger.processException(PROC_NAME, ex);
}
}
public void write (String strData) throws IOException{
outputStream.write(strData.getBytes("ASCII"));
}
在成功的传输和失败的传输之间,套接字未关闭或加密狗断开连接。可能是什么原因导致它没有发送?