サーバ側がC言語(Linux)、クライアント側がJavaのソケット通信プログラムを書いているのですが、いきなりつまづいてしまったため質問失礼します。
ソースとしては以下の2つのソースをテストとして利用させて頂きました。
ローカルネットワーク内の2台にそれぞれを設置し、それにあわせてIPとポートは変更してあります。
http://www.aihara.co.jp/~junt/program/socket/ine …
http://www.hellohiro.com/src/HelloWorldSocketCli …
サーバプログラムを少し変更し(http://oshiete1.goo.ne.jp/qa5565926.html)、サーバ起動→クライアント起動でサーバクライアント間通信を行えることを確認しました。
しかし、もう一度テストしてみようと直後にサーバプログラムを起動すると、bindでエラーを吐いてしまい接続待機状態にできませんでした。
少し待ってから起動したりポートを変えて実行すると正常に待機状態にできるため、プログラム終了時のソケットのクロージングが正常に行われずポートの競合が起きていることが原因だとは思うのですが、ソケットのcloseはサーバもクライアントも書いてあるため自分には解決方法が思いつきませんでした。
ちなみに、サーバプログラムのソースと併せて公開されているC言語クライアントプログラムを用いた場合は再起動してもbindエラーが出ることはありませんでした。
この問題の原因と考えられることと解決案をアドバイス願えませんでしょうか。よろしくお願いします。
以下、開発環境です。
■C言語
OS:Fedora 12
エディタ:一応VisualC++2008(Linux用に書いているので実質ただのテキストエディタ)
コンパイラ:標準gcc
■Java
OS:Windows XP SP3
エディタ・コンパイラ:eclipse
※実装先の都合上、winsockによるサーバに変えるや言語の変更はできません。
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
man page によると、
> SO_REUSEADDR
> bind(2) コールに与えられたアドレスが正しいかを判断するルールで、ローカ
> ルアドレスの再利用を可能にする。つまり AF_INET ソケットなら、そのアドレ
> スにバインドされたアクティブな listen 状態のソケットが存在しない限り、
> バインドが行える。 listen 状態のソケットがアドレス INADDR_ANY で特定の
> ポートにバインドされている場合には、このポートに対しては、どんなローカ
> ルアドレスでもバインドできない。引き数はブール整数のフラグである。
との事ですから、これが原因かと疑われるます。
inet_server.c を見たところ、SO_REUSEADDR を設定しているところも見当たりませんし。
以下のページが参考になるかと思います。
man page - getsockopt, setsockopt
http://www.linux.or.jp/JM/html/LDP_man-pages/man …
man page - socket - SO_REUSEADDR
http://www.linux.or.jp/JM/html/LDP_man-pages/man …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- ノートパソコン ESETの初期インストールの仕方 1 2022/10/14 08:26
- サーバー ログオンユーザーがいない場合に自動再起動 1 2022/09/28 09:53
- サーバー 別サーバに構築したApache+Tomcatの連携について 2 2023/03/06 23:23
- サーバー FTPサーバについて詳しい方(アクセス権のないディレクトリを非表示にする方法) 4 2022/08/22 22:33
- その他(メールソフト・メールサービス) メールが送信できない 発信側でできる対策 3 2023/05/11 10:22
- その他(プログラミング・Web制作) プログラムの起動、利用について、使用期間を設定する方法 3 2023/08/06 21:03
- その他(プログラミング・Web制作) プログラムの勉強のおすすめは 7 2022/12/09 20:09
- C言語・C++・C# プログラミングの問題です。至急教えてください。 /***から***/の部分をプログラミングにしてほし 1 2022/10/13 11:48
- Outlook(アウトルック) outlookの送信エラーについて 1 2022/05/13 12:04
- C言語・C++・C# condaコマンドに対応したプロキシ設定が思うようにならないようです。 2 2022/04/11 17:15
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
recv関数でフリーズしてしまう
-
TCP/IP
-
TCP/IP通信時のサーバーからの受信
-
相手のIPアドレスを取得する方法
-
VB6のwinsockでconnectできない
-
UDPで受信終了の合図を出して受...
-
UDP通信する時に、相手にどうや...
-
ソケットのrecvの戻り値が0
-
ソケットプログラミングに関す...
-
エクセル VBA でのCOMポート...
-
オセロゲームのオンラインゲーム
-
ソケットプログラミングって??
-
CreateFile関数でCOMポートが開...
-
TCP/IP通信(ソケット通信)に...
-
空きポートの取得方法
-
ソケットを用いた1対多通信につ...
-
Java(クライアント)とC言語(サ...
-
Winsockを使わずにVBでSocketを...
-
割り込み処理について
-
JavaでBASIC認証突破
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
TCP/IP通信時のサーバーからの受信
-
recv関数でフリーズしてしまう
-
Winsockで接続待ちタイムアウト...
-
UDP通信におけるbind関数について
-
エクセル VBA でのCOMポート...
-
Socket通信の0バイト受信について
-
VB6のwinsockでconnectできない
-
ソケットのrecvの戻り値が0
-
ソケットを用いた1対多通信につ...
-
UdpClient 送信元のIPアドレ...
-
ソケットでクライアントのipア...
-
UDP通信する時に、相手にどうや...
-
ソケット通信 同じポート番号...
-
同じLAN内パソコンのIPアドレス...
-
Connectエラーが出てしまう・・...
-
ソケットのクローズについて
-
異なる言語間でのソケット通信...
-
CreateFile関数でCOMポートが開...
-
C言語でHTTP1.1のキープアライ...
-
相手のIPアドレスを取得する方法
おすすめ情報