SoftBankのバイナリ通信

今日は久しぶりに自分の無知のために苦労した。


サーバにバイナリデータを送信し、いろいろやって受信しなおすプログラムがあるわけですよ。
P5〜P7は問題なくデータの送受信ができたんだけど、3GCだけはなぜかきちんとした値が入ってこない。
なお、エミュ(P5)では問題なく動作する。


送受信するサーバはクライアントのサーバであり、操作不可能なので自分のところにテスト環境を
作成して、いろいろテストしてみたわけです。
その結果、ある特定のバイナリが必ず0x3fに変換されてしまっていることがわかりました。
で、調べてみたところ、0x3fは無効な文字のことなんですね。
結論としては、phpでHTTPヘッダーのContent-Typeがバイナリだということを設定していない問題でした。
したがってphp


header("Content-Type: application/octet-stream");


を入れてやったら問題なく動作しました。
で、向こうのサーバに上記を追加してもらって、チェックして問題がなかった後に思い出したんだけど
たしか、SoftBankってContent-Typeに指定しなければならないのは、 application/Java
application/Java-archive じゃないとまずかったような気がするようなしないような。
まあ、まずいっていうより、上記のどちらかにしないとバイナリファイルとしてみなされず
画像としてみなされ、12KBまでの通信しか出来なかったんだったかな?


どちらにしても、今回の通信は5KBのデータ送受信しかおこなわないからいいや。(いや本当はまずけどね)