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

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

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

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

前スレ
ネットワークプログラミング相談室 Port14
http://pc8.2ch.net/test/read.cgi/tech/1118469143/
0232デフォルトの名無しさん2005/10/26(水) 22:50:10
JavaでSocket.closeを起動した時にTCPが相手に送信するフラグについて調査しています。
1. 何も指定しなければ、FIN。
2. SO_LINGERを設定(Socket.setSoLinger(true ,0))していれば、RST。
と言うことは分かったのですが、SO_LINGERを設定していない時にも、
FINではなくRSTを送信することがありました。その時の環境と条件は、
以下の通りです。
環境:OS:Red Hat Enterprise Linux 3
JDK:J2SE1.4.2_08(SunVM)
条件:SO_LINGERを設定していないSocketのcloseを起動。この時、該当コネクションのTCPの受信バッファにデータが存在する。

調査した結果、以下のページを見つけました。
http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/net/articles/connection_release.html
このページの"問題の説明"の最後("問題の回避方法"の直前)に書いてある部分に該当すると考えています。(このドキュメントは5.0から追加されたもののようでした)。

Googleで検索したのですが、この様な状態に関するページが、上記の
1件しか見つけることができず、この動作が一般的な動作なのかが不明です。

JavaでSO_LINGERを設定していないSocketでcloseを起動したときに、
FINではなくRSTが送信される条件をご存知の方がいらっしゃったらご教示ください。
0233デフォルトの名無しさん2005/10/27(木) 01:19:09
>>231
connect/accept の CPU 負荷とハンドシェイクで発生するパケットの負荷を求めたいってこと?
0234デフォルトの名無しさん2005/10/27(木) 02:01:03
今会社でこっそりプロミスカスモードでパケット集めて遊んでるんだが
結構楽しいよねこれ。最近はバイナリ列からどのフォーマットか瞬時に判断
できるようになったせいで、仕事中に他人が何してるか100%把握できるようになった。
0235デフォルトの名無しさん2005/10/27(木) 02:15:02
>>234
楽しそうだな
0236デフォルトの名無しさん2005/10/27(木) 03:12:03
>>232
そのページにも書いてあると思うが、
http://www.kt.rim.or.jp/~ksk/sock-faq/unix-socket-faq-ja-4.html#ss4.2
http://www.kt.rim.or.jp/~ksk/sock-faq/unix-socket-faq-ja-2.html#time_wait
0237どっぴん ◆uSuQC0Pfo6 2005/10/27(木) 06:29:23
初めまして。

僕はC#を覚えたので、手作りでビデオ・ボイスチャットを作ろうと
思ってます。

だけど、検索したり本屋に行ったりして調べようと思ったのですが
該当のものが見つかりません。

ご存知の方いらっしゃいましたらよい情報や方法そのものを教えていただければ嬉しいです。
0238デフォルトの名無しさん2005/10/27(木) 08:47:52
いきなり凄いハードルを用意するなぁ
0239デフォルトの名無しさん2005/10/27(木) 12:52:37
>233
そうです。
特に詳しくパケットの量を知りたいと思っています。

ネットワークをシュミレーションできるソフトがあればいいのですが・・・
0240デフォルトの名無しさん2005/10/27(木) 12:57:01
立派なご趣味でいらっしゃいますわね。
0241デフォルトの名無しさん2005/10/27(木) 14:44:01
s i m u l a t i o n な

s h u m i r e i s h o n じゃないぞ
0242どっぴん ◆uSuQC0Pfo6 2005/10/27(木) 15:07:03
ハードル高いですか。はは。
何事もまず第一歩からってな事でご存知の方お願いします。
0243デフォルトの名無しさん2005/10/27(木) 16:26:32
あれだろ。
C/C++で企業の第一線でネットワークばりばりやってて、趣味でC#をはじめたけど資料がないと。
0244デフォルトの名無しさん2005/10/27(木) 17:20:06
>>243
何事も第一歩を他人に手取り足取り教えてもらわないと踏み出せないのにそれはありえない
0245デフォルトの名無しさん2005/10/27(木) 19:01:28
方法そのもの。
ビデオ部分:キャプチャ→圧縮→send
音声部分:キャプチャ→圧縮→send

