[表示 : 全て 最新50 1-99 101- 201- 2chのread.cgiへ]
Update time : 07/09 08:15 / Filesize : 78 KB / Number-of Response : 298
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



1 名前:デフォルトの名無しさん mailto:sage [2007/02/09(金) 23:04:56 ]
主にソケットに関しての質疑応答スレッドです。

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

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

前スレ
ネットワークプログラミング相談室 Port18
pc10.2ch.net/test/read.cgi/tech/1159692799/

19 名前:11 mailto:sage [2007/02/17(土) 17:45:45 ]
レスありがとうございます。
後出しになって申し訳ないのですが、実はApache + C++CGIとして動作させています。そのため、スレッドの生成は避けたいと思っています。
CGIの待機中プロセスが増えすぎてしまわないためにタイムアウトを設けたいと思って質問しました。

少なくとも毎回selectするくらいなら非ブロックモードにするべきのようですね。
非ブロックでsend/recvし、ソケットが閉じられるまでループさせる方法で試してみます。

20 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 18:34:48 ]
> イベントとI/Oの両方を待機させるような作り

そうそう、
socketのイベントとpthread_cancelを同時に待つ方法が知りたい。

21 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 18:47:00 ]
>>20
スレッドでソケットでセレクト

22 名前:デフォルトの名無しさん mailto:sage [2007/02/18(日) 00:35:09 ]
>>19
> 少なくとも毎回selectするくらいなら非ブロックモードにするべきのようですね。

なことはない


23 名前:デフォルトの名無しさん mailto:sage [2007/02/18(日) 15:55:13 ]
何でRFCはあんなに読みにくいのかと。

24 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 08:43:58 ]
読みやすいよ。規格書としては抜群に。
ITU, IEEE, ISOに比べればね。

25 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 11:37:13 ]
Can't Conceive Intelligent Thoughts Today

26 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 03:40:15 ]
Content-Dispositionでさあ、IEってfilename="c:\abc\def.txt"
みたいに送ってくるけど、\はquoted-pairになるから、これって違法な
気がするんだが・・

27 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 11:07:40 ]
プログラムとちょっと外れるけど
環境はWindowsXPです
名前解決を変更するのにHostsをいじればいいわけですが
ドメインではなくて実際のIPにフィルターかけることって出来ますかね?
192.168.1.90 -> 192.168.1.100
90へのリクエストはすべて100へ行くようにしたいわけです
ソケットフックするしかない?



28 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 22:38:18 ]
static arpを登録すればいける気がする。
(IP->IPのマッピングじゃないけど。)

29 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 22:39:49 ]
書き込んでから気づいた。受け取り側がよっぽどアホでない限り、
自分のIP宛でないパケットが来たところで無視されるのがオチだな。

30 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 23:16:24 ]
・/28あたりでネットマスク切って、あとは自力構成したルータの
パケットフィルタで書き換える

・振り替えを実行したいマシン毎で、192.168.1.90に対して、192.168.1.100のMACを
static ARPとして設定する。そのうえ、192.168.1.100のマシンで、ループバック
インターフェースに、192.168.1.90/32を割り当てる。100のマシンのホストモデルが
「強力」なら「弱い」にしておく。

くらいしか思い浮かばないな。

31 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 23:18:53 ]
というか、それがいわゆるNAT。

32 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 23:24:44 ]
宛先を書き換えるわけだから、逆NATでないの。まーどーでもいいけど。

33 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 16:18:26 ]
ちなみに100のほうは変動するので
90内でだけで解決しないといけない

34 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 18:19:00 ]
>>32
裏と表がひっくり返った50円玉やるよw

35 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 19:55:51 ]
ジャイアン乙

36 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 23:55:52 ]
>>27
リクエスト元が192.168.1.90、100と違うサブネットなら、境界のルータで
NATかければいい。
同じサブネットなら、無理やりな方法になるけど>>30 かな?

>>32
(NAPTじゃない)NAT、それも固定NATなら、対称なんだから逆も何もない。

