Dockerコンテナ内でサーバーソケットに接続できない
from 『TCP/IP ソケットプログラミング C言語編』を読む
正しく写経できていなかっただけでしたt6o_o6t.icon
正誤
誤
echoServPort = argv[3];
正
echoServPort = atoi(argv[3]);
そりゃ繋がらないわけだよ
gccの警告ちゃんと読んでおけばすぐ解決できたね
/icons/hr.icon
写経して実行したら、接続できない
1. サーバーを起動
$ ./TCPEchoServer 5000
2. クライアントをサーバーに接続
$ ./TCPEchoClient 192.168.1.13 "hello" 5000
connect() failed: Connection refused
$ ./TCPEchoClient localhost "hello" 5000
connect() failed: Network is unreachable
これは、第一引数の処理に起因すると思う
code: TCPEchoClient_1.c
echoServAddr.sin_addr.s_addr = inet_addr(servIP);
inet_addrがドット区切り10進法のIPアドレスを受け取るので、localhostという文字列は処理できなかったのでは
DevContainer関連の問題?
Containerの5000番ポートがフォワーディングされて、ホストマシンの5000番が開いてる?
でもフォワーディングって、最初に開いたContainerの5000番にアクセスできなくなるような機能なのか?
転送なら、Containerの5000番にアクセスしても自動的にホストマシンの5000番に繋いでくれないとおかしいのでは?
IPアドレスが違う
Containerは、普段使っているDockerコンテナと同じように考える必要がある
ネットワーク構成がどうなっているのか?
$ ./TCPEchoClient 127.0.0.1 "hello" 5000
ダメだった
connect() failed: Connection refused
$ hostname -i
172.17.0.3
Dockerネットワーク内で、このコンテナのプライベートIPは172.17.0.3と考えられる
$ ./TCPEchoClient 172.17.0.3 "hello" 5000
同様