ネットワークプログラミング相談室 Port30 [転載禁止]©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
2014/10/31(金) 07:57:16.24ID:2NZQQB6u
主にソケットに関しての質疑応答スレッドです。

Programming UNIX Socket FAQ (日本語訳)
http://www.kt.rim.or.jp/~ksk/sock-faq/indexj.html
Winsock Programmer's FAQ (日本語訳)
http://www.kt.rim.or.jp/~ksk/wskfaq-ja/

関連リンクは>>2-10辺り
足りなかったら適当に付け足してね

前スレ
ネットワークプログラミング相談室 Port28
http://toro.2ch.net/test/read.cgi/tech/1334736934/
ネットワークプログラミング相談室 Port29
http://peace.2ch.net/test/read.cgi/tech/1351670708/

関連スレ
ネットワークプログラミング雑談
http://toro.2ch.net/test/read.cgi/tech/1235800707/
2016/09/07(水) 08:47:36.21ID:sjjNPEW0
多重にクライアントを動かせない理由は何なのだろう・・・
254デフォルトの名無しさん
垢版 |
2016/09/07(水) 15:10:22.18ID:YSZpbVen
同じサブネットなのか違うセグメントなのかでも変わるな
2016/09/07(水) 15:12:29.55ID:Ur9IZRDe
変わらないけどね
2016/09/07(水) 15:18:36.62ID:/Xx9az9X
さすがにセグメントまで違えば通信できなくなるだろ
2016/09/07(水) 15:22:38.08ID:Ur9IZRDe
>>256
何を根拠にそんなことを言うのかなあ
セグメントが違えば通信できないならインターネットなんて全然成り立たないわw
2016/09/07(水) 16:12:00.52ID:g5K2Lr6r
1枚のNICに2つのセグメント振る香具師なんているのか?
2016/09/07(水) 16:21:07.47ID:8SeVjemL
メンテ用の機器繋いだ時一時的に振ったことあるなあ
ルーターだったかな、そっちのデフォルトのアドレスに合わせるために
2016/09/07(水) 16:57:08.31ID:Ekl9dhHV
vmwareとか使えば、見かけ上は別のものとして扱えるけど
そういうのではテスト出来ないのかな
2016/09/07(水) 20:15:42.28ID:2w88FCBz
>>253
ん?
クライアントは普通に多重で動かせる奴も多いぞ
少なくともネットワークの制限で動かせないケースはほとんどないと思うが
2016/09/07(水) 20:21:54.25ID:iwRLOaFu
>>261
>>247 に至った理由が何だろうね?って疑問だったわけで、深い意味はないです
2016/09/07(水) 20:22:00.08ID:2w88FCBz
>>257
ピントずれすぎ w
1つの NIC の話だから同一物理ネットワーク上に複数のセグメントを置く話
できない理由はないけど実験的にやるとか >>259 みたいに一時的にやるとか以外でそんな構成にすることはほとんどないと思う
2016/09/07(水) 20:27:31.48ID:2w88FCBz
>>262
>>247 はサーバーの話
1つの NIC では同一IPかつ同一ポート番号で待ち受け(Listen)できるのは基本1つだけだから複数のIPを振りたいって言う要求が出てくる
2016/09/07(水) 20:35:10.37ID:iwRLOaFu
>>264
てっきり クライアントの話かと思った
IP分けるよりListenポート分けるほうが簡単だし刹那的にそうするもんだと早合点
2016/09/07(水) 20:45:28.05ID:5LAjH7P/
ん?>>247

1つのネットワークカードに異なる2つのIPを割り当てて(IP1とIP2)
同じアプリを2個起動して(AとB)
1つのサーバーに同時接続(AがIP1で、BがIP2で接続)