37 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 11:48:19 ]
100のほうは正確にはグローバルIPになる
ローカルから接続する対象をリアルタイムで変更したいわけ
ソフトによってはIP固定で通信してるからそれに対応したいということ
NATってあて先変更できたっけ?
90のほうにNATソフトいれたら出来るんだっけ?
そういう機能があるソフト知ってたら教えて下さい



38 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 14:37:41 ]
とりあえず、>>6にある
UDP Hole Punching
 homepage3.nifty.com/toremoro/p2p/firewall.html
の中のNATの説明読んでから出直してくれ。
そしてプログラミングに関連づけて質問し直してくれ。

39 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 17:08:33 ]
技術的に出来ることは十分わかってるんですが
ソケットをフックするよりドライバ書いてるほうがはるかに手間がかかるので
NATの原理で出来るというアドバイスは愚の骨頂です
最初に書いた通り、こちらの最も望むものはフックするより手間の掛からない方法です

40 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 17:53:01 ]
>>39=>>27なの?
馬鹿だなあ。
知識足りないんだから、大人しく教えを乞えばいいのに…


41 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 21:00:56 ]
なんだなんだ、ネトゲの改造か何かか?

42 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 21:02:01 ]
チートツールじゃないですよ。健全な目的です。

43 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 19:17:26 ]
rtspとかmmsのパケットをキャプチャするプログラム作りに挑戦始めました。

ttp://www.jptm.net/memo/index.php?cmd=read&page=WinPcap%A4%F2%BB%C8%A4%C3%A4%BF%A5%D7%A5%ED%A5%B0%A5%E9%A5%DF%A5%F3%A5%B0&word=winpcap

とりあえずこのページのサンプルを実行してみましたが、
いまいちよくわからず・・・

このサンプルではrtspとかmmsとかをキャプチャできるのでしょうか?

というか全然知識が足りないので
読んだ方がよいページとかありましたら
紹介お願い致しますm(_ _)m

44 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 22:16:38 ]
RFC 2326(rtsp)
www.ietf.org/rfc/rfc2326.txt

mms、mmshはmplayer、xineとかのコードとかでしょうか。


45 名前:43 mailto:sage [2007/02/27(火) 07:27:19 ]
ありがとうございます。

というかまだ全然プロトコル解析の段階にいってません・・・orz

メディアプレイヤーで以下のアドレスを再生させると
mms://wms.g2.cdn.bcast.co.jp/yahoo/ystream/kad/10193/kad1019300001100000b929.asf?session_id=b4d2575ccae7b6b454cece0e68ea0860&product_id=
取得パケットの中には
202.93.94.14
という外部アドレスだけが見つかりました。

ttp://www.cman.jp/network/support/ip.html
で調べたところ、
wms.g2.cdn.bcast.co.jp
というのは
202.93.94.16
というアドレスであると出たのですが

逆に
202.93.94.16
を調べたら
wms06.g2.bbt.bcast.co.jp
と出ていました。

46 名前:43 mailto:sage [2007/02/27(火) 07:28:53 ]
202.93.94.14
を調べたら
wms04.g2.bbt.bcast.co.jp
と出ていました。

でももう一度改めてパケット取得してみたら

202.93.94.15
というアドレスだけが見つかりました。

wms.g2.cdn.bcast.co.jpというドメイン名からは
正確なIPアドレスはわからないものなのでしょうか?

47 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 07:40:33 ]
% dnsip wms.g2.cdn.bcast.co.jp
202.93.94.16 202.93.94.15 202.93.94.18 202.93.94.17

「正確なIPアドレス」の定義がよくわからんが、1つのDNS名が
複数のIPアドレスを持つのは、負荷分散的によくあること。



48 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 06:05:23 ]
>>46
DNSラウンドロビンだのぉ。

49 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 07:12:46 ]
マルチスレッドのスレからきました。
winsockのプログラミング勉強してます。

recv関数でよくselect使用して、タイムアウト処理すると思います。
同じようにして、accept関数のタイムアウト処理をしたいと思ってますが、
accept関数呼ぶ前に、select関数使えないんでしょうか。

