アプリ版:「スタンプのみでお礼する」機能のリリースについて

サーバ側がC言語(Linux)、クライアント側がJavaのソケット通信プログラムを書いているのですが、いきなりつまづいてしまったため質問失礼します。

ソースとしては以下の2つのソースをテストとして利用させて頂きました。
ローカルネットワーク内の2台にそれぞれを設置し、それにあわせてIPとポートは変更してあります。
http://www.aihara.co.jp/~junt/program/socket/ine …
http://www.hellohiro.com/src/HelloWorldSocketCli …

クライアントの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によるサーバに変えるや言語の変更はできません。

A 回答 (1件)

サーバ側のほうでbuf[]が初期化されてないからゴミがでるのは当然なんでは?


あるいはターミネータ付けるとかしないと終わりが分からんと思いますが。

/* acceptしたソケットから受信*/
rc = recv(fd, buf, 256, 0);
if(rc < 0){
printf("server:recv error.\n");
exit(rc);
} else {
  buf[rc] = 0 ;
 }
printf("server:recv %s.\n", buf);
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

C言語クライアントを使ってのテストではゴミが出なかったので気にしていなかったのですが、bufの初期化をしたところゴミはでなくなりました。ありがとうございます。


しかし、bindエラーの方が以前直らないため、別項にて質問させて頂こうと思います。

お礼日時:2010/01/04 13:26

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!