何か質問あるか
0246デフォルトの名無しさん2005/10/27(木) 22:22:02
>>239
実際にaccept/connectする単純な二つのプログラム作ってセッション張ったり切ったりすりゃいいんじゃない?
パケットの数はetherealで見るかwinpcapでキャプチャする単純なアプリを作ってみる。
0247デフォルトの名無しさん2005/10/27(木) 23:04:31
>>242
取り合えず、どっかのページにある動画ファイルをHTTPで取得して、再生してみたら?
02482322005/10/27(木) 23:16:31
>>236
Socket.close起動で、ソケットへのインタフェースをクローズ(ソケット自身は
まだクローズされているとは限らない)されます。ソケットへのインタフェースが
クローズされるため、ソケット自身の受信バッファに残っているデータは
アプリケーションまで通知されないことになります。
これを送信側に通知させるためにRSTを使用していると言うように理解(想像)しました。

ありがとうございました
0249デフォルトの名無しさん2005/10/27(木) 23:17:43
>>234
今会社でこっそりミニスカを・・・までよんだ
0250デフォルトの名無しさん2005/10/27(木) 23:20:01
>>249
おまえなぁ…ふざけてないでちゃんと読めよ!

パイズリ列まで
0251デフォルトの名無しさん2005/10/27(木) 23:44:32
>>230
> Winsock2ならそれでOK

これ MSDN とかに公式見解として載ってます?

まあ、今それで動いているんだけど、公式見解
があれば、ちょっとは安らかに眠れるかも。

>>234
> 仕事中に他人が何してるか100%把握できるようになった。

と言うことは、おまえが何してるか情報システム部門は
100% 把握してるわけだ。