FD_ZERO(&readfds);
FD_SET(soc,&readfds);
select(width,&readfds,NULL,NULL,&timeout)

socは、きちんと渡せていたんですが、接続試しても
select抜けられずに、全部タイムアウトになります。
accept呼んでからじゃないと、ソケットの読み取り可能か
わからないのでしょうか。

やりたいこと伝わりませんでしたら、
補足させていただきます。

50 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 07:49:08 ]
selectの最初の引数が気になるけど、それでOK.

51 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 09:32:35 ]
>>50
WSAStartup->socket作成->bind->listen->accept->select呼んでrecv
よくあるrecvのタイムアウトは、こんな順番だと思います。

accept関数もずっと待ち状態になるので、recvのときと同じように
タイムアウトの機能を、追加できないかと考えてます。
WSAStartup->socket作成->bind->listen->select呼んでaccept->recv
なぜか、クライアントから接続してもselectから、抜けられないんです。
タイムアウトだけでしか抜けられません。

・acceptした後でないと、ソケットの読み取り可能かわからず
select関数使え無い。ということがあるのかと思いましたが
気のせいでしょうか。

>selectの最初の引数が気になるけど、それでOK.
selectにも、きちんと引数渡せてるようなので、
どこがおかしいのかわからないです。

もうちょっと、ポイントしぼれるようにがんばってみます。
レスありがとうございました。

52 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 10:04:44 ]
51です。
あれれ、ソースコード特にどこも変えた覚えないのですが、
listenのときのソケットディスクリプタと
acceptの返すディスクリプタの値比べて、
同じ値が表示されてるの確認作業したりしていたら、
いつのまにかタイムアウトの処理できていました。

んー、ほんとにどこも変えた覚えは無いのですが・・・
原因説明できなくて、すみません。
acceptもrecvとほぼ同じコードで、タイムアウト処理できました。
どうもお騒がせいたしました。
ありがとうございました。

53 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 10:19:20 ]
acceptのタイムアウトが出来ると、
アプリの終了処理の時に使えますね。

54 名前:デフォルトの名無しさん mailto:sage [2007/03/02(金) 11:58:52 ]
poll( )なプログラムを、pollを持ってないWIN32環境にselect( )で移植しています。
selectを使ったpollの実装ってどこかに転がってたりしませんでしょうか?
ぐぐったのですがいいのがなくて。
既出だったらスマソ

55 名前:デフォルトの名無しさん mailto:sage [2007/03/02(金) 13:25:26 ]
pollって1024以上オッケーだっけ?

56 名前:デフォルトの名無しさん mailto:sage [2007/03/02(金) 16:07:36 ]
>>54
WSAEventSelectで登録して、WaitForMultipleObjectsがWinSockの作法。
WaitForMultipleObjectsの上限に引っかかるぐらいのスケールなら、IoCompletionPort。

57 名前:デフォルトの名無しさん mailto:sage [2007/03/02(金) 16:38:26 ]
>>54
手抜き移植でソースをなるべく変えずにpoll()を使いたいってこと?
cygwinは、WaitForMultipleObjects()を用いてselect(), poll()を
エミュレートしてるはずなので、cygwinのソースを読むと良い。
つか、移植の手間を一切掛けたくないのなら、ぶっちゃけcygwinで
コンパイルすればいいだけなのだが。cygwin1.dllには依存するけどな。

一から自分で書くなら、>>56の言うようにIOCPがWindowsではもっとも
効率がよく、しかも色々応用が利いて便利だ。NT系のOSでしか使えないが。



58 名前:デフォルトの名無しさん mailto:sage [2007/03/04(日) 03:37:06 ]
書籍スレで聞くべきかも知れませんが、
中級ネットワークプログラミングみたいな本で
お勧めの本はありませんか?
英語でも構いません。

amazon.co.jpや、お勧め書籍スレ/ページは色々見てみましたが
基礎的なソケットの使い方などの本が多いようです。
それなりに実用的なネットワークソフトの解説のようなものがあれば幸いです。
ソース嫁ってことになるのかも知れませんが、よろしくお願いします。

