我有一種感覺我的問題是有點怪怪的,但在這裏不用...用winsock在Java(或類似)「發送」功能
我有一個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」我錯過了(Google谷歌似乎說沒有這樣的事情)?
非常感謝您的幫助。
編輯:
我真的不知道是否有任何代碼會有幫助!在這一點上,我只是在做基本的事情:連接並嘗試寫入它。我似乎想盡組合,轉換等,這只是一些測試代碼(顯然不健壯或正確的,如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();
}
它掛在最後一行出現時,在新= ...就好像它沒有從相機中拾取任何類型的輸入流。我知道我可以繼續玩耍,但任何外界的建議表示讚賞。
請發佈您的Java代碼來分析。 – 2010-08-17 19:46:57
1.從字符串文字中刪除'\\'。 2.只需編寫'new Socket(「192.168.81.58」,PORT)'而不是自己構建IP地址。 3.不要使用ObjectOutputStream。 – 2010-08-17 20:08:52