トップページ⇒tech
1001コメント320KB

ネットワークプログラミング相談室 Port27

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2010/12/25(土) 22:46:56
主にソケットに関しての質疑応答スレッドです。

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辺り
足りなかったら適当に付け足してね

前スレ
ネットワークプログラミング相談室 Port26
http://hibari.2ch.net/test/read.cgi/tech/1269343909/
関連スレ
ネットワークプログラミング雑談
http://hibari.2ch.net/test/read.cgi/tech/1235800707/
Java ネットワークプログラミング 【教えて!】
http://hibari.2ch.net/test/read.cgi/tech/1086238859/
02372322011/04/14(木) 00:35:43.37
>>233-235
ありがとうございます。
>>234さんの指摘のように、1つのインタフェースに複数のアドレスが定義されている場合です。

>>234
> ホストのルーティングテーブルでネクストポップを決定して、
> そのネクストポップと同じサブネットのアドレス。

浅学ですみません。。。定義した複数アドレスが、同一ネットワークの場合はどうなるでしょうか?
基本的な質問で恐縮なのですが、なぜこういう質問をしているか、
>>232の話をもう少し具体的に言うと

�@ サーバ    : アドレス 192.168.0.20/24 さらに同じNICに対して、エイリアスで 192.168.0.1/24 を定義している
�A クライアント : アドレス 192.168.0.10/24

この状態で�@→�Aへ送信します。送信方法は>>232に書いたように、UDPで、ポートは固定で指定、
ホストアドレスは INADDR_ANY で作ってバインドしてあります。
�@でsendtoして�Aでrecvfromしたとき、�Aで受信したときの送信元(�@)のアドレスがどうなるか?なのです。
というのも、�@がWindowsXPの場合は、送信元アドレスが 192.168.0.20 となったのですが、
Windows7の場合は、192.168.0.1 となるのです・・・
>>234さんの指摘をもらって、route print してみると、
確かに WindowsXP では、192.168.0.0/24 の interface が 192.168.0.20 となっているのですが(>>235さんの言うプライマリですね)
Windows7の場合は、192.168.0.0/24 の interface は 192.168.0.1 となっています。
Windows7の場合、アドレスが小さいものが interface に優先されてしまう?と疑問を持った次第です。

これまでXPで使っていたプログラムで、Windows7へ持っていくと動作が変わるので、
これをなんとかしたい、というのが背景です。
0238デフォルトの名無しさん2011/04/14(木) 06:30:29.12
INADDR_ANYをやめる
0239デフォルトの名無しさん2011/04/14(木) 15:29:36.22
Linuxのソケットで
まだreadしてないたまっているバッファをすべて破棄するには
どうするのが一番スマートで速くて格好いいデスか?
0240デフォルトの名無しさん2011/04/14(木) 15:43:31.87
select, readループ
0241デフォルトの名無しさん2011/04/14(木) 15:53:11.93
>>240
空読みが許されるのは童貞までだよねー
02422322011/04/14(木) 18:19:21.77
自己解決しました。

結論から言うと、OSの仕様でした。(無印Win7しか確認していませんが)
http://support.microsoft.com/kb/2386184

↑のKBの修正Hotfixを当ててから、
netsh で skipassource=true にしてエイリアスのIPアドレスを
同一NICに追加してやると、プライマリ相当のアドレスで返ってくるようになりました。
またこのとき、route print すると Gateway と Interface がプライマリ相当のアドレスになることが確認できました。

>>236さんの言うようにプライマリという概念がそもそもなくなってるともいえますし、
OSの動作が、XP/2003Server → Win7/2008R2 で変わったともいえると思います。
まあプログラム側がOSの仕様を決め打ちした動きになってるのが悪いんですが・・・w

とりあえずOSのアップデートか、>>238さんの言うようにプログラム側で対処するか、
どちらかで検討します。
お騒がせしました。
0243デフォルトの名無しさん2011/04/14(木) 19:55:54.78
くっそ
ソケットに対してlseekするとエラーになるんじゃん!
0244デフォルトの名無しさん2011/04/14(木) 19:59:14.69
いやいやいやいや
常識的に考えて出来るはずなかろう?
0245デフォルトの名無しさん2011/04/14(木) 20:01:50.14
向こうが shutdown で閉じてれば あるいわ… ってTCP限定の話になっちゃうか