だからクライアントじゃないの?
数は説明上2つに変えた
2016/09/07(水) 22:00:43.81ID:woOMwcnq
1枚のNICに複数IPの指定は出来るという事ではまずはお茶しましょう。
二つのIP与えて、アパシェのIPベースバーチャルホストなんてのもやりました。
http://good-stream.com/goodstream/server/apache/tips/ipbasevhost.htm
フル
2016/09/07(水) 22:10:37.87ID:Ur9IZRDe
>>263
ネットワークが絡んだ開発の仕事が多い俺は1つのNICに複数のセグメント
を割り当てるなんてごく普通にやってるんだが
2016/09/07(水) 22:43:34.41ID:woOMwcnq
ボンディングとかやぱ二枚刺しでルーターとかフィルターとかフィアオルをやる
ってが多いのかな。今でも
2016/09/08(木) 06:54:10.65ID:QwMnHPC3
>>266
あひゃ、改めて >>247 を読み直したら確かにクライアントの話だったわ
早合点は俺だった... orz
アプリが送信元IPアドレスを指定できれば可能だな
2016/09/08(木) 06:56:49.52ID:QwMnHPC3
>>268
実運用環境でやってるなら単なるバカ
実験やテストでやってるならたいして珍しくもない
2016/09/08(木) 08:49:16.34ID:dGUpQ5tJ
>>271
俺は開発環境でやってるけど
トポロジによっては実運用環境でも便利なケースはあると思うよ
2016/09/08(木) 21:16:26.26ID:D52YJnih
>>271
顧客がやれと言ったから設定した
それだけのことさ
警告はした
2016/09/08(木) 22:22:54.93ID:dGUpQ5tJ
そもそも警告したくなるような問題が発生しそうなケースが思いつかないんだが
>>271は単に「バカ」という言葉を発したたかっただけだろ
2016/09/08(木) 22:32:18.49ID:s+VkNmnn
そう言っちゃう人もいる事を理解して、無視してあげましょう。
2016/09/08(木) 22:33:11.71ID:siaRBrBq
>>273
ああ、作業者にはなんの責任もないから言われた通り作業してくれればいいです

>>272
> トポロジによっては実運用環境でも便利なケースはあると思うよ

その便利なケースとやらを説明してみ
2016/09/08(木) 22:44:08.37ID:dGUpQ5tJ
>>276
問題あるケースをお前が先に説明しろよ
2016/09/08(木) 22:49:27.01ID:dGUpQ5tJ
「問題ない」をなんで「問題ない」のか説明させようとするって典型的なアレだからな
ないものはないんだよただそれだけだよ
2016/09/09(金) 02:35:30.55ID:ogIb5/BU
なんだ説明できないのかよ w
運用環境の構成は可能な限りシンプルにしておくのが鉄則
その方が間違いも少ないし障害調査なども楽だから
2016/09/09(金) 03:27:23.58ID:vj6paJQh
んなもん使われ方だろうが。いろんな事情がある。
2016/09/09(金) 05:02:13.63ID:ogIb5/BU
そのいろんな事情とやらを書いてみ
って話
2016/09/09(金) 06:15:01.37ID:QrmkumON
パッと思いつくケースだと
2つのセグメントで構成されているシステムがあったとして各セグメントは閉じているんだが
両方のセグメントにアクセスするマシンを追加したい場合などに1つだけのNICで済むだろ
その為だけに2つのNICを持ってるマシンを用意するのとどっちがシンプルかって話だな

WindowsもLinuxも(その他大概のOSも)1つのNICに複数セグメントを割り当てることが出来るのに
その機能を使うのは「バカ」だって言うならその理由を書いてくれな
2016/09/09(金) 06:51:20.17ID:oGuibT0g
>>282
各セグメントは閉じてるのに
わざわざ混在させるのか
バカの発想って面白いな w
2016/09/09(金) 06:58:33.38ID:QrmkumON
お前はただ「バカ」って書きたいだけの難癖荒らし
2016/09/09(金) 07:18:51.71ID:oGuibT0g
バカって書いてる理由を書いてあるだろ?
もしかしてそれすら理解できてないのか w
2016/09/09(金) 07:39:42.84ID:vj6paJQh
バカはお前だよ。見た事ないんだろ。貧乏な現場とか、どうしようなない状況。
2016/09/09(金) 08:38:57.74ID:oGuibT0g
貧乏ならいちいちセグメントなんて分けるなよ w
てかNIC ぐらい買え
そもそも何かの目的があってセグメント分けてるのにそれをわざわざ混在させるなんて実運用でやるわけないだろ
2016/09/09(金) 09:03:33.63ID:puYtutU5
元質問からの疑問

1つのPC内に(loopback以外の)複数のアドレス A,B があり (※NICの枚数は問わない)
A経由で接続しにいく / AでListen する
B経由で接続しにいく / BでListen する
には、ソケット記述で制御できるもの? それとも上位の何かでコントロールしないと駄目?


