Je sens mon problème est un peu étrange, mais ici ...En utilisant Winsock « envoyer » fonction en Java (ou similaire)
J'ai un programme C++ (d'une autre organisation) qui interagit avec caméra connectée au matériel via Ethernet à l'aide de sockets. Sur la surface, la fonction initiale qui envoie un message à la prise est la suivante:
char* cmd = "#TRGON\x0d";
m_pClient->Socket_Write((BYTE*)cmd, strlen(cmd));
Après avoir à fouiller dans le code, j'ai trouvé la fonction au niveau le plus bas qui envoie effectivement les données:
// 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.
Maintenant, le programme sur lequel je travaille doit envoyer une commande similaire à la caméra, sauf qu'elle est écrite en Java. J'ai joué avec des sockets Java toute la journée et je n'ai pas réussi à faire faire à l'appareil photo autre chose que de se connecter à l'adresse appropriée (la commande pour allumer les lumières LED). J'ai regardé autour de moi en ligne et j'ai vu que cette commande "send" provient de la bibliothèque Winsock que le programme C++ encapsule. Existe-t-il une façon similaire de faire cela en Java? Ou est-ce que je n'utilise pas la bonne combinaison de DataOutputStreams, de sockets, etc. en Java? Y a-t-il un "import winsock" qui me manque (Googling semble dire qu'il n'y a pas une telle chose)?
Merci beaucoup pour votre aide.
EDIT:
Je ne sais pas vraiment si un code vous aidera! À ce stade, je fais juste des choses de base: se connecter et essayer d'écrire. J'ai apparemment essayé toutes les combinaisons, la conversion, etc. Ceci est juste un code de test (de toute évidence pas robuste ou bonne, comme le bloc 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();
}
Il est suspendu à la dernière ligne là, le dans = new ... comme s'il ne capte aucun type de flux d'entrée provenant de l'appareil photo. Je sais que je peux continuer à jouer avec, mais tout conseil extérieur est apprécié.
veuillez poster votre code java à analyser. –
1. Supprimez le '\\' du littéral de chaîne. 2. Il suffit d'écrire 'new Socket (" 192.168.81.58 ", PORT)' au lieu de construire vous-même l'adresse IP. 3. N'utilisez pas ObjectOutputStream. –