- 締切済み
相手のIPアドレスを知る手段
C言語で、サーバーソケット(accept)でコネクションを確立した後、 接続された相手のIPアドレスを知る手段はありますでしょうか。 Javaでは、java.net.ServerSocketクラスの、getInetAddressという メソッドを利用して知ることができるのですが、C言語ではどうして いいのか分かりません。ご存知の方ご教授よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- punchan_jp
- ベストアンサー率55% (155/280)
- toysmith
- ベストアンサー率37% (570/1525)
- hyde-la
- ベストアンサー率28% (42/146)
- punchan_jp
- ベストアンサー率55% (155/280)
関連するQ&A
- JAVAのソケット通信の接続数について
JAVAのソケット通信の接続数について ServerSocket server= new ServerSocket( port ); server.setSoTimeout( 4000 ); Socket socket = server.accept();//クライアントからの接続をまつ 以上のコードを使っていますが、クライアントからの接続数を調べる方法はないでしょうか?
- ベストアンサー
- Java
- IPアドレスについて教えて下さい。
1台のPCを普段は社のネットワーク(Bクラス)に接続して、業務上必要なときにIPアドレスを変更(Cクラス)して、Ghostサーバ(IPアドレスはCクラス)として使用しています。 が、その都度その都度、IPアドレスを変更(BクラスからCクラス)するのはとても面倒なので、IPアドレスを変更せずに使用することはできないものでしょうか? 簡単に言えば、PCのIPアドレスはBクラスのままで、Norton Ghostを起動して、他のPCにGhostイメージを流し込む作業がができないかということです。 宜敷くお願いします。
- ベストアンサー
- その他([技術者向] コンピューター)
- ソケットにおけるメッセージの送受信について
いつもお世話になっています。 ソケットに関して質問します。 下記の手順でソケットを使用したいと考えています。 クラスAとクラスBが存在する。 1)クラスA:ソケット通信でメッセージ送信 2)クラスB:ソケット通信によるメッセージを取得 3)クラスB:ソケット通信で返信する 4)クラスA:ソケットによるメッセージを再取得する このとき、クラスAがクラスBによるメッセージ再信が、30秒以内にこなければ、ソケットを閉じる それにあたってソースを1クラスで実行できるよう書き変えたいのですが、どうも上手くいきません。 実行したいメソッド手順が ソケットを開く openSocket ソケットにメッセージ送信 sendMsg ・・・1と3はこのメソッドを使用 メッセージ取得 getMsg ・・・2と4はこのメソッドを使用 ソケットを閉じる closeSocket の順です。 自分で一度考えてみたソースは以下です。 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.net.UnknownHostException; public class Messaneger{ private Socket socket; private BufferedReader in; // ソケットを開く public void openSocket() { ServerSocket serverSocket; try { serverSocket = new ServerSocket(5555); System.out.println("クライアントからの接続をポート5555で待ちます"); // クライアントからの接続を待ちます Socket socket = serverSocket.accept(); System.out.println(socket.getInetAddress() + "から接続を受付ました"); // 出力ストリームを取得 PrintWriter out = new PrintWriter(socket.getOutputStream(), true); // 入力ストリームを取得 in = new BufferedReader( new InputStreamReader( socket.getInputStream())); } catch (IOException e) {} } //ソケットを閉じる public void closeSocket() { try { socket.close(); } catch (IOException e) {} } /** * ソケット通信でメッセージを送信 * @param 送信するメッセージ */ public void setMsg(String sendMsg) { try { socket = new Socket("localhost", 5555); PrintWriter out = new PrintWriter(socket.getOutputStream(), true); // 入力ストリームを取得 in = new BufferedReader( new InputStreamReader( socket.getInputStream())); //サーバーにメッセージ送信 out.println( sendMsg ); //送信メッセージdata System.out.println(sendMsg); } catch (IOException e) {} } /** * ソケット通信でメッセージを取得 * @return msg サーバーに渡されたメッセージ */ public String getMsg() { String getMsg = ""; BufferedReader in; try { in = new BufferedReader( new InputStreamReader( socket.getInputStream())); System.out.println(in.readLine()); } catch (IOException e) {} return getMsg; } } 参考URL:http://www.hellohiro.com/socket.htm 宜しくお願いします。
- 締切済み
- Java
- IPアドレスについて教えて下さい。
IPアドレスについて教えて下さい。(クラスCを例にします) クラスCは、192.0.0.0~223.255.255.255の範囲でIPアドレスが割り当てられますが、 192.0.0.0~192.167.255.255→グローバル 192.168.0.0~192.168.255.255→プライペート 192.169.0.0~223.255.255.255→グローバル ということなのでしょうか? すみません。よろしくお願いします。
- ベストアンサー
- その他([技術者向] コンピューター)
- IPアドレスは唯一のアドレス?
いま、C言語でネットワークプログラミングを勉強しているのですがちょっと疑問に思ったことがあります。 クライアント側からサーバーにIPアドレスを使って接続しローカルの環境では上手く動きました。 しかし、例えばこれを友達などの家でサーバを起動してもらって、自分の家から接続できるんですか? IPアドレスはそれぞれのPCの唯一のアドレスというけれで、実際にはルータを使っていれば同じIPはたくさんあるだろうし。 接続できるとすれば一体どういう仕組みになっているのでしょうか?出来ないならどういう風にすれば出来るのですか?プログラムの方で何かしなくてはならないのでしょうか
- ベストアンサー
- その他(インターネット接続・通信)
- 43億あるIPアドレスのうちなぜ2000万個以下しか使わないのですか?
ネットでクラスというものを調べたら、それぞれのクラスにおいて A 10.0.0.0- 10.255.255.255 B 172.16.0.0- 172.31.255.255 C 192.168.0.0-192.168.255.255 のように、IPアドレスが存在することがわかりました。 計算すると、 クラスAは256^3で約1600万のIPアドレスを持ち、 クラスBは16*256*256で約100万のIPアドレスを持ち、 クラスCは256*256で約7万のIPアドレスを持つことが計算できました。 それぞれを合計しても2000万個に満たないです。 なぜこんな無駄な使い方をするのでしょうか?
- 締切済み
- その他(インターネット接続・通信)
- IPアドレスの割り振り方
IPアドレスの割り振りについて教えてください。 左端8ビットが、 クラスA(1~127)、クラスB(128~191)、クラスC(192~223),クラスD(224~239)、クラスE(240~255)と分類されていることを知ったのですが、クラスごとの分類分けされているのは何故なのでしょうか? また、家のPCでは IPアドレス 192.168.〇〇〇.〇〇〇となっています。 家で使うPCは192.168~始まっているのですが、 192.168~以外に200.168~などのIPアドレスを振ることはできるのでしょうか?
- ベストアンサー
- ハードウェア・サーバー
- グローバルIPアドレスのクラスCとDの分け方
2つのグローバルIPアドレスのクラスCが同じで クラスDだけが違うということは、 同じISPでサーバ(ゲートウェイ)が違うということなのでしょうか? つまり、CとDの分け方はどのようにして出来るのでしょうか?
- ベストアンサー
- ネットワーク
- TCP/IP(IPアドレス)について
IPアドレスについて勉強しようと思っています。 最近、プライベートアドレスとグローバルアドレスの意味が分かってきたレベルです。(外部への接続となると、グローバルアドレスへ変換されていたんですね。) IPアドレスの設定値とかまったくわかりません。 クラスがA・B・Cあって、ネットワークアドレス、ホストアドレス・・ サブネットマスクについても??という状態。 本を買ってみたものの、10進数とか2進数への変換とか意味がさっぱり! この手のわかりやすいサイトとかありますでしょうか? そもそも、社内にサーバーがありこんな私でも一応管理者なんです。(小さな会社ですけど) いつも業者任せで、これでは・・と思い、IPアドレス(TCP/IP)については知識がなければと強く感じています。 お願いします。
- ベストアンサー
- その他(インターネット接続・通信)
お礼
なるほど。お教えの通り実験したら みごとにできました。できないものと思い込んで いたらJavaで出来たので、無知な自分にがっかりです。 かなり詳細に教えていただきましてありがとうございました。助かりました。
補足
すみません。本日改めて実験してみたところ、 getsocknameで得られるsockaddrの内容は サーバのIPアドレスとポート番号ではないでしょうか。 acceptの時点で得られるsockaddrには クライアント側のIPアドレスとポート番号が 入っていたのですが。。