明日、帰りにフロムエーでも買っといた方がいいんじゃな
いか。(w
0252デフォルトの名無しさん2005/10/28(金) 00:28:23
>246氏
etherealというパケットキャプチャツールがあったのですね。
恥ずかしながら私は知りませんでした。
このソフトを使ってパケットを調べてみたいと思います。
ありがとうございました。
0253デフォルトの名無しさん2005/10/28(金) 01:39:15
みんな嫌なやつのパケットはよく見るよね?
上司にこっそり報告しちゃったりしてさ
俺って悪い奴?
0254デフォルトの名無しさん2005/10/28(金) 02:04:47
>>251
closesocketの説明に
> Any pending blocking, asynchronous calls issued by any thread in this process are
> canceled without posting any notification messages.
と書かれてるがこれじゃ不足か?
現在のMSDNからは見つけ出せなかったが、記憶が正しければ
Winsock 1.1では保証されてなかったはず
0255デフォルトの名無しさん2005/10/28(金) 02:06:05
あ、よく見るとMSDNのブロッキングで非同期の場合か
0256デフォルトの名無しさん2005/10/28(金) 06:02:28
>>253
WinSock2ならいいと思うよ
0257デフォルトの名無しさん2005/10/28(金) 06:51:30
>>234
今時、リピータHUBですか?
0258デフォルトの名無しさん2005/10/28(金) 10:01:46
>>257
スイッチだろうと、
ARP突っ込めばman-inthe-middleで見れる。
0259デフォルトの名無しさん2005/10/28(金) 12:58:48
(゚Д゚)ハァ?
0260デフォルトの名無しさん2005/10/28(金) 21:32:28
WSAAsyncGetHostByNameなんですが、MSDNには次のように書いてありました。
>The WSAAsyncGetHostByName function is not designed to provide parallel resolution of several names.
>Therefore, applications that issue several requests should not expect them to be executed concurrently.

訳に自信ないんですけど、一度に複数発行できるけど並列に動作しないよ(順番に処理されていく?)
ってことでいいんでしょうか?
0261デフォルトの名無しさん2005/10/28(金) 22:05:53
>>254
おお、ほんとだ。

ありがとう、これでやっと安らかに眠れるよ。

>>258
もう、寒くなってきたから、つりはほどほどにな。

>>260
Excite 翻訳によると、

> WSAAsyncGetHostByName機能は、いくつかの名前
> の平行な解決を提供するように設計されません。
> したがって、いくつかの要求を出すアプリケーション
> は、それらが同時に実行されると予想するべきではあ
> りません。

だから、大体あってると思う。順番がどうなるかはよく
わからんが。
0262デフォルトの名無しさん2005/10/29(土) 00:31:34
WSAStringToAddressの第一引数がLPCTSTRでなくLPTSTRなのは何故でしょうか?
文字列を変更する可能性があるのでしょうか?
0263デフォルトの名無しさん2005/10/29(土) 01:37:00
>>262
どっちも同じ意味。
0264デフォルトの名無しさん2005/10/29(土) 02:58:48
>>260
要するにMT-Safeでないということだね。

マニュアル文章としては良くないね。
「並列に実行するな」と書けば済むことを、グダグダ書いてある。
# というか「not MT-Safe」、これだけで済むこと。
0265デフォルトの名無しさん2005/10/29(土) 03:04:56
WSAAsync...系のAPIをマルチスレッドで呼び出す??
メッセージループを動かしているスレッド以外で、使う事あるの?
0266デフォルトの名無しさん2005/10/29(土) 03:11:16
ちなみに、MSDNのWinsock2の説明では
別スレッドでなんかした時にどうなるとかは、ちゃんと「thread」という単語を使って解説されています。
0267デフォルトの名無しさん2005/10/29(土) 03:15:22
>>264は根本的な勘違いをしている希ガス……。
そもそもこれは、スレッドセーフなどの問題ではないような……。


最初に、名前解決できないホスト名を渡す。
↓
次に、名前解決できるホスト名を渡す。
↓
メッセージが飛んでくるのを待つ
↓
しばらくたってから、最初の名前解決ができなかった旨を示すメッセージが飛んでくる。
↓
名前解決できた、次のメッセージが飛んでくる。


もし並列に実行できるなら、こうなるはず

メッセージが飛んでくるのを待つ
↓
二番目に渡したホスト名の、名前解決ができたことを伝えるメッセージが飛んでくる
↓
タイムアウトになって、最初のホスト名が名前解決ができなかったことを示すメッセージが飛んでくる。
0268デフォルトの名無しさん2005/10/29(土) 03:25:32
てゆーか、そもそも、
排他処理等を行って「1つのスレッド以外は待たされる」というものはいくらでもあるが
そういうのを「非MT-Safe」とは言わないのだが。
0269デフォルトの名無しさん2005/10/29(土) 09:14:47
そ。MT-Safeかどうかと
並行実行時の効率の良し悪しはまったく別の話
0270デフォルトの名無しさん2005/10/29(土) 09:52:06
>>263
LPCTSTRは CONST TCHAR* でLPTSTRは TCHAR* なのですが・・・
入力パラメータなのにconstが付いてないのはおかしいと思うのです。
0271デフォルトの名無しさん2005/10/29(土) 10:29:58
constがついてないということは それは変更されるかも知れないというだけ
おかしいのは>>263と>>270でFA
0272デフォルトの名無しさん2005/10/29(土) 10:37:56
std::stringやCStringを直接渡せないな。
一時バッファ作らなきゃならんのか。マンドクセ('A`)
0273デフォルトの名無しさん2005/10/29(土) 11:15:40
絶対この関数を使わなきゃならんのか?
0274デフォルトの名無しさん2005/10/29(土) 16:34:58
getaddrinfoもWSAStringToAddressも名前が解決できるまでブロックするみたいだけど
WinsockでIPv6アドレスの解決中にブロックを中断したいときはどうしたらいいの?
UNIXならシグナルが使えそうだけど
0275デフォルトの名無しさん2005/10/29(土) 18:58:25
>>274
>名前が解決できるまでブロックする
これマジっすか
確かにブロックするかも
まずいなぁ・・・まずいよ
0276デフォルトの名無しさん2005/10/29(土) 19:18:22
スレッドで実行させればいいじゃん。
0277デフォルトの名無しさん2005/10/29(土) 19:29:39
>>274
WSAStringToAddressって単なる文字列処理じゃないの?
0278デフォルトの名無しさん2005/10/29(土) 19:41:14
>>276
名前解決でブロック中のスレッドを外から止められないのは一緒でしょ
TerminateThreadは後始末してくれないからサーバーアプリには使えない
クライアントなら終了すればいいけど
0279デフォルトの名無しさん2005/10/29(土) 20:23:54
>>277
そのようだ。ボケてた。getaddrinfoだけに置き換えて読んでちょ
0280デフォルトの名無しさん2005/10/29(土) 20:50:30
GET "〜〜"を送信してファイルをディスクに保存するとします。

その何も加工されていないファイルには、例外無くヘッダ情報が含まれますよね。
そのヘッダ情報を削除したい場合、どのようなプログラミングの手法が取れるでしょうか?
自分はヘッダに含まれるLengthを調べて、ヘッダファイルを取り除いていたのですが。
Lengthが存在しない場合などの時には、ヘッダが削除できなくなってしまいます。
0281デフォルトの名無しさん2005/10/29(土) 21:16:54
CR LF CR LFが来るまでがヘッダ。
0282デフォルトの名無しさん2005/10/29(土) 21:26:58
えっと今バイナリエディッタで、ヘッダ情報を含むページを見てるのですが。
CR LF CR LFという文字列が見つからないのですが・・
0283デフォルトの名無しさん2005/10/29(土) 21:45:51
>>282
がんばれ
視点を変えればすぐに見つかる

バイナリエディタで検索せずに、自分の目で見るんだ
0284まあ、釣りだろうな。2005/10/29(土) 21:49:24
>>282
申し訳ないけど、君、技術者に向いてないよ。

100歩譲って CR LF とか知らないのは、しょうがない
としても、例えば html cr lf ぐらいでぐぐってみる
とか、本屋に行って HTML 関係の本を片っ端から立ち読
みするとかできないようだと、これから辛いよ。
0285デフォルトの名無しさん2005/10/29(土) 21:52:39
↓お前はこれから奴にRFC読めと言う
0286デフォルトの名無しさん2005/10/29(土) 22:04:08
空気読めればそれでいいじゃん
0287デフォルトの名無しさん2005/10/29(土) 22:13:45
CR=キャリッジリターン。ANSIコード0x0d
LE=ラインフィード。ANSIコード0x0a
0288デフォルトの名無しさん2005/10/29(土) 22:22:55

わざわざすみません
0289デフォルトの名無しさん2005/10/29(土) 22:58:01
ブラウザで拾った(既にヘッダが取り除かれた)html見てるんじゃないだろうな?
0290デフォルトの名無しさん2005/10/29(土) 23:00:16
えっと今バイナリエディッタで、HTML情報を含むページを見てるのですが。
RFCという文字列が見つからないのですが・・
0291デフォルトの名無しさん2005/10/29(土) 23:02:35
>>290
>>284 の名前欄。
0292デフォルトの名無しさん2005/10/29(土) 23:07:44
RFC資料へのリンク集らしい
ttp://www.se.hiroshima-u.ac.jp/~isaki/rfc/list.html
0293デフォルトの名無しさん2005/10/29(土) 23:44:41
RFC資料へのリンク集
ttp://www.asahi-net.or.jp/~PM5M-ON/it/net/rfcjp/1/index.htm
0294デフォルトの名無しさん2005/10/30(日) 03:11:17
RFCも知らないプログラマ…
温室育ちかな?
0295デフォルトの名無しさん2005/10/30(日) 03:28:38
>>294
君も>>284の名前欄
0296デフォルトの名無しさん2005/10/30(日) 08:22:48
釣りかどうかは別として
たまに基礎が欠落している人がいるわけだが
そういう奴らがどこから情報を得ているのか気になるよな
0297デフォルトの名無しさん2005/10/30(日) 10:49:09
ドカチンプログラマーには、たいした情報いらんだろ。
0298デフォルトの名無しさん2005/10/30(日) 14:49:54
localhostのMACアドレスを取得するには
どのようなコードを書いたら良いでしょうか?
0299デフォルトの名無しさん2005/10/30(日) 14:51:17
127.0.0.1にMAC層なんてあるのですか?
0300デフォルトの名無しさん2005/10/30(日) 14:58:31
きっと、自分のコンピュータから手に入れたいってことだろう。
0301デフォルトの名無しさん2005/10/30(日) 21:34:28
LANカードじゃね?
0302デフォルトの名無しさん2005/10/30(日) 22:19:16
127.0.0.1 に LAN カードなんてあるのですか?
0303デフォルトの名無しさん2005/10/31(月) 01:21:28
>296
0304デフォルトの名無しさん2005/10/31(月) 02:57:53
でもさ、俺らだって本当の基礎はあんま理解してないじゃん?
IPパケット読めって言われたって、本見ながらアーとかウーとか
唸りながらじゃないと宛先ひとつ取り出せないじゃん?
LANの信号って何ボルトだったっけ?
0305デフォルトの名無しさん2005/10/31(月) 08:12:20
俺ら…
0306デフォルトの名無しさん2005/10/31(月) 08:28:40
0V.
光ケーブルに電気は流れないよ。
0307デフォルトの名無しさん2005/10/31(月) 08:42:26
>>304
大学へいけ。ちゃんと教えてくれるから。
0308デフォルトの名無しさん2005/10/31(月) 12:46:37
>>298
Windowsならレジストリから読む
UNIXなら・・・しらんLinuxなら/procとかそこらへんじゃねーの
0309デフォルトの名無しさん2005/10/31(月) 14:13:44
WindowsはlocalhostにMACアドレスなんかついてるのか? けったいな。

0310デフォルトの名無しさん2005/10/31(月) 23:00:26
やっぱりこのスレにネットワーク分かる人いないんですね。
ネットワーク知ってると言ってWindowsだけだとお話になりませんよ。
0311デフォルトの名無しさん2005/10/31(月) 23:17:05
Windows以外だとlocalhostにMACアドレスがついているのですか?
298=300=310さん。
0312デフォルトの名無しさん2005/10/31(月) 23:17:54
電撃ネットワークも知ってるお。
0313デフォルトの名無しさん2005/10/31(月) 23:19:48
TMネッt(ry
0314デフォルトの名無しさん2005/10/31(月) 23:27:20
平和より自由より正しさより〜
0315デフォルトの名無しさん2005/10/31(月) 23:34:19
あむうえ
0316デフォルトの名無しさん2005/10/31(月) 23:40:50
>>311
付いてるよ。普通に。
キサマはWebアプリしか作ったことないだろ?
ヘタレだな。
0317デフォルトの名無しさん2005/11/01(火) 00:00:11
loなifにmacなんて付いてるの? 初めて知った…。
0318デフォルトの名無しさん2005/11/01(火) 00:07:40
>>316=310=300=298のネットワークに詳しい有能な技術者様へ

NICを持ってないPCでも、localhostを持っていて
127.0.0.1相手に通信できるなんて、そんなわけないもんね。

ネットワークに詳しくないヘタレは、↑みたいな勘違いしてるから
localhostがMAC持ってるなんて知らないんだよ。
0319デフォルトの名無しさん2005/11/01(火) 00:12:31
>>318
書いてることがよくわからない。も少し分かりやすくお願い。
0320デフォルトの名無しさん2005/11/01(火) 00:22:31
よくわからんが、
localhostからって言ってるから、
ここ数年流行のTomcatでlocalhost相手に
Webアプリを作ったことあるだけのネットワーク知った気取りが
ループバックに噛みついてんじゃないの?
自分のパソコンの って言えばいいじゃん。
0321デフォルトの名無しさん2005/11/01(火) 00:24:12
そんなメソッドはありません。
って言い出すんだろ。どうせ。
0322デフォルトの名無しさん2005/11/01(火) 00:24:52
>>319
>>310
0323デフォルトの名無しさん2005/11/01(火) 00:28:01
>>322
ネットワークスレらしく、パケット解析してから発言してるのか?
0324デフォルトの名無しさん2005/11/01(火) 00:29:35
>>322
まったくよくわからん。結局このスレじゃ答えは出ないってことか?

まぁloがmac持ってようがいまいが仕事するのに影響ないからいいか。
0325デフォルトの名無しさん2005/11/01(火) 00:31:52
なにここ。
これほどあからさまな皮肉を、皮肉と感じられない人しか居ないの?
0326デフォルトの名無しさん2005/11/01(火) 00:33:55
ヒント:ARP
0327デフォルトの名無しさん2005/11/01(火) 00:48:37
localhostにMACアドレスがついてる一族は別の世界の住人なんだろう。
どっか他所でやってくれ。たいして面白い見世物でもなかったので飽きた。
0328デフォルトの名無しさん2005/11/01(火) 00:52:10
うちのMacのMACアドレスはどうやって調べたら良いんだ?
0329デフォルトの名無しさん2005/11/01(火) 00:57:10
郵便番号から検索できるぞ
0330デフォルトの名無しさん2005/11/01(火) 01:03:44
自分のパソコンのMACアドレスだったらどうなんだ?
0331デフォルトの名無しさん2005/11/01(火) 01:04:05
最近は電話番号からでも住所調べられる世の中になったんだってな?
■ このスレッドは過去ログ倉庫に格納されています