自習室

こもります

Java -> C++ でTCP通信する際の writeUTF関数の問題

C++をサーバ、Java側をクライアントとする。

Javajava.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をどうにかこーにかする。

という風にすることにした。