soket 閉じて開きなおすのはマズイのだろうか と戯言
0246デフォルトの名無しさん2011/04/14(木) 21:36:35.72
shutdownマナーはFAQです。よく読んでください。
0247デフォルトの名無しさん2011/04/14(木) 21:43:05.47
>>244
lseek を実装して、現在あるバッファを読み飛ばす(捨てる)だけは可
にすればいいんだがまぁ、対称性に著しく書けるインターフェースだわな
02481962011/04/14(木) 21:52:01.14
ソケットでのプロセス間通信について質問です。
AとBのプログラムで通信する場合ですが、こういう認識で合ってますか?

 プログラムA    プログラムB
   ↑         ↑    ユーザランド
-----|-----------------|---------
 プログラムAの   プログラムBの
  ソケット←ーーーー→ソケット  カーネル
0249デフォルトの名無しさん2011/04/14(木) 21:52:44.84
↑
名前の196は関係ないです。
すいません。
0250デフォルトの名無しさん2011/04/14(木) 22:10:21.58
>>248
ええ。
まあ環境によるんですけど。
0251デフォルトの名無しさん2011/04/14(木) 22:13:46.39
>>250
例外もあるんですか?
0252デフォルトの名無しさん2011/04/14(木) 22:27:29.18
プロトコルスタックがカーネルにある必要は無いし、
逆に、インカーネルなhttpdとかありうるし。
0253デフォルトの名無しさん2011/04/14(木) 22:52:12.25
NFSサーバとかカーネル内にある。
0254デフォルトの名無しさん2011/04/15(金) 00:08:01.48
インターフェースがupされた直後に
いくつかのソケットでconnectし始めるプログラムを実行すると
一番最初のconnectはつながるまで約3秒かかるのに
ほぼ同時ながら別のスレッドでconnect呼ぶところではほぼ即座につながる
ってことが起こるんですが、何が原因でしょう?
あと、一発のconnectの待ちを短くしてやるにはどうすればいいでしょう?
0255デフォルトの名無しさん2011/04/15(金) 00:13:37.91
DHCPとかDNS引いてるんじゃない?
0256デフォルトの名無しさん2011/04/15(金) 00:18:31.32
ああすいません
インターフェースは固定IPでupさせてます
あと、接続もIPアドレス直です
1回目のconnectと2回目のconnectは同一ホストへの接続で
ポート番号が1個違うだけなのに2回目の方が先につながるのが納得いかない。。
0257デフォルトの名無しさん2011/04/15(金) 00:27:05.93
ARPが必要だけど、そんな時間かからない。
OSは何?
0258デフォルトの名無しさん2011/04/15(金) 00:31:52.32
linuxです
ひょっとしてarpテーブル見に行って該当無かったら
arp投げて3秒後synリトライしているとか?
0259デフォルトの名無しさん2011/04/15(金) 00:35:34.94
ARP終わらなければパケット投げられません。
リトライになるはずないです。
ルーティング設定も手動ですか?
DNSの逆引きが行われてませんか?
0260デフォルトの名無しさん2011/04/15(金) 00:36:19.85
ethersharkでパケットダンプすれば?
0261デフォルトの名無しさん2011/04/15(金) 02:23:27.15
>>260
ちょ、まじってる
0262デフォルトの名無しさん2011/04/15(金) 14:06:04.59
>>253
マジ?
0263デフォルトの名無しさん2011/04/15(金) 15:40:07.26
>>262
常識
0264デフォルトの名無しさん2011/04/15(金) 16:46:17.40
>>263
いや、今でも使ってる人いるの?
0265デフォルトの名無しさん2011/04/15(金) 16:50:47.51
>>264 うちでは、普通に使ってるが
0266デフォルトの名無しさん2011/04/15(金) 19:03:36.63
>>259
ルーティング設定も手動、DNSの逆引きは行われていないと思います。

