1 :
Unknown :
02/12/18 23:05
2 :
Unknown :02/12/18 23:09
2ちゃんねるに書き込むで、サーバーに送る内容はこれでよろしいでしょうか?
HTTPでサーバーに接続します。
POST
http://game2.2ch.net/test/bbs.cgi HTTP/1.1
Host: game2.2ch.net
Content-Type: application/x-www-form-urlencoded
Content-Length: %
Accept: text/*
"Cookie: submit=%s&bbs=%s&key=%s&time=%lu&MESSAGE=%s&FROM=%s&mail=%s",UrlEncode("書き込む"),"ghard","1037285423",ltime,UrlEncode("kakikomi"),UrlEncode("aaa"),UrlEncode("aaa")
IEとかの送信内容をtcpdumpすればいいのに。
あきまへん。
>>4 してますよ。
INETSPYで。
でも、サーバーに転送しても、返信がこないんですよ・・・。
サーバーには接続できていますし、送信もできていますが。
もちろん、私の送っているヘッダー&クッキーに問題があるのはわかってますが・・・。
詳しい方いませんか?
>>5 失礼な・・・。
ネットワークの勉強に2ちゃんねるビューワーが良いと思っているだけです。
あと、パケットキャプチャーの内容で出たままを送っても駄目ですよね。
POST
http://game2.2ch.net/test/bbs.cgi HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Referer:
http://game2.2ch.net/ghard/index.html Accept-Language: ja
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Q312461)
Host: game2.2ch.net
Content-Length: 376
Proxy-Connection: Keep-Alive
Pragma: no-cache
2ちゃん以外のサイトで試してみた?
>ネットワークの勉強に2ちゃんねるビューワーが良いと思っているだけです。 たしかに、2chの、とくに書き込みは規制がひどすぎて、ある意味勉強にナルナ。 まあ、勉強とかいいつつ、RFCも見ない香具師の云うことなど信用しないが。
>>10 そのMONAZILLAには、HTTP転送に関する記述は無いですから。
まぁ、必死に勉強中です。
RFC1035によるとドメイン名のラベルは数字で始まっては いけないようですが、実際には 2ch.net のように数字で 始まるドメイン名も登録されています。 どこかでRFCが改訂されたのでしょうか?
> > 主にソケットに関しての質疑応答スレです。 > > って、書いてあるんだけど、見えない ? にしては、スレタイがそぐわないと思う。
16 :
デフォルトの名無しさん :02/12/19 13:17
perlでメール送信するプログラムを書いています。
Net::SMTPを使用して、
$smtp = Net::SMTP->new('127.0.0.1');
$smtp->mail("info\@test.com");
$smtp->to("$To");
$smtp->data();
$smtp->datasend("Content-Transfer-Encoding: 7bit\n");
$smtp->datasend("Content-Type: text/plain; charset=\"iso-2022-jp\"\n");
$smtp->datasend("From:\"$Name\"\n");
$smtp->datasend("To:$To\n");
$smtp->datasend("Subject:$Sub\n");
$smtp->datasend("\n");
$smtp->datasend("$Value\n");
$smtp->dataend();
$smtp->quit;
このようにしているのですが、$Nameに"東西新聞"などと入れておくと、
メーラーのほうには
From: "東西新聞"@mail1.test.com
という風に差出人の名前の下にメールサーバのアドレスがついてしまいます。
これを消すにはどうしたらよいのでしょうか?
またReturn-Pathを変更したいと思い
$smtp->mail("info\@test.com");の
[email protected] の部分をいろいろ変えてみるのですが、
送れるときと送れない時があります。
これはどういった現象だと思われますでしょうか?
できたらここに自由にメールアドレスを設定できるようにしたいのです。
>>16 From 偽装した SPAM でも送りたいのですか?
▄██ ▀▄ █▄ ▀█▄ ▄▄▄████▀ █ ▄ ▄███▄ █▄ ▀▄ █▀ █ ▄▄ █▄██ █▀ ▀█ ▄ █ ▄████▄▄ █▄▄████▀ █▀█▀ █ ██▄██▀▀ ▀██ █▀▀ ▀▄ ▄██ █ ▀▀ █ █▀ █ █▄ █ ██ ▄████ ▀█ ▀██▀ █▄▄█▀ █▄██ █ █ █ ██▄ █▄ ███▀ ██▀ █ ▀███▀ ▀▄ ██
ウシですか?
>>20 おお、比較的最近公開されたんだね。
読んだことなかったよ。ありがとう。
23 :
デフォルトの名無しさん :02/12/19 20:56
>16 そういうことです。 Fromを偽造して メールは一括してこちらから代行送信しますが、 返信は各メールアドレスに返せるようにしたいのです
>>23 返信先を変えたいだけなら、Fromを偽造せんでもReply-Toでいいんじゃないの?
25 :
デフォルトの名無しさん :02/12/20 09:31
現在、勉強のためにLANを組んで通信ソフトを作っています。
Linuxにサーバーソフトを置いて、Winでクライアントを動かしていますが、
ときおり、サーバーマシン(Linux)でハードディスクへのアクセスが発生して、
数秒間通信がストップしてしまいます。(頻度は1〜2分に一回くらい)
これは原因は何が考えられるでしょうか?
サーバープログラムとクライアントプログラムを両方Winで動かして、
ローカルで通信をした場合は、この現象が起こらないので、プログラムの
バグではないと思います。
それとLinux板で下のページを教えてもらって、書いてある通りに設定を
したのですが、直りませんでした。
http://www.zdnet.co.jp/help/tips/linux/l0366.html
26 :
名無しさん@XEmacs :02/12/20 12:17
>>25 余分なdaemonやprogramは終了して試してみれ。singleで立ち上げたりさ。
正直、板違いだと思うので、続きはLinux版で。
# しかし1〜2分に一度数秒間とはひどいの〜。
>>26 アドバイスありがとうございます。
そうしてみます。
サーバーにpingを打ったり、送られてきたデータを返すだけの軽いサーバー
プログラムを作ったりしたときは、こういう現象は起こらないので、
最初はプログラムのせいかと思ったのですが、Winで動かすと、そういう
現象は起こらないし、なんだかよく分からない状況です。
28 :
デフォルトの名無しさん :02/12/20 13:11
自PCのIP取得って レジストリから取得するって マジなんですか?
30 :
デフォルトの名無しさん :02/12/20 14:05
○.plという実行ファイルを./○.plと実行するときに文字列をその実行ファイルに渡したいのですが、./○.pl"スペース"文字列で出来ると思ったんですがどのようにやるのが良いのでしょうか? このようにするとプログラムの中の$STDINというところにその文字列が入るんだと言われたんです、どうもうまくいってないようです。 他の人に./○ < 文字列という形が標準入力だと言われたんですが、その方法では実行するとそのようなファイルやディレクトリはありませんとエラーが出てしまいます。 どのようにやるのがよいのでしょうか? よろしくおねがいします。
付け足しなのですが、実行コマンドと一緒に打った文字列を○.plのなかでprint <SOCK> $STDINとしてサーバー側に送りたいのですが。 宜しくお願いします。
>>30 $echo '文字列' > hoge
$○.pl < hoge
ってことか?
>>32 ありがとうございます。
1かいの操作では出来ないのでしょうか?
ブラウザに表示するHTMLを書き出すPERLのプログラムから`./○.pl`として外部のプログラムを実行して、その実行するときに変数も一緒に渡したいのですが。
どのようにしたらよいのでしょうか?
35 :
デフォルトの名無しさん :02/12/20 15:14
WindowsでDNSを解決するにはどのAPIを使えばいいですか?
> 1かいの操作では出来ないのでしょうか? cat '文字列' | ○.pl > ブラウザに表示するHTMLを書... 引き数でもなんでも使えばよかろう。 だいたいここでする話じゃない。 もう来るなYO!
Win標準では、nslookup、ということになるな。 俺はdnsipとかをつかってるが。
nslookupってAPIだったのか
40 :
デフォルトの名無しさん :02/12/20 18:22
WINDOWSで、プログラムからマシンに設定されてるゲートウェイアドレスはどうやったらわかるんでし ょうか?
(´-`).。oO(PC初心者板で聞けよ
>>40 プログラム中で標準入力から読み込む処理を入れて、
管理者に毎回入力してもらう。
冬休み始ったのかな…
TransmitFileの進捗状況を、だいたいでも取る方法ってありますか?
WindowsのIPHelperAPIについての質問です。 GetIfTableとか、そういったAPIを使えば MIB-IIインターフェースの様々な情報を得ることが出来ますが、 その中で、特定のインターフェースを通じて送られた・受け取ったパケット数が わかる模様です。 この情報を他のライブラリを使用して知るにはどうすれば出来ますか?
APIスレの人? いずれにしろ、目的不明の質問だな
YAHOO!オークションについてなんですが、商品の詳細な残り時間(秒単位まで) をjavaで取得することは可能なのでしょうか?よろしければ教えてください。 よろしくお願いします。
もうヤフオクの質問はお腹いっぱい
49 :
名無しさん@Emacs :02/12/22 17:41
Perlネットワークプログラミング 発売age
50 :
名無しさん@Emacs :02/12/23 02:10
(・∀・)ジサクジエンデシタ
52 :
デフォルトの名無しさん :02/12/23 14:12
age
53 :
デフォルトの名無しさん :02/12/23 21:26
文字列がIPかどうかチェックする関数、APIなどありますか? IPとして妥当かを判定する。 ○"192.168.1.1" ×"xyz.168.1.1",".192.168.1","aiueo"...
inet_addr
>>53 "192.168.1"ってのはIPv4の正当なアドレスですが、何か?
正当かどうか知らんが ふつー妥当じゃないだろ。
>>56 私もそう思ったが、よく見ると、妥当でない例のほうには
最初にピリオドが入っているぞ。
59 :
デフォルトの名無しさん :02/12/24 09:25
WinSock1.1でBSDなソケットライブラリを使う場合、 Windows98とXP/2kで挙動が変わったりしますか? Win98ではなぜかselect内部で例外が発生してしまいます。
winsock1にselectあったっけ? win98はwinsock2対応している筈。 できる限りwinsock2を使ったほうがいいと思う。
>>60 BSD互換は1.1からだったと思います。
2.2にしてみましたが状況変わらずです。
初期化時のバージョン指定も2にしたかい?
63 :
デフォルトの名無しさん :02/12/24 21:43
IriaやIrvine,regetなど便利で高速なダウンロードツールってどうやって高速化しているのでしょうか? 高速なだけでなく、失敗したら再開しますね。 高速化と冗長化(?いい言葉浮かばなかった)の方法について教えて下さい。 またそれらのアルゴリズムはダウンロードのみに有効でしょうか? アップロードにも同様でしょうか?
>>63 再開については、タイムアウトの条件を細かく設定しているだけ。
高速にダウンロードといっても、普通に作ってもいいんでないかな。
光回線でなければ差はでない気がする。
多数のコネクションを捌くサーバーはそれこそいろんな工夫があるけど。
http://www.netperf.org/にあるnetperfというネットワークベンチマークツールを 使ってるんですが、実行後に表示されるのUDPの送信パケット数が、実行前後で
ifconfigを使って差分をとった値とあきらかに違うんだけど、原因は何が
考えられるでしょうか。
ソースを見たんだけど送信パケット数messages_sentが送信処理のとこで
使われてて、以下の様にあるんだけど、Netperfに問題があるようには
思えなかった。カーネルで落としてるの?それとも別の理由?
while (!times_up) {
略
if ((len=send(data_socket,
send_ring->buffer_ptr,
send_size,
0)) != send_size) {
if ((len >= 0) || (errno == EINTR))
break;
if (errno == ENOBUFS) {
failed_sends++;
continue;
}
perror("dg_send: data send error");
exit(1);
}
messages_sent++;
略
send_ring = send_ring->next;
}
長くてスマソ
一応補足。 netperfは2台のホストで動作させるもので、受信側マシンで受信用サーバを 立ち上げといて、送信側でコマンドラインから実行するものなのね。 で、UDPの場合だとNetperfの実行結果には、送信側の送信数と受信側の受信数が 両方表示されるんだけど、その受信側の受信数は、 送信側マシン上で実行前後のifconfigでのTX Packetsの差分をとった値と 一致してまふ。
もしそのOSがLinuxだったら、Linuxカーネルがウンコだからというのが答。 BSDのドライバで言うところのOACTIVEに相当する処理が(まだ)ないのよねえ。
SMB氏はもう来ないの?
SMB=沢村
>>67 Thanks!
そのとおりOSはLinuxでし。書く情報少なすぎ<自分
ちなみに2台のPCの接続形態はFastEther対応のスイッチングHUBで、
パケットサイズは64です。
OACTIVEって何?って思ってググってみたら
http://mail-index.netbsd.org/current-users/1995/01/18/0010.html とか見ると、カードのバッファが溢れたらOACTIVEってのをsend()の
返り値として返すってこと?
つことはLinuxカーネルでぼろぼろ落としててそれがどこにも
値として残らないってこと?それはあんまり鴨。
ちなみに65のソースのfailed_sendsは実行後0で、
ifconfigのエラー関係の統計は送信側も受信側も全部0でつ。
(errors:0 dropped:0 overruns:0 carrier:0)
> カードのバッファが溢れたらOACTIVEってのをsend()の返り値として返すっ > てこと? なかなか鋭いな。実際には、OACTIVE っていうのはインターフェースの状態に 過ぎず、パケット送信処理が動作中だからさらに送信処理を駆動する必要がな いってことを上位層に伝えているだけなんだけどね。 OACTIVE だからといって send() はすぐにエラーを返すわけじゃなくて、 setsockopt() の SO_SNDBUF で指定した送信量まではカーネルでバッファリン グしてくれるから send() は成功するんだ。もし、それ以上送信しようとした 場合は、ノンブロッキング・モードなら send() は EAGAIN (EWOULDBLOCK) を 返す。あるいはブロッキング・モードなら、送信処理が進むまで、send() の 中でスリープするから、送信は(おそらく)成功する。 だから、Linux に OACTIVEに相当する処理がないっていう前の書き込みは、語 弊があったかな。正確には、UDP の場合、SO_SNDBUF によるカーネル内での流 量制御が行なわれず、溢れた分を捨てて知らんぷりするって言った方がよかっ たな。 > つことはLinuxカーネルでぼろぼろ落としててそれがどこにも > 値として残らないってこと? 少なくともアプリケーションの側からは、送信されずにカーネル内部で捨てら れてしまっいることはさっぱり分からない。アプリケーションで送信したパケッ ト数と、システム全体で送信した UDP パケットの総数の差をとれば、だいた いどれくらい捨てられたか分からなくもないが、まあ、そんなことしてもあま り意味ないしな。
>>65 単に他のアプリケーションがUDPを送受信しただけじゃないの?
そんな簡単にパケット捨てられてたまるかよ。
>>74 UDP は捨てられても不思議じゃない。
Windows はちょっと CPU 付加が高いと平気で捨てるし。
実際に捨てられるかどうかは置いておくとしても UDPは確実に届く保証が無いことを前提にしてプログラムすべき
ドロップ率の話では?
>>65 なんか、数字が違うとか、言葉で説明されてもよくわからん。
実際の数字を見せれ。
多いのか少ないのかもよくわからんし。
79 :
デフォルトの名無しさん :02/12/26 11:47
>少なくともアプリケーションの側からは、送信されずにカーネル内部で捨てら >れてしまっいることはさっぱり分からない。 ENOBUFSでわかるんちゃうの?
UDPは黙ってdropしてもいいことになってるから ENOBUFS返すかどうかは実装依存なんでは・・・ つかENOBUFSってシステムリソースが不足したときにしか 見たことないや。freebsdだとmbufが枯渇したとか。
81 :
デフォルトの名無しさん :02/12/26 12:09
linuxだったら返すでしょ。たぶん、確認したこと無いけど。 udp.cのudp_sendmsgにそれらしい記述がある。 netperfでfailed_sendsがゼロであるにもかかわらず、数字が違うとは よくわからん話やな。 他のアプリが送受信しただけだと思いたいけど。
Linux で、100BASE-T の NIC を使って UDP で netperf 実行してみ。
送信側は 500Mbps などという (100Mbps 以上の) 値が出るから。
line speed 以上のデータなんて当然送れるわけないから、これらは
みんなカーネルの中で黙って捨てられてるってことなのねん。
Linux 以外の UNIX だと、100Mbps を越える値にはならない。黙って
勝手に捨てるなんてことはしないから当たり前だが。
>>79 ,81
こういう場合、Linux では ENOBUFS なんて返さん。もし返すなら、
65のソースでmessages_sentが加算されることなんてない筈だろ。
ちゃんとソース読め。
>>81 その udp_sendmsg の ENOBUFS 返す処理は、このケースじゃなくて、
カーネルの中でリソースが枯渇した時じゃないのか?
つーか、Linux 使ってるヤシにとって、これくらい常識だと思ってたん
だけど、そうじゃないのか? ネットワーク・ベンチマークしてみればすぐ
分かる話なんだが、おまえら性能評価ってやりませんか、そうですか。
> おまえら性能評価ってやりませんか、そうですか。 ハァ?ここは2ちゃんねるですよ? 馬鹿は休み休みにおながいします。あ、学生はもう休みですが。
84 :
デフォルトの名無しさん :02/12/27 01:23
86 :
デフォルトの名無しさん :02/12/27 01:29
>>82 もしかして、ローカルに接続してないか?w
うち、10MのNICだけど、9.4mってでたぞ。ちゃんと。2つの端末間で。
|-`).。oO(利口な学生なんて見たことないな)
>>87 人口少ないけど、居るには居るよ。
ただし、彼らはここに来ない。
>>84 65のソースを、インデントつきで再引用してあげよう。
01:while (!times_up) {
02: if ((len = send(data_socket, send_ring->buffer_ptr, send_size, 0))
03: != send_size) {
04: if ((len >= 0) || (errno == EINTR))
05: break;
06: if (errno == ENOBUFS) {
07: failed_sends++;
08: continue;
09: }
10: perror("dg_send: data send error");
11: exit(1);
12: }
13: messages_sent++;
14: 略
15: send_ring = send_ring->next;
16:}
このソースで、send()がENOBUFSエラーで終る場合に、messages_sentが
増えると主張するわけですね。
おそれいりました。とりあえず、8行めのcontinueから、どうやって
13行目に飛ぶのか説明しる。
>>86 netperfの標準スクリプトを一式走らせているので、間違ってもそれはない
(TCPでは、納得のいく値が出ている)。
90 :
デフォルトの名無しさん :02/12/27 13:05
>>89 ご苦労さんw
>send()がENOBUFSエラーで終る場合に、messages_sentが
>増えると主張するわけですね。
誰もそんなこと言ってません。
>Linux では ENOBUFS なんて返さん。
ソース見ただけで、これはわからんだろ?
冷静に考えろよw
こういう場合とか、このケースとかどういう場合、ケースなのよ?
そして、netperfの結果を教えて欲しいわ。正確な奴。
91 :
デフォルトの名無しさん :02/12/27 13:13
うわ。ごめん、160Mでたw もう、よくわからんわ
>>89-90 典型的Linux厨だなお前ら。
自分の知識が否定された程度で本気で切れるな。
お前らごときの知識・スキルが社会で役に立つことなんてねえ…
93 :
デフォルトの名無しさん :02/12/27 14:46
>>92 横からしゃしゃり出てきて、お説教ですか?
ご苦労様です。
このスレの奴ら、性格暗い・・・
97 :
デフォルトの名無しさん :02/12/27 16:41
質問です。ルータ越えのブロードキャストってどうやったら出来ますか。 255.255.255.255だとlimited broadcastで同一ネット内ですよね。 ルータにでもお願いするのでしょうか。
>>97 (゚Д゚)ハァ?
そこまで知ってて特定ネットワークのブロードキャストアドレスというのは思いつかんのか?
directed broadcastで調べてみ。
>>98 direct broadcastって
別ネットのネットワークアドレス指定 + ... + .255
でしか?
だと、ブロードキャストしてくれないみたいです。ルータの仕様かも。
フルでIP指定すると届くネットなんですけど。
> >Linux では ENOBUFS なんて返さん。 > ソース見ただけで、これはわからんだろ? ソースと、72の結果(failed_sendsが0)を見比べれば、わかります。 > そして、netperfの結果を教えて欲しいわ。正確な奴。 自分の手元で試してみることをお勧めするけど、まあいいや、 以下は netperf の udp_stream_script の結果。 ./netperf -l 60 -H 192.168.0.4 -i 10,2 -I 99,10 -t UDP_STREAM -- -m 1024 -s 32768 -S 32768 UDP UNIDIRECTIONAL SEND TEST to 192.168.0.4 : +/-5.0% @ 99% conf. Socket Message Elapsed Messages Size Size Time Okay Errors Throughput bytes bytes secs # # 10^6bits/sec 131070 1024 59.99 4088743 0 558.32 131070 59.99 683564 93.34 この結果が示してるのは、100BASE-T のネットークに対して 1 度の エラーもなく 558.32Mbps で送信が成功していることと、受信側では そのうちの 93.34Mbps 分のパケットを受けとってるってことですね。 ちなみにこれは、この2ホストのみからなるprivateなLANで実験した 結果なので、コリジョンとかそういう問題はありえません。 すなわち送信側のLinuxカーネルは、少なくとも 458.32Mbps、おそらく 464.98Mbps 分のデータを、エラーも示さず、ネットワークに送出する こともなく握り潰してるってことになりますね。 65だけじゃなくて、86=91のところでも同様な結果になったみたいね。
>>99 > 別ネットのネットワークアドレス指定 + ... + .255
> でしか?
255とはかぎらないが。
ホストアドレスがオール1。
> だと、ブロードキャストしてくれないみたいです。ルータの仕様かも。
> フルでIP指定すると届くネットなんですけど。
どっちかつーと普通蹴るだろ。smurf攻撃対策だしな。
必要ならルータの設定汁。
>どっちかつーと普通蹴るだろ。smurf攻撃対策だしな。 やっぱりそうですか。別ネットにはbroadcastしないことにします。
103 :
デフォルトの名無しさん :02/12/27 19:13
>>100 >ソースと、72の結果(failed_sendsが0)を見比べれば、わかります。
本当にfailed_sendsがゼロだったのでは?
上のスレで、数字が違うとか言ってるというだけで、異様に帯域が広いとか、
そんなこといってないし。パケット数が違うと言ってただけだし。
他のアプリがUDP使ってるかもしれないことを考慮に入れると、
断定はできませんよね。
> 本当にfailed_sendsがゼロだったのでは? カーネルがぼろぼろ落しているわけではなく、send()は全て 成功して確かに全てのパケットが送出されていたが、 netperfと関係ない別のアプリがUDPパケットを送信していた から一致しない... という推測も可能だって言ってますか? でも66を読んだ時点で、その推測は誤りだと気づく筈。 66では、ifconfig の TX Packets の差分と、netperf の受信側の値が一致していると言っていますからね。 つまり、66を読めば、 ● send()が成功を返した回数と、実際にNICから送信された パケット数(==受信側netperfが受信できたパケット数)が 一致していない ● これは別のアプリのせいではない。 別アプリによるUDPパケット送出はゼロで、TX Packets の差分 は全てnetperfの送信によるもの だというところまでは判る筈。 そしてさらに72まで読めば、 ● send()がENOBUFSのようなエラーを返しているわけでもない ● Ethernetレベルでの送信エラーも生じてない ということも確認可能。 俺には、65,66,72の結果だけで、Linuxカーネルに問題があると いう結論が導き出せると思うんだが、もし問題ないという推論が 可能ならば、どういう論理でそれが可能になるかを教えて欲しい。 > 異様に帯域が広いとか、そんなこといってないし。 82で、異常に大きなバンド幅が出るって言ってますけど... 先入観が邪魔して、66をちゃんと読めてなかったってことかな。 まあ、俺だって同じようなミスを犯すことは、ままあるかもナー。
105 :
デフォルトの名無しさん :02/12/27 22:18
>>104 66の文はよんでたが、netperfを勘違いしてた。
受信側の受信すうってのは、実験相手側の受信数だったんか。
てっきり、自分に送られてきたパケットのことだと思ってたわ。
お互いにパケット送信してはかるみたいな実験だと思ってた。
2つの端末で同じ実験してるんだから、ifconfigで差分取った値と同じだろうなぁ
と…。
いま、netperf落として確認しましたw。
わざわざ解説させてすんまそん。
FreeBSDとかだと、こんなことは起こらないのか?
放っておいても別に関係ない問題なの?
まだネットワークプログラミング始めたばかりなので、よくわからんが、
UDPでも一応、ちゃんとネットワークに送出したかしないかくらいは、教えて欲しい
んじゃないのか?やっぱり。
> FreeBSDとかだと、こんなことは起こらないのか? FreeBSD に限らず、普通のUNIXでは73にあるような仕組みでスリープ して待つので、こういう現象は起きない筈。 > 放っておいても別に関係ない問題なの? Internet で現在広く使われているプロトコルで、1対1通信をしている 限りなら、この問題の影響を受けることは、普通ないと思う。だから こういう実装のままになっているんだと思うけど、大量のUDPパケット を送信するような状況、例えばUDPを使うプロトコルの大規模なサーバー を、Linuxマシンで構成するような場合、この問題のおかげでパケット 損失率が増えて、性能上の問題が起きる可能性があると思う。 > UDPでも一応、ちゃんとネットワークに送出したかしないかくらいは、 > 教えて欲しいんじゃないのか?やっぱり。 うん。そう思うよ。
107 :
名無しさん@XEmacs :02/12/28 16:13
正直、ベンチマークか、閉じた環境(switchに2台だけで特殊なUDPアプリなど) でしか問題にならないんじゃないかね?
影響があると断言できるのは、確かにそういう場合だと思う。 でも、サーバー1対クライアント多数で通信している場合、 たまたま多数のクライアントへ短い時間に集中して返答を 返すようなことが起きると、パケット損失が大量に出る ような気がしない? 勝手に捨てたりせずにスリープするような実装なら、 そういう場合もそれほど損失は出ない筈。 再送などの機構によって、どちらの場合でも最終的に通信が できることには変わりないけど、効率はだいぶ違う可能性が あるんじゃないか。
>>107 高bitrateのストリーム配信とかやる時はまずそうだけど、あんまり
やらんかな。
>>110 レートが安定する、可能な限り帯域を稼ぎたい必要があれば、
・UDPは使わない。
・UDP使ってても帯域制御の機構を上位レイヤーに持つ。
でしょ? RTP/RTCP, TCP, RSVP, その他。
負荷の非常に高いDNSサーバーでも、ヤバいような気が。
113 :
名無しさん@XEmacs :02/12/29 13:35
ROOT-SERVERS.NETはチョト考えた。 実際どうなんだろう?
>>111 ??
TCPなんか使ってたら転送レートの予測は無茶だと思うんだが?
115 :
デフォルトの名無しさん :02/12/29 19:59
>>114 細かいことは良いじゃないか。UDPの上位レイヤでTCP使ったって良いじゃないか。
>>115 > UDPの上位レイヤでTCP使ったって良いじゃないか。
いや、流石にそれは(w
>>114 転送レートの予測をしたい時にTCPを使え、とは書いてません。
んじゃ。
117 :
デフォルトの名無しさん :02/12/29 23:02
何故なんだぁぁぁぁぁっ!!
119 :
デフォルトの名無しさん :02/12/30 15:03
Windowsでサーバプログラム作ってるんですが acceptって、どこら辺に書けば良いのですか? listenまでの手順はWN_CREATEの時に行っているのですが acceptをどこに置けば良いか悩んでます。
>>119 たいていはコンソールアプリで作ると思うんだが
121 :
デフォルトの名無しさん :02/12/30 19:50
じじいはドリフでも見てろ
コンソールで動くものを作ったのちにGUIを(必要あれば)実装する。 最近の若いもんは、みたいなこと思っちゃうな。 ドリフ知ってるアンタも。。。 アンタも好きねぇ〜(意味なし。つ、つい)
>>121 そうか。これじゃ気を障ったか。
アプリがどのタイミングで接続を受け取りたいか考えて、
メッセージループの中でも別スレッドでも、ここだと思うとこに置けや。
自分のこの場合だとメッセージループに該当するか。
>>120 やはり、GUIだとログ見たりするのが楽ですから。
>>123 コンソールで動くものを作るのは簡単だったんですけど
イベントドリブンだと、どこに置いて良いか分からないんです。
>>124 メッセージループって、WinMainの中ですか?
あそこに書くのは不味いような・・・。
やはりWM_CREATEが来た時に、accept用のスレッド作れば良いのかな。
でも、複数の接続要求が来た場合、またそこからread用の別スレッド作って
平気なんですかね。難しい。
あ、ちなみに
>>121 は私ではありませんので。
平気ですし、普通です。
つーかGUIならWSAAsyncSelect使えばメッセージでイベント 拾えるでそ? まぁ別スレッド起こすのでもいいけど。
>>125 今気づいたけど、メッセージループに書くとメッセージが飛んできたときは、
処理がそっちに流れるからacceptを実行する間隔が一定しないという問題があったね。
だからこそサーバプロセスはコンソールで、管理ツールはGUIで別プログラムとして作ったりしてたが・・・
スレッドを大量につくるのも1つの方法として普通にあります。
>>125 124の実装前提をかいてなかったね、すまん。
ソケットはノンブロック、メッセージループはPeekMessage(であってたっけ?)でメッセージ非到着の時はacceptを常に実行。
接続がきたら処理用のスレッドを走らせてそっちで処理、WinMainは直ちにacceptを続行する。
スレッドは処理が終わって切断したら終了して廃棄。
もちろん127みたいにイベントスタイルで組みたいのであれば124、このの遣り方は合わないよ。
130 :
デフォルトの名無しさん :02/12/31 12:30
Winsockのサンプルプログラムではソケットのバージョンに1.1を使っている物が 多いですが、敢えて1.1を使う理由は古いOSでも使えるようにするためですか? 2kやXPで使うことを前提のプログラムならもっと新しいバージョンを使うべき?
>>130 使うべきというかどっちでもいい。
Winsock2.0が標準で入ってる環境のみをターゲットとしているなら
Winsock2実装でいいんじゃねーの?
・・・で、君は1.1と2.0の違いは分かってるの?
シビアなサーバアプリでもなければ1.1で十分なような
133 :
デフォルトの名無しさん :03/01/01 15:52
おめーら、あけましておめでとうございます。
>>131 130ではないけれど、Winsock2.0と1.1の違いって何ですか?
>>134 まずは今自分が知っている範囲内で1.1と2.0の違いを述べよ。
136 :
デフォルトの名無しさん :03/01/03 10:24
Linux上でCでsend関数使ってUDPの通信させようとしてんだけど、 send関数を実行して処理結果が戻ってくるまでの時間って 宛先がlocalhostの場合と他ノードの場合とでは違うのかね? パケットを連続送信させようとしてるんだけどさ、 パケット間隔ってこの場合どう決まるのかなと思って。
これあってますか? Win系でたとえばTCPとUDPのソケットを両方備えたプログラムって TCPは ソケット作って→バインドして→ソケットをスレッドにして recvでまつ、セッションが完了したら終わり ほんでまた、すれっど 作る recvでまつ UDPは ソケット作って→バインドして recvfromでまつ、 プログラムが終了するまでとにかくrecvfromをまわし続ける
win系だろうとunix系だろうと基本は同じでは。 スレッド作るかどうかはデザインや制約次第だけど。
>>139 TCPだと
WSAStartup()
socket()
bind()
listen()
accept()
recv()
[ send() ]
shutdown()
closesocket()
WSACleanup()
ですね。
>>140 WINDOWSではfork()が弱いと聞きました
まだ実験してないですがマルチプロセスがWINでどうよわいのか、、
>>141 >非同期なAPI使え。
調べてみます、ソケット関数以外ですね、、、
>>142 TCPの場合listen()とaccept()が不要ということも聞きました
実際なしでも動いています。1セッションのみ
TCPで複数のセッションを管理するPGはつくったことないですが
ほんとにいらないのですか?
>TCPの場合listen()とaccept()が不要ということも聞きました UDPの間違いではないでしょうか? あるいはクライアント側とか。 ちょっと聞いたことありません。 もっともWinsockは詳しくありませんが。
>>144 訂正します
TCPの場合 → ×
TCPでもUDPでもです
WSAAsyncSelect()を使ってもlisten()とaccept()は必要だった と思います。 どんな環境で実行されているのか それとスレ違いかも知れませんが、 >Windows XP のスレッド生成は、Windows 2000 よりも改善 >されましたが、それでもLinuxの60%にすぎません。 >また、Windows XP のプロセス生成はWindows 2000 よりも >格段に遅く、Windows 2000 のプロセス生成はLinux より >も遅いものとなっています。 だそうです。
詳解TCP/IP vol2買った人いますか?
>>146 WindowsXP ProとVC++でws2_32.libを使用しています
>WSAAsyncSelect()を使っても
いまそれでつまってるんです
非ブロック関数を使用したら固まらないみたいで、、
GUI環境でサーバスタートをボタンにしたら処理が帰ってこない
のです。Borlandだとsocket()関数のパラメタが異なるので
悩んでいます。BorlandとMicrosoftのws2_32.libは仕様が異なる
のだろうか_?
UNIXはライブラリやAPIが素直らしいのではやくやってみたいです^^;
> UNIXはライブラリやAPIが素直らしい そうでもないよ...
>悩んでいます。BorlandとMicrosoftのws2_32.libは仕様が異なる 使用されている環境ではそれはないと思います。 話がよく見えないのですが、サーバプログラムなのでしょうか? ひとまずlisten()とaccept()を使ってみた方が良いとおもいます。 WSAAsyncSelectを使っている様なので socket->WSAAsyncSelect(FD_ACCEPTを忘れずに)->bind->listen で、 FD_ACCEPTのハンドラでrecv前にacceptしてみれば良いかと。
実はさ、このスレの最初の方でも出てきたnetperfを使ってたんだけど、 UDPってフロー制御していないはずなのに、netperfのUDPは localhost宛てと他ノード宛てで送信レートが違ったんだよ。 で、ソース見てみたら時間がくるまでsend繰り返しているだけ だったからsendの処理が終わるまでの時間が違う?と思ったんだけど・・・。 どないでっしゃろ?
>>136 どれぐらい違ったのですか?
興味ありますね。
ARPキャッシュのリフレッシュとかローカルノードかそうでないか 影響うけるんじゃないかな?
154 :
151=136 :03/01/04 00:49
>>153 うーん、ARPキャッシュにしちゃ、差がありすぎる気がするんだよねえ。
以下の通り。
>>152 試しに以下のコマンドでやってみますた。
netperf -H localhost -t UDP_STREAM -- -m 1460
(または他ノード)
Windows上でlocalhost宛:送 249.90Mbps、受 249.90Mbps
Linux端末宛:送 8.81Mbps、受 8.81Mbps
Linux上でlocalhost宛 :送 3611.88Mbps、受 2040.15Mbps
Windows端末宛:送 9.60Mbps、受 9.60Mbps
※1 Windows端末とLinux端末の間は10Base-Tです。たぶん。
※2 2台の端末間で伝送レートが違うのはソケットサイズに依存してる為です。
WindowsにしろLinuxにしろ、
localhost宛は何故か送信レート自体が速いです。。
なのに他ノード宛だと受信レート(=実際の伝送レート)くらいまで
送信レートが小さくなっている。
ナゼダ-?
NICから外に出ないだけだろ
>>154 localhostってlocal node上に存在する他のhostのことでは
無かったのですネ
ハズカシイィ
そもそも node ってのは...
内の内
159 :
デフォルトの名無しさん :03/01/04 13:33
2つのPC間(Linux,Win2k)でファイル転送を行うperlのプログラムを書きたいのですが、ftpやrcpを使わずに出来ないでしょうか?
tcpのストリームでデータを垂れ流せ
UDPで一方的に投げつけろ
SMTPで送りつけろ
httpで(ry
>>163 ネットワークプログラミングが始めてなのですが、ファイル転送
の際にHTTPを利用してメタデータ(ユーザー名、プロジェクト名
、ファイル名、更新状況など)
のやりとりも行なうことは出来ますか?
このスレの過去ログを拝見したところ、以前にも書き込みがあった質問ですが
アプリケーションプロトコルについて堀下げて教えてもらえないでしょうか?
>>164 やりたいことが今一分からんが、
HTTPでやるならマルチパートなデータをPOSTすればいいんでない?
>アプリケーションプロトコルについて堀下げて教えてもらえないでしょうか?
RFCが良い。主要なものは和訳もあるよ。
>やりたいことが今一分からんが、 アップロード:サーバーのどこのディレクトリに保存するか? ダウンロード:どのファイルをクライアントに保存させるか? という事をクライアント側で考がえる事なく、サーバー側で自動で判別させたいのです。オペミスと作業量の低減を 考がえています。
>>167 適当なヘッダー作って、それを参照したら?
HTTPに載せるならWebDAVという手もあるな 159の要求をすべて満たすかどうかは知らんが
171 :
デフォルトの名無しさん :03/01/06 19:11
それぞれ別のFW内にあるPC同士でTCP/IP通信を行うには どうすればいいですか? ネットゲームなどでよくある、ロビーサーバ的なものはありません。 FWの設定を変更して、ポートを空けることはできます。
>>171 ポート開けられるなら何の問題があるのかと、小1時間・・・
NATがあるんでないの。
なっとう
175 :
デフォルトの名無しさん :03/01/07 10:55
お前ら、UDPの通信でsendtoでなくsendで送信を行うことはありますか? それはどのような場合ですか? 教えてたもれ。
177 :
デフォルトの名無しさん :03/01/07 13:59
便乗だけど、FW内のマシンのwindows共有にアクセスしたい場合、 ポートはどこを空ければいいの?
133〜135
javaで、MulticastSocketを使ったプログラムを windows上で使うとエラーになります。 (BindException) ちなみに、Unix上だとちゃんとうごいたんですが、、、 どうしてですか?
>>180 そのBindExceptionの付加情報として何かメッセージ出てんじゃないの?
182 :
デフォルトの名無しさん :03/01/08 11:36
$ java MulticastChat java.net.BindException: Cannot assign requested address: Cannot bind at java.net.PlainDatagramSocketImpl.bind(Native Method) at java.net.DatagramSocket.bind(DatagramSocket.java:331) at java.net.MulticastSocket.<init>(MulticastSocket.java:147) at MulticastChat.<init>(MulticastChat.java:28) at MulticastChat.main(MulticastChat.java:66) これでした。
で、アドレス何にしてんの?
IP記録実験
http://qb.2ch.net/test/read.cgi/accuse/1042013605/ 1 名前:ひろゆき ◆3SHRUNYAXA @どうやら管理人 ★ 投稿日:03/01/08 17:13 ID:???
そんなわけで、qbサーバでIPの記録実験をはじめましたー。
27 名前:心得をよく読みましょう 投稿日:03/01/08 17:20 ID:yL/kYdMc
SETTING.TXT管轄でないということは全鯖導入を視野に、か?
38 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:22 ID:rLfxQ17l
>>27 鋭いです。
73 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:27 ID:rLfxQ17l
>ところで、IPが抜かれて何か今までと変わることってあるのでしょうか?
・今までより、サーバが重くなる。
・裁判所や警察からの照会があった場合にはIPを提出することがある。
まあ記録されてるとは言っても、ののたんのおまんこ裂きたいよね
パート2まだ〜?
さぁて、どうなることやら
189 :
デフォルトの名無しさん :03/01/09 14:52
■「ある発言が名誉毀損かどうかを管理人では判断できない。 法廷で判断されてからでもいいではないか」 今回、次のような発言は動物病院にとっては「社会通念上、名誉毀損と容易に推測できるはず」 とされています。 ブラックリスト、過剰診療,誤診,詐欺,知ったかぶり、えげつない病院、ヤブ医者、 精神異常、精神病院に通っている、動物実験はやめて下さい、テンパー、責任感のかけらも無い、 不潔、氏ね、被害者友の会、腐敗臭、ホント酷い所だ、ずる賢い、臭い
======2==C==H======================================================
2ちゃんねるのお勧めな話題と
ネットでの面白い出来事を配送したいと思ってます。。。
===============================読者数: 138720人 発行日:2003/1/9
年末年始ボケがそろそろ収まり始めた今日このごろのひろゆきです。
そんなわけで、年末に予告したIP記録ですが実験を開始しています。
「2ちゃんねる20030107」
こんな感じで各掲示板の最下部に日付が入ってるんですが、
20030107以降になってるところはログ記録実験中ですー。
んじゃ!
────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50 ────────────────────────────
qb 削除整理、削除要請、削除議論、批判要望 live2 ニュース速報 tmp ニュース極東、バカニュース、ちくり裏事情、違反の潰し方、薬・違法 少年犯罪、政治思想、ゴーマニズム、ペット苦手、download ロビー、なんでもあり、厨房、最悪、学歴、人権問題
>>551 「コテハン戦隊ラウンジャー」に鑑定依頼してきますた
なんかスッゲーすっきりしたよ、ありがとう
■基礎知識■ ■「言論の自由はどうなった!」 言論の自由は、名誉毀損には適用されません。 批評・批判といった言論だと証明するのは、発言者の責任です。 ■「最高裁があるじゃないか! 高裁差し戻しだ! 反訴しろ!」 最高裁は憲法に絡まない限り、受理してもらえません。今回の件では不受理はほぼ確定でしょう。 高裁差し戻しの可能性はひじょうに低いのはひろゆきも承知で、だから、最高裁にもっていこうとしています。 反訴についても、誰を訴えるかという特定が困難。これまた不受理。
Yahoo!トピックス 2ちゃんねるがアクセスログ記録を始めましたが、あなたの考えは? 2003年1月9日より 計180票 匿名性に絡む問題なので反対 32% 58 票 サイトのためになるから賛成 50% 90 票 利用しないから関係ない 8% 15 票 2ちゃんねるってなに? 3% 6 票 アクセスログってなに? 6%
あげる方だけどあげたくないので行かない方
君は結構面白い発言をするね。 日本語ワカリマスカ? 西の所へ逝け
202 :
デフォルトの名無しさん :03/01/10 18:52
ソケットをリード/ライトする時、標準入出力系の関数使ってる人いる? もしいたら使っていて困ったことがあった場合とか知りたいんだけど教えてくれない?
203 :
デフォルトの名無しさん :03/01/10 19:03
inetd 起動するプログラムを調べてみたら?
UNIX流の、「sockhandleに直接write、readを発行するやりかた」、やないの?
その、IPというものを僕に売ってください!!!!
俺は晒す自身がないな。。。
ところで掲示板のS/N比が上がるように、との理由付けが成されているが、 IP記録されると明言されているにも関わらず糞スレは毎日嫌と言うほど立つよね。。
我ながら好き勝手にほざいてしまいますた・・(汗 もし実現しても回線細そうですしね。。。
嘘言うな!
======2==C==H======================================================
2ちゃんねるのお勧めな話題と
ネットでの面白い出来事を配送したいと思ってます。。。
===============================読者数: 139038人 発行日:2003/1/10
なにやら、連日メルマガだしてるひろゆきです。
そんなわけで、ログ記録実験ですが、いちいちサーバ指定するのが面倒なので、
全部のサーバに入れてみました。
重くなって落ちたりしてもご愛嬌ってことで。。。
んじゃ!
────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50 ────────────────────────────
212 :
デフォルトの名無しさん :03/01/11 11:06
Wiinsockを使ってTCP/IPの非同期通信を行うC/Sプログラムで、 クライアントからサーバへconnectするときWSAAsyncSelectにFD_CONNECTを 指定してからconnectすると、接続に成功するとFD_CONNECTのイベントが 発生すると思いますが、サーバへ接続できなかった場合ってのはどうやって調べる のでしょうか?connectを呼び出してからのタイムアウトの時間などを自分で設定し 時間内に反応が無ければ接続出来なかったと判断するしかないのでしょうか?
1 :ひろゆき ◆3SHRUNYAXA @どうやら管理人 ★ :03/01/08 17:13 ID:??? そんなわけで、qbサーバでIPの記録実験をはじめましたー。 11 :ひろゆき ◆3SHRUNYAXA :03/01/08 17:16 ID:rLfxQ17l 全レスです。 22 :ひろゆき ◆3SHRUNYAXA :03/01/08 17:19 ID:rLfxQ17l 家族構成と小学校時代の恥ずかしかった思い出も記録されます。 73 :ひろゆき ◆3SHRUNYAXA :03/01/08 17:27 ID:rLfxQ17l >ところで、IPが抜かれて何か今までと変わることってあるのでしょうか? ・今までより、サーバが重くなる。 ・裁判所や警察からの照会があった場合にはIPを提出することがある。 こんなところでしょうか。 89 :ひろゆき ◆3SHRUNYAXA :03/01/08 17:29 ID:rLfxQ17l >一般人からも見れるところ? 〉記録所 既存のdatとは別に保存してるので、サーバがクラックされない限りはみれません。 ただ、既存のdatと別なので、書きこみあたりの保存容量がほぼ2倍。
わーい!期待しとくよ。
なじぇ〜
実行されたらネオ麦を超えるんじゃない?
厨房板の荒らしは削除されたようだ いつか全板で強制表示になるのだろうか? スクリプトくめばどこの板だって荒らせるだろうし
実際にある人物になんかあった場合、 その人物になんかしたい、と書き込んだ人間についての情報は おれがもし警察だったら、一応知ろうと努力はする。 なかにはそうとうエグいのもあるし。
>>204 標準入出力系だとバッファリングしてくれるので、自分でやるよりそういう
ライブラリのほうがこなれてるだろうって思って。
ただそれが悪く働くこともあるかなと。で実際にそういう経験をした人がいたら
はなし聞いてみたいと思ったの。
バッファリングってことは read()/write()じゃなくてfread()/fwrite()の話か? そういう使い方は見たことないなー
スポ2鯖だけはIP非保存だったりする。
【予告】小学生の登校を狙って・・・ 1 名前:キラー ◆cbkujpH7is [] 投稿日:03/01/08 23:10 ID:gsrD4Baw 明日の朝、登校途中の小学生を狙って大量殺人を実行します。実際 には大量とは言っても、刺せるのは15人程度、即死や死亡は10人程 度になってしまうとは思うけど。 住んでるのが北陸なので、適当に車で目標となる場所を探します。 その前に、車で小学生に突っ込むことも計画してます。 目的?そんなものなんかないよ。 人はいつかは死ぬんだ。ちょっと早いかどうかの差だろ? 人の死を作り出せる人は神である。俺は神になるよ。
ふぁーすと せかんど さーど ふぉんど ふぁいぶんど
>>221 Winsockしか知らないんだね。
Unix系だとfdopen(3)でソケットも使える。
なんか前にも似たような話題出てたな〜
>225 Winsock知らないんだね。
>>226 WinSockのsocket handleでfdopen() or 類似の事できたっけか?
ReadFile(), WriteFile()は使えるけどさ。
1人のヤブ医者発言に毎回400万円払えるか? 2ちゃんを残すだけでもひろとしは偉いと思うよ。 まぁ、それだけ儲かるのかも知れないが。
230 :
デフォルトの名無しさん :03/01/12 21:58
>>220 Cでは、fdopenしてstdioを、C++では、fstreamしてiostreamを、
socketに対して普通に使っています。バッファリングもいいけど、
フォーマッティングで、sprintfやstrstream使わないですむから楽。
C++はiteratorも使えるし。
>>195 ACE本出てるじゃん。C++ in depthシリーズで。
Winsockを使って特定のポートに来るパケットを盗み見るためには、 どうすればよいのでしょうか?
233 :
デフォルトの名無しさん :03/01/12 23:26
234 :
デフォルトの名無しさん :03/01/13 02:00
>>231 本が出てるのはわかった。で、あんたの感想・使用感は?ぷりーず。
その具体的な理由として社長は、こう話す。 「2ちゃんねるはボランティアの削除人が書き込みをチェックして、 好ましくない書き込みを一所懸命削除している、 ということになっているが、あれはウソ。 削除人には給料が支払われ、その給料の原資となっているのが、 まずいことを書き込まれた企業が削除要求とともに渡す裏金。 これはまさに、総会屋の構図そのものだ。 これまで裁判になっているのは金額で折り合えなかったり、 裏金を出さない強い態度の企業とだけだ」
>>228 ReadFileできるってことは
_open_osfhandleでいけるんじゃないの
>>235 良く出来ているけど、うざい。
結局自分でclassを書いた。かなり参考になった。いじょ
(^^)
241 :
デフォルトの名無しさん :03/01/16 19:05
UNIXネットワークプログラミングを組んでるのですが、 現在 /*-------------------------------include-------------------------------*/ #include <stdio.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <netdb.h> /*-------------------------------define--------------------------------*/ #define PORT 8765 main() { /*------------------------------変数---------------------------------*/ int fd;//ファイルディスクリプタ int ret;//readの返し値 struct sockaddr_in addr;//サーバー構造体 char buf[1024]; fd_set r_fd;
/*----------------------通信相手(サーバー)のアドレスを設定---------*/ bzero((char *)&addr, sizeof(addr)); addr.sin_family = AF_INET; addr.sin_port = htons(PORT); addr.sin_addr.s_addr = inet_addr("IPアドレス"); /*----------------------------接続-----------------------------------*/ fd = socket(AF_INET, SOCK_STREAM, 0); connect(fd, (struct sockaddr *)&addr, sizeof(addr));
/*----------------------------セレクトの設定-------------------------*/ FD_ZERO(&r_fd);//r_fdを初期化 while (1) { //メインループ FD_SET(0, &r_fd);//キーボードをr_fdに追加 FD_SET(fd, &r_fd);//fdをr_fdに追加 select(fd+1, &r_fd, NULL, NULL, NULL); /*-------------------------キーボードからの読み込み-----------------*/ if(FD_ISSET(0, &r_fd)){ memset(buf, 0, sizeof(buf)); ret = read(0, buf, 100); write(fd, buf, ret); }
/*--------------------------サーバーからのデータ受信-----------------*/ if(FD_ISSET(fd, &r_fd)){ memset(buf, 0, sizeof(buf)); ret = read(fd, buf, 100); if(ret == 0){ break; } /* コンソールへの出力 */ write(1, buf, ret); } } close(fd); exit(0); } こんなかんじのプログラムを組んでみたのですが、ここからゲーム部分に移るべく現在拡張子が.cなのですが .cppに変えたいのですが、そうするとinet_addr();read();write();close();でコンパイルエラーが 出てきてしまうのですが、代わりになるような関数ってありますか?それとも大幅に変更を変える必要 が出てくるのでしょうか?
245 :
デフォルトの名無しさん :03/01/16 19:20
プロトタイプ宣言がないってエラーでしょ? man 2 write もしくは man -s 2 write などとやって、その関数に必要なヘッダを include してるか、 確認してみては? たぶん、#include <unistd.h> あたり... てーか、なんか、それ以前に根本的なスキル上の問題を感じるんだが...
>>245 サンクス。無事コンパイル通りました。
スキルあったら一々聞いたりしてないから触れないで
247 :
デフォルトの名無しさん :03/01/16 21:46
cygwinのおかげで、gccだとUNIXネットワークプログラム ちょうど、上の奴みたいのはコンパイルできるのですが、 諸事情で、bccでコンパイルする必要があるのですが、 可能ですか?
sys/socket.hとかのヘッダーファイルを bccのincludeフォルダに読み込ませればできるのでは、 と勝手に思ってるんですけど、そもそも検索しても そのヘッダーファイルらがひっかからなかったんで、 どなたか、教えてください。
ヘッダファイルは魔法でもおまじないでもないんですから、それだけじゃ無理ですな ちゃんとbccで動作するように作りましょう。
250 :
デフォルトの名無しさん :03/01/17 01:31
recvでデータ受信しているのですが、受信終了時に 返り値として0が返されますが、この0が返されるまでの 時間が長すぎて困っています。 例えば、2ちゃんねるのこの板のsubject.txtを読み終わるまでに 実際のデータはすぐに読み込めるのですが、0が返されるまでに 10秒くらいかかります。 この時間を短縮する方法はありませんか?
環境はWindowsでWinsock2.2を使用しています。
> 受信終了時に返り値として0が返されますが そうだっけ?
>250 RFC2616を読みなさい
persistent connectionのところね
255 :
デフォルトの名無しさん :03/01/17 08:25
スレ違いだと思いますが教えてください。 プログラムは今までやったことがないのですが、 この間C言語入門という本を買ってきて一通り読み理解しました。 そこで無謀にもネットワークプログラムなんか面白そうだなと 思って、図書館でリチャードスティーブンスという人の unixネットワークプログラム という本を借りてきたのですが、 少し読んでみたのはいいですが、何がかいてあるのかさっぱり わかりませんでした。 そこで、また本屋にいって初級よりちょっと上のレベルの本を 読んでみたのですが、このネットワークプログラムの本を理解 するほどの内容が書いてありませんでした。このネットワークプログラム を理解するにはどのような本を読めば理解できるのでしょうか? Cを勉強して半年ですが、がんばって理解したいと思うので マジレスお願いします。
>>255 1.Linux,FreeBSDなどでWebサーバをたててみる。
2.ファイアウォールの設定をする。
3.パケットキャプチャーして眺めてみる。
4. 1でたてた鯖のアクセス数が10000HITいく頃には読めるようになってる。
httpサーバーを動かしているPCで、他のサイトを見ると、 サーバーがサーバーを見ていることになりホストがなくなる。 ホストは必須ではない。 またWindowsのファイル共有では勝手にホストがサーバーに変わったり サーバーがホストに変わったりする。
259 :
デフォルトの名無しさん :03/01/17 11:03
260 :
デフォルトの名無しさん :03/01/17 11:10
>>257 ,258
(´-`).。oO(クライアントのことなのかな…
(・∀・)イズレ ニセヨ
>>258 ハ アフォ!
client/serverは、マシンだけに有効な概念ではない。
Network entityという概念を理解せよ。
261 :
デフォルトの名無しさん :03/01/17 18:29
UNIXネットワークプログラミングで組んだサーバーと Winsockで書いたクライアントで通信ってできますか? UNIX..でクライアントも書いたのですが、bccでコンパイルが 通らなかったので。。 gccはcygwinを入れたときに入ったのでUNIXプログラムもコンパイルできるのですが、 素直にWinsockでクライアントを書くのと、bccでこのプログラムを コンパイルできるようにするのと、どっちが楽ですかね。 正直、あんまり時間ないので短時間でできる奴のほうがいいのですが。。
「そのためのTCP/IPです」
>>262 つまりできるってことでよろしいですよね?
>263 LinuxのApacheにWindowsのIEで観覧できますか?と同じような話かと
>>261 既にCygwinのgccで通るプログラムがあるならそのままやる方が
楽は楽だろうけど、作ったプログラムを配布しようと思ったら
cygwin1.dllも配布しなきゃとかGPLだから〜とかあるんで、最終的
にどっちでやるかは自分で判断しる。
> GPLだから〜 詳しくないんだがcygwin関連でそういう制約あったっけ?
267 :
デフォルトの名無しさん :03/01/18 01:46
/*--------------------------WinSockの初期化を行う----------------------------*/ wVersionRequested = MAKEWORD(2, 0); //バージョン 1.1 を要求する nErrorStatus = WSAStartup(wVersionRequested, &wsaData); if (atexit((void (*)(void))(WSACleanup))) {//終了時にWinSockのリソースを解放するようにしておく fprintf(stderr,"atexit(WSACleanup)失敗\n"); exit(-1); } if ( nErrorStatus != 0 ) { fprintf(stderr,"WinSockの初期化失敗\n"); exit(-1); } /*-----------------------sdにソケットを作成します----------------------------*/ sd = socket(PF_INET, SOCK_STREAM, 0); //TCPで通信 if(sd == INVALID_SOCKET){ fprintf(stderr,"ソケット作成失敗\n"); }
268 :
デフォルトの名無しさん :03/01/18 01:47
/*----------------------------サーバの設定-----------------------------------*/ sv_sockaddr.sin_family = AF_INET;//インターネットの場合 sv_sockaddr.sin_addr.s_addr = inet_addr("169.254.185.85");//サーバのIPアドレス sv_sockaddr.sin_port = htons(PORT);//ポート番号 memset(sv_sockaddr.sin_zero,(int)0,sizeof(sv_sockaddr.sin_zero)); /* 指定のソケットでサーバへコネクトします */ if(connect(sd,(struct sockaddr *)&sv_sockaddr,sizeof(sv_sockaddr)) == SOCKET_ERROR){ fprintf(stderr,"サーバへの接続失敗\n"); } FD_ZERO(&r_fd);//r_fdを初期化 while(1){ FD_SET(0, &r_fd);//キーボードをr_fdに追加 FD_SET(sd, &r_fd);//fdをr_fdに追加 select(sd+1, &r_fd, NULL, NULL, NULL); if(send(sd, buf, lstrlen(buf), 0) == SOCKET_ERROR){ fprintf(stderr,"サーバへの送信失敗\n"); } if(FD_ISSET(0, &r_fd)){ memset(buf, 0, sizeof(buf)); fgets(buf, RECVSIZE - 1, stdin); send(sd, buf, lstrlen(buf), 0); }
269 :
デフォルトの名無しさん :03/01/18 01:47
if(FD_ISSET(sd, &r_fd)){ memset(buf, 0, sizeof(buf)); buf_len = recv(sd, buf, RECVSIZE - 1, 0); if(buf_len == 0){ break; } buf[buf_len] = '\0'; printf("%s",buf); } if (buf_len == SOCKET_ERROR ){ fprintf(stderr,"サーバからの受信失敗\n"); }else{ buf[buf_len] = '\0';/* 受信したバッファの後ろにNULLを付加する */ } } closesocket(sd); exit(0); }
270 :
デフォルトの名無しさん :03/01/18 01:50
こんなプログラムを組んだのですが、コネクトした時点ですでに bufにゴミみたいのがまざってしまうのですが、何故でしょうか? ちなみに、間違ってip書いちゃったけど、気にしないでください。。
connectした時にすでにおかしいと言いながら全文載せるとは何事か
>>270 なんかめちゃくちゃだよ?
selectの後のsendは何?
if (buf_len == SOCKET_ERROR ){
fprintf(stderr,"サーバからの受信失敗\n");
}else{
buf[buf_len] = '\0';/* 受信したバッファの後ろにNULLを付加する */
}
の場所はそこなの?
>>266 cygwin1.dllはGPL。
続ける場合はGPLスレかUnix板のCygwinスレにでも移動して。
>>270 WinSockで
FD_SET(0, &r_fd);
select(sd+1, &r_fd, NULL, NULL, NULL);
if(FD_ISSET(0, &r_fd)){
memset(buf, 0, sizeof(buf));
fgets(buf, RECVSIZE - 1, stdin);
send(sd, buf, lstrlen(buf), 0);
}
これ(標準入力をselectで待つ)できたっけ?
Cygwinのgccならその辺エミュレートしてるから動くだろうが、その場合
WSAStartupとかやる必要ないし。なんかUnix流のやり方とWinSockの
やり方がごっちゃになってるような…
>>274 できない(WSAENOTSOCKを食らう)
276 :
デフォルトの名無しさん :03/01/19 14:44
ファイルをHTTPで転送するルーチン作ったんだけど、 ファイルをすべて on memory でもっていて転送したとしても、 TransmitFile を使って行うファイル転送にかなわない。 (両方の場合も非同期転送でやってます。) どうしてこんなに効率いいんだ? > TransmitFile どんな魔法を使っているんだYO おまえら、TransmitFileに自作転送ルーチンで勝てた人いらっしゃいますか?
ダブル バッファリングを行わずに、ディスクからファイルを直接転送します。
ユーザーランドへのコピーが一度でも起こると パフォーマンス的には厳しい。 linuxにもsendfileってのがあるね。
>>277 転送したい内容は既にメモリ上でもっているんですが(w
>>278 そうですねよ。。。
究極の回答はLANのデバイスドライバ作ってそこにファイル転送ルーチン仕込めということなのでしょうか?
それともユーザランドでカーネルレベルでのメモリ確保を行って、
そこから転送すればよいのでしょうか? それができるかどうかはなぞですが(w
>>279 あう、間違えた 276 です。ごめんなさい。
鬱だ、気晴らしに sim city4でもやろう
> それともユーザランドでカーネルレベルでのメモリ確保を行って、 > そこから転送すればよいのでしょうか? つまるところそれを肩代わりするのがTransmitFileやsendfile なのでは?
>>276 非同期転送って、WriteFileExやWSASendのコールバックでやってる?
それで負けるんならお手上げだよなぁ・・・。
283 :
デフォルトの名無しさん :03/01/19 17:41
HTTPで、BODYだけGETする方法ってありますか?
GET / HTTP/0.9
>>284 0.9でBODYだけ取得できるのは知ってましたが
それって問題無いんですか?
いや・・・0.9をサポートしてるかどうかを心配したほうが・・・
>>282 WSASendの非同期でやっています。
Athlon1G Memory512MB の環境で150KB程度のファイルを転送させて、
apache benchで 5クライト1000アクセスで測定した結果、
TransmitFileと自作の転送ルーチンの差が 秒間10アクセス程度の差がでています。
>>287 いや、重複I/Oでもイベント使うのとコールバックの二種類あって、
イベントの方だとWaitFor〜のオーバーヘッド分遅いだろうなって思って。
289 :
デフォルトの名無しさん :03/01/20 10:40
>>289 知りませんでした(w
で、やってみました。
転送レートが 秒間3〜10ぐらい伸びました。感動しました。
で、結果からなんですが、転送レートにばらつきがあるのが疑問点です。
自宅LANなので他人が回線を使っているわけでないのでほぼ一定でなければおかしいような気がします。
そーゆーものなんでしょうか?
気づいたことは、
通常は 75〜85% ぐらいの負荷なのですが、
転送率が良くなるときにきまってサーバの CPU使用率が 100%振り切っています。
何かOS側、もしくはLANカードのドライバ(カニさん(w) が関係しているのでしょうか。
もう少し検証してみます。。。
カニさんは高負荷時に挙動不審になるとか linuxのドライバ書きの外人がボヤいてた気がする
292 :
デフォルトの名無しさん :03/01/20 23:19
どこでCPU使ってるのか、profileしてみたら?
カニさんは自作板で、叩かれてたような気がする
294 :
デフォルトの名無しさん :03/01/21 10:26
カニって、CPUを使って転送するのか...
カニってうまいよな。 あんなにうまくなければ乱獲されずに済んだのに。
296 :
デフォルトの名無しさん :03/01/21 12:57
>>290 もし、TransmitFile の場合に、そういう現象が起きてないなら、
作りの問題かもね。
あらかじめ、ワーカスレッドを何十個か必要なだけ作っておいて、
accept後、そいつらに同期send+closeさせてみると多少マシになるかも?
>>296 >もし、TransmitFile の場合に、そういう現象が起きてないなら、
>作りの問題かもね。
うわーん(w
>あらかじめ、ワーカスレッドを何十個か必要なだけ作っておいて、
>accept後、そいつらに同期send+closeさせてみると多少マシになるかも?
スレッドプールはすでに導入済みです。
ネットワークとは関係ないですが、 ワークメモリを FileMapping してみたら、ちょっとだけ効率が上がりました。 カーネルに(近いレベルで)取得したメモリから ソケット(カーネル)に書き出せるからかな? 昨日やった実験で少しパフォーマンスが向上したのでご報告。。。
>カニさんは自作板で、叩かれてたような気がする どこでもカニはたたかれますよね。 実は、転送効率を測定するためにベンチを走らせたり、 自作のクラッシャーで攻撃すると Windows OS 自体がクラッシュしたりする なぞの現象になやんでいたりします。一説にはドライバがくさっているとか。。。 とりあえず、Intel のカード買ってくる予定です(w これでダメならメモリがやばいかもしれない。。 プログラムと関係ないので sage
その次はTransmitFileのような・・・
301 :
デフォルトの名無しさん :03/01/22 00:30
>>276 ネットワークプログラムを最近始めたものですが、HTTP転送によるファイル転送(WebDAVじゃなく)を調べているのですが、参考にされたWebサイトありませんか?
また、TransmitFileはWin固有でしょうか?
linuxにもあるよ。名前違うけど
>>299 本当にドライバが腐ってるだけなら
とっくに誰かが安定したものに書き直してるでしょう
おそらく腐ってるのはドライバではなく仕様だと思われ
304 :
デフォルトの名無しさん :03/01/22 00:46
mmapか。勉強になるのお。
309 :
デフォルトの名無しさん :03/01/22 10:35
メモリ上の送信より、mmapの方が早いってのは、理屈から考えるとヘン。 (メモリがswap outされていたとか以外に考えにくい) メモリを物理メモリにロックした場合と比較してみては? あと、ソケットにTCP_NODELAY指定はしてあるんだっけ?
310 :
デフォルトの名無しさん :03/01/22 11:25
>>309 メモリへ載せるための転送も計算に入れてる?
>>309 速い時はCPU利用率が100%になっていると言っているのだから、
copy from memory to memoryがボトルネックになりつつあるのは明らかだが…
Libraryやkernelの中身まで考えたことないんだろうな、
>>309 は。
データのメモリアライメントも考えたことないのだろうし。
313 :
デフォルトの名無しさん :03/01/22 12:25
>>311 >速い時はCPU利用率が100%
ってのは、ドライバがカニだからじゃないの?
よほど小さな単位でsendしてるのでないかぎり、
(普通にmalloc等で確保した領域を使っての)send部分が原因で
CPU使用率が100%になるなんて、見たことないけど?
314 :
デフォルトの名無しさん :03/01/22 12:35
だからmallocでメモリ確保したらコピーが1回余計に増えるでしょ
315 :
デフォルトの名無しさん :03/01/22 12:39
あれ? 今回は、ReadFile()の(mallocした領域への)読み込みは、起動直後に 完了していて、転送時の計測のカウントに入らないんじゃなかったの?
316 :
デフォルトの名無しさん :03/01/22 14:05
socketへの書き込みから始って、networkに流れるまでにも、copyが行なわれる。 それを防ぐために、TransmitFileなんてものがある。
317 :
デフォルトの名無しさん :03/01/22 14:17
>>316 通常のsocketの TCP->IP->Ether、なんてプロトコルスタックを下るような
動作をせずにショートカットしてるの?
ま、それはともかく、今は、mmap領域とmalloc(中身はGlobalAllocとかだ
よね?)領域を sendした場合の動作の違いについての話なので、
TransmitFileの話は無関係だよね?
318 :
デフォルトの名無しさん :03/01/22 18:06
>>309 >あと、ソケットにTCP_NODELAY指定はしてあるんだっけ?
してません。
で、設定してみたところ、あんまりかわらないか、現状以下の数字しか出なかったです。
長いので次の書き込みでベンチを貼り付けます。
指定あり Document Length: 165142 bytes Concurrency Level: 5 Time taken for tests: 187.694 seconds Complete requests: 10000 Failed requests: 0 Broken pipe errors: 0 Total transferred: 1653547960 bytes HTML transferred: 1651457542 bytes Requests per second: 53.28 [#/sec] (mean) Time per request: 93.85 [ms] (mean) Time per request: 18.77 [ms] (mean, across all concurrent requests) Transfer rate: 8809.81 [Kbytes/sec] received Connnection Times (ms) min mean[+/-sd] median max Connect: 0 7 29.7 6 2948 Processing: 19 87 144.3 82 9093 Waiting: 18 86 144.3 82 9092 Total: 19 93 147.2 89 9106
指定なし Document Length: 165142 bytes Concurrency Level: 5 Time taken for tests: 177.813 seconds Complete requests: 10000 Failed requests: 0 Broken pipe errors: 0 Total transferred: 1653637020 bytes HTML transferred: 1651546184 bytes Requests per second: 56.24 [#/sec] (mean) Time per request: 88.91 [ms] (mean) Time per request: 17.78 [ms] (mean, across all concurrent requests) Transfer rate: 9299.87 [Kbytes/sec] received Connnection Times (ms) min mean[+/-sd] median max Connect: 0 8 3.5 7 24 Processing: 18 81 40.3 80 3103 Waiting: 17 80 40.3 80 3102 Total: 18 88 40.3 88 3113 あ、これは ab の結果です。。
>>313 >よほど小さな単位でsendしてるのでないかぎり、
ソケットのバッファ長は伸ばしているので小さい値で send していないと思います。
それでも、 CPU 70〜80は余裕で行きます。
apache2も同じように CPU を使用するのでそーゆーものなのではないのでしょうか?
なお、IISは速度こそapache2と同じですが、CPU使用率が 50%前後という恐ろしい結果を
出してくれます。 ゲイツマジックの予感。
323 :
デフォルトの名無しさん :03/01/22 23:29
>>322 指定なしの場合にすでに、ほぼ理論値近い値(NICはGbitとかじゃないよね?)
でてるから、いいんでないの?
CPU使用率問題は、ある程度はカニが原因っぽいから、NIC交換後に再計測
してみるとか。
>>323 それが違うんです。。。
apache2 で同じファイルを転送したときの結果
Concurrency Level: 5
Time taken for tests: 159.725 seconds
Complete requests: 10000
Failed requests: 0
Broken pipe errors: 0
Total transferred: 1654330095 bytes
HTML transferred: 1651559264 bytes
Requests per second: 62.61 [#/sec] (mean)
Time per request: 79.86 [ms] (mean)
Time per request: 15.97 [ms] (mean, across all concurrent requests)
Transfer rate: 10357.36 [Kbytes/sec] received
Connnection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.3 0 11
Processing: 25 79 4.6 78 104
Waiting: 24 78 4.6 77 103
Total: 25 79 4.6 78 104
で、理論地をオーバーするような結果がえられるんですよ。。。なぞです。
いまさらなんですが、さっきあらためて貼り付けたベンチを見て思ったんですが、 Connnection Times の値の max がオイラのやつはめちゃくちゃでかいですね。 min は apache2 より小さいのに何かある条件かでガクンとひっかかるような 処理が行われているような気がしていました。 ひとつ思い当たる節があるので調査してきまうす。
326 :
デフォルトの名無しさん :03/01/23 01:30
>>324 >Transfer rate: 10357.36 [Kbytes/sec] received
のことだったら、理論値オーバーには、なってないよね。
100Mbps = 100000000bps = 12207KB
ヘッダその他、オーバーヘッドがあるから、これよりは若干落ちるけれど。
>>326 理論値超えてるって。もうちょっとEthernetプロトコルのお勉強してから書き込もうね。
329 :
デフォルトの名無しさん :03/01/23 09:51
330 :
デフォルトの名無しさん :03/01/23 11:51
>>327 余計な部分(file I/Oなど)を削ぎ落としての実測をしたことがない?
331 :
デフォルトの名無しさん :03/01/23 13:13
>>328 とりあえず、アドバイスはこんな感じかな?
細かくWSASend()を発行しない。
(なるべく、ヘッダと本体をあわせて1回のWSASendで送ってしまう)
ソケットバッファを大きくすると、closesocket() でのバッファの
flush 完了待ちが長くなるので、ワーカスレッド側で、closesocket()
まで面倒を見る。
332 :
デフォルトの名無しさん :03/01/23 13:30
>>331 mmap してる場合は、ヘッダとファイルデータを連続させることは難しいから、
WSASendでWSABUF配列を2つ以上並べる必要があるかもね。
333 :
デフォルトの名無しさん :03/01/23 14:12
パケットUDPで他PCとデータをやり取りするソフトを作っているのですが サーバー側はクライアント側からデータが来たってわかる方法はありますか? recvfromでずっと待ってるわけにはいかないですよね?
何故まっているわけにはいかないのか小一時間問いつめたい。
スレッドを知らないからに1024パケット
336 :
デフォルトの名無しさん :03/01/23 14:59
>>333 select か WSAAsyncSelect()を使う。
337 :
デフォルトの名無しさん :03/01/23 15:11
スレッドを知らないレベルの人間に非同期処理を行わせるのと、 マルチスレッド+同期APIを教えるのはどちらが現実的なんだろうな。
>>338 教える気がないカス野郎はとっとと首吊って下さい。ウザイです。
>>339 教わる気がないカス野郎はとっとと首吊って下さい。ウザイです。
頭がぬるぽなカス野郎はとっとと首吊って下さい。ウザイです。
>>339 質問所と相談室を混同するなよ。
スレルールのどこに 「ぼやき NG」 と書いてある?
>>343 1をよく読みましょうね。
貴様みたいな馬鹿は字も読めないのですか?
ここに来る前に幼稚園から始めて下さい。
>>344 > 貴様みたいな馬鹿は字も読めないのですか?
微妙な日本語・・・。
>>343 つーか、お前の存在がネタだろ、負け犬(w
(^^)
ふ、漏れの崇高な精神はおまいらには理解できなかったようだな。
350 :
デフォルトの名無しさん :03/01/25 01:08
ネットワークプログラムを今やるなら、CかC++のどちらを やっていたほうがいいのでしょうか?
そうだな、どっちかというとsocketかな。 javaや.netのはちょっと隠されすぎ。
winsockでもエラーは負って決め打ちしてもいいの?
ヘルプ読めませんか?
>>350 ソケットの勉強をしたい だ け なら C でもいいと思われ。
それ以外なら C++ をお勧めします。
>>352 良くない。
詳しくは
>>353 の言うようにヘルプを読んで下さい。
結局BSDソケットプログラムは全面的に書きなおさないとwinsockへの移植は無理(逆も無理) ってことですか。残念。
>>349 理解できないので二度と来ないでください。
357 :
デフォルトの名無しさん :03/01/25 09:14
>>354 今ならCよりC++を勉強したほうがいいんですね。 Cならリチャードスティーブンスのネットワークプログラム本が ありますが、C++ではどの本がおすすめでしょうか? 本スレよりネットワーク専門でやってる人の方が詳しそうなので 教えてください、お願いします。
>>355 APIには互換があるのでソケット以外の部分の絡みでなければ
書き直す必要は無い
>>357 はあ?「Cならリチャードスティーブンスのネットワークプログラム本がある」んなら
C++でも↑でいいじゃん。頭大丈夫?
361 :
デフォルトの名無しさん :03/01/25 16:45
馬鹿が威勢のいいこといってるな藁
(・∀・)ゲハハハ
363 :
デフォルトの名無しさん :03/01/25 17:38
元気なのはいいことだ。それさえ無かったら、あいつはきっと カマキリを食べてしまっていただろう。 さみしいような気もするけど、馬鹿って貴重なようでいて実は そうではないのだ。というか工場は何処なのだろう? 止めろよ。
百済ねえ事であげんなヴぉけ
(・∀・)ゲハハハハ
蟷螂ってうまいの?
>>366 あるプログラムが動くかどうか判断するには→実際に動かす。
>>367 目を離した瞬間、中の人が発狂するかも知れないわけだが。
中 の 人 な ど い な い
発狂しそうです。。。
俺の菊座も発狂しそうです。
中の人があまりにたくさん発狂したのでニュースになりました。
浣腸かってこようかなー
>>360 アタマ大丈夫な人は2chで質問なんかしません。
localhostにUDPパケット投げる場合は、暗号化しなくても 既に汚染されている場合を除いて他のマシンに覗きみされる事はないですよね。
>>376 まあそうだね。念の為、localhostの名前解決を自力で行えること
を保証できるように /etc/hosts に書くか(まともなら普通は書い
ていると思うけど)、127.0.0.1をじかに書いて解決の必要がないよ
うにしておく方がいいんじゃない。
www2ch.net から recv したデータが HTTP/1.1 200 OK Date: Wed, 29 Jan 2003 12:56:13 GMT Server: Apache/1.3.26 (Unix) AuthMySQL/2.20 PHP/4.1.2 mod_gzip/1.3.19.1a mod_ssl/2.8.9 OpenSSL/0.9.6g Connection: close Transfer-Encoding: chunked Content-Type: text/html 53e // ここに データが書かれてあります。 0 となっているのですが、最初の 53e ってのと最後の 0\r\n\r\n は何なのか分かりません。 意味を教えてください。 それから、データ本体を取り出す簡単な方法は無いでしょうか?
粋がってHTTP/1.1なぞでリクエストせずに、HTTP/1.0にしときなされ。 53eの意味が知りたいなら、rfc2616のchunked encodingを調べなされ。
381 :
デフォルトの名無しさん :03/02/01 21:34
どうか助言おねがいします。 今win2000でTCPで送受信してます。 通信相手はgethostbynameでパソコン名を指定してとってます。 プログラムの中でサーバーポート番号とパソコン名を直接書くと動いたんですが テキストファイルからサーバーポート番号とパソコン名を読みこむようにすると なぜかSOCKET()のところで10093エラーがでてしまいます。これはWINSOCK初期化エラーみたいなんですが、どこがわるいのでしょう? (前) #define serverport 7000 charshost[]="NAME"; (後) intrightport; charshost[10]; charbuf[256]; char *a; a=fgets(buf,256,fp); sscanf(buf,"%s %d",shost,&rightport); としてます テキストファイルには NAME 7000 としてます
WinSockシステムが初期化されていない。 WinSock関数を実行しようとしたが、WSAStartup()が正常に実行されていないため機能しない。
>>381 読み込んだ文字列の終端に\0無いんじゃねえの?
読み込んだ値をprintfでもいいから確認汁!
ここで聞く前になぜ printf("%s %d",shost,rightport); を試さない?
388 :
デフォルトの名無しさん :03/02/01 21:45
レスどもです。 printfで確認したらきちんとよみとれてるんですが、なぜか実行時エラーがでてしまいます。 そこでもう一度、プログラムに直接書き込んだものでやってみるとやはりうまくいきました。 んでやはりこの部分がわるいのかなと
>>388 >printfで確認したらきちんとよみとれてるんですが
うそだろ。
390 :
デフォルトの名無しさん :03/02/01 21:59
まったく違う場所で間違い発見しました。 ご迷惑かけました、もうしわけないです
>>390 俺に謝られてもなぁ・・・
ただの通りがかりだし・・・
UDPパケットが経路途中で分割されたとしても、受信するときはrecvfrom()一回で パケット全体が所得できるんですよね? Programming UNIX Sockets in C FAQ にはUDPの先頭しか届かない場合がある みたいなことが書いてますが、どういう場合にそうなるんでしょうか?
393 :
デフォルトの名無しさん :03/02/03 20:51
394 :
(つづき) :03/02/03 20:52
| | | | |S| | | | | | |H| |F | | | | |O|M|o | | |S| |U|U|o | | |H| |L|S|t | |M|O| |D|T|n | |U|U|M| | |o | |S|L|A|N|N|t | |T|D|Y|O|O|t FEATURE |SECTION | | | |T|T|e -------------------------------------------------|--------|-|-|-|-|-|-- REASSEMBLY and FRAGMENTATION: | | | | | | | Able to reassemble incoming datagrams |3.3.2 |x| | | | | At least 576 byte datagrams |3.3.2 |x| | | | | EMTU_R configurable or indefinite |3.3.2 | |x| | | | Transport layer able to learn MMS_R |3.3.2 |x| | | | | Send ICMP Time Exceeded on reassembly timeout |3.3.2 |x| | | | | Fixed reassembly timeout value |3.3.2 | |x| | | | | | | | | | | Pass MMS_S to higher layers |3.3.3 |x| | | | | Local fragmentation of outgoing packets |3.3.3 | | |x| | | Else don't send bigger than MMS_S |3.3.3 |x| | | | | Send max 576 to off-net destination |3.3.3 | |x| | | | All-Subnets-MTU configuration flag |3.3.3 | | |x| | | なんだけどね。(don't send bigger)
>>393 , >> 394
えーと、つまり経路の末端(送信するマシンと受信するマシン)が十分な長さの
IPフラグメント組み立てを実装してればOKのはず、って事?
悪いことは言わないから、 UDPで500byte(目安)以上送信するのは止めとけ
400 :
デフォルトの名無しさん :03/02/04 22:25
IdHTTPでGetしてタイムアウトした時、タイムアウトはどうやって検知すればいいのでしょうか?
ダウンロードの進行状況(受信バイト数 どうやってしらべるの? どの言語を例にしてもらってもいいのでよろしくおながい!
402 :
□□■週間盗撮ベストランキング■□□ :03/02/05 15:31
>>401 調べるも何も受信したサイズそのままだろ
何を聞きたいのかさっぱり分からん
足し算も出来ないのか?
404 :
デフォルトの名無しさん :03/02/06 12:22
ある特定のアプリケーションの通信を優先させるようなことはできますでしょうか? OSはWindowsです。
Win鯖なら、QoSがある
407 :
デフォルトの名無しさん :03/02/07 09:15
ServerじゃないとQoSって使えないの? XPにもあったと思うが
408 :
デフォルトの名無しさん :03/02/07 09:30
LinuxにもQoSあるよ
DoS?
= Denial of Service
>>403 バッファからとりだすとき、バッファになにもないという事態を避ける方法…まあいいや。ありがとよ…
このスレには QoS(Quality of Service) と DoS を混同してるヤシがいるのか?
414 :
デフォルトの名無しさん :03/02/07 13:45
>>413 Windows Server には、QoSよりDoSがお似合い、と揶揄しただけでしょ。
そのQosはプログラムから制御できるのですか?
QoSってQoS用のプロトコルで制御するもんなんじゃないの? そりゃ遡ればどっかでAPIみつかるだろうけど。
サーバにあるワードファイルをバッチ(サーバに置いてある)で、 指定したクライアントPCのワードで読み込み(ワード起動)をしたいのですが バッチにどのように書けばいいのでしょうか。 共有はされています。 初心者なので、申し訳ございませんができる限りわかりやすくしていただければ幸いです。 宜しくお願いします。 \\PC-SERVER2000\test.doc サーバのワードの場所です。
プログラムでクライアント側のIPアドレス等は取得し、書きますので クライアント側のPC名は気にしないで下さい。 宜しく、おねがいします。
>>417 スレ、というか板違いだよ。それはネットワークプログラミングとは違う。
どこが適切かわからんけど、多分Windows板とかPC初心者とかで聞いたほうがいいよ。
マルチですよ
>>417 start \\PC-SERVER2000\test.doc
と書けばいいですよ
>>417 \\PC-SERVER2000\test.doc はありえない。
鯖名とシェア名とパス名が必要だ。
データをrecvとかrecvfromとかで受信する部分を関数として切り出し、 そこへの引数として相手のソケットを渡すようにします。その時、この関数の 中で、渡されたソケット(ディスクリプタ)が有効かどうかをチェックするように したいのですが、良い方法がありますか?
「有効」の定義は何? それがsocket()で作られたかどうか、ということ? 現在通信可能かどうか、ということ?
>>425 サーバー側のバッチ処理でサーバー上のDOCをクライアント側で開かせたいと言っているのだから
回答も見当違いでは?
自分でバックドアを開けないと無理だろう
virusでも作る気か?
>>426 そのバッチすら、サーバーで実行するとは書いてないわけだが。
今ネットワークプログラミングの練習にと簡単なFTPクライアントを作っているのですが、 とりあえずsocket()→bind()→listen()→accept()とやってFTPサーバに接続して、 データコネクションを一本張ったのはいいんですが、2回目以降データコネクションが張れません。 そこで質問です。 FTPクライアントプログラムでデータコネクションを複数回張りたい時 (例えばファイルリストを取得し、そこからファイルを選んでダウンロードしたいとき) は、socket()→bind()→listen()→accept()の流れを繰り返す以外無いのでしょうか?
つうか、なんでクライアントなのにlisten()accept()しているのか小一時間(ry
>>429 あ、一応コマンド等送るためのソケットは別に確立してあるんです。
FTPはデータ通信用(表現おかし)ソケットが必要だって話なんですが。
ファイルリストとかファイルそのものを送受信するソケットです。
432 :
デフォルトの名無しさん :03/02/13 22:34
>>431 ま、そんなに突っ込まないであげようよ。
ftpの設計がタコだった部分なんだし。
とはいえ、それに対して、passiveって解決もいまひとつ綺麗じゃない気がする...
433 :
デフォルトの名無しさん :03/02/14 00:42
C#のリモーティングに関して質問するのはスレ違いでしょうか? なんか生ソケットとWinSockの話ばっかりなんで・・・
みんな、スティーブンス本は持ってすかね?
↑ X ◎ 持ってるんすかね
423
>>424 UDP socketにbindされた開放ポートを想定してます。
そして、それを通信可能かどうか事前にチェックしたいのですが。
(例えばポート開放に失敗したものがチェックされずにそのまま
渡されてしまったケース等を事前にエラーとして跳ねたいのです。)
>>436 なんだか状況がよく掴めないのですが (漏れって頭わる〜)、
socket() 〜 bind() あたりまでの一連の処理を一つにして、
途中でエラーが発生したらそのソケットは閉じてしまう…という方法では駄目?
if((s = socket(…)) == エラー)
エラー処理
else if(bind(s, …) == エラー)
ソケット s のクローズとエラー処理
else
正常にソケットを作る事ができた時の処理
こんな感じで…。
そうでもしない限り「中途半端にしか使用できないソケットで溢れかえる」
という状況になる気がしますが。
そういう事をしたいのではなく、あくまでソケットが有効かどうかを直前に調べたい
というのであれば、getsockname() あたりでソケットの情報が正しく
取り出せるかどうかをその都度チェックするしかないのではないでしょうか?
長文スマソ。
>>436 sendto/recvfromのたびに一々そういうチェックをするというのは実際的ではない
し、性能の面から云ってもあまりよろしいとは思えないし、そもそもそれが
必要になる状況が思いつかないんだが。。。
もしユーザ向けに提供するライブラリのようなものを書いていて、より
フールプルーフにしたい、といったことを考えているのであれば、生の
socket fdをユーザコードとやりとりせずに、それをラップするデータ構造を
用いる方向で考えたらどうか。それに状態フラグみたいなものを
持たせておいて、その値を信頼することにするわけだ。
440 :
デフォルトの名無しさん :03/02/15 18:34
win2kについてくるQoSって、 ・両端がQoS対応のソフトでしか有効でない ようなのばっかりみたいなんですが、そうなんでしょうか? altqのWindows版みたいなのはどっかにないものでしょうか?
441 :
デフォルトの名無しさん :03/02/15 20:20
すいません、いきなりですが、質問します。 サーバーにGET要求するとき、”If-Modified-Since: Sat, 21 Dec 2002 05:08:58 GMT”と更新された最終日を教えますが、 その”Sat, 21 Dec 2002 05:08:58 GMT”はどのように、生成していますか?皆さん。 プログラム上でのその指定する日付の作成方法をしりたいのですが、教えていただけないでしょうか?
サーバーから来た文字列をそのまま返すんじゃなかったかな。
>>441 キャッシュする時に一緒に更新時刻の情報を保存するか、
保存した実ファイルの更新時刻を変更しとけばいい。
ブラウザやプロキシの場合は前者、普通のアプリなら後者かな?
時刻を書式化する方法を聞いているなら、各言語のスレでどうぞ。
ちなみに、wininet使ってりゃInternetTimeFromSystemTimeか。
445 :
デフォルトの名無しさん :03/02/18 22:24
ちょっと質問。 winsockで POP3サーバーに LISTコマンドを送って得られるメールサイズと 実際にrecvで読みこんだバイト数 ( recvの戻り値 ) が違っていて recvを終わらせるタイミングが取れません。 今は ".\r\n"がバッファに入っていれば、ループから抜けるようにしています。 なにか良い方法をご教授下さい。
LISTで正しいサイズ貰える。 受信した文字をよ〜く見れば おのずから原因が導き出せるとみた。
447 :
デフォルトの名無しさん :03/02/21 10:29
UDPのデータグラムサイズの最大長は、 IPのパケット長フィールドの長さ(16ビット)のみに依存しているとすれば 65535バイトなんだけど、 「詳解TCP/IP」によると UDPソケットにとってアプリケーションが読み書きできる最大サイズ と直接関係する、とある。 ぶっちゃけ、LinuxとかだとUDPデータグラムの最大長はいくつにできるのでしょうか? (あとでIP層でフラグメントされても構わないものとします。) よろしこ。
> (あとでIP層でフラグメントされても構わないものとします。) UDPのことぜんぜんわかってないだろ
>>448 >UDPのことぜんぜんわかってないだろ
あっ、そうだ。
すまんすまん。
これおかしいな。
450 :
デフォルトの名無しさん :03/02/21 13:03
ん? どのあたりがおかしいの?
IPv4のUDPならフラグメント化はありえるよなあ
> IPのパケット長フィールドの長さ(16ビット)のみに > 依存しているとすれば 65535バイト 訂正 65535 −> 65535 - 20(IPヘッダ) = 65515
>>452 IPフラグメントのこと書いてるのに、IPヘッダサイズは関係ないってわからない?
UDPサイズは、IPヘッダではなく、UDPヘッダのパケット長フィールドで決まる。 2バイト。ただし、データ部+UDPヘッダ(8byte)込みのサイズをあらわす。
>>453 間違ってたのは分かった。
そこらへんはちゃんと考えずに適当に書いただけだから勘弁しろ。
>>454 IPヘッダにしろ、UDPヘッダにしろ、
パケット長フィールドには”結果”としての値が入るだけなので
そこから逆算したとして話をしたからまずかったな。スマソ。
要するに、UDPデータグラムのサイズの制限について
ソケットのどーのこーのというところが不明な点があるので
お前ら知ってたら教えてください、ということです。
ブロードキャストパケットを除けば、普通は 64KB近くまで可能な実装が多いはず、少なくとも UNIX系は。 つーか、ためしてみればいいのに。 ただ、多数にフラグメントしてる場合、パケットロスが無くても、ルータなどが勝手に破棄することがある。 せいぜい、8KB程度までにしとくのが無難。
ソケットで画像転送するのはやっぱり画像データをしこしこと送るってことですか。
別にワッシワッシと送ってもらっても結構ですよ
漏れはギュワーンって送ってるけど。
漏れはボトボトと送ってるな。
ワシは頻尿ぎみに送ってる。
だらだらと垂れ流してる
どこかで、多数のルーターをまたいでインターネット経由でたくさんUDPパケットを 同じホスト間で送る場合はTCPよりも遅くなるって話を聞いたんですが、何が原因で こうなるんですか?
UNIX Socket FAQにあった、「ヨーロッパ方面では、X.25が云々」という話か?
>>463 UDPには輻輳制御機構がないから、何も考えずにやると、経路上のボトル
ネックとなる区間の帯域を溢れるようなパケットを送出してしまい、
パケット損失が大きくなる結果、実質的に、そういう結果になる。
もっとも、その経路の帯域が十分広く、かつ空いていて、さらに遅延が
非常に大きい場合には、逆の結果が出ることもないわけではないが、
通常、空いているかどうかの保証なんてできないから、ある程度以上の
量のデータを送る場合には TCP を使う方が無難。
ストリーミング系のアプリケーションだと、ある程度のパケットの損失
は OK で、かつ TCPの再送機構がリアルタイム性の邪魔になるので、TCP
を使わず UDP その他のプロトコルを使うが、この場合、損失率が増えたら
送信レートを下げるような作りこみが、アプリケーションレベルで必要になる。
>>464 それって、もう過去の話だよな。
>>464 「ヨーロッパ方面では」ってヨーロッパ方面で昔はなんか特殊事情でもあったの?
>>466 X.25が大変普及してました。
>>447 まあ、自分のmachineのinterfaceのMTUを越えないのがいいでしょう。
こだわるのであれば、Path MTU Discovery(RFC1191)を。
質問、エラーが出てしまいます。 pthread_create: Error 0 どのようにやるのがよいのでしょうか? よろしくおねがいします。 void *function(void *sock) { ... } main() { pthread_t tid; pthread_attr_t attr; ... newsockfd = accept(sockfd, (struct sockaddr *)&cli_addr, &clilen); if(pthread_create(&tid, &attr, function, (void *)newsockfd) != 0) { perror ("pthread_create"); exit(1); } }
それはネットワークプログラミングの質問なのか?
gcc foo.c -lpthread で大丈夫でした。 multithreaded server、 pthread に関してはどこで質問した方がよいの?
あー > multithreaded server についてはここでもいいかな。
>471 Thanks.
perlでtelnetのようなものを作りたいのですが、 httpの場合空行を送った時に返信が返ってきて、 smtpの場合一行ごとに返信が返ってきますよね。 それをその都度STDOUTに表示させたいのですがどうしたらいいでしょう。
> httpの場合空行を送った時に返信が返ってきて、 > smtpの場合一行ごとに返信が返ってきますよね。 へ?
>>475 httpの場合も正しくないデータを送ったら返信が返ってきますね。
$buf = <SOCKET> みたいにすると返信を待って、永久に止ってしまうので
どうしたらいいのかなあと思ったんです。
>>474 stdin --> your perl client --(TCP/IP)--> server
stdout <-- your perl client <-(TCP/IP)-- server
のような二本のパイプラインを扱う単純なecho clientのような
ものを作りたい、ということかな?
パイプラインが2本なので、シングルプロセス・シングルスレッドで
I/Oの多重化を行わなければデッドロックする場合があるのは当たり前。
1) select, pollなどを用いてI/Oの多重化を行う。
2) connect後にforkしてそれぞれのプロセスに一つのパイプラインを扱わせる
のどちらかを行えばいいだろう。
(・∀・)ニヤニヤ
>>477 そういったことをしないといけないんですね。
調べてみます。ありがとうございました。
GETでRangeが不可なときはどんなステータスコードが帰ってくるのか知りたい
レスポンスに想定されたレンジが入ってなければ不可とみなす しかないんじゃないかなあ。
482 :
デフォルトの名無しさん :03/03/06 00:13
listenってselectできるんですか?
483 :
デフォルトの名無しさん :03/03/06 02:54
>>480 開始場所がファイルサイズを超えて要求した場合は
416 Requested Range Not Satisfiable 食らう。
あとサーバーがRangeに対応してない時は知らん。
RFC2616に準拠した鯖だと416が返る。 ただ、416が返る時でも、Content-Lengthが0の場合と */nnnのnnn(Content-Range: */nnnのnnn)の場合の両方あったような。 RFC2068準拠だと200が返る(Rangeは無視される)
レスくれた方どうも。 例外処理の参考になりそうです。
>>482 ,485
たぶん、TCP状態遷移の「LISTEN状態」から、
SYNを受けた後の「SYN RCVD状態」への遷移を、
select(2)で検知できるか、と聞きたいんじゃないのかな?
つまりaccept(2)する代りにselect(2)していいか、と。
FAQだけども、
答え: よい。readのmaskが立つからその後にaccept(2)すればいい。
P2Pだと、IPが相手に知られてしまう。これを防ぐには マッチングサーバを介して接続すれば良い。 …という記述を本で読み、これだ!と快哉を叫んだのですが、 よくよく考えると、どうやったって繋がっている以上 相手のIPなんてnetstatでも打てば、まる分かりな気もします。 本当にマッチングサーバを介した場合は、匿名性を維持できるのでしょうか?
489 :
デフォルトの名無しさん :03/03/06 18:25
すいません、age忘れ
>489 P2Pじゃ、間に受け皿でもない限り、どうやっても匿名にはならない。 MXやnyみたいなのが匿名と言われてるのは、IPとかじゃなくて、 その上で流れるデータの所在。 スイス銀行のマネーロンダリングみたいな物? 繋がっているのは特定のIPでも、流れているファイル自体は そいつの所有物とはかぎらない、とか。 繋げている以上、相手のIPは同類の犯罪者なわけだけど。 クライアントにトロイ仕掛けてIP情報逆流させるなりで、 繋げてる奴全員列挙できれば丸ごとしょっ引かれるかも。 実際はおれも素人なのでわからんです。 間違ってたらフォローお願いします。
>>490 素人なんてとんでもない、大変勉強になります。
MXは聞いたことありますが、nyってのは初耳でした。
MXってP2Pなんですか…知らなかった…。
質問とは関係ないのですが、マッチングサーバに負荷をかけない方法を
模索してまして…MXのやり方は参考になりそうですねぇ…。資料探してみます。
そして、IPを隠すことはやはり不可能なんですね。罪のないチャットソフトとかなら
そこまで匿名性を考慮しなくても良さそうですが、チャット話がこじれて報復に
ポートスキャンとか…。うーん、どこまで責任を持てばいいのだろう…。
つまらない質問にレスありがとうございました。もちっと悩んできます。
ハイブリッドP2Pね。
493 :
デフォルトの名無しさん :03/03/08 14:10
>>491 >MXは聞いたことありますが、nyってのは初耳でした。
>MXってP2Pなんですか…知らなかった…。
とかいってるヤシが、
>ポートスキャンとか…。うーん、どこまで責任を持てばいいのだろう…。
責任どうのと言える立場なの?わかってねぇな。
てめーは、狼煙の火付け係程度なんだよ。
集落と集落を道でつないだら、伝染病のリスクが増したが交易で栄えた、ってころから
再ベンキョしろ。ばかレオパルドでも知ってたことだぞ。
>>492 キーワードのご教授、ありがとうございます。
思ったより資料多いですねぇ…助かりました。
495 :
デフォルトの名無しさん :03/03/10 17:07
マルチキャストパケットの Listen に入るとき、マシンがネットワークに 接続していないと (ネットワークインターフェースがローカルループバック しかないと) ソケットのオープンに失敗するんですが、そういうものなので しょうか? こういう場合はケーブルが接続されるまで Sleep & Retry する しかない?
各種ダウンローダーにある機能「帯域制限」って、どうやって実装してるの?
適当にウェイト入れてるだけでしょ
厨房ですいませんでWinSockを使ったとき、インターネットに自動に 繋げるにはどうしたらよいのですか。
connectやgethostbynameで勝手につながると思ったが
勝手すぎてlocalhost内とかLAN内で完結してるのに ダイヤルアップのダイアログを出されて困ったり
Winsock2とUnix(Linux)のsocketは繋がるんでしょうか?
Linuxで動いてるApacheにMS製品が繋がるんですか?という質問みたいだな、、、
>>505 日経しか読んでないオヤジ連中ならそう考えるだろうねえ・・・
繋がる、のレベルにもよるが
>>503 繋がらない
なぜなら「Unix(Linux)」こんな訳の分からないもの実在しないから
訳が分からないっていうのは単に勉強不足なだけじゃないの? winsock 自体、もともと UNIX の BSD socket をベースにした 仕様だし、別にそんなに変なものじゃないよ。 まあ、winsock2 は結構機能が増えてるけど。 答は504で合ってるでしょ。
socketとTCP/IPをごっちゃにしている人間がいるようだが、 繋がるかどうかはそこで使用されるプロトコルの問題であって、 socketが繋がるわけではない よってsocketは繋がらないが正解 それとLinuxはUNIXではない
日経オヤジ的に繋がるというと、運用環境が整っていることまで 含んでいるから注意な。
>>509 そういう意味では、BSDだってUNIXじゃないでそ。
つっこむならBSDもLinuxもUNIXじゃないってつっこんでYO!
BSDやLinuxやUnixの区別が重要なコンテキスト以外で区別したがる ヤシは、経験上はUnixを勉強したてで他人に蘊蓄を語りたくて 仕方がないか、文脈の判断もできないか、脊髄反射でレスつけてる だけのDQNが多いな。
>>511 きちんと調べてから書き込め
UNIXではないBSDはライセンスにひっかかるコードを削除したBSDLite系から
Socketの源流は4.4BSDなのでUNIXのライセンスが存在する
513は、UNIXという言葉を、旧AT&T→USL→ノベル→SCOからUNIXのライセンスを 得たソフトウェアであるという意味で定義したいようでつね。その意味でいうと、 オリジナルのsocket仕様を作った4.1aBSDは、UNIXですが、現代の全てのBSDの 元である4.4BSD-Liteは、裁判沙汰からの和解の結果、現SCOの持つUNIXのライ センスを必要としないと確定していまつ。ですから、4.4BSD-Lite以降のOS、 すなわち現代の全てのBSDは全てUNIXではないでつ。 513の言いたいことは、たぶん、こういうことでしょう。 しかし、現時点での、UNIXという単語の公式な定義は、Single UNIX Specification に適合したソフトウェアであることでつ。従って、SUS に適合しっこない 4.1/4.2BSDは、そういう現代的な意味でのUNIXではないでつ。 513のUNIXの定義よりも、こちらのUNIXの定義を選ぶのが、現時点では正式でそ。 というわけで、513よりも511の方が、現代的UNIXの定義の上からは、正しいでつ。
>>515 そういうややこしいことは、顧問の紺猿に任せてあるから。
517 :
デフォルトの名無しさん :03/03/14 08:42
MACもUNIXですか?
まあ、AF_UNIXなソケットはつながらない訳だが。
>>517 Lite以降のBSDや、Linuxのことを指して(UNIX互換OSという意味で)
UNIXと呼ぶことがある (例えばLite系のBSDスレは、UNIX板にある。
そういう意味では、MacOS X は UNIX。
Mac は、OS じゃなくてハードウェアの名前だから、UNIXじゃない。
あと、NT系のカーネルを持つWindowsはPOSIX.1互換機能を持つが、
それだけだと互換度が全然足らんのでUNIXとは普通呼ばれない。
勿論511や513の言ってる意味では、MacOS XはUNIXじゃない。
511や513の言ってる意味でのBSDでは、ある。
>>518 それ言うなら、PF_NSが繋がらないUNIXも沢山ありそうだぞ。
520 :
デフォルトの名無しさん :03/03/16 01:39
ネットワークプログラムのデバッグってできるの?
できるよ。
できない奴もいるよ。
少なくとも俺はできないよ
デバッグにもいろいろな方法があるがそれが出来なと言うことは バグが出たら二度と直せないことになるが?
>>524 絶対バグは作りこまないと言う方法もある。
>>525 それは現実的ではない。
ましてや「デバッグ出来ない」と明言してしまうような人間にとっては。
ネタニマジレス _n ( l _、_ \ \ ( <_,` ) ヽ___ ̄ ̄ ) カコイイ!! / /
バグが出ても仕様と言い張って、絶対に直さないよ。 そのうち誰かが直してくれるし。
ネットワークプログラミングの良いところは、 C/Sのどちらかがバグってても、もう一方が頑張れば なんとなく誤魔化せて動いてるように見えるってことかな。
デバッグ゙不能って…釣りだよね。
描き方が不味かったようですね。 "できない"ではなく"する必要がない"に近いでしょう。
直す必要が無いバグばっかりでもあるまい。 直さなくていい類のものなら放置もアリだろうけど、 >>絶対に直さないよ。 とか >>そのうち誰かが直してくれるし。 という言葉は何なのだ…ヤパーリ釣り?
>>532 > という言葉は何なのだ…ヤパーリ釣り?
それ以外に何があるのかと...。
534 :
デフォルトの名無しさん :03/03/17 02:00
POP before SMTP対応のクライアントを作っています。 1.110番ポートへアクセス 2.USER xxxxxxxx 3.PASS xxxxxxxx 4.QUIT 5.切断 6.25番ポートへアクセス 7.HELO 8.MAIL FROM:xxxxx@xxxxxxxx 以下略 と連続でやっているのですが、 時々rcpthostsにIPアドレスが反映される前に SMTPでメイル送信しようとしてエラーになってしまいます。 POPとSMTPの間にsleepかなんか入れて間隔をあけたほうがよいのでしょうか? もしくは、POPのSTATかなんかも行ってみるか...
何故エラーの内容を書かないのか、エラーの内容が知られてはいけないのか謎だ
エラーはこんな感じです。 553 sorry,that domain isn't in my list of allowed rcpthosts (#5.7.1)
>>534 サーバからのレスポンス ( 200 xxx is welcome など ) を確認してから
QUIT してクローズしてみたらどうでしょうか。
>>537 POPサーバのレスポンスは確認しています。
+OK
という応答メッセージが返ってきます。
普段はうまく動いているのですが
時々エラーが出ています。
もしかしたら、サーバに負荷がかかっていると
rcpthostsの反映に時間が掛かってしまうのかな?
と思っているのですが...
539 :
bloom :03/03/17 09:50
pop が +ok で、smtp が not allowed になるのでしたら、 やはり、お考えのように sleep でタイミングを取るか、 retry するように実装することになるでしょうか。 rfc にはそのあたりの記述はなさそうですし。
>>538 どうしてじゃーゴラァ
とISPに聞くのが一番ではないかと。
一般的なメーラーは待ち時間が設定できるようになっているが、そうしない理由は?
543 :
デフォルトの名無しさん :03/03/17 23:11
>>542 一般的なメーラーってたとえば?
俺の知ってるメイルクライアントにはそんな設定機能はついてなかったが。
一般的じゃないのかな?
MS製品とBecky!とShurikenだけど。
...確かに一般的じゃないかもシレソ
544 :
デフォルトの名無しさん :03/03/18 03:53
>>538 clientは、直前のPOPのauth.に成功した確信があるんだから、
> 553 sorry,that domain isn't in my list of allowed rcpthosts (#5.7.1)
をみたら、sleepしてretryが一番素直な仕様なんじゃない?
retryを、6-8のどこから始めるべきなのかはしらんけど。
# 時間、回数(>=0)が指定できればなおよし。
545 :
デフォルトの名無しさん :03/03/18 19:10
HTTPのHEADだけで Web上のコンテンツが更新されているかどうかというのを完璧に チェックすることってできますか?
> 完璧に サーバーが嘘ついたら無理
>>543 少なくともBeckyは指定できるがきちんと確認したのか?
548 :
デフォルトの名無しさん :03/03/18 21:45
>サーバーが嘘ついたら無理 じゃあ、よくあるリンクチェッカーみたいなものは 毎回GETして以前キャッシュしたものと比べてるのかなぁ。
>>548 サーバは嘘をつかないという前提のもとに(ry
551 :
デフォルトの名無しさん :03/03/18 22:16
誰かおせーて。 bindって自分のホストのアドレス、ポートを設定するって本に書いてあるんだけど、 sin_addr.s_addr = htonl(INADDR_ANY) の時も、する必要があるの? なんか、bindの存在理由がよくわからないっす。 NIC2枚差しで、どちらか一方のNICでのみ通信の時しか活躍しない?
>>551 IPアドレスが複数ある時の問題であって
NICの数は関係ない
>>551 サーバー側はlistenするポート(とアドレス)を設定せにゃならんから、必須だって事はわかるよね?
クライアント側でも使用するポートやアドレスを自分で決めたい場合があるんだよ。
例えば、サーバーが特権ポートから接続されることを要求してるとか、
サーバーに対して複数の経路から接続できる場合に、どの経路を使うかを自分で決めたいとか。
bind(2)せずにconnect(2)した場合に適当な設定(INADDR_ANY、空いてる非特権ポート)を
使わずにエラーとするのはsocketの仕様としか言いようが無い。
ようするに、お行儀よくbind(2)しろってこった。
bindってDNSデーモンのことだと思ってしまった
バークレイリケットでマルチキャストのプログラムって 作れます?
558 :
デフォルトの名無しさん :03/03/19 13:43
MSNメッセンジャースレあるじゃん。 あれ見て、なかなか面白そうだなぁと思って、 Linuxのコンソールで動くメッセクローンを作り始めてみた。 かなりいい勉強になるし、 やっぱりプログラムって楽しいね。 ところで、Cである文字列からIPアドレスを抜き出すのってどうやると効率的なの? 今、かなり無理矢理抜いてるんだけど、諸兄のご助言お願いします。
それは、たとえば2chのスレの中から、IPアドレスを検出する、という話か?
ある文字列というのがどういうものなのか説明せずに 回答者にエスパーであることを望むお前はどちらの何様?
言葉足らずでスマソ。 まずC言語です。 ある文字列とはたとえば、 char *string="hogehoge 192.168.0.1 hogehoge" みたいな文字列です。
数字を見つけて数字が終わるまでにピリオドが3つある文字列
を検索する
香ばしくなってまいりました
釣れた
>>556 出来るよ。sf.netに幾らでもサンプルが転がってるよ。
ところで、
>>554 > bind(2)せずにconnect(2)した場合に適当な設定(INADDR_ANY、空いてる非特権ポート)
> を使わずにエラーとするのはsocketの仕様としか言いようが無い。
これ何? IPアドレスを複数持っていると明示的にbind(2)しないといけない、
実装があるということ? 仕様ではないと思うけども。
>>569 じゃないけど、
IP Aliasを使う場合の事を言ってるのかな?
そうじゃなくて、例えばループバックで127.0.0.1と、NICに192.168.0.1
みたいな場合だって、ある意味IPアドレスを複数持ってる事になるの?
パソ初心者板から誘導されました。よろしくおねがいします。 ネットワークがわかる偉い皆様、助けてください。 会社で、仕事中に2ちゃんねるしてる時に限って、画面が上下にいきなり揺れます。 前の会社では、システム課が別にあって、CP関係で分からないことがあって電話すると 向こうから私の画面をいじって説明してくれたりしてたんです。これもネットワーク ならではですよね? で、今の会社も、掲示板とかあるのでネットワークは組まれてるのですが 画面の監視までされてるのかどうか、どこを見たらわかりますか? ネットワークアイコンからは、みんなのデスクトップやマイドキュメントの 「フォルダ」は見れたけど、画面って見れるの? たまにはこんな初心者も相手してやってください・・・・
あ、ちなみに揺れるというのは、 スクロールバーをつかんで上下にゆすった感じ。 思い込みかもしれないけど、いかにも「見てるぞ」って告知みたいで 腹立たしいんです・・・・・腹たてれる立場じゃないけど。
誘導した奴を殴って来い
先輩!すごい新人が来ますた!
ネタとしてはなかなかオモロイな(w
>573 殴りたいッスよ・・・・さすが初心者板、分からないようでした。 先輩、たのみます、ネタじゃないから悲しいっすよ・・・
>>571 どのスレの何番からきましたか?
教えてください。
「パソコン初心者板総合質問スレッド」というところです。ただ、私がそこに 縋ったのが2月中旬に、会社からだったのですが、そこは今すでにVol.329 で 今日たった板のようです。私が行った時VOL何だったのかは覚えてません。 そこと、「くだらねぇ質問はここに書きこめ」という所です。 二箇所で聞いたらマルチなんですよね、知らなくて。 「プログラムとかネットワーク板にいけヴォケ」扱いでした・・・・
>>571 ウソはもう少しうまくつこうね。
ウソの上塗りは傷口を広げるだけですよ。
あーあもう・・・・ 探せるもんなら探してるよ過去ログ・・・
/etc/hostsで 127.0.0.1 localhost 192.168.0.1 hoge としているのに gethostbyaddrで 127.0.0.1 のホスト名を調べると hoge が返ってくるのは どうしてですか?
>>580 > あーあもう・・・・
> 探せるもんなら探してるよ過去ログ・・・
このスレを読んで、いいかげん、スレ違いだということに気づいたらどうなの?
571は透明あぼーんしました
ついでに574も透明あぼーんしました
>>581 OSもライブラリもわかんねーんであれなんだけど、とりあえず、
$ ltrace getent hosts 127.0.0.1
$ strace getent hosts 127.0.0.1
とかやってみれば? で続きはそのOSの板かライブラリのスレで。
hostsの設定じゃなくてそのマシン自体の名前を返しているのでは?
>>588 ワロタ
PCの画面を盗聴(?)するアプリの存在は知ってたが、
商品として売り出すとは。
商魂たくましい会社だな(w
>>571 LANとは別に画面キャプする方法もあるよ
見慣れない装置が繋がったりしてないか?
>>571 みたいなスレ違いな質問にはみんな答えるのに
>>581 には誰も答えてくれない (´・ω・`)ショボーン
あれ?2ちゃんって質問にはちゃんと答えるのが義務だったんだ。ふーん、初耳。
で、
>>586 は無視?
>>581 hostent.h_addr_listには何が入ってますか?
595 :
デフォルトの名無しさん :03/03/23 00:04
全銀TCP/IPってなんなのでしょうか? TCP/IPやSNAとかと並ぶ物? HTTPやFTPと並ぶ物? それとも全くの別物なんでしょうか。 調べてみると、ライブラリが販売されているようで、 TCP/IP上で動くような感じがするので、HTTPや FTPと並列の物のような気もするんだけど、 ホストとも通信出来るらしいので別物のような気もします。 みんななら、ライブラリ使わなくても1から実装出来ちゃうんですか?
ライブラリって何を指して言ってる? ちなみにソケットライブラリさえあれば俺みたいな素人でも色々できる。
599 :
デフォルトの名無しさん :03/03/27 07:48
600 :
デフォルトの名無しさん :03/03/27 09:08
プログラム勉強するなら何から始めればいいか誰か漏れに教えてください
>>600 勉強する方法を人に聞かないで自分で考え試行錯誤することから
でも、もう聞いちゃったので無理
諦めるしかない
あーあ
個人で作ることを前提として。 俺ならこんなのに金払うのはバカらしいから自分で作る。
>>600 推薦図書スレに行け。
>>604 > さすがに、ゴリゴリと1から作る奴はいないですよね。
いや、俺は10年以上前、学生バイトでover TCP/IPに相当するものを造らされた。
単にTCP/IP経路をイントラネットのtunnelingに使うだけなので、
layer 3より上に立ち入る必要はない、と主張したのだが、
layer 7 gatewayを作ることになった。(何の変換もなし(藁)
状態遷移させるだけなので簡単だけど、
糞プロトコルだから、得るところが何もない。
なるほどと思えるプロトコル設計がまるでない。手間がかかるだけのやっつけ仕事。
既存のライブラリ使って、後でライブラリを入れ替えられるような
ライブラリwrappingの設計を真面目にやった方がいいよ。
over TCP/IPの版、TCP使ってるのに2048byteが上限なのが笑えるよな。
どうしても上限付けたいなら、前と同じにしておけば下位互換性も持つのに。アフォ
607 :
デフォルトの名無しさん :03/03/29 23:00
Windowsでウィンドウを持たないアプリなので、winsock2のイベントオブジェクトを使おうとしています。 で、質問なのですが WSAAsyncGetHostByNameのイベントオブジェクト版ってのはあるのでしょうか?
>>599 >> ホストとも通信出来るらしいので別物のような気もします。
> そりゃ、over TCP/IPじゃなくて、半二重ベーシック手順の昔のやつ。
最近のホストは、LAN インターフェースぐらい持ってるから、over TCP/IP なんかも直接繋げる。
>>607 スレッド生成して、gethostbyname() から結果が返ってくればイベントをセットすればいいだけかと...。
>>609 TerminateProcess以外の手段で問い合わせをキャンセルできますか?
もといTerminateThread どっちにしてもかなり最後の手段なのであまり使いたくない
>>607 イベント版は無いので、API用にダミーウィンドウを動作させるしかないかと。
>>607 イベントを利用するだけならウインドウは必要ないが、
いったい何のために作るの?
自分でDNS鯖に投げれ。
hostsがどうとかNISがこうとかWinならlmhostsやNetBIOSやWINSが ああとかややこしそうなので車輪の再発明は避けたい
616 :
デフォルトの名無しさん :03/04/04 23:02
フレッツADSLを利用しているのですが、ルータの外側NICにグローバルIPを割り振られて 内側はIPマスカレードにしています。 このような環境でルータの外側NICのIPアドレスを取得したいのですがどのような方法が あるのでしょうか?
>>616 公開IRCサーバにでも繋げて自分の情報をとれば?
やっぱり無理みたいですね。
ルータからPPPの情報を取り出せればいいんだろうけど、 あんまりそういう話は聞かないねえ
UPnPが使えればなんとかなるかも
>>621 あっ、ありがとうございます。
さすがこのスレの人はレベル高いですねー
>616 透過串が刺さってたらどうする?
>>616 ルーターは何使ってるんだろ?
ほとんどのADSLのルータって、ウェブの管理インターフェース持ってると
思うし、その管理画面上から WAN側の IP 情報を取得できると思うので、
perl かなんかで自動的にルータにアクセスするスクリプトでも書いたら
どうだろう?オレは前はメルコのルータ使ってたときはそうやって自動取得
してたよ。 今は Aterm を使っていて、Atermは syslog の機能を持っている
ので、他のマシンに syslog 飛ばしてそっちでメッセージ解釈させて IP を
取得してるけどね。
>>623 透過串ってなんですか?直接
>>621 のサイトにconnectしても透過串のアドレスになってしまいますか?
>>624 atermです。そんな機能があったんですね。
でも
>>621 のサイトにアクセスするほうが簡単そうですね。
>>621 のやつ、XMLで返してくれるともっと嬉しいんだけどな。
>>616 $ traceroute -m 2 pc2.2ch.net(適当なIPアドレスでもいい)
Windowsだとtracertだっったかな?
同じ事するコードを(例えばCで)書くのも簡単だよね。
628 :
UNIX使い :03/04/05 02:51
>>627 あ、これhop count増やさないstealth routerだと駄目。
630 :
デフォルトの名無しさん :03/04/05 10:34
>>624 俺、そうしている
てかそーゆー常駐ツール作って使ってる
いちいちブラウザ立ち上げるのメンドイし、接続状態の把握とかに使用
632 :
デフォルトの名無しさん :03/04/10 00:09
趣味程度で1ヶ月程度しかまだネットワークの勉強してない者ですが、質問です。
過去ログに合った場合はすんませんです。一応確認したのですが。
Winsockを使用したプログラムを作ってまして。
で、一応、LAN、イントラネット内では回線は繋がるんですが(会社の回線勝手に使用)、
ADSL等の、まぁ家庭で使用している、回線類ではまったくもって繋がらんのですが何故?
目指す所としては、P2P回線を構築したいのですが。
初心者なりに考えた予想では、接続先のIPが違うのかなぁとか思ってるのですが。
>>621 にある、
http://dynamic.zoneedit.com/checkip.html 等で記述された
IPを使用してるんですが、これって全然違うんですかね?ひょっとして。
初心者ですんませんです。ちなみに、自宅→自宅って感じでテストをしています。
それとも、acceptで、接続待ちを行っていますが、ここで何らかの処置を行うのでしょうか?
もう分からんです。サッパリ。とりあえずうんこして寝ます。
>>632 情報不足だ。
繋がらん、とはどんな状態だよ。
多分ルータに接続しようとしてる。 192.168.*.*とかのLAN内にサーバ勃てた場合、WANからは入れないよ。
635 :
デフォルトの名無しさん :03/04/10 00:32
>>633 サーバー側は待ち状態になっていて、
クライアント側はconectした状態のままな状態です。
ちなみに、非同期通信で繋がった場合はプロシージャーから
winsockのメッセージを取得するようになってます。
繋がるとメッセージを送信するプログラムになってるのですが、来ない。
これは完全に繋がってない状態だと思われますです。
636 :
デフォルトの名無しさん :03/04/10 00:45
>>634 ああ、それっぽいです。サーバー側のIPの設定をローカルの設定にしとりました。
ただ、上記に書いた方法でIPを登録して、bindをすると生成に失敗します。
取得してるIPがやはり違うんでしょうか?
638 :
デフォルトの名無しさん :03/04/10 00:51
[internet] ┃ h.o.g.e [router] 192.168.0.1 ┏━━┻━━┓ [client] [server] 192.168.0.3 192.168.0.2 として、キミが取得してるのはinternet側のh.o.g.e。 clientがh.o.g.eにリクエスト出してもserverには届かないよね。
640 :
デフォルトの名無しさん :03/04/10 01:29
>>638 それよりも、ADSLルータについて勉強しろ。
そうすればどうすればいいかわかる。
ダイヤルアップで接続してから同じことすれば
うまくいくはずだけど。
ちょっと気になったのですが。 アップローダーが出来るなら、 HPを表示しただけでHD内のファイルを転送できませんか?
ファイル名を c:\windows\user.dat にして、HPを開いた時に送信ボタンを押した事にすれば 可能だと思うのですが。 なんで出来ないのですか?
>>643 >HPを開いた時に送信ボタンを押した事にすれば
どうやって?
じゃ、ユーザーにクリックさせればあらかじめ指定したファイルを HDから盗めるの? 「押してみ」ってボタンを載せて。
この板はプログラムを作る人のための板です。 あらゆる質問はまずすれ立てるまでもない質問はここでスレにしてください。 その他、お勉強ページへのリンクスレ、 推薦図書・必読書スレ もあります。 プログラム・ソフトの使い方は PC 初心者板やソフトウェア板へ。 ウイルス、ハッキング・クラッキングを求めるような発言は禁止です。 Javascript は Web 制作板、CGI は Web プログラミング板へ。 業界談義、愚痴はプログラマ板へどうぞ。 ゲーム関係の話題はゲーム製作板へどうぞ。 ネタ、板とは関係の無い話題はご遠慮ください。
647 :
デフォルトの名無しさん :03/04/10 13:17
>>643 おまえは馬鹿か?
そこまで書いてわからんのか?
648 :
デフォルトの名無しさん :03/04/10 15:26
UDPで通信をするソフトを作っているのですが 受信バッファーをフラッシュする方法を教えて下さい。
>>648 あなたの環境がまったくわからないのに、どう答えろと?
650 :
デフォルトの名無しさん :03/04/10 16:20
>>649 これは失礼しました。
WindowsXPです。
該当するAPI等があれば教えて下さい。
あぼーん
>>650 意味がないんじゃないの?フラッシュしても。
UDPでしょ?相手に届く保証も無い(欠けてる事もある)し、何バイト単位で送信というわけでもないし。
ヘッダやフッダとかデータ区切りつけて送信してるんでしょ?区切りまで
空読みしては?
653 :
デフォルトの名無しさん :03/04/10 16:47
>>652 ハンドシェイクを行っているんですよ
それで稀に同期がずれることがあるみたいで
シリアルでは送信前にPurgeCommをしてバッファを空にしてたんですが
UDPにもこれ相当のAPIがあれば便利かなあと思いまして、
今はとりあえず空読みして回避しています。
sambaがインストールされていないマシンから winpopupメッセージを送りたいのですが、 smbclient等で使われている winpopupのプロトコルはrfcで規定されているんでしょうか? rfc1001や rfc1002を winpopupで検索して見ましたがヒットしませんでした。
>>653 素人はUDPを使うべきじゃない。考慮すべき事が多すぎる。
656 :
デフォルトの名無しさん :03/04/11 10:49
>>655 それじゃ一生使えないでしょが・・
で、
>>653 に対して何も返答できない言い訳でつか?
知らないならレスするなよな
UDP自体もう要らないんじゃないの?
>>657 UDPはトランスポート層を担うプロトコルとして、
## host内のentityをport番号で区別する。
リアルタイム系のプロトコルを支えているし、
DNSをTCPにすると、
SYN →
← SYN/ACK
ACK/req. →
← SYN/res.
となるから、かかる時間が倍になってしまう。
しかし、素人がUDP使って設計するとろくなことにならんので、素人は禁止(w
MTU discoveryとかしらんだろうし。
659 :
デフォルトの名無しさん :03/04/11 13:56
TCP_NODELAY とか 上手くいくかどうかは非常にあやしいが
ってUDPには関係無いや
662 :
デフォルトの名無しさん :03/04/11 18:30
知ったかぶりだったんか・・
663 :
デフォルトの名無しさん :03/04/11 18:40
up2dateみたいなアップデートシステムを簡単に作るには どのソースを使いまわすのが良さげですか?
up2dateじゃない?
winsockのacceptをcallするトリガになるようなメッセージとかって無いすか? CSocketのOnAcceptみたいな。
>>653 >ハンドシェイクを行っているんですよ
>それで稀に同期がずれることがあるみたいで
ハンドシェイクにタイムアウト実装しないヤシはペケ。
>>652 が
>UDPでしょ?相手に届く保証も無い(欠けてる事もある)し、何バイト単位で送信というわけでもないし。
と書いてるだろ。*届く保証が無い*んだから、「来ないこともある」という前提で
ハンドシェイクを久米。
ソケットがどうとか、UDPがどうとかいう以前の問題とケテーイ。
そのハンドシェイクがシリアルで動いてるとしても*運がよいだけ*と認識汁。この度素人が。
つーか、
>ハンドシェイクを行っているんですよ
>それで稀に同期がずれることがあるみたいで
って何言ってるつもりなの?
オーメン(
>>666 )分かるなら解説してくれ。
「ハンドシェイク自体に失敗する」ことを「同期がずれる」と称しているのか?
>>667 >「ハンドシェイク自体に失敗する」ことを「同期がずれる」と称しているのか?
まったくの推測であるが、
STX -> ACKとか ENQ -> ETXとかそういうことをシリアルであってた経験に
うぬぼれて、そのハンドシェイク(プロトコルと呼ぶべきか)をそのまま
イーサに持ってこようとしているのでは?
たぶん、PC<--->装置だろ。装置は計装関係あたりだろ。
・・・漏れって思い込み禿げしすぎるかも・・・
>>668 スマヌスマヌ。
>>667 への回答になってなかった。
>「ハンドシェイク自体に失敗する」ことを「同期がずれる」と称しているのか?
結局、漏れが想定してるようなヤシだったら、プロトコルが思ったとおりに動かない、
ときどきこける、あるいはハンドシェイクの周期がずれる、などを
ひっくるめて、「同期がずれる」と言ってるんだろうよ。
プロトコルは穴だらけでタイミング検証もできてない実装だろうよ。たぶんな。
ネットワークスペシャリスト持ってますか?
パスワードのパケットをそのまま投げてなにがどう問題になるの?
他の人に読まれていいのであれば。
>>669 やっぱそうなんかな。
そうだとすると、奴はdatagram通信って何なのか理解出来てないな。
UDP datagramがlostしているだけの話で、
期待している奴の次のdatagramが来る→同期がずれるって言ってんだろう、
とも思ったが、そんな時PurgeCommは何も解決してくれないし…
次はTCP上で独自なSTXとかACKとか飛ばすのかな
なんでそんなに叩いてるの?
656、659等の発言を見よ。
ああ。 なにも知らないくせに他人を推測で批判しやがって。 漏れはお前みたいな素人と違ってちゃんとUDP理解してるし、 その上で面倒がおきるから使うなと言ってんだバカヤロウ。 味噌汁で顔を洗って出直して故意。(゚д゚)ペッ! っつーワケですな。 まぁ、聞くほうは答えが出揃うまでは謙虚にしていろっつーことだ罠。 利根川先生もそう仰っている。
>>676 PurgeCommみたいなのWinsockには、無い。他は知らん。
ioctlsocket/WSAIoctlでFIONREAD/FIONREAD , SIO_FLUSH
あたりを嫁ってか。
んなもん使ったらドライバ依存しまくりだろ。
PurgeCommがまともに動くのは、シリアルドライバがMS純正だからだろ。
サードパーティ製シリアルボードではハマリまくるぞ。<-逆もあり
漏れは胃ガンぽいヤシが胃薬を買いにきたら、「早く医者へ行けヴォケ」と言いたいけどなぁ。
お前等口だけだね(´,_ゝ`)
socket通信くらいで何いばってんの?
>>648 はどこいったんだ?
仕様変更できるなら、TCPにしとけよ〜!
そのsocketもまともに使えない奴が何言ってるの?
(´Д`;)ヘコム・・・
トゲトゲしなさんな。 相談しずらくなる。
相談しづらくなる
>>686 日本語もまともに使えない奴が何言ってるの?
(・∀・)ニヤニヤ
なぁ〜んか知ったかぶりの厨房が何かほざいてますねぇ
知ったかぶりはプログラマとして最低限必要な技術です それが出来ない人間はプログラマとしての適性はありません
HSPスレかと思った
粘 着 U z eeeeeeeeeeee
695 :
デフォルトの名無しさん :03/04/16 03:49
CAsyncSocketの派生クラスCSocketAを作り、 CSocketA* m_p1; CSocketA* m_p2; とし、別々の場所(同じスレッド内)からそれぞれ m_p1 = new CSocketA; m_p2 = new CSocketA; としてインスタンスを作って使用すると、sockcore.cppの513行目のアサートが発生します。 別々のインスタンスなので大丈夫だと思ったのですが、このような使い方は間違っているのでしょうか? これを回避するにはどうすればよいのでしょうか?
>>696 そこに載っていることとは関係無いと思うんですけど・・・
>>695 コンパイラもライブラリバージョンも書かず、513行目と言われても
なんのことやら
【使用すると】の部分が問題じゃなくて?
それぞれCreateしてConnectしてCAsyncSocket派生クラス内のOnSendやOnReceiveを オーバーライドしてるだけなんですけどね・・・ OnSendやOnReceiveの中身をすべてコメントアウトして、 一方のCreate、Connectの両方をコメントアウトすると(つまり一方のインスタンスは newしてdeleteするだけ)アサートしません。 しかし、Createして実行するとアサートします。
テスト用のダイアログベースのプロジェクト作って確認してみました。 CAsyncSocketの派生クラスCTestSockを作り、OnSendをオーバーライドして CString strCmd = "GET / HTTP/1.0\r\n\r\n"; Send(strCmd, strCmd.GetLength()); とする。 ダイアログのメンバ変数として CTestSock* m_pSock1; CTestSock* m_pSock2; を宣言。これらはダイアログのコンストラクタでNULLで初期化します。 次にダイアログにボタンを二つ作り、一方に if(m_pSock1 != NULL){ delete m_pSock1; m_pSock1 = NULL; } m_pSock1 = new CTestSock; m_pSock1->Create(); m_pSock1->Connect("www.yahoo.com", 80); とし、他方に // 先のm_pSock1をm_pSock2に換えただけ。 if(m_pSock2 != NULL){ delete m_pSock2; m_pSock2 = NULL; } m_pSock2 = new CTestSock; m_pSock2->Create(); m_pSock2->Connect("www.yahoo.com", 80); とします。 後はボタンを交互に連続で何回か押せばアサートが起きます。
>>702 のソースから、Send呼び出しの1行をコメントアウトするとアサートは起きません。
MFCソースを見ればわかるかとは思うけど、 たぶん、Create直後にAttachHandleしとけばいい
>>704 AttachHandleするとはどういうことでしょうか?
CAsyncSocketメンバ関数にAttachというのはありますが、これではないですよね。
CAsyncSocket::AttachHandle(pSocket->m_hSocket, pSocket, FALSE);
FTPクライアントを作ってみてるんですけど、ファイルをダウンロードする処理で perlだとwhile(<SOCK>){}で全データダウンロードできますが Cの場合、どのように全データダウンロードできたということを判定したら よいでしょうか?
ソケットが切れたら完了
recvの戻り値は関係ない 接続が切れたら終了
>>710 接続が切れたことはrecvの戻り値が0かどうかで判断すると思ったのですが。
あっ。とりあえずselectは使ってない場合です。あとでつける予定です。
以前データより先にcloseのパケットが先に到着するような話題があったと思うので
ちょっと心配。
712 :
BSDソケ斗 :03/04/17 09:52
>>707 OSは何なの?
recvなんか使わずに、fread使いなさいよ。fdopenしてさ。
Win9xのWinsockは、socketがfile handleじゃないから駄目だけど。
>>712 OSはWinです。9x系もありです。スマソ
>>710 > recvの戻り値は関係ない
> 接続が切れたら終了
アフォか?
>>711 > 以前データより先にcloseのパケットが先に到着するような話題があったと思うので
> ちょっと心配。
TCP はストリーム型通信だから、そんなことはあり得ない。
実際に順序が逆転してパケットが到着したとしても、
アプリケーションにはちゃんと順番通りに通知されるから、
安心しろ。
>>714 thx
安心しますた。
selectもいれて一通りできるようになりました。
たぶん、closeパケットうんぬんはwinsock2で非同期ソケットの
場合のMS独自のバグみたいなものだったかもしれません。うるおぼえでスマソ
それはちょっと安心しすぎ。closeの後にreadが到着する可能性はあると MSDNには書かれてる。 > FD_CLOSE should only be posted after all data is read from a > socket, but an application should check for remaining data upon > receipt of FD_CLOSE to avoid any possibility of losing data. CAsyncSocketがこの可能性を考慮してくれるのか 自分でやる必要があるのかまでは知らないけど
>>716 それは、アプリケーションがソケットをクローズした後で
データが到着する可能性がある、って話だろ?
>>711 が言ってるのは、相手からの FIN が相手からのデータ
を追い越して来ちゃうかもしれない、って話だろ?
ごっちゃにするな。
>>706 Createの直後にそれやると今度はsockcore.cppの408行目でアサートしますが・・・
すでにclosesocketしたハンドルをもう一度closesocketしてもよいでしょうか?
>>720 良い悪い以前に、そんなこと必要ないだろ?
>>721 エラーが出たら全部クローズしたいんですけど。だめですか?
(^^)
724 :
デフォルトの名無しさん :03/04/17 23:56
保守age
716の解釈は、 「WSAAsyncSelect などを使った場合に、コネクションが閉じられたら、FD_CLOSE が飛んでくる。 だが、その時点で、まだソケットバッファにデータが溜まったままになってることがあるから、 データロストしたくなかったら、ソケットバッファをチェック(recvなどで)しといた方がいいよ。」 ってことじゃないかな? あと、前スレの912も見ておいたほうがいいかも。
>>727 同URLより、
> 解決方法: クライアントからのデータ送信を行う際に Sleep API などにより
> 間隔を空けることで回避可能な場合があります。
ぷ 「解決方法:〜場合があります」だってさ。
>>725 複数ソケットをオープンしてて、ソケットを閉じるタイミングが違うじゃないっすか?
エラーがでたとき、いちいち開いてるのだけクローズするのって面倒じゃないですか。
プログラム組むとき、いちいちエラー処理するのって面倒じゃないですか。
>>730 UNIX のソケットしか知らないんだけど、あるソケットをクローズしたら、
そのソケットディスクリプタを格納する変数に、-1 を放り込んでおいて、
何らかのエラー発生時には、値が -1 以外のものをクローズする、ってのは
どう? よくやる手法だと思うんだけど。
クローズ時。
close(s);
s = -1;
エラーで全部をクローズする時。
if (s >= 0) close(s);
>>731 面倒なので極力しないようにしてまつ。
>>732 (・∀・)イイ!!
なるほどねー
いただきます。
>>732 つーか、UNIXだと、
#define MAX_FD (システムごとに違う)
for (int i=0;i<MAX_FD;i++) { (void)close(i); }
こんな乱暴なのもしばしばだわな。
Winsockだと、 二回目はWSAENOTSOCKつーエラーになるだけのはずだけど、
Winsockは油断ならんから、ジェントルにプログラミングしといた方がいいよ。
SO_LINGERしているなら、MSDN参照な。
FTPならファイルリストからサイズを取得して そのサイズまで達していなかったらリトライ 転送中に切れることまで考慮するのならそうすべき
エラー処理くらい入れとけよ・・・ 最悪assert程度でもいいからさ
738 :
デフォルトの名無しさん :03/04/18 15:01
ちょっと質問 if( (OpenHandle = :InternetOpen( "title", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0 )) != NULL ){ DWORD wk = 5000; :InternetSetOption( OpenHandle, INTERNET_OPTION_CONNECT_TIMEOUT, &wk, sizeof(wk) ); ConnectHandle = :InternetConnect( OpenHandle, pServer, INTERNET_DEFAULT_FTP_PORT, pUser, pPass, INTERNET_SERVICE_FTP, 0, 2000 ); } ↑のようにタイムアウトを5000msに設定して存在しないサーバーにコネクトすると 1分くらい後に:InternetConnectから抜けてくるのですが タイムアウトの設定どこがいけないのでしょうか?
740 :
デフォルトの名無しさん :03/04/18 15:32
>>739 げっ、ひょっとして意味無いってことですかねこれを見る限りでは
では、これに代わってタイムアウトを設定する方法ってあるのでしょうか?
741 :
デフォルトの名無しさん :03/04/18 15:55
>>740 unix なら alarm。winsock だと。。。よくわかんない。
てかよく見ると work around が 739 のリンク先に書いてあるじゃん。
assertってabortを呼ぶから嫌い。exit(1)にしてくれればよかったのに。
>>742 自分用のassertを書けばいいじゃん
#define MY_ASSERT(e) ((e)?(void)0:my_assert(__FILE__,__LINE__))
あとはお好きに。
>>742 デバッグ用だし別にいーじゃん。
まさかリリース時に有効にしたまま納品してないよな?
リリース後も継続して品質を向上する気ならリリース版にも(my)assertは必要だな。
assertって何ですか?
Cスレ逝け
>745 assertをソースから消せって話じゃないだろ。 リリース版ではNDEBUGを定義しとけと。
749 :
デフォルトの名無しさん :03/04/19 17:32
>>742 abort()を呼ばずに何のasert()だ?
コア吐いてくれなきゃ意味ねーじゃん。
以上、UNIXバカより。
>>748 バグが見付かったら積極的にクラッシュさせて、報告して
もらおうって話でしょ?
>>752 じゃあどうするんだ?
明らかにエラーなのになんとなく動作させたほうがいいのか?
よくまぁスレ違いな議論を長々と
やっぱり、このスレ的には、 assertの動作は、bug情報をE-mailか、httpでPOSTでしょう。 もちろんちゃんとお客にはそれを教えといてね。
だからassertって何?
てか内部エラーが発生しても再起動しないで動き続けるようなサーバが 今も稼動してるってことか?(((( ;゚Д゚)))ガクガクブルブル
このマクロの目的は、プログラマーがプログラムのバグを発見する手助けを することである。"assertion failed in file foo.c, function do_bar(), line 1287" というメッセージは ユーザーには何の助けにもならない。
内部エラーを一体どう伝えればユーザーの助けになるのかと(略
>>759 そのためにIEなんかにはフィードバック送信メニューがついてる。
ユーザーにはエラーが起きたことを通知すればよい。
エラーの内容はこっちにフィードバックされればよい。
あーあ、早く別スレ行ってくれねーかな
自作ソフトを別マシンで動かしてて、飛ぶと「MSに報告しますか」とか聞かれる 激しく意味がない
>>759 エラーが発生したので終了します。
エラー内容を開発元へ送るには送信ボタンを押してください。
[送信] [閉じる]
>>763 MSがデバッグしてくれるだろうよ。
有償で。
∧_∧ ( ^^ )< ぬるぽ(^^)
767 :
デフォルトの名無しさん :03/04/20 20:05
DirectPlayってやっぱり遅いんですかね?
769 :
デフォルトの名無しさん :03/04/21 00:56
変わらないに600000万ペソ
でも仮に遅かったとして、将来速くなる可能性もある事を忘れてはならない。 また、消えてしまう可能性も(ry
逆に、あまりレベルの高くないプログラマでも、 DirectPlayのフレームワークに添って書けば、スケールするようにできてるんじゃないの? じゃないと、コールバックモデルのフレームワークの意味がないし。
最近のDirectPlayはUPnPを自動的に使ってくれるしな
773 :
デフォルトの名無しさん :03/04/22 16:54
>>772 UPnP対応じゃないルータって
どのくらいあるかな?
かなり
なんでDebianですらUPnP関連のソフトをパッケージにしてくれないのかな ってスレ違いか。
「してくれない」ではない 必要なら自分でやって、それを提供せよ
777 :
デフォルトの名無しさん :03/04/22 18:05
プログラムが動いているマシンのグローバルIPアドレスを求めるには どうすればよいのでしょうか。
>>777 ルータにリクエスト飛ばす。(当然ルータに依存する。)
少なくとも俺はそうしてる。
または、外部に中継サーバ置いて、IPアドレスを返してもらう。
なるほど、、 ルータで場合わけするのは大変そうなので レンタルサーバーにCGIを設置して取得してみます。 ありがとうございました
それならREMOTE_ADDRを取得すればよさそうな・・・ おそらくグローバルIPアドレスが割り当てられているだろうし。
REMOTEじゃない(^_^;) SERVER_ADDRだったかな。
>>783 おおそうだ、なんか最近似たようなこと書いた気がしてたんだよ。
785 :
デフォルトの名無しさん :03/04/23 22:58
質問です。 いま、情報管理部にいて、各部署の端末にファイルを転送して転送後にメッセージを表示する アプリケーションを社内用に開発(簡単なユーティリティとして)しています。 listboxで端末を選択後、別のlistboxにドラッグドロップされたファイル名を 拾い、SHFileOperationでファイルコピーしています。ログオンはAdministrator のパスワードをアプリに持っており(外部xmlファイル内にdesで暗号化して)、 WNetAddConnection2A apiで送信先端末にログオンした後ファイル送信(コピー)、 NetMessageBufferSendでメッセージを送信、接続切断。という間抜けな処理 をしています。 これをログオンせずにWNetAddConnection2A apiなしでソケットを使って 行うにはどのようにすればいいのでしょうか? 上の方法では送信先にサーバアプリケーションが無くても一方的にファイル送信後 メッセージ表示ができて便利なんですが、メッセンジャーサービスで表示させるため 受信メッセージをテキストで残す事が出来ません。 IPメッセンジャーのようなことがしたいのです。しかし会社ではIPメッセンジャーの インストール許可がおりません。作れと言われました。 よろしくご指導願います。言語はC#です。
マルチがいかに嫌われているか、知らないヤツが情報管理部ねぇ…。
例えばこのスレ見るだけでも、お前の同類は見事にこんなヤツばかりだ
>>417 >>571 両方のスレで、それぞれ別の人が
知らずに一生懸命、同じ事を答えてくれたらどうよ。
お前は2人分の労力使わせるほど偉いのか?
789 :
デフォルトの名無しさん :03/04/24 15:18
開発時に、ネットワークのパフォーマンスやネットワーク上を流れるデータの中身等を 調べたりする必要が出てくるシーンが多々あると思うのですが、その際に使用する モニタリングソフト(?)で定番の物って無いですか? 有料・無料はとりあえず気にしません。無料であれば尚うれしいですが・・・
重要なことを書き忘れていました。 OSはWin2000と赤帽8.0です。
793 :
デフォルトの名無しさん :03/04/24 16:21
まー何て言うか・・
>>788 は痛すぎだねぇ
何でこいつこんなに偉そうなの?何勘違いしてんの?アフォ?って感じ
わかりやすく本人が煽ってるね。
仮にも大人なんだろうし・・・。
やっぱり本人だったね。
誤)K.橋本 正)K.山本
>792 了解です。ありがとう。
>>789 お金が出せるならsniffer。
フリーならetherealとか。
2ちゃんだから何やってもいい、か。そういうアフォが逮捕されてるんだよな。
802 :
デフォルトの名無しさん :03/04/24 19:18
ネットワークモニタとか? これしか使ったことないかも。 w2kとかについてたから。
ネットワークの質問かわかんないんですけど、WinNT系で、 ネットワークのインターフェース名(?)("ローカル エリア接続"とか)を WindowsのAPIで取り出す方法ってありますか?
GetIfEntry
それWinのAPIでなくない?
807 :
BSDソケ斗 :03/04/25 02:49
あ、帯域利用のロギングは、 portごとのSNMP統計取れるHUBと組み合わせて使うのがよいです。 // プログラミングと直接関係ないからsageとくべきだったかな?
>>796 > 私としては回答する人にも勉強になっていいと思っていたんですが
ワラタ、不遜もここまで来るとすごいな
>800 >802 >804 >807 をを、続々と情報が・・・ 皆様本当にありがとう。それぞれ使って色々試してみます。 >807 今の段階では、クライアント-サーバ間でどれだけの量のデータが 流れたかを調べる程度です。
>>810 私は ethereal を愛用してますが、統計情報なら、それぞれのホストで、
netstat -s やら netstat -in でもいいかもね。
ethereal や tcpdump などのソフトウェアスニファだと、通信量が多い
場合、取りこぼしが発生するので、その点は注意してね。
812 :
本7 ◆HON7/awDa. :03/04/25 14:25
Windows用telnetサーバをDelphiで作ってます。 Socket.SendText(#13#10+'Command Not Found'); Socket.SendText(#13#10+'>'+#13); ↓要するに \r\nCommand Not Found\r\n>\r と送信したら、クライアントで Command Not Found > と表示させて">"の横にプロンプトを持って来たいんですがWIN98標準の telnet.exeでは">"のあとに改行してからしかプロンプトが来ません。 どうすれば格好よくなるでしょうか?
813 :
動画直リン :03/04/25 14:26
814 :
デフォルトの名無しさん :03/04/25 15:44
共有フォルダに誰がアクセスしているか知る方法はないですか?
>>814 勘違い君は、PC初心者板にでも行ってね♥
>805さん 803です。ありがとう。 でもGetIfEntryで取ってきた構造体のWCHARで定義されているやつが インタフェース名なんですよね? printf("%S\n", pIfInfo->wszName); でデータとれます? こりゃネットワークの質問じゃないな、もぅ。笑
setlocaleを忘れてると、printfはwchar_tで日本語が出ない罠があるが。
だから814は早くPC初心者板に逝けってことだね
soudane
このスレのレベルは大変低くて結構結構
822 :
デフォルトの名無しさん :03/04/26 10:08
ソケットでルーターを超えるにはどうすればいいの?
え?
>>822 ソケットといっても何のプロトコルを使っているかにもよるが、
独自のプロトコルでカプセル化でもしているのか?
825 :
デフォルトの名無しさん :03/04/26 16:28
>>825 アホ?
ソケット自体にはポートという概念など無い
827 :
デフォルトの名無しさん :03/04/26 17:37
まずプロトコルが何か明示しないと話が進まない
プロトコルってなんですか?
釣りでいちいち上げるな
831 :
動画直リン :03/04/26 18:26
sageを知ってちゃ初心者っぽく見えないじゃないか
2chのdatを直読みできるソフトを作ろうとちょっと調べてみたんだけど なんか・・お金を払わないとダメ?
私は、完全性転換したネットワークスペシャリストを目指し、学習必死!
>>833-835 HTML 化以前の過去ログのことじゃないのか ?
だったら、有料だよ。
>>834-837 あ、スマソ。そうHTML 化以前の過去ログのこと。
やっぱり有料か・・
あの、Windowsでのネットワークプログラミングの入門書って どんなのがあるでしょうか? テンプレにあるのは上級者用って書いてあったので・・・ 環境はBCC+Windows98です
>>838 見たいだけならどっかに過去ログを上げてくれるスレがあったはず。
>>839 入門だけならネットで検索すれば色々出てくるからそれで勉強した方が良いかもしんない。
842 :
本7 ◆HON7/awDa. :03/04/28 00:11
サーバ作るときにコマンドやGETなどののメッセージを解釈して処理するには WinのCServerSocketならSoket.Readの所で処理すればよいのでしょうか? みなさんはどこの位置で処理されるのでしょうか? あとGET等を解釈するには1文字ずつ取り出して解釈するのでしょうか?
>>842 君には一生かけても作れないから忘れたほうがいい。
ネットワークエンジニアを目指しているプログラミング初心者です。 VBのでAPI関数使用してPGする事でネットワークコントロールも可能ですか? 解るところまでで構いませんから教えて下さい。
まず、お前の質問が意味不明だということが解った。
845>> What? どういうこと?
自分の書いた文章を読み返すこともしないのか。 VBので PGする事で ネットワークコントロール 最近こんなのばっか。日本語腐りすぎ。 俺はたかが掲示板で敬語云々などと言うつもりは全くないから 言葉使いなどはどうでもいいが、勝手に自分で略語を創造するな。 返答を求めるなら、意図が正確に伝わるよう努力はすべきだ。 推敲しろとまでは言わないが、せめて一度読み直せ。
847が(・∀・)イイこと言った
ネットワークコントロールってなんでしょう? 情報社会における新たな世界征服をもくろんでるんですか?
ネットワークを利用した、ソフトウェア開発の意味で書き込んだつもりですが・・・
具体的に何だよ。ソケット使えれば満足なのか?それ以下の層をいじりたいのか?もっと上位で十分なのか?
> 情報社会における新たな世界征服 いいなこれ。 確かにネットワークをコントロールできれば 世界は無理でも練馬ぐらいなら征服できるかもしれん。
「インターネットが画面一杯に」
>>844 ネットワークエンジニアを目指しているならとりあえずプログラミングより
ネットワークを勉強しろよ。
ネットワークエンジニアって普段どんなことする仕事なの?
LANケーブルと戯れる
LANケーブルで慰める
>>852 電話回線を使った世界制服なら、星新一の小説にあったぞ。
「声の網」だったかな。
>>857 CAT5 より CAT5E のやつの方が具合はいいのですか ?
>>852 いや、無理だ
練 馬 に は オ レ が い る
板橋にしとけ
>855 社内と社外のネットワークの境目となる部署で、手作業でパケットを 仕分けするのがネットワークエンジニアの主な仕事です。 LANケーブル上を流れる電気信号を読み取る人間離れした視力、 それを脳内でビット列に変換しIPヘッダを読み取り、あて先のネット ワークへ素早くパケットを送り出す超人的な筋力が必要です。 並みの人間には決して勤まらない、プロフェッショナルな仕事です。
>>860 うちではアンプにつないで音で聞き分けてる人が多いね。自分は
いまだにテープにパンチして見分けてる下っ端ですが。ショボーーン
俺はパケットを食べて、ケツから出すときに勢いを変えるようにしてるよ。
864 :
デフォルトの名無しさん :03/04/28 14:00
> 僕、次のルータなんですけど… そっかごめんね、僕は新米のProxyなんだ 次は誤送しないように気をつけるよ というレスを返すスレかとおもた
866 :
デフォルトの名無しさん :03/04/28 14:02
リアル人間によるIPネットワーク構築の為のRFCを考えるスレはここでヨイですか? っていうか、鳩ネットワークもあるくらいだから、ひょっとしてもうある?
リアル人間は伝書鳩より高機能なんだけど、信頼性がないから誤り制御が大変だよ。 鳩ネットは ping が通る所までいったらしいね。
そういえば、Yoshinoyaプロトコルはどうなったんだろうか…
870 :
名無しさん@そうだ選挙にいこう :03/04/28 21:25
ここ、質問する香具師もレスする香具師もノータリンしかいないね。 俺もだけど。
871 :
デフォルトの名無しさん :03/04/28 22:17
数千クライアントがぶら下がるようなサーバをLinuxで書く場合 fork,select,非同期のどれがよさそうですか?
POSIX realtime signalsを使えばよいでしょう。
874 :
本7 ◆HON7/awDa. :03/04/29 13:14
wwwサーバの作成でソケットの勉強してます。 サーバ、ブラウザともローカルでテストしています。 ブラウザの要求に対してヘッダと本データは送れたのですが接続が終了せずに タイムアウトまで時間かかってしまします。鯖の送信メッセージは HTTP/1.1 200 OK Date: 03/04/29 13:13:47 ETag: "480ccf-26ee-3ead744e" Accept-Rang es: bytes Content-Length: 571 Content-Type: text/html \r\n <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=x-sjis"> <meta name="GENERATOR" content="Microsoft FrontPage Express 2.0"> <title>これはテストページです。</title> </head> <body bgcolor="#FFFFFF"> <p align="center"><font color="#0000A0" size="6">これはテストページです。</font> </p><p align="center"> </p><p align="center"> </p><p align="center">見えますか? </p><p align="center"> </p><p align="center"> </p><p align="center"><font size="4"> <em>Patche Web Sever Ver 0.1</em></font></p> </body> </html> \r\n Connection closed by foreign host.\r\n \r\n です
>>874 > Connection closed by foreign host.\r\n
ネタだよね。
876 :
本7 ◆HON7/awDa. :03/04/29 13:38
>>875 取っても同じでした。すんみません。
流れとしては
ブラウザの要求>ヘッダ送信>本データ送信
で、そのごメッセージを送信するんですか?Deplhiなんですが今の所は
データ送信後にSocket.Destroyして無理やり切ってます。
これであってるんでしょうか
>>877 同意。
相手のあることなので、適当な実装を相手に試して大丈夫なんて思うと
害悪を垂れ流すことになる。
>>871 どの戦略でも動くように書いて、実験すればいいじゃん。
当然、サーバのやる仕事の種類とか、応答性とスループットの
トレードオフで、答えが変わって来るわけで。
>>876 ということで、HTTP/1.1のRFC読んでね。
そのあたりきっちり決まりが書いてあるから。
>>879 >>873 のPollerつーのがそういう目的のclassですわ。
>>847 Protocolの要件に合うserverを、RFC読まずに作るのは100%不可能。
ソケットの勉強のためだけなら、あなたのtiny HTTP仕様に準じて作ればいいのでは?
>>876 > で、そのごメッセージを送信するんですか?Deplhiなんですが今の所は
> データ送信後にSocket.Destroyして無理やり切ってます。
> これであってるんでしょうか
server側だったら、clientの要求によるけど、
まあ、勉強用のserverならそれでいいんじゃないの?
1 request/connectionということで。
882 :
本7 ◆HON7/awDa. :03/04/29 17:28
ローカルでテストしてるんですが・・
883 :
本7 ◆HON7/awDa. :03/04/29 18:14
いろいろ調べて試したらなんとか動き出しました。 WWWに限らずでも結構なんですが鯖が複数のクライアントを切り盛り する場合はDelphiでもスレッドのよる処理をするのでしょうか?それとも 各クライアントのリモホを配列か何かに格納しておいてソケット番号を参 照し動作毎に応答や切断をするのでしょうか?
好きなようにすればいい 絶対にこうしなければいけないなんてものはない
複数の子プロセスをつくるとか。
スレッド使うと、一つが死ぬとみんな死ぬというイメージがあるんですが、 実際の所どうなんでしょう? スレッドで切り盛りしてるアプリケーションってありますか? 一昔前のIEはデスクトップまで巻きこんで死んだり酷かったですよね。
>>883 とりあえず
>>2 の「Linuxソケットプログラミング―ネットワークプログラミングにおける実践技法」
膨大なコネクションでのパフォーマンスが気になってきたら
>>873 Windowsはフレームワーク使うから、基本的なところから学ぶ書籍は少ないな。
マルチスレッド関係の本が参考になると思うが。
889 :
本7 ◆HON7/awDa. :03/04/30 01:54
>>888 ありがとうございます。そしておめでとうございます。
web検索ではサーバのおおまかなアルゴリズムについてこちらの思いに的を射
て書かれたページが見つからず困ってました。apacheぐらい信頼性のあるアプ
リを目指してがんばります。
Apacheって信頼性は高いのだろうか。
891 :
本7 ◆HON7/awDa. :03/04/30 02:03
少なくとも俺の作った鯖よりはましかと。 AN HTTPDな物を夢見て
>>889 > apacheぐらい信頼性のあるアプリを目指してがんばります。
え、そんなもん目指すの?
とりあえずprotocolに適合してなければ信頼性はゼロだから、RFC読むか、最低でも、
Webプロトコル詳解―HTTP/1.1、Webキャッシング、トラフィック特性分析
http://www.amazon.co.jp/exec/obidos/ASIN/4894715414 は読みなよ。というか読まんなら世間にそのサーバを公開するな。
> web検索ではサーバのおおまかなアルゴリズムについてこちらの思いに的を射
> て書かれたページが見つからず困ってました。
>>2 にあるStevensの本全部読め。Vol.3にHTTP載ってる。
893 :
デフォルトの名無しさん :03/04/30 08:43
Pingすると、Replyが平均で約1,000msでパケットロスも25%あるような状態の 端末間でまともなアプリケーションを構築できるのでしょうか?
>>893 その「まともなアプリケーション」とやらの要求仕様による。
例えば、その回線で VoIP したいとか言うなら無理だし、ファイル転送で転送速度の要求が厳しくなければ大丈夫かもしれない。
>>893 十年以上前はそんな環境がざらでしたが、
DNSもFTPもTELNETもSMTPも問題なく運用されてました。
HTTPはまだ普及してませんでした。
>>893 AirH"ですか?
>895 確かにそうですね・・・ 大まかな内容としては、携帯端末からのデータベースへのアクセスです。 今のところ、リモートアクセス時の通信部分に関してはDBの機能に依存しているので、 どの程度の通信品質が必要なのかがわからないのが痛いです。 回線の状態が悪い(?)ときは、数百バイトのデータをSELECTするだけで10分近く掛かっ ているような状態デス・・・ >896 そうなんですか〜。 >897 おしいです。Dopaです。 300msで100%Replyが来る時もあれば、1000msオーバーで50%ロスする時も あったりと結構不安定です・・・ tracertで追いかけると、ドキュモのネットワークと携帯端末間が異常に時間が 掛かっているようです。いちおドキュモに確認しましたが、「ちゃんと繋がってます」 という答えしか返ってきませんでした・・・
899 :
デフォルトの名無しさん :03/04/30 15:21
ドキュモってw
>900 残念ながら、使用する携帯端末がDopa内蔵型でCFスロットにも 空きが無いのでDopa以外の選択肢が無いのです(泣 回線もクローズドなLAN型接続だし・・・ AirH''は安定してるんですか?
902 :
デフォルトの名無しさん :03/04/30 17:38
質問です。ネットワークプログラミングは初めてなんですけど、 インターネットヘッダのContent-typeとかAcceptとかRefererってどういう意味なんですか? 解説サイト教えてください。めんどくさくなかったら、直々におながいします。 馬鹿みたいな質問でごめんなさい。
インターネットヘッダ…… プログラム書く前にインターネットの基礎から勉強すれ。
>>902 秋葉原のお店で、「インターネット、一つください」とか言ったことのある人?
インターネット=HTTPだと思っているわけだ
OSIモデルから勉強すれ
Yahooって何て読むんですか?
一人だけか
OSI基本参照モデル(ネットワーク編の基本中の基本) 第7層 アプリケーション層/応用層 第6層 プレゼンテーション層 第5層 セクション層 第4層 トランスポート層 第3層 ネットワーク層 第2層 データリンク層 第1層 物理層 ネット通信に必要不可欠なプロトコル、TCP/IPのTCPが第4層のトランスポート層(伝送路確保) IPが第3層のネットワーク層(伝送路選択)に属する。 ftpやhttp等は、アプリケーソン層に属する
"セクション"はネタなのかどうか "ネット通信に必要不可欠"はどうか
(・∀・)セクションソウ!!
TCP/IP使って応答/要求コマンド決めたらそれでいいだけだろうが
OSI 参照モデルってあってないようなもんだよね。 つーか事実上意味ないし。
(・∀・)セクション♪
(・∀・)セックスィョン♪
シャンソン層
>>913 「アプリケーソン層に属する」には突っ込まなくていいのか ?
>>916 OSI は消滅し、参照モデルだけが生き残った...
いまどきは、「OSI?あ、ISOの参照モデルのやつでしょ?」
といいつつ、俺自身もOSI自体なんぞ、ほとんど知らないんだけどさ。
Ultima作ったとこだろ
the X/Open Transport Interface (XTI) はかなりOSIくさかったね。
>ftpやhttp等は、アプリケーソン層に属する 誤字はともかくこれ大間違い
間違ってないが?
L4だろ
(・∀・)ニヤニヤ
httpやftpは5,6,7層にまたがっている 単独の層にいるわけではない よって間違い
会社に所属したらスポーツクラブに所属していけないわけではないが…
TCP/IPは後付けてOSI参照モデルに当てはめてるから 必ずしも一対一で対応しないんだな どーでもいーがセクション層じゃなくてセッション層だ
>>912 CCNAなんかで上辺だけ分かった気になって、
内容をろくに理解せずに他人に吹聴して失笑を買うタイプだな
4層以下は対応関係を定義できるが、
5層以上は規格がお互いが関連しあっているため、
プロトコルが複数の層にまたがることになる
だからOSI参照モデルは現実には見合わないと言われている
HTTPのRFCを読めば分かるが、
接続手順からデータ定義、コマンドとその応答まで、
層をまたがる形で一つのプロトコルとして定義されている
アップセットねデブ
>>934 Google でオーディエンスしてみた。
セッション: 2,070件
セション層: 505件
世間的には、セッション層で通るようだな。
TCPは4層からなる
的は(
金的を撲つ
ここはプログラミング版だが、基礎知識ってことでいいかな…
>>932 > だからOSI参照モデルは現実には見合わないと言われている
Roseの"The Open Book"読むと、大変手軽に、
7階層まじめにやると"悲惨だな"と主張する資格を得られます(w
>>932 > HTTPのRFCを読めば分かるが、
> 接続手順からデータ定義、コマンドとその応答まで、
> 層をまたがる形で一つのプロトコルとして定義されている
SNMPだとASN.1使ってるし、SOAPなんかもXMLを使ってるから、
もうちょっと分離が進んでるね。Sun RPCも。
けど、階層モデルじゃあないね。プレゼンテーション層・ヘッダとかないもんね。
参照モデルとしては、なかなか良く出来たと思いますが。
>>934 そんなのは発音のマップの違い
「セクション」は完全に誤りだろ
馬鹿正直に7層実装したらプロトコルオーバーヘッドがすごい罠。
>>935 ,937,941
一般にセッション層が使われるからってそれが
正しいというわけではない。
通じはするけどね。
発音のマップって何?っていうのはおいといて
正しい言葉は「セション層」。
覚えておいて損はないと思いまつ。
セッション層は本当は違うんだよーとうんちくをたれれ。
俺みたいにな(w
正しくは「session layer」だろ カタカナで完璧な発音は表せない
「セション」なんて言って英語圏の人に通じるわけ無いのにバカだねぇ
>>944 禿げ同
テレビのことも
正しい言葉は「テレビジョン」。
って言いはるんでしょうw
もちろん正しい言葉は「television」だがな
日本語化したものは、日本語でいいと思うけどな セッションは微妙だが、テレビは正しく言ってもテレビだろ。
あ、
>>946 のtelevisionに対してね。テレビジョンの方じゃなくて。
>>944-949 アフォたちよ、sessionがセッションかセションかなんて関係ないんだが?
OSI参照モデルの第5層のことをセション層というんだよ。ボケ!
セッション層で通そうとするのは単なる無知かひねくれもの。プッ(w
どうしても認めんというならセション層に決めたやつを恨むんだな。
セッションだと間違いな理由は?
>>950 かなりのアフォと見た。
OSI参照モデルを制定したのは国際標準化機構(ISO)だ。
その文書に「セション層」と書いてあるのか?
ISOは日本の団体か?
その文書にsessionと書いてあるなら、それに対応する日本語は「セッション」だ。 それが例え正しい発音でなかったとしても、そもそも正しい発音を日本語で表現するのは無理。 正しい言葉は何があっても「session」であり、それを日本語にすると「セッション」になる。
>>951-953 はいはい。
ISOが日本語訳でもしましたか?見てみたいですな。(w
情報処理試験の勉強してみてね。
お国の方針(?)ではセション層というみたいですが。
まぁ情報処理試験のテキストでもセッション層とかかいてある
クソなものはありますが、試験にセッション層という言葉は
出てこないですな。
>>954 残念ながら個人名までは自分も知らん。スマソ
>>955 の通り情報処理試験ではセション層といわれてます。
ちょっとググってみたところ、日本語訳は 規格名称:JIS X5003 開放型システム間相互接続の基本参照モデル で記述されてるのかな?
>>953 副詞の「たとえ」を「例え」と書くのはまちがっていますね。
IPAはセッション層って言ってるみたいですが
>>955 情報処理試験はもうほとんど取るものはありませんが、何か?
情報処理技術者試験センターは規格を制定した団体ではありませんが、何か?
だんだん934が苦し紛れになってきますた!
で、「セッション」か「セション」のどちらが正しいかわかったら ネットワークプログラミングになんか役に立つんですか? ちなみに、IMEの第一変換候補「セッション」と「背ション」でした。 Solaris 9 についてたATOKでも「セッション」と「背ション」でした。
>>943 自分が正しいと思ってるならIPAに「セッション層は本当は違うんだよーとうんちくをたれ」てみてはいかが?
それでIPAが認めたらあなたの言う通りなのでしょう。
しかしそれが認められない、もしくはあなたが異議申し立てをできないなら
あなたの主張はただの自己満足です。
>>963 正直なとこ,パケットいじるような人にしか役に立たないかも
966 :
デフォルトの名無しさん :03/05/04 02:53
>>965 えっ?
パケットいじるような人は
「セッション」と「セション」の違いって重要なの?
「セッション」などと言う言葉はこの世に存在しない。 sessionは「セション」だ。 違いもなにも、存在するものとしないものを比較すること自体おかしいだろう。
('A`)ノ マンドクセ 2ch的に、セショーンでいいじゃん?
>>968 2ch的セショーンを直すとセッションになってしまうわけだが・・・
>>970 普通 -> 2ch的
AッBC -> AB-C
例)
マッタリ -> マターリ
コッソリ -> コソーリ
セッション -> セショーン
なるほど。 助かりました。
ここは小学校ですか?
>>971 >>969 はセショーン→セッションを主張しているのであって、
セッション→セショーンを主張しているのではない。
ところが
>>969 に従えばヨカーン→ヨッカンとなってしまう。
逆も真とは限らない。プログラマの皆様はお気をつけ遊ばせ。
>>974 誠にごもっともである。ヨカーンのことをすっかり忘れていた。スマソ
次スレ立てれ
そう言えばsambaはどうなった?
次スレではこんな糞トークやめてね。
HTTP2.0作ってください
サラシアゲ
>>983 Microsoft OLE DB Provider for ODBC Drivers エラー '8007000e'
[Microsoft][ODBC Microsoft Access Driver] テンポラリ ファイル用の空き容量が不足しています。
D:\INETPUB\E-WORDS_JP\..\engine.inc, 行 177
ワラタ
お前ら、暇なんだな。
987 :
デフォルトの名無しさん :03/05/05 08:00
934=986
>>987 いちいち言わなくてもみんな分かってる。可哀相だからヤメレ
オツカレー
ん? 俺はこのスレ初書き込みだぞ。 単なる暇な学生だよ。
>>993 えーっと、
必 死 だ な (´,_ゝ`)プッ
995 :
デフォルトの名無しさん :03/05/06 15:37
996 :
デフォルトの名無しさん :03/05/06 15:39
997
998
999
1000
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。