サーバ側が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によるサーバに変えるや言語の変更はできません。
No.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);
ご回答ありがとうございます。
C言語クライアントを使ってのテストではゴミが出なかったので気にしていなかったのですが、bufの初期化をしたところゴミはでなくなりました。ありがとうございます。
しかし、bindエラーの方が以前直らないため、別項にて質問させて頂こうと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラミングの問題です。至急教えてください。 /***から***/の部分をプログラミングにしてほし 1 2022/10/13 11:48
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# 至急お願いします。C言語で.imgのファイルを読み込んで1バイトづつ出力するプログラムを作りたいので 3 2023/01/16 22:49
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- C言語・C++・C# C言語の質問です。 以下の命令を実行するプログラムを作りました ①文字列aとbの長さを表示 ②aとb 1 2022/04/29 15:35
- その他(プログラミング・Web制作) プログラミングについて(Python) 添付した画像はC言語で簡単に作ったソースで、1つの配列に5つ 3 2022/09/10 19:15
- その他(プログラミング・Web制作) awkの文字列比較はPOSIXロケールまたはCロケールにおいてバイナリ値の比較に使えるか gawkな 1 2023/04/22 09:21
- C言語・C++・C# C#の問題です。 文字列型の配列 s[100] にキーボードから入力された100文字以内の文字列(単 2 2022/06/22 15:18
- C言語・C++・C# 【C言語】全角文字の配列を、全角のまま1文字ずつ出力する方法 4 2023/05/09 15:08
- Java Javaの問題なのですが、「3文字以上の英数字文字列を入力し、文字列の中に文字(9)が出てくるまでの 1 2023/06/06 18:55
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
TCP/IP通信時のサーバーからの受信
-
割り込み処理について
-
WinSockでの通信プログラムがう...
-
javaでのプログラミングで・・・
-
ソケットプログラミングに関す...
-
recv関数でフリーズしてしまう
-
ソケット通信
-
UDPで受信終了の合図を出して受...
-
UDP通信する時に、相手にどうや...
-
SIPがNATを越えられない理由
-
C#とTCP/IPを利用したサーバー...
-
名前付きパイプの通信ポートに...
-
UDP通信におけるbind関数について
-
Linuxでパケットを発信する際・...
-
Connectエラーが出てしまう・・...
-
TCP/IP通信型プログラムです。 ...
-
RS-232Cのポート番号を知りたい
-
空きポートの取得方法
-
Winsockで接続待ちタイムアウト...
-
ソケットとそれに基づくストリ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
TCP/IP通信時のサーバーからの受信
-
UDP通信におけるbind関数について
-
Winsockで接続待ちタイムアウト...
-
recv関数でフリーズしてしまう
-
VB6のwinsockでconnectできない
-
ソケットのクローズについて
-
UDP通信する時に、相手にどうや...
-
エクセル VBA でのCOMポート...
-
ソケットのrecvの戻り値が0
-
UdpClient 送信元のIPアドレ...
-
Socket通信の0バイト受信について
-
WinSockでの通信プログラムがう...
-
同じLAN内パソコンのIPアドレス...
-
ソケット通信 同じポート番号...
-
VC++でのソケット通信について
-
Connectエラーが出てしまう・・...
-
CreateFile関数でCOMポートが開...
-
Winsockを使わずにVBでSocketを...
-
VB6‥ソケットについて
-
SIPがNATを越えられない理由
おすすめ情報