Java -> C++ でTCP通信する際の writeUTF関数の問題
Javaは java.io の中にSocket通信を司るクラス群を持っており、たとえば http://milkyway.merseine.nu/100java/Java/Java098.html にあるように簡単にTCP通信が可能。一方のC++の方ではVisual Studio上でWinsock2.hを利用することとする。
java.io.DataOutputStreamは、String文字列をソケットに書き込むためのwriteUTFという関数を持っているが、こいつがやっかいで、指定したString文字列の頭に謎の2バイトをくっつけてくる。
このままではこの受信データは文字列としては扱えない。
このことについては、こちらのサイト様でも言及されており、まぁ当面の対処法として、
char buf[32]; //受信する recv(sock,buf,sizeof(buf),0); char *buftemp = buf+2 //二文字シフトした箇所から始まる文字列を用意 //以後、buftempをどうにかこーにかする。
という風にすることにした。