※ ChatGPTを利用し、要約された質問です(原文:Java(クライアント)とC言語(サーバ)間のソケット通信 文字列送受信の不具合)
JavaとC言語のソケット通信での文字列送受信不具合の原因と解決案
このQ&Aのポイント
JavaとC言語を使用したソケット通信のプログラムで、文字列の送受信時に問題が発生しています。
送信された文字列の後ろに文字化けが発生し、またサーバプログラムの再起動時にエラーが発生します。
問題の原因として、Javaのprintlnの自動改行の影響や文字列の長さの不一致が考えられます。解決案として、文字列の長さを正確に設定することや、文字化けを防ぐ対策を行うことが挙げられます。
Java(クライアント)とC言語(サーバ)間のソケット通信 文字列送受信の不具合
サーバ側がC言語(Linux)、クライアント側がJavaのソケット通信プログラムを書いているのですが、いきなりつまづいてしまったため質問失礼します。
ソースとしては以下の2つのソースをテストとして利用させて頂きました。
ローカルネットワーク内の2台にそれぞれを設置し、それにあわせてIPとポートは変更してあります。
http://www.aihara.co.jp/~junt/program/socket/inet_server.c
http://www.hellohiro.com/src/HelloWorldSocketClient.java
クライアントのJavaプログラムから"Hello World"をサーバのCプログラムに送ると"Hello World"とは標準されるものの、出力された後ろに文字化けしたような文字が少し出てしまいました。加えて、直後にもう一度試してみようとサーバプログラムを立ち上げるとbindでエラーを吐いてしまいました。
recvの結果(rc)をprintfで確認してみたところ、13となり2文字多く送られていることを確認しました。
そこで、Javaのprintlnの自動改行周りが原因かと思いprintfに変えてた試してみました。
しかし、recvの結果は11となったものの文字化けと直後のbindエラーはなおりませんでした。(文字化けの種類が変わりましたが)
この問題の原因と考えられることと解決案をアドバイス願えませんでしょうか。よろしくお願いします。
以下、開発環境です。
■C言語
OS:Fedora 12
エディタ:一応VisualC++2008(Linux用に書いているので実質ただのテキストエディタ)
コンパイラ:標準gcc
■Java
OS:Windows XP SP3
エディタ・コンパイラ:eclipse
※実装先の都合上、winsockによるサーバに変えるや言語の変更はできません。
お礼
ご回答ありがとうございます。 C言語クライアントを使ってのテストではゴミが出なかったので気にしていなかったのですが、bufの初期化をしたところゴミはでなくなりました。ありがとうございます。 しかし、bindエラーの方が以前直らないため、別項にて質問させて頂こうと思います。