>>260
wiresharkが使えればよいのですが
組み込み系かつWiFi直結間での通信なので・・・

とりあえずノンブロッキングで
connect→close→connect
ってすると即座につながったのでこれで良し?
0267デフォルトの名無しさん2011/04/15(金) 19:15:37.64
Peerも組み込み?
PeerをPCにしてperrでwireshark動かせば?
0268デフォルトの名無しさん2011/04/15(金) 19:30:43.86
>>264
たとえばWindowsのIISのHTTPサーバーはカーネルで動作するように実装されてた。
パフォーマンス優先で設計すると、そうなる。
0269デフォルトの名無しさん2011/04/15(金) 19:43:28.92
されてたってまたユーザモードに戻されたの?
カーネルモードに移動したのがServer 2003あたりの比較的最近だった気がするけど

ちなみにLinuxにもカーネルモードのhttpdがある
0270デフォルトの名無しさん2011/04/18(月) 12:02:15.56
NFSもカーネルモードのがあったな
0271デフォルトの名無しさん2011/04/18(月) 12:06:45.71
あったなじゃなくて、元祖のSUNの実装がインカーネルなんだよ。
坊やならしょうがないけど、人前でそういう発言しな方が良いぞ。w
0272デフォルトの名無しさん2011/04/18(月) 13:56:48.22
>>271
システムコール呼んだら2度と帰ってこないって、あれだっけ?
まぁ、当時はカーネルスレッドなんかなかったからなぁ
0273デフォルトの名無しさん2011/04/18(月) 15:36:01.74
>>271
元祖の話とかしてどうするの? 懐かしむの?
0274デフォルトの名無しさん2011/04/18(月) 16:29:33.47
NFS-3GもFUSEからカーネルに取り込まれたよ。
0275デフォルトの名無しさん2011/04/18(月) 17:03:04.79
>>273
しょうがないよ。坊やが生まれる前からある技術だから。
0276デフォルトの名無しさん2011/04/18(月) 18:05:41.66
今はもう使われてないしなぁ
0277デフォルトの名無しさん2011/04/27(水) 10:01:35.90
おじいちゃんは昔話好きだからな。
今頃バブルの話とか太古のアイドルの話しても分からないってw

nfsに限らずファイル周り呼んだら帰って来なく成るって多いorz

無線だと無線の物理層のリンクもいろいろごにょごにょしてそう。
ipで下位レイヤを気にせず使える分、いろんな状況を想定する事が求められる。

被災地の観測機器にパケット飛ばしたら、無線基地局が流されて消失してたとかね。
0278デフォルトの名無しさん2011/04/27(水) 10:55:57.72
都会ね。
0279デフォルトの名無しさん2011/04/27(水) 17:18:18.60
ちょっとお尋ねします。

サーバからデータをpush送信したいと思いってます。

ちょっと調べた範囲では余りよく分かりませんでした。特にプログラミング言語で当該機能を実装するような具体的な例を見つけることができませんでした。

何かヒントとか、または、ここを
見れば分かりやすいよ、とかありましたら、よろしく願いします。

なお、サーバはwindowsでクライアントはandroidです。
0280デフォルトの名無しさん2011/04/27(水) 19:39:28.10
.NET framework4.0とC#で非同期TCPでソケット通信してバイナリデータの
送受信クライアントアプリ作ってみたいな〜
なんて思ってる人生の初心者です。
invokeとかBeginInvokeとかEndInvokeとかIAsyncResultとかもうちんぷんかんぷんです。
基礎からじっくりと使い方の学習してみたいのですが、お勧めは何かありますでしょうか?

コードの断片だけじゃてんで頭にはいんないし、書籍は○○層があってだなとかフレームの中身の話とか
で、言葉の定義で実際にはソケットよりもNIC担当の処理内容に紙面を費やしてたりと
意欲だけ空回りで、てんで前進してる気配がないので、お助けください。
0281デフォルトの名無しさん2011/04/27(水) 19:42:56.80
> invokeとかBeginInvokeとかEndInvokeとかIAsyncResultとか

