• ベストアンサー

LANではポート番号さえ分かればIPはいらない?

ただいま高校生で、先生にプログラミングコンテストに出るように言われてこまっています。何せ言語はJava指定でして・・・ 私はCしかやったことがないので無理だと思いました。しかし、よくよく読んでみたら別にJavaじゃなくてもいいと言うことが分かりました。 http://www.zenjouken.com/pro/kadai/connect.htm で、こういう説明なんですが、これだけではIPが分かりませんorz ここに書いてあるソケットの番号って、ポート番号ですよね? そこで、ふと思いました。 LANではポート番号さえ分かればプライベートIPアドレスの情報はなくても通信できるのでしょうか? 文章が下手で分かりづらく、すみません・・・ 回答をお待ちしていますm(_ _)m

質問者が選んだベストアンサー

  • ベストアンサー
  • ya00000ma
  • ベストアンサー率29% (29/99)
回答No.4

こんばんは。 少し補足します。 > 少し調べてみたんですが、WinSockのIPのところに「LocalHost」と入力すると勝手に探してくれるみたいなことが書いてあったんで試してみたのですが、確かにできました。 LocalHostは、WindowsXPであれば、C:\Windows\System32\Drivers\etcの中のHostsに定義されています。 また、UNIX系であれば、/etc/inet/hostsです。 このLocalHostは、俗にLOOPBACKアドレスと呼ばれる自分自身を指す127.0.0.1が定義されています。 WinSockは、与えられた引き数(この場合、LocalHost)のIPアドレスを解決するため、HOSTSを検索したのです。 試しに、HOSTSで定義されているアドレスをコメントにすると、通信することはできません。 また、HOSTSに、サーバのサーバ名とIPアドレスを定義しておけば、WinSockのIPのところにサーバ名を指定するだけで、そのサーバに接続できるはずです。 > これってLAN上というわけではなく、1つのPC上に(クライアントと同じ)サーバーがたっている場合のみつかえるんですか? その通りです。LocalHostは、自分自身の中だけで通信が完結します。

その他の回答 (5)

  • ya00000ma
  • ベストアンサー率29% (29/99)
回答No.6

こんにちは。 勉強のための、参考URLを載せておきます。 一度、ざっと目を通してみたらいかがですか。

参考URL:
http://www.atmarkit.co.jp/fnetwork/
genki140
質問者

お礼

いろいろ教えていただきだんだん分かってきました。 コンテスト、がんばってみます!! 本当にどうもありがとうございましたm(_ _)m

  • acuna
  • ベストアンサー率14% (319/2259)
回答No.5

LANの基礎について復習されると、頭の中がすっきりすると思いますよ。 ISOで定義された、OSIの7階層(10年前はそう呼んでいた)です。LANの基礎テキストの冒頭に出ていると思います。 プログラムで、TCPでのコネクションさえ確立すれば、その下の階層はあまり意識しなくても通信できるのです。あと、ARPやRARPの仕組みを理解することで、より確実なプログラムが実現できるものと思います。(Winsockが、完全サポートしているか、おじさんは確かめておりませんが・・。)

  • ya00000ma
  • ベストアンサー率29% (29/99)
回答No.3

こんばんは。 なるほど、サーバに接続するクライアントを作成するわけですね。 説明の都合で、ご質問とは違う順序で説明します。 > LANではポート番号さえ分かればプライベートIPアドレスの情報はなくても通信できるのでしょうか? できません。 通常、プログラム起動時に、外部から引数で渡します。 例えば、ftpであれば、ftp 192.168.254.10 というようにIPアドレスを渡します。 従って、作成するプログラムでは、外部から引数を受け取る様に作ります。 > ここに書いてあるソケットの番号って、ポート番号ですよね? 同じです。 クライアント(自分が作るプログラム)からサーバに接続する際に、指定されたソケット番号を相手先のポート番号として指定します。 コンテストがんばってください。

genki140
質問者

補足

回答ありがとうございます^^ 確かに引数で指定すればかんたんですね。 ですが、引数を指定して起動してくれるでしょうか・・・^^; 少し調べてみたんですが、WinSockのIPのところに「LocalHost」と入力すると勝手に探してくれるみたいなことが書いてあったんで試してみたのですが、確かにできました。 これってLAN上というわけではなく、1つのPC上に(クライアントと同じ)サーバーがたっている場合のみつかえるんですか? テストする環境がないのでここで質問させていただきますm(_ _)m

  • t_nojiri
  • ベストアンサー率28% (595/2071)
