- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在建立 Sierra Charts 和我的 Java 程序之间的集成,为此我正在使用他们的 DTC 协议(protocol)/框架,这使我能够(从我的 Java 程序)创建一个套接字连接,然后来回传递消息。但是,我目前陷入困境,因为他们要求我在每条消息后传递一个空终止符,这在 Java 世界中并不常见,让我感到困惑。为了让他们的套接字服务器处理我的消息,它需要包含“空终止符”(https://www.sierrachart.com/index.php?page=doc/DTCProtocol.php#JSONEncoding)
我已经联系了 Sierra Chart,但他们不是 Java 商店,也不知道有任何见解。
我已经包含了我的示例类,我正在使用 DTC 消息的 Json 编码。我所做的基础只是打开一个 Java 套接字,然后传递一个我已转换为 byte[] 的 Json 字符串并通过 BufferedOutputStream 写入套接字。然后我在等待回复。为了方便我的问题,我将我的 JSON 作为局部变量带入了字符串。我的问题是我无法破解我正在转换的 byte[] 或 String 的“空终止符”。我想知道是否有人可以阐明什么是“空终止符”;我的假设是 Sierra Chart Socket Server 正在运行 C 或 C++ 代码,这是它们的分隔符,我似乎无法掌握 Java 等价物。
import java.io.*;
import java.net.*;
import java.util.Date;
public class SierraChartSocketClient {
public SierraChartSocketClient() {
String testServerName = "127.0.0.1";
int port = 11099;
try{
Socket socket = openSocket(testServerName, port);
socket.setTcpNoDelay(true);
String result = loginToSocketAndRequestData(socket);
System.out.println(result);
socket.close();
}catch(Exception e){
e.printStackTrace();
}
}
private String loginToSocketAndRequestData(Socket socket) throws Exception{
byte nullByte = 0x00;
String loginRequestString = " {\"Type\":1,\"Integer_1\":1,\"HeartbeatIntervalInSeconds\":60\", \"ClientName\": \"Sample Application\"}";
String marketDataRequestCL = "{\"Type\":101,\"RequestAction\":\"SUBSCRIBE\",\"SymbolID\":1,\"Symbol\":\"CLF8\", \"Exchange\":\"NYMEX\"}";
String heartBeat = "{\"Type\":3,\"CurrentDateTime \":\"" + (int) (System.currentTimeMillis() / 1000L) + "\" ";
try{
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(socket.getOutputStream());
System.out.println("Sending Over Login Request: " + new Date(System.currentTimeMillis()).toString());
bufferedOutputStream.write(loginRequestString.getBytes());
bufferedOutputStream.write(nullByte);
bufferedOutputStream.flush();
StringBuilder stringBuilder = new StringBuilder();
String str = bufferedReader.readLine();
System.out.println(str);
System.out.println("Received Login Response: " + new Date(System.currentTimeMillis()).toString());
bufferedOutputStream.write(heartBeat.getBytes());
bufferedOutputStream.flush();
System.out.println("Sending Heartbeat: " + new Date(System.currentTimeMillis()).toString());
bufferedOutputStream.write(marketDataRequestCL.getBytes("ISO-8859-1"));
bufferedOutputStream.write(nullByte);
while((str = bufferedReader.readLine()) != null){
stringBuilder.append(str + "\n");
System.out.println(str);
}
return null;
}catch (IOException e){
e.printStackTrace();
throw e;
}
}
private Socket openSocket(String server, int port) throws Exception{
Socket socket;
try{
InetAddress inteAddress = InetAddress.getByName(server);
SocketAddress socketAddress = new InetSocketAddress(inteAddress, port);
socket = new Socket();
int timeoutInMs = 45*1000; // 45 seconds
socket.connect(socketAddress, timeoutInMs);
return socket;
}catch (SocketTimeoutException e){
System.err.println("Timed out waiting for the socket.");
e.printStackTrace();
throw e;
}
}
public static void main(String[] args){
new SierraChartSocketClient();
}
}
String loginRequestString = "{\"Type\":1,\"Integer_1\":1,\"HeartbeatIntervalInSeconds\":60\", \"ClientName\": \"Sample Application\"}";
byte[] loginRequestBytes = new byte[(loginRequestString.getBytes().length) + 1];
ByteBuffer bbuf = ByteBuffer.wrap(loginRequestBytes);
bbuf.put(loginRequestString.getBytes());
int len = loginRequestString.length();
byte b[] = new byte[len + 1];
ByteBuffer bbufj = ByteBuffer.wrap(b);
enc.encode(CharBuffer.wrap(loginRequestString), bbufj, true);
最佳答案
我碰巧也在尝试这个。
空终止符没有给出问题,你已经解决了。
问题是您使用的是 BufferedReader。这不起作用,您需要使用 BufferedInputStream。
Rgds
关于java - Sierra Chart DTC Java 套接字连接空终止符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47670927/
我正在尝试从源代码编译 qemu,我正在尝试安装 qemu for hisilicon ,但是当我运行 ./configure 时,我收到错误 ERROR: DTC (libfdt) version
我有一个使用 Entity Framework 的 Web 应用程序 - 我们使用 TransactionScope 类来提供环境事务。 有什么方法可以告诉 EF 优先使用标准 T-SQL 事务而不是
有什么方法可以准确确定 System.Transaction TrasactionScope 升级到 DTC 的原因?我们的一个组件似乎会升级事务,而所有其他组件(看似看似相似)却没有升级,我们遇到了
我正在使用 NServiceBus 中的分发器,但我遇到了关于 DTC 的忽视。我以前在跨进程做事情时只使用过一次或者两次 DTC,而且次数不多,所以我对整个 DTC 概念还是个新手。 Questio
我正在尝试建立一个环境,在该环境中,源自 Web 服务器 (asp.net) 的 TransactionScope 将通过 WCF 将事务传输到应用程序服务器,然后再传输到数据库。由于我被迫使用 SQ
我的机器上禁用了 DTC。据我了解,这段代码应该会失败,因为它在同一个事务中使用了两个数据上下文。那么,它为什么有效? (注意:我使用 .NET 3.5 和 .NET 4.0 进行了尝试。) usin
我正在考虑将我们的 NServiceBus 3.3.3 系统升级到版本 4。 我读了一些帖子,似乎表明版本 4 可以在没有 DTC 的情况下工作。这是真的吗? 基本上,这就是我正在考虑做的事情: 更改
有没有人知道在使用事务范围时在多个连接未打开时事务升级到 DTC 的情况。 我知道如果我在一个事务范围内打开多个连接(无论是什么连接字符串),该事务很可能会被提升到 DTC。 知道这一点后,我竭尽全力
我们的组织在大型机 Adabas 数据库中拥有大量重要数据。我们可以通过 ODBC 访问这些数据,并且从 C# 使用 ODBC/Natural“存储过程”成功地查询/更新了它。 我们现在希望能够从 S
我编写了一个程序来演示多线程 DTC 超时的行为。我有几个异常(exception),似乎是随机的。所有这些都是简单的超时,还是其中一些指示更深层次的问题(连接池交互等)? The Microsoft
我已将遇到的问题简化为以下示例代码: var inQueue = ".\private$\testqueue"; using (var ts = new TransactionScope()) {
我们的软件包随机失败并显示以下错误消息: SSIS Error Code DTS_E_OLEDBERROR. An OLE DB error has occurred. Error code: 0x8
我是 AUTOSAR 的新手,我试图了解如何记录 DTC,但我对老化和去抖动计数器感到困惑。请帮助我了解 DTC 是如何记录的? 最佳答案 Dem 模块提供了两项(除其他外)重要服务来记录 DTC 的
我正在使用 MSMQ 端点。我在我的服务上设置了以下属性。 [OperationBehavior(TransactionScopeRequired = true, TransactionAutoCom
我正在建立 Sierra Charts 和我的 Java 程序之间的集成,为此我正在使用他们的 DTC 协议(protocol)/框架,这使我能够(从我的 Java 程序)创建一个套接字连接,然后来回
据我所知,为了在.NET 中使用 TransactionScope,您需要运行 Windows 中的分布式事务协调器服务。我已关闭该服务,并且我的应用程序似乎运行相同并且回滚事务没有问题。 我错过了什
我想知道为什么 WCF 需要在客户端和服务器上配置和启动 MSDTC,当我使用事务流时。 (启用网络访问) 毕竟,WCF 中的事务是通过使用 WsAtomicTransaction 的 SOAP 消息
我正在开发一个 iOS 应用程序,它可以让我存储汽车信息。我正在使用 OBD-2 蓝牙设备与我的应用进行交互。 在某些情况下,我需要存储 DTC 或诊断故障代码的值。一些博客建议只在车辆点火时获取 D
是否有不需要启用 DTC 的 transactionScope 的替代方案?? 在事务中我需要做两个操作: 创建一个用户(使用成员资格 - sql 成员资格提供程序) 做一个插入操作。 最佳答案 Tr
我刚刚开始使用 TransactionScope,我发现总会遇到一些意想不到的事情,需要永远调试。 我认为拥有这些的综合列表对于那些“奇怪的错误”情况非常有用,并且可以扩展我们对平台中奇怪现象的了解。
我是一名优秀的程序员,十分优秀!