それはネットワークとは関係のないC#自体の話ではありませんか
ネットワークの話とは分けて勉強した方がいいと思いますが
0282デフォルトの名無しさん2011/04/27(水) 20:02:26.51
確かにそうかも。
送信した後に非同期で受信した側の処理を身に付けたいんですけど
ソケットの使い方じゃなくて、非同期の勉強でつまづいてるってところが大きいですね。
非同期だとF10押していってもデバッグ出来ないですよね?別スレに行ってしまって。
どう試行錯誤していいのか、先ずそんなところから錯誤してますです。
0283デフォルトの名無しさん2011/04/27(水) 23:33:33.79
>>280
ぐぐれば非同期の作り方の例が出てくるよ。
でもスレッド作って同期でしたほうが分かりやすいし作りやすいと思う。

C#内容についてはこちらで
http://hibari.2ch.net/test/read.cgi/tech/1302422250/
0284デフォルトの名無しさん2011/05/02(月) 16:12:32.87
winsockでプロセスが生成しているソケットを
列挙するようなI/Fがありますでしょうか?
0285デフォルトの名無しさん2011/05/02(月) 21:03:46.47
ない。
0286デフォルトの名無しさん2011/05/03(火) 03:56:32.35
>>284
WinSockには無い。
IP Helper APIを使う。
0287デフォルトの名無しさん2011/05/05(木) 04:39:15.21
ご存知の方いらっしゃれば助言頂ければ幸いです。

NAT越え関係のプログラミングを作らないといけないのですが
何をどうすればよいのやらで、行き着いたのが
uPnPでのポートマッピングに行き着きました。