回答No.2

まあ、ソケット自体は確立すればTCP/IPもポートも意識すること無くソケット使って通信出来ると単純に考えれば良いとは思いますが。

参考URL:
http://e-words.jp/w/E382BDE382B1E38383E38388.html
  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

TCP/IPを使った通信であれば、IPアドレスが必須です。 今回の場合、IPアドレスが決めうちだと、「そんなIPアドレスは、自分のPCじゃ使えないよー」という質問をされても困ってしまうから、書かれてないのでは。 逆に、「IPアドレスは起動時引数で指定できるようにしよう」と思いつく人は、プログラミングのセンスのある人と言えるかも。

関連するQ&A

  • ポート番号について教えてください

    ポート番号において (前者)IPマスカレード機能において、1つのグローバルIPアドレスで複数のコンピューターが同時に通信を行うため、ポート番号をプライベートアドレス(PC)ごとに適当に割り当てて、通信のつどポート番号を変換し、限りあるグローバルIPアドレスの枯渇を防ぐ場合と (後者)ポートを指定し、識別番号をつけることによってどのアプリケーションでデータを受け取るかを決める場合と 同じ「ポート番号」という言葉が使われていますが、この違いはなんなのでしょうか。 自分で考えてみたのですが、 前者は、IPマスカレード機能はルーターの1つのグローバルIPアドレスを複数のポート番号に割り当てることによりLAN上の複数のプライベートIPアドレスを利用できるようにしたもので 後者は、LAM側にあるPCのプライベートIPアドレスに複数のポート番号を割り当てて同時に複数のアプリを動かすことを実現している違いでしょうか。 つまり、何に対してポート番号を割り当てるかの違いがあるかということです。 また、この2つはルーターの設定で行うと考えてよいのでしょうか。 ややこしい質問かもしれませんが、どう把握したらよいか教えてください。

  • ポート番号について

    ポート番号について 私は今通信ゲームを開発しているんですが 一方のPCがサーバーソフトを起動してそれに通信して サーバーとクライアントでやりたいなと思っているのですが ポート開放がわからない人でもできるようにしたいんですがここで質問です 必ず開いているポートはありまあせんか? なぜ1024番以下のポートは使用しないほうがいいんでしょうか? 80や110番のポートにソケットをたてそれを使って通信したらだめでしょうか だめならなぜでしょうか?

  • クライアントPCでの使用ポート番号について

    NWのポート番号について調べていたところ 「ウェルノウンポート番号 (0~1023)はサーバのアプリケーションに割り当てられ、動的・プライベート ポート番号 (49152~65535)はサーバとのプロセスに応じクライアントのアプリケーションに動的に割り当てられます。」と記述してありました。 そこでUDP68番ポート(IPアドレス払い出しのクライアント側用)についてご教示ください。 68番ポートはウェルノウンポート番号にあたるのでサーバーのみが 使用し、クライアントPCは動的・プライベート ポート番号を使用すると認識しているのですが、ウェルノウンポート番号はクライアント側でも使用するのでしょうか?

  • ポート開放が出来なくて困っています。

    タイトル通りポート開放について質問です。 セキュリティを止めてもポート開放失敗になり、困っています。 マンションなどではないので、ポート開放は出来るはずなんですが……。 http://www.k2.dion.ne.jp/~takeron/tisiki/port.htm ここのサイト様を参考にしてみましたが、Internet Explorerを起動してDefault Gatewayの番号を打ち込むと「ページを表示出来ません」とエラーになります。 ・ルータの存在は無です(この状態ならポート開放しなくても良いとか言うのを聞きますが……?) ・グローバルIPとプライベートIPが同じになっています(何故でしょうか?) 分かりにくい所があれば出来る限り補足します。 よろしくお願いします。

  • 同一ポート番号ソケットOPENの制限について

    同一ポート番号で ソケットOPENできる制限について知りたいのですが ご教示いただけませんでしょうか。 接続される側の 対象OSが Windows7 32bit 対応言語は c++Ver6 接続しにくるのは Windows CEです。 よろしくお願いいたします。

  • UDP/IPでのソケット作成について(winsock)

    UDP/IPでのソケット作成について(winsock) 開発環境VC++.NET、O/S WIN2000にてソケットプログラミング(winsock2.0)をしています。 コンソールプログラミングではありませんが、WindProcは持っていません。 UDPサーバーを作り、複数クライアントの対応をしたいと考えています。 クライアントAからの通信やりとり中に クライアントBからの通信がきたら、そちらとも通信やりとりを(自動で)行いたい。 ここで問題なのが、クライアントAの要求ポートが15000で、 クライアントBの要求ポートも15000なのです。 同じ既に開いているポートでソケット作成しようとしても、socket()関数はエラーを返してくるのですが、 やり方を工夫すれば、同一ポートでの複数クライアント対応は可能なのでしょうか。不可能なのでしょうか。 可能であれば、やり方、ヒント等教えてください。よろしくお願いします。 追記 (1)TCP/IPでは、同一ポートでソケット作成が可能でした。ネットで探したサンプルプログラムが  そのような動きをしていたのですが、UDPに書換えることはできませんでした。  http://eternalwindows.jp/network/winsock/winsock04s.html (2)UNIXの場合fork()処理後に socket()作成 → bind()で同一ポートでの複数クライアント対応が  上手くいくらしいのですが、Windowsではマルチスレッド等をうまく活用すれば、  fork()と同様の処理が可能になり、目的が達成できるでしょうか。

  • TCP/IP通信型プログラムです。 サーバのポート番号をクライアントが

    TCP/IP通信型プログラムです。 サーバのポート番号をクライアントが取得するプログラムで、 while(1) { saddr.sin_port=htons(port); port++; fprintf(stdout, "%d\n", port); } のようなのをプログラムのどこに入れれば よいのでしょうか?

  • TCP/IP通信を使用した、装置との通信方法について教えてください

    TCP/IP通信を使用した、装置との通信方法について教えてください 装置へのコマンドを発行するために、Ethernetのポート番号を指定して、コマンドの発行と、データの受け取りを行いたいのですが、どのような方法があるのでしょうか。 使用する言語はVisuau Studio 2008のVisual Basicです。 OSはXPです。装置の仕様は、ポート番号を指定して、コマンドを発行をしてくださいという内容になっています。 tcpclientクラスを使用して、Connectメソッドで接続を確立しようとしたのですが、うまく確立ができません。通信については初心者でどのうようにすればいいのか分かりません。 ご教授いただければ幸いです。 よろしくお願いします。

  • ポートの開放 プライベートIPアドレスについて

    開放したいポートの番号はわかっているのですが、 接続のプロパティ、インターネットプロトコルの プライベートIPアドレスの固定をすると、インターネットに 繋がらなくなってしまいます。 .「スタート」→「ファイル名を指定して実行」で「cmd」 ここで確認したプライベートIPアドレス、 優先DNSサーバーの所に 192.168.1.1を入れています。 何がおかしいのでしょうか。教えていただけないでしょうか。。。 よろしくお願いします。

  • TCP/IP通信に関する質問です。

    下記の3つのLinuxPCを使って、TCP/IPによるソケット通信のシステムを作成しました。 PC1: IP:192.168.0.1 Port: 20000 TCPサーバ PC2: IP:192.168.0.2 Port: 20000 TCPサーバ PC3: IP:192.168.0.3 Port:ランダム(クライアントなので) TCPクライアント PC3をクライアントとして、同じポート番号を持つアプリが動いている PC1とPC2に繋いで通信をする形です。 このシステムは問題なく動きました。 しかし、続いてPC1とPC2を一つのPCに(ハードウェアとして)まとめたくなったときに、 下記の条件があったとき、どのようにすれば良いでしょうか? 1. PC3のソフトウェアは一行も変更しない 2.りPC1とPC2が同一のハードウェアになっても、それぞれのソケットに流れるデータは変わらない 一台のコンピュータにおいて、一つのNICに複数のIPをふることはできましたが、 同じポート番号のソケットを作成するのはできないと思っています。 今のところ、一台のコンピュータで仮想マシンを二台立ち上げる方法を考えていますが、 それ以外に上手い方法はあるでしょうか? 非常に困っているため、ご回答よろしくお願いします。