後者の場合は WindowsとLinux 他 OSの事情がからみそうだけど
2016/09/09(金) 09:11:25.63ID:QrmkumON
>>285
あのね俺が書いた例は独立して機能してる2つのセグメントを「混在」させるわけじゃないから
WindowsもLinuxも(その他大概のOSも)1つのNICに複数セグメントを割り当てることが出来るのに
その機能を使うのは「バカ」だって言うならその理由を書いてくれな
使える機能を使えるところで使わない方がバカでしょ
2016/09/09(金) 09:13:26.83ID:QrmkumON
>>288
ソケットでやるならbindで出来る
2016/09/09(金) 09:20:54.52ID:puYtutU5
>>290
ありがとう
(bind ってそういうことだったのか。 漫然と使ってた)
2016/09/09(金) 10:45:15.03ID:lqKQnXfy
>>291
ちなみにアドレス0.0.0.0にbindするというのは「どのアドレス宛でも受け付けますよ」という約束事。 
293デフォルトの名無しさん
垢版 |
2016/09/09(金) 11:53:05.58ID:ZufuCknD
どいつもこいつもしったかばっかだし
ぼけもつっこみも自演くさい
2016/09/09(金) 12:10:06.63ID:D/rbZjJQ
>>293
おーけーじゃあしったかを指摘して訂正してくれ
できないならお前もしったかだよな
2016/09/09(金) 12:48:40.24ID:oGuibT0g
>>289
バカには見えないのかな?
念のためにもう一度書いとくよ

> そもそも何かの目的があってセグメント分けてるのにそれをわざわざ混在させるなんて実運用でやるわけないだろ
2016/09/09(金) 13:03:38.48ID:puYtutU5
ID:QrmkumON  の想定は
セグメントA のネットワーク網に ピンポイントで参加させるメンテPC
セグメントB のネットワーク網に ピンポイントで参加させるメンテPC
メンテPC を通して セグメントA と セグメントB を連結させるわけではない

メンテPCのNICには多重に割り当てるが、実質として選択的に配線し接続してる

こういうことでないの?
2016/09/09(金) 14:37:14.01ID:QrmkumON
すんません「バカ」連呼したいだけのアホに餌を与えちゃいました
もうこのアホはスルーがいいでしょう
こっちの質問には決して答えないんだから
>WindowsもLinuxも(その他大概のOSも)1つのNICに複数セグメントを割り当てることが出来るのに
>その機能を使うのは「バカ」だって言うならその理由を書いてくれな
298デフォルトの名無しさん
垢版 |
2016/09/10(土) 10:49:14.70ID:QUVRyXDh
>>295
"混在"はしない
"共存"(相乗りでもいいや)できるんだけど
もしかして君にはそれが判らないの?
2016/09/10(土) 11:23:26.31ID:uQ51/TWJ
>>296
各々のセグメントに繋ぐ度にケーブル刺し変えてるってこと?
DNS とかも全く使わないならいいのかも知れないけど普通はバッチファイルとかで切り替えた方がいいと思うけど

>>297
>>279 の内容すら理解できてない素人乙

>>298
> "共存"(相乗りでもいいや)
の定義書いてくれ
オレオレ用語で話されても困るから
2016/09/10(土) 11:32:00.20ID:nNi8wB7Z
出て行け
2016/09/10(土) 16:44:36.50ID:ZZX/BtRf
md5とかいう機能を利用すると、
ダウンロードしたファイルが破損、改竄されていないか確認できると知りました。

それはいいのですが、この機能はいつ使うんでしょうか?
仕事とかで、ソフトが改竄されていないか証明するために使うのでしょうか?
2016/09/10(土) 17:07:07.49ID:D8kzVED3
ど素人
2016/09/10(土) 17:26:03.49ID:+bPafAxM
>>301
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1412668764
2016/09/10(土) 17:42:46.18ID:ZZX/BtRf
ダウンロードしたファイルをプロはいちいちチェックしてるのでしょうか?

