我觉得我的问题有点奇怪,但是这里......
我有一个 C++ 程序(来自另一个组织),它与使用套接字通过以太网连接到硬件的相机进行交互。从表面上看,向套接字发送消息的初始函数是这样的:
char* cmd = "#TRGON\x0d";
m_pClient->Socket_Write( (BYTE*)cmd, strlen( cmd ));
在查看了代码之后,我发现了实际发送数据的最低级别的函数:
// Try to send what's in the buffer
int nFlags = 0;
int nSent = ::send( m_hSocket, (char*)m_pSendBuffer, m_nSendBufLen, nFlags );
...checking for errors, etc.
现在,我正在处理的程序需要向相机发送类似的命令,但它是用 Java 编写的。我整天都在玩 Java 套接字,除了连接到适当的地址(用于触发 LED 灯亮的命令)之外,无法让相机做很多事情。
我在网上环顾四周,发现这个“发送”命令来自 C++ 程序封装的 Winsock 库。在 Java 中有没有类似的方法可以做到这一点?还是我只是没有在 Java 中使用正确的 DataOutputStreams、套接字等组合?我是否缺少一些“进口winsock”(谷歌搜索似乎说没有这样的事情)?
非常感谢您的帮助。
编辑:
我真的不知道是否有任何代码会有所帮助!在这一点上,我只是在做一些基本的事情:连接并尝试写入它。我似乎尝试了每一种组合、转换等。这只是一些测试代码(显然不健壮或不合适,如 catch 块):
InetAddress addr = null;
Socket sock = null;
ObjectInputStream in = null;
ObjectOutputStream out = null;
String msg = "#TRGON\\x0d";
try {
addr = InetAddress.getByAddress(new byte[] { (byte) 192, (byte) 168,
(byte) 81, (byte) 58 });
sock = new Socket(addr, PORT);
out = new ObjectOutputStream(sock.getOutputStream());
out.writeBytes(msg);
in = new ObjectInputStream(sock.getInputStream());
} catch (IOException e) {
e.printStackTrace();
}
它挂在那里的最后一行, in = new ... 好像它没有从相机中获取任何类型的输入流。我知道我可以继续玩它,但任何外部建议都值得赞赏。