59 名前:デフォルトの名無しさん [2007/03/04(日) 18:32:12 ]
板違いなのですが、おそらくこちらのスレの方のほうが詳しいと思いますので、
質問させてください。

環境:Windows2000/XP

会社で営業部ドメイン(EIGYO)と、技術部(GIJYUTU)があります。
自分のPCは、GIJYUTUに属してます。
UNC(\\EIGYOU\フォルダ名の形式)を使って、営業部ドメインの
共有フォルダにアクセスする事は出来るのですが、
「マイネットワーク」を開いて、営業部ドメイン(EIGYO)にアクセスする事が
出来ません。営業部ドメイン(EIGYO)自体表示されない。
「マイネットワーク」に、自分が所属していないドメインを表示させる方法って
ありますでしょうか。



60 名前: ◆Z4QrFDzwrY mailto:sage [2007/03/04(日) 20:53:07 ]
>58
プロトコルをヘッダ込みで実装してみるとか
メーラーを作ってみるとかするのがいいと思う
プロトコルのコマンドやフォーマットはネットで探せるし
Etherealを使えばアプリがやり取りしているパケットも見れる
ドライバ、apacheなどのモジュールを作るのもいい
中級を目指すならこれから作るものを定めておいたほうがよいのでは
などといってみる
レベルが上がるにつれて道程は細分化していくから

61 名前:デフォルトの名無しさん mailto:sage [2007/03/05(月) 22:26:31 ]
\\EIGYOU

62 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 12:21:29 ]
54です。
>>56 >>57 dクス
手抜き移植と言うか、今後のメンテを考えて、
unix/linux版とwin版でできるだけ統一ソースにしておきたいんですよねぇ...

socketのラッパーみたいなのがあるといいなぁとオモタのですが、
自分で書くことにしますです。

63 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 12:28:21 ]
$(GLIBC)/sysdeps/unix/bsd/poll.c じゃダメかい? > selectのpollラッパ

64 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 15:00:24 ]
>>63
$(GLIBC)/sysdeps/unix/bsd/poll.c 使えそうですね。どもです。

65 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 16:38:00 ]
>>57
cygwin.com/snapshots/cygwin-src-20070301.tar/cygwin-snapshot-20070301-1/winsup/cygwin/poll.cc
にそのものずばりのselectをつかったpollの実装がありますた(・∀・)
cygwin_selectを使っているのでこの部分をwin32sdkの_selectに移植する必要がありますがだいぶ参考になりそうです。


66 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 20:13:17 ]
>>65
for (i = 0; i < nfds; ++i) {
fds[i].revents = 0;
if (!cygheap->fdtab.not_open (fds[i].fd)) {

sysdeps/unix/bsd/poll.c ってこんな実装になってるんですね... 総当り(笑)

やはり発想変えてpollになっているところをselectに直すほうがいいのかなぁ。
教えてエロイ人

67 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 20:15:50 ]
根本的にlibevent使って書くとか、
どこでも使えるselectにするとか
するしかないんじゃないの。



68 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 11:11:56 ]
BASIC認証について質問です。

サーバのあるディレクトリにアクセスすると、はじめの1回目の認証で
ダイアログボックスが表示されますが、2回目以降はそのディレクトリ以下に
アクセスしても表示されなくなります。
この機能は、サーバとクライアントどちらの機能で実現されているのでしょうか。

Basic認証では、ログインではなくて、毎回ID、PASSを送信しているということなので
「サーバの方では特に何もせずに、クライアントの方でアクセスしたURLのアドレスを記録しておいて、
2年目以降は、その下のディレクトリにアクセスするときは、初めからリクエストのヘッダに
”Authorization: Basic hogehogehoge”を付けるようにしている。」というふうに考えたんですけど、
どうなのでしょうか。

よろしくお願いします。

69 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 11:39:03 ]
>>68
パケットモニタで調べてみますた。
クライアント側で毎回送ってますね。
Authorization: Basic hogehogehoge
をつけないでGET/POSTすると、応答に
HTTP/1.1 401 Authorization Required
WWW-Authenticate: Basic realm="Login"
みたいなのが帰ってきます。