諸所の本、サイト等は見て回ったのですが、
「マルチキャストでM−SEARCH」の一点張り
マルチキャスト(UDP)で送信しても受信側がどうしてもできない?
※sendtoでの戻り値状は送れていると思うのですが。
といった所で、このGWをほぼ潰す結果になりました(´・ω・`)

何か コレみれば(・∀・)イイ!! といった物はありませんでしょうか?
02882872011/05/05(木) 05:03:06.46
補足:環境は、Win32のVC++です。
0289デフォルトの名無しさん2011/05/05(木) 09:27:46.55
>>287
Microsoft Windows SDKのサンプル。 google依存症だな。
0290デフォルトの名無しさん2011/05/05(木) 12:28:27.64
無理(無駄)なことをしてるだけのような
0291デフォルトの名無しさん2011/05/06(金) 15:42:33.43
使ってるルータがちゃんと対応してるかどうか調べたほうがいいよ。
それからどうでもいいことだけどUは大文字。Universal Plug a'n'd Play
0292デフォルトの名無しさん2011/05/12(木) 14:57:21.15
そもそもnat自体異常なインタ−ネットだからねえ。
せっかくの双方向性捨ててる。

natの内側からのコネクションの帰りにデータ詰めて流すしか無いと思うよ。
0293デフォルトの名無しさん2011/05/12(木) 15:06:16.39
>>292
> しか無いと思うよ。

そんなことはありません。
0294デフォルトの名無しさん2011/05/13(金) 04:55:32.28
じゃあどんなルータでも外から通る方法を示してくれよw
0295デフォルトの名無しさん2011/05/13(金) 10:11:57.94
>>294
natを使う
0296デフォルトの名無しさん2011/05/13(金) 13:53:09.20
「natの内側から」という条件が「どんなルーターでも」にすり替わってる。
>>294の低能ぶりがいかんなく発揮されているレスだ。
0297デフォルトの名無しさん2011/05/13(金) 15:30:54.66
プログラミングど素人なんですがど素人の状態からSNSサイトを立ち上げようと思ったらどれぐらい大変なことですか
それとSNSサイトを作る場合のお勧め言語とかありますか?
詳しく教えてもらえると助かります
0298デフォルトの名無しさん2011/05/13(金) 15:38:59.87
ちなみに一人で立ち上げる場合です
0299デフォルトの名無しさん2011/05/13(金) 15:41:11.06
プログラミングする必要はない。
http://en.wikipedia.org/wiki/Social_network_service#Open_source_software
続きの話は、適当な板でやって。
0300uy2011/05/16(月) 03:07:15.98
SNS?
Rubyが良いんじゃないかな。
Rubyはatpagesとかで動く

言語覚えたら1ヶ月で作れるんじゃね
飲み込み速ければ1週間じゃね
Web技術はプログラム的難しさよりも動作環境を整える事が難しいけど
ようは一行目に#!ruby なんとかってかいてファイル属性を755にしてrun
0301デフォルトの名無しさん2011/05/16(月) 04:24:51.16
俺ならPythonで1日だ!!
0302デフォルトの名無しさん2011/05/16(月) 10:50:02.16
perlで3時間 ・・・てとこですかね
0303デフォルトの名無しさん2011/05/21(土) 00:25:49.46
それrubyで一行でできるよ
0304デフォルトの名無しさん2011/06/07(火) 22:55:40.15
テンプレにある「Webプロトコル詳解」って絶版なの?
前の職場で人のを借りてて良書だったし買おうと思ったら本屋に取り寄せられないって言われた。
0305デフォルトの名無しさん2011/06/08(水) 00:46:30.58
本屋で理由を聞けよカス
0306デフォルトの名無しさん2011/06/08(水) 03:11:36.41
恥ずかしくて聞けるわけねーだろボケ
0307デフォルトの名無しさん2011/06/08(水) 03:13:57.15
amazonに中古があるみたいだけど
0308デフォルトの名無しさん2011/06/08(水) 06:01:34.26
ほー、ブクヲフで見かけたら捕獲してみるか。
内容的には古過ぎて役に立たなさそうな気がw
0309デフォルトの名無しさん2011/06/08(水) 11:12:19.65
そういえば俺が差がしたときもネットの古本ですら在庫なかったわ。
しかも在庫切れ前野縁談結構してるところ多かったから
内容がいいだけに古本があまり出回ってないのかもな、
ブクオフのネットだと安かったが在庫なかった。
たまたまオークションでそこそこ安く買えたがラッキーだったのかね。
0310デフォルトの名無しさん2011/06/08(水) 11:13:21.62
タイプミススマソ
>しかも在庫切れ前野縁談結構してるところ多かったから
しかも在庫切れ前の値段結構してるところ多かったから

0311デフォルトの名無しさん2011/06/08(水) 21:16:37.81
IPv6Day は何事も無く終わりましたとさ
0312デフォルトの名無しさん2011/06/08(水) 22:55:12.40
>>304-309
良書ほど日本人の素人に取っつきにくくて、売れないのかね
絶版になったり、改訂版が出なかったりするんだよな
「UNIXネットワークプログラミング」も原書はとっくの昔に改訂されているのに
邦訳はいつまでも2版のままだもんな

まあ良書は新しいことだけ自分でネットの文章などで補間しとけば今でも役に立つが、
新しいこと書いてあっても中身糞なのは役に立たないんけどなw
0313デフォルトの名無しさん2011/06/08(水) 23:04:56.64
>>312
3版って何がかわったの?
0314デフォルトの名無しさん2011/06/08(水) 23:25:04.09
>>313
IP V6関連の増補とか、SCTPやIPsecが追加されたとか、細かいところいろいろな。
第3版出たの9年前だが、いつまでたっても邦訳改定されないので、
2年後ぐらいに原書買ってしまったんだが、まさか10年近くたってもまだ出ないとは
思わなかったわw
0315デフォルトの名無しさん2011/06/08(水) 23:40:25.53
おおIPv6とSCTPか。ほしいな。
でもIPv6って10年前と今とでわりと結構違うくね?
第4版まで待って買うかね
0316デフォルトの名無しさん2011/06/09(木) 01:02:51.45
>>312
良書は必ず読むって層が英語で読んじゃうからね。
0317デフォルトの名無しさん2011/06/09(木) 04:51:47.78
実際実装していく上での疑問点はrfcを確認することになるから、需要がある層が英語おkだったりして日本語版の必要性が低い。
ietfとかの国際会議で議論までしちゃう連中だと、日本語版を買う必要性も無いだろうな。現地で英語版買ってそのまま日本でも読み続けてると思う。
0318デフォルトの名無しさん2011/06/09(木) 15:33:13.82
翻訳がひどいの多いしね。
全部カタカナにするだけでいいんだが・・・
0319デフォルトの名無しさん2011/06/09(木) 16:39:49.45
固有名詞だとむしろ英語のまま残しておいてもらったほうがいいな。
エラーログまで和訳され手分けわかめなのと同じ。
0320デフォルトの名無しさん2011/06/09(木) 18:09:23.21
ルー大柴に監修してもらえばいいんだよな
0321デフォルトの名無しさん2011/06/10(金) 03:01:03.80
はいはい、翻訳ひどくてすみませんでした(AAry
0322デフォルトの名無しさん2011/06/10(金) 11:53:51.75
お前翻訳者か? 反省しろよ
0323デフォルトの名無しさん2011/06/10(金) 21:56:15.88
>>315
著者のスティーブンスが死んじゃったからなぁ。
0324デフォルトの名無しさん2011/06/10(金) 23:30:55.59
まじ? 最近名前を知ってる人がポンポンよく死ぬなぁ。
もうすぐオレも死ぬんじゃないか? って気になるわ。
0325デフォルトの名無しさん2011/06/10(金) 23:52:22.99
経絡秘孔の入林を突いたお前はもう
0326デフォルトの名無しさん2011/06/11(土) 01:13:10.10
一昨年、高校のときの担任が病死した
去年、大学のときのたばこ好きの先輩が食道癌になって逝った
今年、高校のときの同級生がバイクで事故死した
0327デフォルトの名無しさん2011/06/12(日) 00:36:34.67
ipv6を手がける様な人って経験豊富な高齢者だからよく氏ぬのか?
0328デフォルトの名無しさん2011/06/12(日) 01:52:12.81
itojunnも死んだよね。
ipv6は正にこれからなんだが
0329デフォルトの名無しさん2011/06/12(日) 03:07:19.32
.netFrameworkに追加されたparallel使ったTCPのsocket送受信サンプルって
参考になるサイトありませんか?
0330デフォルトの名無しさん2011/06/12(日) 04:17:27.59
>>329
ありません
0331デフォルトの名無しさん2011/06/12(日) 17:08:38.36
伊藤さんの損失は大きいね。亀プロも解散しちゃったし。日本がネット技術で先端を開く芽を失った。
爺さんじゃなかったはずだけど持病でもあったのかな? プログラマとか持病多いからなあ。

ipv4聡明期の村井さんとか砂原さんじゃこれから20年とかとても戦えないからなあ。
ウィンドウズ95の発売で一気に一般化したipv4から16年か。もうアドレス枯渇で役目を終えようとしてるけど。
0332デフォルトの名無しさん2011/06/12(日) 20:10:01.48
>>331
自。なぜかわしらない。当時はIPv6の話をしても誰も聞く耳をもたなかったからか?
0333デフォルトの名無しさん2011/06/12(日) 21:30:06.79
wiereshark について聞いていいですか
非同期のUDP による送受信プログラムを一台のPC で検証しています
パケットモニタしたいと思いフィルタリングで
ip.addr == 127.0.0.1 && udp.port == 5030
として、applyするのですが、パケットがキャプチャーできません、何処か間違ってますか?
0334デフォルトの名無しさん2011/06/12(日) 21:34:47.94
インターフェースの指定は合ってる?
-i lo
0335デフォルトの名無しさん2011/06/12(日) 21:36:35.68
↓これくらいの検索キーワードをすぐに思いつかない奴がネットワークプログラミングする事が間違っている。
windows wireshark loopback
0336デフォルトの名無しさん2011/06/12(日) 21:42:51.49
>>335
鼻息荒いな 夕飯食ったか?
■ このスレッドは過去ログ倉庫に格納されています