• ベストアンサー

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