ネットワークプログラミング相談室 Port28
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2012/04/18(水) 17:15:34.85Programming 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/
0083デフォルトの名無しさん
2012/05/18(金) 05:47:04.16少し前にもあったけど、どの程度の頻度で接続を繰り返しているのか?
切断手順に誤りはないか?をまずは確認してください。
頻繁に接続切断を繰り返したり、数分間切断された状態が続くとやばい
とかなら、素直にUDP使っとけやと思います。
0084デフォルトの名無しさん
2012/05/18(金) 14:11:54.13>IPとPort固定で接続しています。
もしかしてクライアント側も特定ポートにバインドしてるとか?
>BindException: address already in use
はまさにそれっぽいんだが
0085デフォルトの名無しさん
2012/05/18(金) 20:20:53.96次はサーバ側が多重化されていないので問題が発生する
とエスパーしてみる。
008682
2012/05/19(土) 01:31:24.31>>83
30秒〜1分くらいです。
切断手順は、shutdown→closeみたいな感じでしょうか。
今はcloseだけ行っています。
>>84
クライアント側もサーバのポートを指定して、サーバに接続しています。
サーバ側でBindは呼んでいますが、クライアント側では意識してBind呼んだりは
していません。
0087デフォルトの名無しさん
2012/05/19(土) 08:10:23.65>今はcloseだけ行っています。
お行儀わるいぞ。こうだろ。
shutdown(send) → recv(0) → shutdown(recv) → close
0088デフォルトの名無しさん
2012/05/19(土) 21:29:36.96そんなことやんねーよバーカ
何年前の世界に生きてんだ
0089デフォルトの名無しさん
2012/05/19(土) 22:26:25.38そ、そうなのか・・・w
0090デフォルトの名無しさん
2012/05/19(土) 23:02:07.68相手が切断したことを確認する必要があるかどうか
無いならいきなりcloseでいい
0091デフォルトの名無しさん
2012/05/20(日) 00:05:07.59俺の過去が見えるのか!
0092デフォルトの名無しさん
2012/05/20(日) 04:09:43.58無知とは言え無茶しすぎだろう。
自分の管理下のpcや鯖相手に好き勝手試すのはどうぞ存分に遣ってくれと思うけど、ネット上の鯖とかには控えめにな。サーバ攻撃受けたと判断されて通報されそうだわw
0093デフォルトの名無しさん
2012/05/20(日) 07:19:33.49札幌市立啓北商業高校の野島(横濱)えり Microsoft USA co.tp.
弖十=TEN10(teto)=優多野手頭=野慈蚕=帝跿(徒)=衛鴉朧 笑狸乃雉匯
0094デフォルトの名無しさん
2012/05/20(日) 09:17:27.67shutdown(both)も要らないのか?
0095デフォルトの名無しさん
2012/05/20(日) 09:44:54.47大した手間じゃないんだから定石通りの
切断手順を踏んだ方が良いと思うけどね。
0096デフォルトの名無しさん
2012/05/20(日) 09:53:02.04close内で勝手に呼び出す
>>95
カーネル内部で定石通りに勝手にやる
0097デフォルトの名無しさん
2012/05/20(日) 10:08:01.05カーネル側でちゃんと処理してくれないOSもあるのか?
でなきゃTIME_WAITもあるし常にclose()のブチ切りで良くなる。
0098デフォルトの名無しさん
2012/05/20(日) 13:18:31.48>30秒〜1分くらいです。
>サーバ側でBindは呼んでいますが、クライアント側では意識してBind呼んだりは
>していません。
だとすると、それにも関わらずBindException: address already in use
になるのは変だね。実は切断がちゃんと出来てないとか、クライアントの
マシンで別のアプリが大量にポート消費してるとか?netstatは見てみた?
0099デフォルトの名無しさん
2012/05/20(日) 13:26:10.26Bind()しているのはサーバ側のリスナーのポートだけじゃない気がするw
0100デフォルトの名無しさん
2012/05/20(日) 17:39:30.12だから基本的にはclose()ブチ切りで問題ない
shutdown()を使うべきなのは、データ送信後に相手が
受け取れたかどうかを見届けたいときくらいなものだ
0101デフォルトの名無しさん
2012/05/20(日) 17:55:57.93shutdown(SD_BOTH)の存在価値は全くないと・・・
0102デフォルトの名無しさん
2012/05/20(日) 18:26:28.33ぶち切りなら shutdown( ) は不要とか言ってるアホはスルーでいい。
プログラムの作りによって、通信はやめたいけど、資源の解放はあとの方でまとめてや
るなんてことはいくらでもありうる。
※ しかし、なんで shutdown( ) なんて名前なんだろう?
※ 素直に disconnect( ) とかでいいように思うが、8文字制限か?
0103デフォルトの名無しさん
2012/05/20(日) 18:27:35.850104デフォルトの名無しさん
2012/05/20(日) 19:06:12.75そういうときだけshutdown使えばいいじゃん
適材適所って言葉知ってる?
0105デフォルトの名無しさん
2012/05/20(日) 19:27:29.762.6 shutdown() はどういうときに使うべきなのですか?
http://www.kt.rim.or.jp/~ksk/sock-faq/unix-socket-faq-ja-2.html
winsockだと大丈夫かな。
0106デフォルトの名無しさん
2012/05/20(日) 19:31:37.33高速回線にはそぐわないパラメータ値も多いし。
0107デフォルトの名無しさん
2012/05/20(日) 19:40:00.92>適材適所って言葉知ってる?
だから、単純に
shutdown()を使うべきなのは、データ送信後に相手が
受け取れたかどうかを見届けたいときくらいなものだ
0108107
2012/05/20(日) 19:42:07.67途中で送信しちゃった。
>適材適所って言葉知ってる?
だから、
> shutdown()を使うべきなのは、データ送信後に相手が
> 受け取れたかどうかを見届けたいときくらいなものだ
以外のケースもあると書いてあるんだが、日本語理解できない?
それとも、なんか悔しかったのか?(w
0109デフォルトの名無しさん
2012/05/20(日) 20:00:47.130110デフォルトの名無しさん
2012/05/20(日) 20:38:43.69あとでまとめて解放なら放置プレイしてOSに解放させれば良いのでは?
0111デフォルトの名無しさん
2012/05/20(日) 20:48:22.360112デフォルトの名無しさん
2012/05/20(日) 20:51:30.920113デフォルトの名無しさん
2012/05/20(日) 21:09:29.93通信の停止とclose()を別々に行うことはあるね。
あまりいい作りとは思えないけど、手軽なんで周りでも時々見かける。
0114デフォルトの名無しさん
2012/05/21(月) 08:21:07.90なんにせよshutdownしてcloseせず長々と持ってるつくりは
感心できるものじゃないなぁ
0115デフォルトの名無しさん
2012/05/21(月) 16:30:28.64> プログラムの作りによって、通信はやめたいけど、資源の解放はあとの方でまとめてや
> るなんてことはいくらでもありうる。
こんな作りにしたこともしたくなったことも、いまだかつて無い。
0116デフォルトの名無しさん
2012/05/21(月) 16:44:17.440117デフォルトの名無しさん
2012/05/22(火) 07:58:43.54一万セッションぐらい通してみて誰か耐久試験でもやってくれw
ftpなんかも制御持ち切りでデータのほうばっかで流してるうちに、切られてたりはするな。
ゲームとかでも描くパーツの制御にそれぞれ制御セッション貼って、データだけいろいろ送って、状態推移に使ってたりして。
>>112
tftpなんて毎回貼り直しでもいいくらいヌルいね。
httpなんかでも地図データ拾うのに使い捨ての様にセッション貼ってるけど。
0118デフォルトの名無しさん
2012/05/22(火) 10:52:40.38その耐久試験ならすでに何億回とやってる。
0119デフォルトの名無しさん
2012/05/22(火) 17:23:16.46shutdownだけしてcloseする処理はありうる。
ずっと待ち受け続けられるから。
ただクライアントサーバ方式全盛だから、
こういうランデブー型の双方からconnectする通信方式は少ないな。
ちなみにTCPのRFCにはランデブー型APIについて書いてあった。
BSDソケットはこの辺を生真面目に設計、実装していると思われる。
0120デフォルトの名無しさん
2012/05/22(火) 17:24:27.51> shutdownだけしてcloseする処理はありうる。
< shutdownだけして、closeせずにsocketを維持し続ける処理はありうる。
0121デフォルトの名無しさん
2012/05/22(火) 17:28:26.00いや、そんな行儀の悪い対向はそうそういないだろうよ・・・
shutdown送ってんのにペラペラ喋り続けるやつは
問答無用でぶっ殺すわ・・・
0122デフォルトの名無しさん
2012/05/22(火) 17:40:17.110123デフォルトの名無しさん
2012/05/22(火) 17:41:41.220124デフォルトの名無しさん
2012/05/22(火) 20:21:48.69close()でぶち切りしてもプロセスをKillしてもOS側で必要な切断手順は
やってくれるのでプロトコルの途中でのぶち切りにはならない。
0125デフォルトの名無しさん
2012/05/22(火) 21:05:49.86ttp://msdn.microsoft.com/en-us/library/windows/desktop/ms724935%28v=vs.85%29.aspx
0126デフォルトの名無しさん
2012/05/22(火) 21:13:44.54Graceful Shutdown, Linger Options, and Socket Closure.も読んどけ。
0127デフォルトの名無しさん
2012/05/22(火) 22:24:40.80そんなに悔しかったのか? (w
>>124
いったいどこのプロトコルの話をしてるんだ?
0128デフォルトの名無しさん
2012/05/22(火) 23:08:44.91安いプロトコルスタック買っちゃったら
このあたりの尻拭いしてくれないよね
0129デフォルトの名無しさん
2012/05/22(火) 23:59:18.39何か参考書知りませんか?
LinuxかAIXでプログラム作れたら嬉しいです
0130デフォルトの名無しさん
2012/05/23(水) 03:56:53.89枯れてるipスタックって結構大事。
aixならibmの営業捕まえて研修受けてこい。もちろんお金は掛かるけど。
簡単にsslでproxyできたらsslの意味無くなると思うけどね。
あんたが銀行サイトにsslで繋げて安全と思ってるのに、途中でproxy挟まれて中身見れてたら意味無いでしょ。
0131デフォルトの名無しさん
2012/05/31(木) 01:50:51.64以前TCPを利用した対戦ゲームを作って友人と遊んでいたのですが、
引越しで環境の変化により接続できなくなりました。
原因はマンションの回線を使っているためだと思われます(そもそもポート開放できない
が、プログラムの組み方でその辺の問題を回避できたりしますか?
ネットゲームや、DS・PS3等のネット通信はできるので、接続は絶望的ではないのかなと思い質問しました。
TCPでの接続ができないとしたら、他の通信方法などがあれば教えてもらえると嬉しいです。
0132デフォルトの名無しさん
2012/05/31(木) 11:17:56.93では次の方どうぞ
0133デフォルトの名無しさん
2012/05/31(木) 17:59:17.46VPNでつないどけ
0134デフォルトの名無しさん
2012/05/31(木) 18:14:35.510135デフォルトの名無しさん
2012/05/31(木) 18:15:02.940136デフォルトの名無しさん
2012/05/31(木) 23:07:04.790137デフォルトの名無しさん
2012/06/01(金) 19:47:51.93SoftEtherでも使っとけ
0138デフォルトの名無しさん
2012/06/01(金) 20:21:20.48誰でも使えるpublicなサーバーとかあるんだっけ?
0139デフォルトの名無しさん
2012/06/02(土) 13:57:42.79物理層を伝書鳩にすればいいと思うよ。
0140デフォルトの名無しさん
2012/06/02(土) 14:08:51.19それでもダメだろ。面白いこと言ったつもりだろうけど、よく考えろ。
0141デフォルトの名無しさん
2012/06/02(土) 14:51:32.950142デフォルトの名無しさん
2012/06/03(日) 00:12:26.49送られてきたデータをパースするときは、どんな感じでパースしてますか
普通に固定長ファイルを扱う感じでやろうかと思うのですが
0143デフォルトの名無しさん
2012/06/03(日) 00:19:46.49DNSはバイナリですがやっぱり可変長です。
0144142
2012/06/03(日) 00:30:12.12回答ありがとうございます。
ネットワークプログラミングってパフォーマンスを考えなければ簡単そうですね
ちょっと面倒なファイルの操作ってイメージ
0145デフォルトの名無しさん
2012/06/03(日) 00:32:30.070146デフォルトの名無しさん
2012/06/03(日) 03:44:27.11ローカルファイル扱いとは
本質的に違うところが随分あります。
0147デフォルトの名無しさん
2012/06/03(日) 08:31:26.79ネットワークプログラミングなので、一律に「分散コンピューティング」とか言うのは、
すごく違和感がある。
0148デフォルトの名無しさん
2012/06/03(日) 21:32:46.41それともリクエストをやり直すだけでOKですか?
また、こういう情報はどこに記載されています?
0149デフォルトの名無しさん
2012/06/04(月) 10:24:07.140150デフォルトの名無しさん
2012/06/04(月) 10:35:13.70RFCの何番かくらい教えてやれよ・・・
0151デフォルトの名無しさん
2012/06/05(火) 10:50:32.49UDPでブロードキャストしまくるのって下品?
0152デフォルトの名無しさん
2012/06/05(火) 17:42:00.380153デフォルトの名無しさん
2012/06/05(火) 18:49:46.51所詮チャットて程度の帯域利用なんだから。
0154デフォルトの名無しさん
2012/06/05(火) 22:22:52.970155デフォルトの名無しさん
2012/06/07(木) 08:53:40.290156デフォルトの名無しさん
2012/06/07(木) 10:29:33.62それより関連RFCをよく読んで仕様を頭に叩き込んでください
0157デフォルトの名無しさん
2012/06/07(木) 13:47:30.82頭を叩いてまで詰め込むようなことはないような。
0158デフォルトの名無しさん
2012/06/10(日) 22:02:32.030159デフォルトの名無しさん
2012/06/10(日) 23:09:26.190160デフォルトの名無しさん
2012/06/10(日) 23:38:40.730161デフォルトの名無しさん
2012/06/11(月) 13:13:54.370162デフォルトの名無しさん
2012/06/11(月) 15:24:41.21sendto()に10000バイトを指定して実行し、戻り値が10000である事を確認しました。
この状態で送信先のPCにアナライザソフト(PacMon最新版)を入れてデータを確認しましたが、
1パケット分(パケット長1514バイト、データ長1472バイト)しか届いていません。
残りのデータは何処に行ってしまったのでしょうか?
2台のPC共にネットワークカードのジャンボフレームは無効にしてあります。
0163デフォルトの名無しさん
2012/06/11(月) 16:34:09.050164デフォルトの名無しさん
2012/06/11(月) 17:59:30.500165デフォルトの名無しさん
2012/06/11(月) 18:22:28.76おれが食っちまった
0166デフォルトの名無しさん
2012/06/11(月) 21:41:28.71最近はMSDNもメトロデザインなのね。
なんか殺風景なのね。
0167デフォルトの名無しさん
2012/06/11(月) 22:38:29.59天使の取り分
0168デフォルトの名無しさん
2012/06/11(月) 23:03:07.09て言うか、8割以上ぶんどる天使って、悪魔じゃねーのか?(w
0169デフォルトの名無しさん
2012/06/11(月) 23:10:42.040170162
2012/06/11(月) 23:48:49.34送信バイト数を10Kではなく1KにするとWiresharkでも届いてる事を確認できます。
普通は複数パケットに分割されて届くのでしょうか?
それともsedto()の戻り値が10Kなのが変なのでしょうか?
0171デフォルトの名無しさん
2012/06/11(月) 23:49:08.450172162
2012/06/11(月) 23:54:15.09送信バイト数を10Kではなく1KにするとWiresharkでも届いてる事を確認できます。
普通は複数パケットに分割されて届くのでしょうか?
それともsedto()の戻り値が10Kなのが変なのでしょうか?
0173デフォルトの名無しさん
2012/06/11(月) 23:58:59.12…たとえそれがNIC(って最近オンボードの方が多いけど)に渡る前であっても、
send(to)に渡した直後であってさえも、だ…
0174デフォルトの名無しさん
2012/06/12(火) 00:00:07.88Programming 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/
以下略
0175デフォルトの名無しさん
2012/06/12(火) 00:16:20.070176デフォルトの名無しさん
2012/06/12(火) 01:38:38.83環境依存です。
今なら複数パケットに分割して配信する環境の方が多いでしょう。
実際にどうなるかは、経路上のネットワーク機器次第なので、
インターネットでどうなるかは運次第ですね。
0177デフォルトの名無しさん
2012/06/12(火) 02:14:31.19>今なら複数パケットに分割して配信する環境の方が多いでしょう。
UDPを分割配信する処理系があるならぜひ教えてもらいたいものです
0178デフォルトの名無しさん
2012/06/12(火) 07:23:24.730179デフォルトの名無しさん
2012/06/12(火) 08:44:13.73WindowsとかLinuxとか
0180デフォルトの名無しさん
2012/06/12(火) 09:37:02.65IPフラグメンテーションという仕組みがあり、UDPパケットのサイズが大きく
MTUのサイズを超えてしまう場合には、複数のIPパケットに分割して格納される。
ただしルーター側で無効にしている場合もあります。
PacMonやWiresharkでUDPパケットをキャプチャー出来ないのは、
おそらくIPフラグメンテーションで分割されたUDPパケットを解析する
機能が無いからです。
IPパケットを自力で解析すれば、そこには分割されたUDPパケットが
格納されてると思います。
0181デフォルトの名無しさん
2012/06/12(火) 11:30:00.93>IPフラグメンテーションという仕組みがあり、UDPパケットのサイズが大きく
>MTUのサイズを超えてしまう場合には、複数のIPパケットに分割して格納される。
>ただしルーター側で無効にしている場合もあります。
・その分割されたパケットはどこで(ex: 受信側のUDPスタック)組み立てるの?
・分割された複数パケットの到着順序が崩れたり(or 反転したり)、ロストした場合はどう振る舞うの?
・これらはプロトコル仕様書(RFC)のどこに記述されているの?
IPフラグメンテーション機能が活躍するのはTCPの場合だけだよ
UDPやICMPといったプロトコルの場合、
・送信側UDPスタックでは、IPヘッダ内にあるフラグメント禁止ビットをオンにしてパケットを送信
・途中のルータはフラグメントが必要になった場合、(フラグメント禁止だから)パケットを破棄し、
送信元へはICMPの未到達(unreachable)メッセージを返す
というのが一般的な実装だと記憶していたのだけどなあ....
0182デフォルトの名無しさん
2012/06/12(火) 12:14:47.34>・その分割されたパケットはどこで(ex: 受信側のUDPスタック)組み立てるの?
受信側のIPスタックが組み立てるにきまってるだろ。
>・分割された複数パケットの到着順序が崩れたり(or 反転したり)、ロストした場合はどう振る舞うの?
複数パケットの到着順序が崩れたら、正しい順番に並びかえる。
ロストしたら破棄される。
>・これらはプロトコル仕様書(RFC)のどこに記述されているの?
STD-5だよ。
>・送信側UDPスタックでは、IPヘッダ内にあるフラグメント禁止ビットをオンにしてパケットを送信
>・途中のルータはフラグメントが必要になった場合、(フラグメント禁止だから)パケットを破棄し、
> 送信元へはICMPの未到達(unreachable)メッセージを返す
それこそRFCの何処に書いてあるんだよ?
■ このスレッドは過去ログ倉庫に格納されています