70 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 12:03:29 ]
>>69
調べていただいてありがとうございます。

BASIC認証で一回アクセスしたら、何らかの仕組みで、
ブラウザの方でそのアクセスしたURL(ディレクトリ)を覚えておいて、
2回目以降そのディレクトリ以下にアクセスするときは、自動的に
ヘッダーにAuthorization: Basic hogehogehoge を付けてるんですね。
ふむふむ。それで、2回目以降はダイアログが出てこなくなると。

BASIC認証できるhttpサーバもどきを、勉強の課題で作ってますが、
サーバ側でなにか大掛かりな仕組みでもあるのかと、心配になりまして。

パケットモニタというのも、知らなかったので勉強になりました。
どうもありがとうございました。

71 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 13:28:19 ]
>>70
そういう調査技能もあると便利だが
HTTPに関してはRFC2616とかに全部定義されている

72 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 17:16:40 ]
winsockの勉強中に疑問に思ったことの質問です。

sockB = accept(sockA, &addr, &size)のような形で子スレッドで
動かしていて、acceptでブロックされてます。アプリケーション終了時に
親スレッドでclosesocket(sockA)という風に処理していいのでしょうか?

73 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 17:30:20 ]
>>72
「処理していいのでしょうか?」の意味が、

処理して正しく動作するのでしょうか?
→知らん。試せばわかる。>>72が期待している動作(acceptを抜けるか/抜けないか、
 抜けるときのsockBの値、GetLastErrorの値、etc) を知りようがないのに
 正しい動作も何もない。

一般的にそのような処理をするものなのでしょうか?
→マルチスレッドを真面目に考えたプログラムなら、イベント使って、
 非同期Acceptをするので、このような状況に陥らない。


74 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 10:21:30 ]
>>73
回答ありがとうございます。

もっとマルチスレッドやイベントについても勉強しないといけないようでした。

75 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 18:56:05 ]
レジュームダウンロードについて教えてください。
サーバ側:ダウンロードしたファイル
クライアント:ダウンロードの途中のファイル
こういう状況だったとします。

1.接続しクライアントに途中のファイルがあるかどうかを確認。
2.クライアント:ファイルを読み込んでハッシュ値を出し、「ファイルの名前:読み込んだ文字列の長さ:ハッシュ値」を送信
3.サーバ:「ファイルの名前:読み込んだ文字列の長さ:ハッシュ値」を受信します。
4.サーバ:読み込んだ文字列の長さ分(Nとします)、ファイルから文字列を読み込んでハッシュ値を出し、クライアントからのハッシュ値を比較
5.ハッシュ値が一致した場合は、seek関数でファイルのポイントをN個移動して、そこから読み込んで順番にデータを送信

こういう感じでしょうか?
修正、追加する場所、その他気をつけることなどありましたら
アドバイスよろしくお願いします。

76 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 22:26:23 ]
なんでハッシュが出てくるのか分からん

77 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 22:57:35 ]
Range:bytes=100-



78 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 00:05:40 ]
REST 100

79 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 03:24:23 ]
FTPの場合REST 100で100バイト目から取れる根拠は実はRFC959にはないけどな。
もっと新しいRFCがあるのか?

80 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 07:57:54 ]
>>76
同じファイルか、確認のため比較する容量が大きいと転送が大変だと思いまして。

>>76
>Range:bytes=100-
httpのヘッダー情報に、こういうのがあったとは。
でもブラウザは、途中からのものをダウンロードできても、
上書きだけみたいですね。

>>78
ttp://www2s.biglobe.ne.jp/~hig/tcpip/HostReq_Appl.html#HREQAPP_4_1_3_4
サーバ FTP は、データストリーム中の都合の良い箇所に再開マーカ <ssss> を付ける
buf="hogehoge";を送信するとき、
"<ssss>hogehoge"を送信して、
・サーバ側では、send()するとき、<ssss>をbufのどこか適当な位置に挿入して送信
・クライアント側では、recv()するたびに、制御ファイルの(ssss,rrrr) を更新。
・再開するときは、<ssss>を送信。