先輩見ててもサイトから落としたファイルのハッシュチェックなどせず、そのままインストールしています。
2016/09/10(土) 19:13:30.30ID:jtrUVOIC
>>304
ダウンロードだけに限ればチェックが必要な怪しい所からはダウンロードしません
2016/09/10(土) 20:24:05.34ID:QUVRyXDh
>>304
rpmとかyumとかがチェックしてくれる
2016/09/10(土) 20:44:35.89ID:nNi8wB7Z
リポジトリを信用するしかないから、もうyumにお任せですね。
ソースでDLするのは最近ではpostgreSQLぐらいで。それも公式サイトだし。
2016/09/11(日) 02:32:03.65ID:wOd3xxmp
>>305
そういう問題じゃなくね?
2016/09/11(日) 08:20:01.34ID:vN9TAtb9
>>308
> 先輩見ててもサイトから落としたファイルのハッシュチェックなどせず
2016/09/11(日) 08:55:49.82ID:TPMGBr6r
あのねここはプログラミングのスレなの
もういい加減にしてくれない?
2016/09/11(日) 13:16:55.57ID:wOd3xxmp
>>309
ハッシュのチェックをするのは、出自が怪しいかどうかじゃなくて、
途中で壊れてないかを確認するためだろう?
2016/09/11(日) 13:26:49.40ID:am5koIB6
>>311
そのどっちかではなく両方

元の>>304には「そのままインストールしています。」とあるから実行ファイルが前提
壊れてるならそもそもチェックなんてしなくても実行不可
2016/09/11(日) 13:35:30.56ID:rai5Q0zE
だよね

ハッシュ値と一緒にダウンロードのリンクが貼ってあるところも普通なのに(というより、別の手段やミラーがある方が稀)
それとmd5やshaが一緒に並べてあるのは、ダウンロード時の化け等への対処

意図的に改ざんされた、得体のしれないファイルを落とすってのは別の話
もちろん、それも意味があるけれど
そんなんだったら、「転載禁止」として、自サイトからのダウンロードされたものだけを保証、とすれば済む


もちろん、意図的な改ざんへの対処の意味もあるし、
単なるデータ化け判定は、圧縮展開ルーチンに入っていたりするから不要なケースも多い
2016/09/11(日) 15:15:36.57ID:wOd3xxmp
>>312
もとの話につっこんだんじゃなくて、>>305につっこんだんだけどなあ。
まあいいや。
2016/09/11(日) 15:46:09.26ID:5fMJ9BrK
まぁまぁ用心しましょうw
2016/09/11(日) 18:54:51.04ID:am5koIB6
>>314
元の>>304に突っ込んだ>>305に突っ込んでんだからその前提ぶっ壊すのはアスペのみ
2016/09/11(日) 19:39:02.18ID:wOd3xxmp
論破されると、相手をアスペだといい出すのは、2chではいつものことだが、
>>316はアスペの意味を分かってるんだろうか。
2016/09/11(日) 20:28:45.45ID:HqXnTE3B
縦横比
2016/09/11(日) 20:34:29.72ID:am5koIB6
>>317
>>305につっこんだ」
→いや>>305>>304の前提引き継いでるから
こういう流れが分からない奴
これがアスペの全てというわけでもないが一部
2016/09/12(月) 13:42:16.84ID:uadDl1bC
くわしいひとがいるみたいなので聴くけど
DVD Fab とか HD Decrypter って無料の落として使っても安全?
インターネット繋がってないと起動しないし
実際通信しまくってるんだが抜かれたりしない?
2016/09/12(月) 13:50:40.62ID:B2i+6GC8
さすがにスレチかと。
2016/09/12(月) 14:33:01.02ID:WjBwz+Qy
>>320
それハッシュ関係無い
そういうのは自分で調べるもんだし自己責任の範疇
2016/09/14(水) 09:39:23.68ID:tzWcX+nZ
TCPで書いたデータが相手に届いたか知る方法ってある?
Ackが届くまで待つみたいな感じで
2016/09/14(水) 09:59:45.98ID:zKQD1zr/
ある
ACKのようなものを返すプロトコルにすればいい
2016/09/14(水) 13:30:34.44ID:3QkaqJUB
相手のソケットライブラリには届いていても
アプリがrecvしたかはわからないし失敗する可能性もあるから
アプリレベルでも応答確認した方がいいってこと?そうかもね
2016/09/14(水) 13:43:16.71ID:g3+hWH3w
アプリに届いたかが重要なデータならアプリレベルで応答確認するしかないよ
2016/09/14(水) 14:07:02.28ID:02/FhbRP
SMPT や POP3 とかそう(プロトコルで応答を返すルール)だよね
2016/09/14(水) 15:35:16.64ID:JEExw83M
貰いましたって返してもらうしかないよね。
2016/09/16(金) 11:01:23.63ID:aNdiMffG
せやなー(眠)
2016/09/16(金) 11:34:26.20ID:jw8GQ87J
そういえば
ソケットレベルで相手に届いたかどうか知る方法ってあったっけ?
実はないよね
2016/09/16(金) 12:55:25.56ID:YnaEO14a
何を気にしてる?TCPでコネクトできたら届いてるでしょ
2016/09/16(金) 14:03:45.22ID:Gz930khe
なのよねw
send()が成功したら、やったと思うしかない。
てかそれ以下ってあるんだっけ?
rawソケとか使った事ないっす。
333デフォルトの名無しさん
垢版 |
2016/09/16(金) 14:24:09.41ID:q39qStvN
ペチパーは黙ってろ
2016/09/16(金) 14:57:06.37ID:QQ/tCEl2
馬鹿につける薬はないw
335デフォルトの名無しさん
垢版 |
2016/10/19(水) 20:28:02.76ID:UPd0NLz2
サーバー側の指定ディレクトリにあるファイル一覧をクライアント側で表示したいのですがヒントください!

