質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.51%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

1回答

2740閲覧

C言語でのグローバルな通信

lyc0ris_sec

総合スコア24

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2016/06/30 14:18

C言語で外部のコンピュータと通信したいのですが、ローカルでは接続出来ています。今までローカルIPを入れていた部分にグローバルIPアドレスを入れれば良いのでしょうか?ポート番号は12345番で設定しています。友人に実験に手伝ってもらいましたが、接続されないのです。どうしたら良いのでしょうか?またデザリングの状態でサーバープログラムを動かして外部と通信する事は可能なのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

archiver

2016/06/30 14:26

プログラムの作成環境は何になりますか?Unix? Windows?
guest

回答1

0

ベストアンサー

こんにちは。

ローカルIPアドレスで通信できるプログラムは、グローバルIPアドレスでも通信できます。
ただし、下記のどれかが必要です。
①両方のPCにグローバルIPアドレスが割り当てられている
②送信先PCはグローバルIPアドレスが割り当てられていて、送信元PCはNATルータの配下にある
③両方のPCがNATルータの配下にあり、送信先PCへポートフォワーディング等でパケットが届くようにNATルータを設定している。
また、PC自身も含めてパケットの経路にファイヤーウォールが設定されている場合、お使いのプロトコル(TCP or UDP)のポート12345を通すように設定しておくことが必要です。

お友達とlyc0ris_secさんのPCにグローバルIPアドレスは割り当てられていますか?

投稿2016/06/30 14:29

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

lyc0ris_sec

2016/06/30 20:08

お詳しい解説ありがとうございます。 確認くん等でIPアドレスが表示されていましたがそれで割り振られていると言えるのでしょうか?
Chironian

2016/07/01 01:32

確認くん等で表示されるIPアドレスは、グローバルIPアドレスのみです。 NATルータの下に接続されているPCから見たときも、NATルータに割り当てられているIPアドレスが表示されます。 PCに割り当てられているIPアドレスは、コマンド・プロンプトを起動して、ipconfigと入力すれば表示されます。 「イーサネット アダプター ローカル エリア接続:」の「IPv4 アドレス」欄です。 この値と確認くんで表示したIPアドレスが一致していたら、そのPCが直接インターネットへ接続されています。 両方のPCがその状態なら、回答に書いた①となりますので、普通に通信できます。 しかし、通常はNATの下にあり③の可能性の方が高いです。
lyc0ris_sec

2016/07/01 02:52

ipconfigではプライベートIPアドレスが表示されます。恐らく③でしょうか?ポートフォワーディングについてお手数をお掛けしますが詳しく教えていただけないでしょうか?ネットワークに関する事は難しくて(><)
Chironian

2016/07/01 02:57

↓にポートフォワーディングについて分かりやすい解説がありました。 http://www.itbook.info/study/nat6.html 「ポートフォワーディング」で検索すると最初のページに出てきました。 まずはご自分で検索される習慣をつけるとよいですよ。
lyc0ris_sec

2016/07/01 03:01

失礼しました。 少し調べて見たところ 『12345番ポートへきたパケットを192168.xxx.xxx(送信元)へ転送』のように設定してあげれば良いのでしょうか?
Chironian

2016/07/01 03:09

多くの場合、送信先側のみポートフォワーディング設定が必要です。 設定内容は『12345番ポートへきたパケットを192168.xxx.xxx(送信先)へ転送』のイメージです。 送信元は自分のNATルータが良しなに制御してくれます。(でないとインターネット・アクセスできませんから。) 詳しい話は「NATルータ」等で検索すると出てくると思います。
lyc0ris_sec

2016/07/02 02:16

本当にありがとうございます。 大変恐縮ではありますが最後に一つだけ疑問があります。 ネットワーク構図上ポートフォワーディングの必要性があるのはなんとなく分かりました。市販のプログラム?はユーザーがポートフォワーディングする必要が無いように思われます。それは何故なのでしょう?ポートフォワーディング以外に方法があるのですか?
Chironian

2016/07/03 05:35

> 市販のプログラム?はユーザーがポートフォワーディングする必要が無いように思われます。 このような処理は「NAT越え」と呼ばれますが、様々なテクニックが存在します。 ポートフォワーディングはその一つです。 他にインターネット上にサーバを持ちそのサーバを中継して通信するとか、NATルータのUPnP機能を使う等いくつかの手法があります。「市販のプログラム」の中にはそれらを使うものもあるようです。 これらの内、サービス開発側(lyc0ris_secさん)にとって、もっともお手軽・確実な方法がポートフォワーディングです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.51%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問