とリンク先見てこいうことかと想像してたんですが、実際の実装で
送られてくるクライアントに、送信される文字列bufって、どんな形なんでしょうか。
RFCでどこに書いてあるのか探してるんですが、よくわかりません。

81 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 09:01:48 ]
80です。
通信の中身は、パケットモニタで見るという方法がありました。

82 名前:デフォルトの名無しさん [2007/03/10(土) 09:15:33 ]
>>80
> とリンク先見てこいうことかと想像してたんですが、実際の実装で
> 送られてくるクライアントに、送信される文字列bufって、どんな形なんでしょうか。
> RFCでどこに書いてあるのか探してるんですが、よくわかりません。

とにかくRFCを読んで。
解説ページに惑わされないで。

83 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 11:18:57 ]
>79
まだdraftだけど。
www.ietf.org/internet-drafts/draft-ietf-ftpext-mlst-16.txt

84 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 12:00:50 ]
>>83
おお。5.1でSTREAMモードでの再開が規定されとる
> Expiration Date: March 2003
が気になるけど

85 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 17:59:47 ]
>>75
なにげに、この方法よいのかも?

86 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 18:03:11 ]
負荷おおすぎねえ?

87 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 18:51:57 ]
>>86
確かに大きそう。まあSSL通信に比べれば
そんなでも、ないかもしれないけど。



88 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 21:53:00 ]
アホか
手順4見てみろ

89 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 23:56:01 ]
DDoSされたら終わりだな

90 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 00:05:22 ]
ハッシュ値持たせるならサーバ側はブロック単位で最初から持っとけよ
クライアント側で計算させて一致しないのだけやり直しが普通の発想だろ

91 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 03:00:14 ]
>>88
w

>>89-90
同意

92 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 05:51:09 ]
同じファイルかどうかなんてクライアントがETagでも覚えとけよそんくらい。

93 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 11:28:22 ]
ブロック毎に32bitCRC値を持たせるとしたら、
ブロックの長さはどれぐらいが適当でしょうか。
仮に64kByte毎だと1MB辺り64Byteで済みますが、
これは冗長でしょうか。

94 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 12:06:46 ]
残りの長さの全部のハッシュを求めないで、
サーバとクライアントでそれぞれ2,3箇所ピックアップして、
ハッシュ求めれば十分じゃん。
あとダウンロードは、なんも処理しないでいいんだし。

ただ、これをいうと、ハッシュじゃなくてもいいんだよな。w
どれだけ'同じファイルであるかの確かさ'を求めるかだ。
毎回なんか処理しながらダウンロードって、しないに越したことは無いでしょ。
突っ込みの嵐の予感。

95 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 13:37:08 ]
>>94
> ただ、これをいうと、ハッシュじゃなくてもいいんだよな。w

>>76

96 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 00:53:50 ]
>>93
ブロック長が長くなるほど衝突が増える。
ブロック長が長くなるほど再送に無駄が増える。

後は自分で考えて。

>>94
普通、まずサイズや最終更新時間を調べるでしょ。
そんなわけでFTPだってSIZEとMDTMコマンドがある。


97 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 01:05:38 ]
まあそれも>>83だけど



98 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 00:11:12 ]
udpでメッセージを交換する簡単なプログラムを作っているのですが、
可変長文字列で詰まってしまいました。

struct message{
int size;
char buf[1];
}

struct message *p;

p = (struct message *)malloc( sizeof(struct message) + strlen(input) );

送信したい文字列をinputに格納して、その長さに合わせてこのmessage構造体をmallocしているのですが、
受信側ではなぜか文字列が途中で途切れてしまいます。
可変長を実装するにはこのやり方は間違っているのでしょうか?

99 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 00:31:48 ]
MTUよりでかくなってないか?

100 名前:98 mailto:sage [2007/03/13(火) 01:03:07 ]
MTUが1500で、送信サイズが20byte程度でしたので、MTUを越えてはいないと思います。
今色々デバッグしてみたところ、sendtoで送信できているサイズが、sizeof(struct message)と同じ値でした。きちんとmallocはしているはずなのですが…