サーバー
http://ideone.com/fPQ4mZ

クライアント
http://ideone.com/QZQMXY

サーバーではsizeof(ent->d_name)分渡しているのですが、クライアントでsizeof(filename) 256byte分受け取っちゃっているのでここをどうしたら良いのか分かりません。
あらかじめどんな名前のファイルが来るのかわかっていればそのサイズ指定すれば良いと思うのですが。。。
あとサーバー側ではwhile((ent = readdir(dir)) != NULL)でループの終わりを告げれるんですが、クライアント側でソケットに流したファイル名を全て取得したあとの終わり方の告げ方が分かりません。
2016/10/19(水) 20:46:49.18ID:DfuX/LYm
能力不足
2016/10/19(水) 21:17:40.18ID:1vhlOQFQ
>>335
分割で届いたりもありえるから
データ先頭にデータサイズ格納させて
その分だけ受信するようにしないといけない

このデータ先頭の情報をヘッダと言う
情報は1つだけじゃなく複数でも自分が必要な分だけ自分で決めた構造で送る
2016/10/19(水) 21:28:30.33ID:Q8I9ZYJC
>>335
ftp プロトコル辺りを調べたらいいかも
2016/10/19(水) 22:03:42.68ID:DfuX/LYm
socketプログラミングを勉強しなさいw
2016/10/19(水) 22:24:13.75ID:DfuX/LYm
socketがよくわからずレスするやつら
341デフォルトの名無しさん
垢版 |
2016/10/19(水) 23:53:18.01ID:G0nEdUMs
>>337
>>338
できました。有難うございます
2016/10/20(木) 07:47:47.15ID:q6sk5dso
できましたw
2016/10/20(木) 08:53:58.32ID:t3tIMcAX
write 1回で送ったものは 1回のread で得られる保障はなく
複数回に分断されたりする

"1234" を write → "12" を read 続いて "34" を read
こういうことが、ごくごく当たり前に起きるから
2016/10/20(木) 09:54:55.77ID:q6sk5dso
それとストリームの終端なw
2016/10/20(木) 09:58:23.15ID:q6sk5dso
APレベルで送受信するときはヘッダをつけてシーケンス番号を送って、肯定応答を返すのも常識だろう。
今回は不要だが。
2016/10/20(木) 12:49:41.14ID:8pLXigSN
どんな常識だよ w
TCP 上でそんなことやるアホにはなりたくないわ
2016/10/20(木) 13:10:53.55ID:T4FOXPZS
応答で正否返すのは当然だがシーケンス番号は普通要らない気が。
非同期なプロトコルにするぐらいならコネクション増やす
2016/10/20(木) 13:11:23.77ID:9ULbv0m/
順番が入れ替わるなら別だけどねw
2016/10/20(木) 13:15:20.78ID:q6sk5dso
アホにはなりたくないわ
2016/10/20(木) 13:17:12.79ID:w5wq1yEm
むしろシーケンス番号つけて順番どうりに送るのはtcpの役割でしょ
2016/10/20(木) 13:19:07.93ID:q6sk5dso
TCPとsocketの区別がつかないアホ>>346
2016/10/20(木) 13:28:48.79ID:AB8Qragb
TCP上でアプリレベルの到達確認するのは特別な場合のみだな
■ このスレッドは過去ログ倉庫に格納されています