101 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 01:41:23 ]
送信側のsendのところと受信側のrecvのところのコードを晒せ

102 名前:98 mailto:sage [2007/03/13(火) 02:16:30 ]
sendとrecvのサイズを設定する引数が間違っていました。

send:
sendto( s,p,sizeof(struct message) + strlen(input),0,(struct sockaddr *)pfrom,fromlen );

recv:
recvfrom(s,p,sizeof(p)+20,0,(struct sockaddr *)pfrom,fromlen);

といった感じに改造したところ、短いメッセージならきちんと受信できるようになりました。ただ20という数字が適当なので、この部分をきちんとinputの長さに合わせたいです。

103 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 09:24:59 ]
sizeof(p)がstruct message *pなんだろうなぁ
C言語のテキスト見直ししる。

104 名前:98 mailto:sage [2007/03/13(火) 11:23:32 ]
受信側をsizeof(struct message *p)としましたが、やはり適当な値を受信サイズに加算しないと駄目なようなので、この方法でやろうと思います。
ありがとうございました。

105 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 12:46:23 ]
>>103
> sizeof(p)がstruct message *pなんだろうなぁ

これは>>98のミス原因をつぶやいただけだろ。
Cの勉強し直してくれ。Cが分からないから>>103を誤読する。

106 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 12:49:16 ]
それからC99から、
struct message{
int size;
char buf[0];
}
と定義できるぞ。
これで出来ることは増えないが、サイズ計算が単純になる。
seclan.dll.jp/c99d/c99d04.htm#dt19990726

107 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 14:00:49 ]
>>103
recvfrom(s,p,sizeof(p)+20,0,(struct sockaddr *)pfrom,fromlen);
で、pの宣言がstruct message *pなら
sizeof(p)+20=24ぐらいになるってことでしょ?
paddingとか32bit環境とかは置いといてね。



108 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 20:20:03 ]
> これで出来ることは増えないが、
C99以前は配列の最終要素を踏み越えるのは厳密には未定義じゃなかったっけ

109 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 20:57:03 ]
UDPはパケット境界保持されるんだから小細工しなくていいんでない?


110 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 21:00:07 ]
UPNPのnat traversalで空けたポートに
"本当に"外部ネットワークからアクセスできるか確かめる方法って
外部にそれようのサービス立てておいてそれを叩くしかないよね?

111 名前:デフォルトの名無しさん [2007/03/13(火) 21:03:34 ]
>>110
携帯電話からアクセスしたら?

112 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 21:05:53 ]
すまん言い方が悪かったかな
ポートを空けたプロセス自身から確かめる方法

113 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 19:50:51 ]
ちょっと基本的な事ですいません。
[サーバ(accept側)]−[クライアント(connect側)]
こんな感じで繋がっている時、
1秒間にサーバからsendできるデータの限界量=上り帯域
1秒間にクライアントからsendできるデータの限界量=下り帯域
という概念で合ってるでしょうか。

114 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 23:51:36 ]
sendがsocket apiのsendのことをさしているなら違う。
sendはtcpの送信バッファにコピーするだけ。

115 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 02:01:58 ]
udpだったらクライアントからはsendできたように見えても
どんどん捨ててるだけということもあり得るし

116 名前:113 mailto:sage [2007/03/15(木) 20:53:07 ]
では、
1秒間にサーバ/クライアントから送信できるデータの限界量=上り/下り帯域(/sec) 
という事でしょうか?

117 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 21:07:50 ]
ごはんつぶは糊として使えるが
糊=ごはんつぶというわけではない



118 名前:58 mailto:sage [2007/03/16(金) 00:04:01 ]
>>60
さんざん遅れて申し訳ありませんが、ありがとうございます。
しばらく仕事に忙殺されていて死にかけていました。

119 名前:113 mailto:sage [2007/03/17(土) 02:47:41 ]
なんとなく自己解決しました。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](*・∀・)<78KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef