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

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

レス数が1000を超えています。これ以上書き込みはできません。
0001pthread_createNGNG
主にソケットに関しての質疑応答スレです。

Programming UNIX Socket FAQ (日本語訳)
http://www.kt.rim.or.jp/~ksk/sock-faq/indexj.html

Winsock Programmer's FAQ (日本語訳)
http://www.kt.rim.or.jp/~ksk/wskfaq-ja/

過去スレ:
Port1 http://pc.2ch.net/tech/kako/970/970344582.html
Port2 http://pc.2ch.net/tech/kako/1006/10062/1006258198.html
Port3 http://pc3.2ch.net/tech/kako/1023/10233/1023359282.html
Port4 http://pc3.2ch.net/tech/kako/1034/10342/1034236536.html
Port5 http://pc2.2ch.net/tech/kako/1040/10402/1040220302.html
Port6 http://pc2.2ch.net/tech/kako/1052/10521/1052106444.html
Port7 http://pc2.2ch.net/test/read.cgi/tech/1063035045/
Port8 http://pc5.2ch.net/test/read.cgi/tech/1073560271/

関連リンクは>>2-10辺り
足りなかったら適当に付け足してね
0002デフォルトの名無しさんNGNG
図書コーナー!

UNIXネットワークプログラミング〈Vol.1〉ネットワークAPI:ソケットとXTI
http://www.amazon.co.jp/exec/obidos/ASIN/4894712059/
詳解TCP/IP〈Vol.1〉プロトコル
http://www.amazon.co.jp/exec/obidos/ASIN/4894713209/
The Implementation (TCP/IP Illustrated, Volume 2)
http://www.amazon.co.jp/exec/obidos/ASIN/020163354X/
Linuxソケットプログラミング―ネットワークプログラミングにおける実践技法
http://www.amazon.co.jp/exec/obidos/ASIN/4894714671/
TCP/IPによるネットワーク構築〈Vol.3〉―クライアント‐サーバプログラミングとアプリケーション
http://www.amazon.co.jp/exec/obidos/ASIN/4320028007/
Webプロトコル詳解―HTTP/1.1、Webキャッシング、トラフィック特性分析
http://www.amazon.co.jp/exec/obidos/ASIN/4894715414
WinSock2.0プログラミング
http://www.amazon.co.jp/exec/obidos/ASIN/4797306882/
猫でもわかるネットワークプログラミング
http://www.amazon.co.jp/exec/obidos/ASIN/4797323604/
IPv6ネットワークプログラミング
http://www.amazon.co.jp/exec/obidos/ASIN/4756142362
0003デフォルトの名無しさんNGNG
今までに出てきたURL抜粋

RFC 日本語版リスト
http://www5d.biglobe.ne.jp/~stssk/rfcjlist.html
ネットワークプログラミングの基礎知識
http://x68000.startshop.co.jp/~68user/net/
C10K ヘヴィーロードサーバ
http://www.kegel.com/c10k.html
JPNIC RFC関連リンク集
http://rfc-jp.nic.ad.jp/link/
RFC 2616 "Hypertext Transfer Protocol -- HTTP/1.1" 日本語訳
http://www.studyinghttp.net/rfc_ja/2616/rfc2616_ja.html
IANA Well known port numbers
http://www.iana.org/assignments/port-numbers
MSDN
http://msdn.microsoft.com/library/en-us/dnsitehelp/html/tochelp.asp

ツール類
tcpdump
http://www.tcpdump.org/
Windump
http://netgroup-serv.polito.it/netgroup/tools.html
pathchar
ftp://ftp.ee.lbl.gov/pathchar/
pchar
http://www.employees.org/~bmah/Software/pchar/
00041NGNG
本、URL等は、前スレに出たものも含めて少し再構成しました。
補足あったらよろしく。
0005デフォルトの名無しさんNGNG
}!Z
0006デフォルトの名無しさんNGNG
pc2はpc5に直しておけよな
Port6 http://pc5.2ch.net/tech/kako/1052/10521/1052106444.html
Port7 http://pc5.2ch.net/test/read.cgi/tech/1063035045/
0007デフォルトの名無しさんNGNG
>>1
乙ディス
0008デフォルトの名無しさんNGNG
>>1
ネトプ
0009デフォルトの名無しさんNGNG
http://www.linux.or.jp/JM/html/LDP_man-pages/man7/raw.7.html に

「raw ソケットが必要になるのは、新しいプロトコルを設計する場合か、
ユーザーインターフェースを持たないプロトコル (ICMP など) を扱う場合に限られる」

と書かれているのですが、新しいプロトコルを設計する場合というのは
オリジナルのプロトコルでもrawソケットなら扱えるということですか?
もしそうであれば、作り方やその扱い方についてのわかりやすいサイトとかないでしょうか?

"raw socket"、rawソケット、生ソケット、SOCK_RAWなどのキーワードで
いろいろ検索してもよい手がかりが見つけられなかったので誰か教えてください。
0010デフォルトの名無しさんNGNG
ソース読むか(例えばdhcp client)、本買えよ。
>>2より
http://www.amazon.co.jp/exec/obidos/ASIN/4894714671/
http://www.amazon.co.jp/exec/obidos/ASIN/4320028007/
0011デフォルトの名無しさんNGNG
http://www.linux.or.jp/JM/html/LDP_man-pages/man7/packet.7.html
も読んどけな
0012デフォルトの名無しさんNGNG
質問です。
FreeBSDの環境でUDPプログラムを組んでの話なのですが
recvfrom()をブロッキングせずに素通りしてしまいます。

しかも、始めは問題なかったのですが、タブを消してからブロッキングしなくなりました。

一体どうなってるんでしょうか?
ちなみに、
<タブ>fprintf(stderr, "起動\n");
のタブを消しただけです。
今は、この行自体消してます。

あまりにも分かりにくい話だとは思うんですが、よろしくお願いします。
ちなみに、改行コードを疑って、LFでもRF+LF試しましたがダメでした。
0013デフォルトの名無しさんNGNG
ソース、大きいのは、
http://www.cl.cam.ac.uk/Research/SRG/netos/arsenic/
http://www.cs.nwu.edu/~pdinda/minet/minet.html
http://www.joerch.org/tcpip/
http://freshmeat.net/projects/libutcp/
0014デフォルトの名無しさんNGNG
>>12
早い機会に病院に行ってください。上司とも良く相談してください。
001512NGNG
>>14
言われると思ったw
しかし、こんな意味不明な現象を誰に相談すれば良いのやら(汗

なんか、どこか領域破壊してて、今までは、再現性の無い成功 をたまたましてただけなのかな?
001612NGNG
でもなかった
変更前のソースだとどうやってもこんな事にはならない・・・

やっぱ変な話だけど、このタブが原因っぽいです。
0017デフォルトの名無しさんNGNG
そもそもrecvfrom()の返値やエラー状態も書けないあなたは一体…
それからCR+LFね。Carriage Return + Line Feed
0018デフォルトの名無しさんNGNG
001912NGNG
>>17
いや、そもそもエラーなんて出てないんですよ・・・
recvfrom()の戻り値も0ですし・・・
002012NGNG
http://www2000.dyndns.org/php/upload/download.php?file=15346
一応、このファイルです。
0021デフォルトの名無しさんNGNG
>>20
strlen(buf)
0022デフォルトの名無しさんNGNG
recvfromが成功してもしなくても、
これループからぬけられないのな。
0023デフォルトの名無しさんNGNG
ネットワーク系APIの使い方以前にそもそもC/C++のプログラミングの
基礎がやばい印象が...
002412NGNG
>>22
うp用にコード削っただけで
ここから処理分割したりしてるんで、その辺は大丈夫です。

>>21
THX!
そこでしたか・・・
でも、何でタブを残してたら動いたんでしょう?

>>23
一応18年間PGやっててこんなのは初めてですよ。
本当に意味不明な現象です。
0025デフォルトの名無しさんNGNG
>>23
どこが?
定番中の定番コードを書いてると思うが・・・
このコードに基礎も糞も・・・

>>24
いや、strlen(buf)直しても直らんよ
俺も良くわからんが、文字コードとか変なんじゃないの?
一度面倒だけどコピペじゃなくて書き写してみたら?
0026デフォルトの名無しさんNGNG
>>24
>一応18年間PGやっててこんなのは初めてですよ。
エイプリルフールは昨日で終わりましたよ。
0027デフォルトの名無しさんNGNG
>>25
人のコード見ると、こういうケチをつけるやつが居るのは常識だと思われ
スルーしないと宗教闘争に発展するから注意汁
まぁ、文献でよく有るパターンのsockの初期化コードとrevcfrom()のコード見てケチをつけるのもアレだと思うがw

>>24
改行コードだけじゃなくて文字コードを見直せ
0028デフォルトの名無しさんNGNG
>>25
strlen(buf)の間違いに気が付かないところと、
その間違いが判った後だというのに、
>本当に意味不明な現象です。
とか言ってるところが、
>基礎がやばい印象
なんでしょ。

とても18年PGやってきたとは思えない。でなければ、CとかC++は、初めてでしょ。
こんなところで悩むのは、最初の1年で勘弁してくれ。ローカル変数とスタックの関係とか
判ってたら、悩むような所じゃないよ
0029デフォルトの名無しさんNGNG
>>28
いや、、、このコードは、strlen()とかローカル変数とstacとかの問題じゃないと思うが・・・
っていうかお前等気付けw
あふぉばっかりかw
0030デフォルトの名無しさんNGNG
>>25
> memset((char *)&me, 0, sizeof(me));
ここでなぜか(char *)にキャストしているところとかじゃない?
0031デフォルトの名無しさんNGNG
>>25
buf の初期化がされてないのが問題では? ってことだろ。十分ありうる。

初期化ミスやポインタのミスは、コンパイルし直しただけで動いたり動かなく
なったりする、というのはありがちだし、多少なりともC/C++ の経験があれば
すぐ想像つきそうなもん。

俺は >>23 ではないが、コードの質じゃなくって、質問の仕方やその辺から元
の人は経験少なそうに見えてしまうね、悪いけど(18年間何をされてたのか知
らないけど、少なくとも「タブが…」なんてところで悩むレベルはすぐに卒業
して欲しいな)。
0032デフォルトの名無しさんNGNG
あとNET_SET::rev_command()のbufの未初期化か
0033デフォルトの名無しさんNGNG
初期化していないものにstrlenを使って何がしたいんだろうな・・・
003412NGNG
>>31
bufの初期化は既に試してます。

>>30
俺の読んだ文献にそう書いてあったんですが・・・

>>29
えーと、どういう事でしょうか?
003533NGNG
あーわかった。そういうことか。
バッファのサイズを測りたいならstrlenじゃなくてsizeofだぞ。
0036デフォルトの名無しさんNGNG
>>34
>bufの初期化は既に試してます。
どのように初期化したの?
ちゃんと、
  memset(buf,1,1023);
  buf[1023] = 0;
みたいにしたの?


0037デフォルトの名無しさんNGNG
>>34
voidがない時代の相当古い文献を読んでいるんだな・・・
0038デフォルトの名無しさんNGNG
>>34
多分だけどな。(試したことないからしらん)
recvfrom()の第3引数、len に0以下の数値を渡すと、
こういう現象になるんだと思うよ。
0039デフォルトの名無しさんNGNG
とりあえずstrlen(buf)はsizeof bufにしろ
0040デフォルトの名無しさんNGNG
なんか、ネットワークプログラミング相談というより、
普通のプログラミング相談になってるのは気のせいか?
0041デフォルトの名無しさんNGNG
常にtrueを返しているがいいのか?
0042デフォルトの名無しさんNGNG
>>41
>>24
up用に削ってたらfalse返す部分も削ってしまったらしい
0043デフォルトの名無しさんNGNG
>>42
そういうことか。

>>34
fromlenはsocklen_tで宣言しようよ。
(確かこれについて前スレで質問していたよね?)
0044デフォルトの名無しさんNGNG
>>29 が気になる
0045デフォルトの名無しさんNGNG
なあんだ、よく読み返してみたら、
>>15 で
>なんか、どこか領域破壊してて、今までは、再現性の無い成功 をたまたましてただけなのかな?
と、ちゃんと結論が出ているではないか。
0046デフォルトの名無しさんNGNG
とりあえず、strlen -> sizeof で結果待ちじゃね?
おーいどうなったんだー早く結果あげろー
004712NGNG
>>46
試してみましたが、ダメでした。

>>45
でも、修正前のプログラムだと100%上手く行って
修正後だと100%失敗するんです。
たまたまとは思えないです。
004812NGNG
>>36
やりました。
それでもダメでした。
004912NGNG
わかりました。(理由はわかりませんが

fprintf(stderr, "受信待機中\n");


if( recvfrom(sock, buf, sizeof(buf), 0, (struct sockaddr *)&from, (socklen_t *)&fromlen)<=0)
return true;

とあった所の、
fprintf(stderr, "受信待機中\n");


をコメントアウトすると、ブロッキングするようになりました。
何故ですか?w
005012NGNG
追記です。
printf("受信待機中\n");
に書き換えても上手く行きました。
これはsocketの仕様でしょうか?
0051デフォルトの名無しさんNGNG
ブロッキングしてるかどうかはどうやって判断してるのでしょうか?
0052デフォルトの名無しさんNGNG
そのマシンはネットにつながってたりするんでしょうか?
それとも物理的に接続できない状態にしてあるのでしょうか?
0053デフォルトの名無しさんNGNG
NetBSDで動かしてみた。
根本的な原因は、portが1000なのでpermission deniedでbind()がコケてる、
というだけ。

bind()がコケてるのでrecvfrom()はfprintf()云々に関わらず延々エラーに
なっているが、コメントアウトによって(何も表示されなくなるので)ブロッキング
してるように見えると。

従ってportを2000とかにしてやりゃとりあえずちゃんと動く。

で、プログラミング歴何年だって?
005412NGNG
>>53
いや、外部から切り離して、suで実行してるからbind出来ますよ。
そこが原因ではないと思われます。

というか、実際fprintf()を変えたら、100%テスト用のクライアントと更新できました。
んで、変えなかったら100%出来ません。
0055デフォルトの名無しさんNGNG
>>48
あのさ、>>36の初期化が出来る頭を持っているなら、
sizeof()とstrlen()を混同したり、しないだろ。
それよりも、その初期化をするときに、strlen()がおかしい
って気が付くだろ?

ネタはもうちょっと考えてやれよな(藁
0056デフォルトの名無しさんNGNG
FreeBSD4.8でやってみました。

確かに、変ですね。
if( recvfrom(sock, buf, sizeof(buf), 0, (struct sockaddr *)&from, (socklen_t *)&fromlen)<=0)
return true;

//受信した場合の処理
num = (int)buf[0];

switch(num)
{
case CH_REQUEST:
fprintf("CH_REQUEST\n");
break;
case CH_RESIST:
fprintf("CH_RESIST\n");
break;
case END:
fprintf("END\n")
return false;
break;

}
このような形に変更してやってみました。
recvfrom()の前でfprintf(stderr,"")をやると、どうやら素通りしてしまうようです。
recvfrom()の直度に書いた場合は、普通にブロッキングします。
なので、>>53は明らかに違いますね。
もしかして、コンパイラか何かのバグかな?

005756NGNG
おっと、stderrが全部抜けてるわ
005856NGNG
で、同じコードを赤帽の8.0でやってみた。
結果はどっちも普通に動く。
何でだ?

>>54
切り離してるなら良いけど、それをそのまま運用するなよ
005912NGNG
>>56
自分もFreeBSDの4.8です。
自分も同じ事を既に試してましたが…
やっぱり同じでしたか・・・

>>58
一応、これうp用にコード削ってますけど
正式な方はコマンドライン引数でポート変えれるんで…

>>55
1つのを作ってる間に、日にちが私用で空いたりすると、たまにバカなミスする事あるんですよ(藁
コンパイラがエラー吐いてくれなきゃ危なっかしくてしょうがない(苦笑
0060デフォルトの名無しさんNGNG
12じゃないけど、昔漏れがprintf()のコードをrecvfrom()前に書いて
printf()の結果が画面に表示されずに、プログラムが終了されてから表示されるなんて変な事があった

んで、>>12と同じようにfprintf(std,"")で書き換えたら表示は出来たが同じようにrecvfrom()が機能しなくなった事があったが・・・
同じ事か?
00619NGNG
>>10
>>11
>>13
いろいろありがとうございます。
それらの本やソースを参考に勉強してみます。
0062デフォルトの名無しさんNGNG
スルーするというときのrecvfromの戻り値と、それがもしエラーならば
errnoぐらいは調べた方がいいと思われる。

プログラム修正するのが面倒ならktraceでも可。
0063デフォルトの名無しさんNGNG
>>62
スレ呼んだけど、戻り値は0でエラーは無かったといってなかった?
0064デフォルトの名無しさんNGNG
本当に18年間もやってきたのか?
前回の型についての質問といい、今回の質問といい、、、
0065デフォルトの名無しさんNGNG
>>64
今回の質問は俺もわからんのだが・・・
お前はわかるのか?
0066デフォルトの名無しさんNGNG
俺もわからんな
是非>>64にバカにも分かるように説明して頂きたい
0067デフォルトの名無しさんNGNG
>>14です。
アフォに構っている人も、早い機会に病院に行ってください。
上司とも良く相談してください。
0068デフォルトの名無しさんNGNG
とりあえずsizeofとstrlenの混同なんていう初心者ミスを全部除いたまっとうなコードをアップしろよ。
0069デフォルトの名無しさんNGNG
原因かどうかわからないけどさ、コメントとprintfの内容から2バイト文字消してみたら?
むかし//コメントの中に\と同じ文字コードを持つ漢字はいってるとさ、
次の行がコメント扱いされてコード実行が行われないプログラムになった事あるんだけど。

とくにWindowsと違ってgccはシフトJISをきちんと認識しないでしょ?
0070デフォルトの名無しさんNGNG
それとそん時はワーニングも出なかったからホントに気付かなかったよ。
それ以来コメントは全て/* */に変更かけたし。
0071デフォルトの名無しさんNGNG
>>68-70
ここは、C/C++言語スレじゃないよ!
>>68
いらねーよ!
0072デフォルトの名無しさんNGNG
で、>>56の答えは?
0073デフォルトの名無しさんNGNG
>>64は必死で今考えてる模様
0074デフォルトの名無しさんNGNG
fromlenはsocklen_tにしろってのはあくまでも無視か。
0075デフォルトの名無しさんNGNG
変にプライドがあるみたいだから長年やってきたのは本当だろう。
0076デフォルトの名無しさんNGNG
有害なコボラーと見た
0077年寄りコボラーNGNG
お前ら、大ベテランのコボラーを馬鹿にすんな!
・・・確かに、今更Cの基礎なんてやってらんないし
プロとして食っていくために無理やりボロボロの土台の上に積み上げていくから
基礎ボロボロで最悪だがな(涙
0078デフォルトの名無しさんNGNG
コンパイラの生成するコードがおかしくなってるというあたりまで
疑われているのでやっぱりktraceかな。カーネルとのAPIレベルで
何が起きているのかの確認にはなる。そもそもrecvfromが呼ばれて
ないとかさ。
0079デフォルトの名無しさんNGNG
コンパイラ疑うって?
recvfrom()の返値さえ保存してないクズ野郎が?
0080デフォルトの名無しさんNGNG
たいていの場合は自分が悪いことを確認して終わるわけですが、
はっきりと証拠を見たほうが信じやすいでしょ
0081デフォルトの名無しさんNGNG
>>80
相手が自分と同等の能力があると仮定してはいけません。
0082デフォルトの名無しさんNGNG
>>80
相手が自分と同等の能力しかないと仮定してはいけません。
0083デフォルトの名無しさんNGNG
>>79
だからお前このスレ百回読め
もう既に2回も書いてるぞ
0084デフォルトの名無しさんNGNG
12が名無しで荒らしている予感
0085デフォルトの名無しさんNGNG
荒らしてるというか、必死で自作自演をしているんだろ
0086デフォルトの名無しさんNGNG
省略したコードしか晒さない以上、奴が行ったという全てのことが疑わしい。
0087デフォルトの名無しさんNGNG
Winsockにて、未使用のポート番号の一覧を手に入れることはできますか?
サーバープログラムであいているポートを自動的に取得して使いたいのです
0088デフォルトの名無しさんNGNG
空いていることを確認できたとして、その後使おうとしたときに
使えるとは限らないと思うんだが・・・
0089デフォルトの名無しさんNGNG
その空いているという表現はFW等で開放されていると言う意味なのでしょうか?
できれば未使用で使えるポートを列挙できる方法を知りたいです。
0090デフォルトの名無しさんNGNG
うーん、TCPの勉強をもうちょっとしてください。
0091デフォルトの名無しさんNGNG
>>90
49152〜6535(でしたっけ?)
は動的に自由に使えるんじゃないんですか?
0092デフォルトの名無しさんNGNG
>>91
>>88を読み直そう。
0093デフォルトの名無しさんNGNG
>>92
>>87を読み直してください。
0094デフォルトの名無しさんNGNG
私の質問の意図を理解できないのでしょうか?
ここの連中は本当に役に立ちませんね。
0095デフォルトの名無しさんNGNG
>>89
列挙する方法はないです。>>88の意味において。

>>87
普通は使っていいところを順番にbind()してみます。
成功したら使えるってことです。
0096デフォルトの名無しさんNGNG
>>87
netstatで使ってるポートは出てくるんだから、
その逆やれば、いーんじゃねーの?

だからといって、次に使おうとしたときに使えるかどうかは
しらんけどな。
0097デフォルトの名無しさんNGNG
要するに
使用できるポートを検索する→発見→bind()
                      ↑
                     この辺で突然他のプログラムに使用される可能性がある。
って事でそ?
まぁ、そんな一瞬の間を突いて使われる事はめったに無いと思うけど、100%使えるとは限らんぞ と
0098デフォルトの名無しさんNGNG
linuxだとbindしないでlistenすれば適当に空いてるポート割り振ってくれる
ようになってるんだけど、winsockはそういうのないの?
0099デフォルトの名無しさんNGNG
ふう
0100デフォルトの名無しさんNGNG
みい
0101デフォルトの名無しさんNGNG
>>97
まじですか?、そんな一瞬の隙をつかれることがあるんですか?
考えもしませんでしたw
0102「ほとんど」だから、余計性質が悪いわけなんだけどな。NGNG
>>101
大丈夫だよ、あるかどうかの判定した直後に bind すれば、ほとんど割り込まれたりしないからさ。
0103デフォルトの名無しさんNGNG
マルチプロセスだったりマルチスレッドだったりするとありうるな
0104デフォルトの名無しさんNGNG
>>102
おいおい、メール欄だけじゃあ、誤解するだろ。
++portしてretryしなきゃダメだよ。
0105デフォルトの名無しさんNGNG
いきなり bind() で使用中だったら ++port で再 bind() すれば
良いだけなんだがな。。
0106デフォルトの名無しさんNGNG
>>101
バッファオーバーランと並ぶ
セキュリティホール基本技の一つでしょ
0107デフォルトの名無しさんNGNG
102のメール欄に何が書いてあるのかわくわくしながら見に行ったら単なるsageだった・・・
0108デフォルトの名無しさんNGNG
12のネタが終わったら、途端に寂れたな
0109デフォルトの名無しさんNGNG
多分>12が新しいネタ考えてきてくれるよ。
0110デフォルトの名無しさんNGNG
質問です。
今Socketプログラミングの勉強の為に、コミュニケーションツールを作ってるのですが
主に音声チャットや映像配信(これらは一部のパケットの欠陥があってもOK)
を考えていて、ファイル転送などのサポートも考えています。
それで、プロトコルを今どうするか考えているのですが、こういう場合はUDPの方が良いのでしょうか?
ファイル転送や文字のチャットでは欠陥されると色々困るんですが・・・
また、UDPでエラーチェックをする場合はどうすれば良いのか教えてください。

転送出来てるかどうかのメッセージをやりとりするとしても、そのメッセージ自体が相手に伝わってるかどうかもわからないでしょうし・・・
0111デフォルトの名無しさんNGNG
>>110
別にTCPとUDPのどっちか一方しか使ってはいけないというわけじゃないんだから
そう思うなら使い分ければいいと思う。

エラーチェックというか再送が必要なときにそれをUDPでやるのは、TCPだと
うまくいかなくてそれがなぜかわかってからで遅くはない。そうでないと車輪の
再発明になりかねん。プログラミングの勉強ということなのでそれをやってみる
のも勉強のうちならそれはそれで意味があるだろうが。
0112デフォルトの名無しさんNGNG
欠陥?
0113デフォルトの名無しさんNGNG
血管
0114デフォルトの名無しさんNGNG
>>110
普通は、音声、映像のストリーミング配信をUDPでやって、
ファイル転送、文字チャットはTCPだろうね。
>>111も言ってるが、単に一つのツールの中で、つかいわけるだけ。
0115 NGNG
普通はだまってTCPだろ。ストーリームだろうがなんだろうが。
マルチキャストの実験、とかじゃない限り。

歴史的な理由、って以外でUDP使ってるプロトコルあるか?
0116デフォルトの名無しさんNGNG
>>115
もちっと、勉強しましょう。
たとえば、オンラインゲームとか、ちゃんと理由があって UDPにしてたりする。
0117デフォルトの名無しさんNGNG
>>116
PSOとかはTCPとUDPを使い分けているね。
0118デフォルトの名無しさんNGNG
メッセンジャー系もメンバーのオンライン/オフラインを通知するのはUDPじゃなかったっけ
0119デフォルトの名無しさんNGNG
>>115
前スレのSkypeの話を見てみれば?
それとMOはほぼUDPの天下。
稀にTCPオンリの変り種もいるけどね。
0120デフォルトの名無しさんNGNG
まぁ、今の流行はUDPだね。
Punching hole UDPとか面白そう。

>>118
どうやってUDPで状況確認するの?
まさか、ずっと確認のためのパケット送り続けるとか?
0121デフォルトの名無しさんNGNG
>>120
そうだよ。定期的にサーバに送る。
0122デフォルトの名無しさんNGNG
そのケースはサーバ側の負担を軽くしたいんでしょ。
接続張りっ放しでたくさんかかえると大変だから。
すぐに接続切っちゃったら、UDPでポーリングするのと比べて、
それほどアライブチェックの確実性が上がるわけでもないし。
0123デフォルトの名無しさんNGNG
質問です。
今Wisosockでコードを組んでるのですが
socklen_tを使うと定義されてないって言われます。
winsock2.hをインクルードするだけではダメなのでしょうか?
0124デフォルトの名無しさんNGNG
手元の環境ではws2tcpip.hに定義されてる。
それはどっからも参照されてないみたいだから、必要ならincludeしてやれ。
または、自分でtypedefするかどっちかだな。
0125デフォルトの名無しさんNGNG
自分でtypedefって・・・
0126デフォルトの名無しさんNGNG
なんだよ〜inlcudeしたら、なんかエラーでまくりだよ〜
これをinlcudeする前に、なんかincludeしなきゃならんのかな〜
追っかけるの面倒くさいなあ〜
もういいや。

typedef int socklen_t;
 
0127デフォルトの名無しさんNGNG
>>126
 #include <windows.h>
 #include <ws2tcpip.h>
とするとエラーが出まくったって事?ならば
 #define _WINSOCKAPI_
 #include <windows.h>
 #include <ws2tcpip.h>
でどうすか? つかゴメン試してないけど。

あと,7ビットフラグが立ったよ〜ヽ(´ー`)ノ
0128デフォルトの名無しさんNGNG
細かいトコは見てないけど
#include <winsock2.h>
#include <ws2tcpip.h>
ってやったら使えたよ。@VS.net
ちなみにwinsock2.hをインクルードした時にはwindows.hをインクルードする必要無いみたい
なんかの理由でインクルードしたい場合にはwinsock2.hを先にインクルードする必要があるみたい。
まあ、コレも詳しく見てないんで細かいことはしらんけど。
0129デフォルトの名無しさんNGNG
確か、windows.hを先にincludeしたい場合は先にWIN32_LEAN_AND_MEANをdefineしとけば良いとか見た覚えがある。
0130デフォルトの名無しさんNGNG
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <winsock2.h>

こんな感じかにゃ
0131デフォルトの名無しさんNGNG
msdnに書いてないね、socklen_t。ダメじゃん…
0132デフォルトの名無しさんNGNG
>>131
0133デフォルトの名無しさんNGNG
質問です。
Winsockでの質問なのですが
recvfrom()で、指定した時間音沙汰無しだったらブロックをやめて進めるって事をしたいのですが
何か良い方法はありませんでしょうか?
0134デフォルトの名無しさんNGNG
>>133
ブロッキングの時間を延ばしたいの?
それともtimeoutしても問題なく動く方法を知りたいの?
それともブロッキングしなくてもいい処理の仕方に変えたいとか?
0135デフォルトの名無しさんNGNG
ポーリング最強
0136デフォルトの名無しさんNGNG
SIGALRM
setsockopt()+SO_RCVTIMEO
select()
の三者の内、いづれかを使うということになると思いますが、
WinSockにはSO_RCVTIMEOがなかったと思うので、timeoutが指定できる
select()を使うのというのはどうでしょうか?
0137デフォルトの名無しさんNGNG
CCNAって取ったらどういった職につけるんでしょうか
0138デフォルトの名無しさんNGNG
>>137
スレ違いもいいとこだ。
0139デフォルトの名無しさんNGNG
>>138
(;´д`)
0140デフォルトの名無しさんNGNG
>>137
資格全般
http://school2.2ch.net/lic/
0141デフォルトの名無しさんNGNG
そういや2chってphpにすれば負荷減るんじゃないの?
0142デフォルトの名無しさんNGNG
負荷減って、専用ブラウザ使う理由消えると
ひろゆきの収入なくなるからだめか
0143デフォルトの名無しさんNGNG
ワラタ
0144デフォルトの名無しさんNGNG
>>142
PHPにしたところで転送量は減らない。
0145デフォルトの名無しさんNGNG
PHPが、負荷を減らすのが得意なのは、プログラマへの負荷。
すれ違い終了。
0146デフォルトの名無しさんNGNG
fork分の負荷も消えるな。
たしか、「phpはバグがあってメモリを離さないからダメだ」みたいなことを
何年前かにひろゆきが語ってたぞ。
0147デフォルトの名無しさんNGNG
さっさと 2chd でも作れや
0148デフォルトの名無しさんNGNG
>>147
独自プロトコル? それとも2ch向けHTTPサーバ?
0149デフォルトの名無しさんNGNG
ひろゆきデーモン
0150デフォルトの名無しさんNGNG
>>148
独自プロトコルだと、IEでも見られないし、
専用ブラウザも作り直しになっちゃうよ。

スレッド式掲示板に最適化された、httpdでしょ、やっぱし。
(mod_2chとかでもいいかとも思うけど)
0151デフォルトの名無しさんNGNG
>>150
以前似たようなものをつくってこの板で宣伝していたやつがいたな。
ようじょとかいう名前だったかな。
0152デフォルトの名無しさんNGNG
>>151
これか?
http://www.bq--3ayiomcfao4tbgzqq4.to/www/project/youjyo/

「ょぅι゛ょ」なんて名前を付けたのと、作者が変態なのと
Windowsで実装したのが失敗だったな。物は良いと思うが。
0153デフォルトの名無しさんNGNG
質問です。
Winsockなのですが
recvfrom()のブロッキング時間を設定するにはどうすれば良いのでしょうか?
0154デフォルトの名無しさんNGNG
>>153
select
0155153NGNG
え〜と
サーバーへsendto()でコマンドを送って
recvfrom()で一定時間待って、サーバーから応答が無ければそのままブロックを終わらせたいのですが・・・
select()を使うとは具体的にはどうすればいいのでしょうか?

recvfrom()の直前にselect()を持ってきて、ブロッキング時間を設定して
読み取り可能ならそのままrecvfrom()、時間以内に出来なかったらスルーするって感じでしょうか?
0156デフォルトの名無しさんNGNG
そうです。
あと、setsockoptでタイムアウトの指定ができるので(WinSockだと
多分できないんですが)確認しておいたほうがいいですよ。
0157デフォルトの名無しさんNGNG
WinSockでもそれくらい出来ますよ。プンスカプン
0158デフォルトの名無しさんNGNG
そうでしたか・・・
申し訳ない。
0159デフォルトの名無しさんNGNG
SO_RCVTIMEOが使用できるということなので、setsockoptで
struct timevalを使って設定するのが面倒無いと思われます。
0160デフォルトの名無しさんNGNG
使えるのはwinsock2.0からだから使えないも同然
0161デフォルトの名無しさんNGNG
>>160
何で?Winsock2使えない環境の方が稀だと思うんだが
0162153NGNG
どうもありがとうございます。
SO_RCVTIMEOで出来るという事なので、それでやってみます。

あと、Winsock2ですが、Win2k以降のみをターゲットにしてるので大丈夫です。
0163デフォルトの名無しさんNGNG
MSDNより
SO_RCVTIMEO and SO_SNDTIMEO
(略)
If a send or receive operation times out on a socket, the socket state
is indeterminate, and should not be used; TCP sockets in this state
have a potential for data loss, since the operation could be canceled
at the same moment the operation was to be completed.
こんな戯けた仕様だけどそれでもいいの?
0164デフォルトの名無しさんNGNG
大変申し訳ない。
実際に確認もせずに安直に薦めてしまって。
しかし、すごいねWinSock
0165デフォルトの名無しさんNGNG
普通select使うからなあ
0166164NGNG
>>164
> しかし、すごいねWinSock

MSDNのWinsock2ドキュを一読することを勧める。かなり笑える。
Windowsのversionが違えば振る舞いが違うくらいは当たり前。
0167166NGNG
163だぬ
0168デフォルトの名無しさんNGNG
selectかWSAWaitForMultipleEvents()とか使って
自分でタイムアウト処理書いた方が良さそうだね。
0169デフォルトの名無しさんNGNG
というか、WinSockにはWinSockにあった書き方があるだろうから、
WinSockならWinSockの流儀に従えばいいとおもわれ。
もちろん逆も同じ事が言えると思われ。
片方でできるからもう片方が出来て当然、出来ないのはクソ
みたいな発言はあまりに浅慮だと思う。
0170デフォルトの名無しさんNGNG
>>169 >>169
>>169 >>169 >>169
0171デフォルトの名無しさんNGNG
>>169
>>163の文章の意味理解できない人?
0172デフォルトの名無しさんNGNG
てか単に、仕様がおかしいと思えば使わなければいいわけで
WinSockなら>168みたく処理すればいいじゃん?って言っているのでは?
どうせ文句いった所でMSが直してくれる分けでもないし
つか、普通selectっしょ?
0173デフォルトの名無しさんNGNG
ポーリング最強
0174デフォルトの名無しさんNGNG
WSAAsyncSelect()って良くないの?
WndProcで処理できるから結構好きなんだが
0175デフォルトの名無しさんNGNG
cygwinのgccでselectのラッパーを書こうと思っていて、
fd_setの中にセットされてるsocketを一覧する必要があるんだけど、
sys/types.hにあるfd_setの中のfd_maskの配列の長さが2なんだけど、
FD_SETは

# defineFD_SET(n, p)((p)->fds_bits[(n)/NFDBITS] |= (1L << ((n) % NFDBITS)))

ってなってる。NFDBITSは32だから、ソケットの番号が64より大きいとはみ出ない?
それともディスクリプタって64個しか開けないの?
0176デフォルトの名無しさんNGNG
winsock2のselectは64個までだったと思うズラ
0177175NGNG
>>176
登録の限界数がそれなのはわかるんだけど、
FD_SETでn/NFDBITSってやてるから、ソケットの番号が100とかだったら
100 / 32 = 3になって、配列の長さを越えてない?
0178デフォルトの名無しさんNGNG
>>176
The variable FD_SETSIZE determines the maximum number of descriptors in a set.
(The default value of FD_SETSIZE is 64, which can be modified by defining FD_SETSIZE to another value before including Winsock2.h.) Internally, socket handles in an fd_set structure are not represented as bit flags as in Berkeley Unix.

FD_SETSIZE は可変できるズラ。デフォルトが64なりよ。
0179175NGNG
>>178

ちょっと言い方が悪かったかも。
ソケットの数じゃなくて、ソケットディスクリプタの番号が大きかったら困るんじゃ?
ってのが質問。

unsigned long fd_bits[2];
fd_bits[n/32] = (1L << (n % 32));

ってな感じでnの値が64以上だとnが64より大きな番号を持つソケットだとだめじゃない?
ソケットを64個以上生成したら一つはディスクリプタの番号が64より大きな数字になると思うんだけど、
俺何か勘違いしてる?
それともそういう時はFD_SETSIZEを意識的に調整しないとだめということ?
0180デフォルトの名無しさんNGNG
>>179
ま、そういうことだ。selectの設計はそれほど古いのだよ。
だからpollとかkqueueとかに取って変わられつつある。
0181デフォルトの名無しさんNGNG
>>179
ちと調べてみたが、cygwinは意図的にunix風のselectに見えるように
しているみたいだ。winsock2のfd_setとは互換性がない。

unixでもそうだと思うが、selectの第一引数nfdをデカくして、
かつ、デカい配列を渡せばいいんじゃねえの?
ダメなら怒られるだろうし・・・
0182デフォルトの名無しさんNGNG
>>175
とりあえずマクロは無視して、
select(2)の第一引数にどのくらい大きい数を与えられるか、
fileをいくつopen(2)出来るか調べてみてはどうか?
0183175NGNG
>>180, >>181
サンクスコ。ってことはやっぱりFD_SETSIZEの値を大きくしないとだめなのね。
ちなみにディスクリプタの番号って必ず小さい数から順番にとられていくの?
ソケット開閉を繰り返したら番号がすげー大きくなる、ってことはない?

>>182
>select(2)の第一引数にどのくらい大きい数を与えられるか、
これってどういうこと?
どの数字までならアルゴリズム的に問題ないか、ってこと?

>fileをいくつopen(2)出来るか調べてみてはどうか?
Linuxの2.4.20だとulimit -nのディスクリプタの数の上限よりちょっと少ないくらいだった。

ちなみにCygwinで書いてるのはWindowsで書いてるソフトを移植するために
コンパイルエラーがGCCとVC++の両環境で出ないところまでテストするためでつ。
0184デフォルトの名無しさんNGNG
>>183
> これってどういうこと?
> どの数字までならアルゴリズム的に問題ないか、ってこと?

cygwinで。大きすぎたらエラーが返ってくるはず。

テスト簡単でしょ?
maskの方は0だけ有効にして、第一引数をどんどん大きくして、
select(2)するloopを書けばいいだけだから。

> Linuxの2.4.20だとulimit -nのディスクリプタの数の上限よりちょっと少ないくらいだった。

cygwinで試してみれば?
0185175NGNG
とりあえず三通りで試してみた。
全部CygwinでFD_SETSIZEはデフォルトの64のままね。

一つは>>184の通り。

int result;
int a=0;
fd_set fds;
int b=0;
struct timeval tv;
int i,j;

for(i=0;i<FD_SETSIZE*2;i++){
 tv.tv_sec=0;
 tv.tv_usec=100*1000;
 FD_ZERO(&fds);
 FD_SET(0,&fds);
 result = select(i,&fds,NULL,NULL,&tv);
 if(result != 0){
  printf("failed at %d. fd_setsize=%d\n",i,FD_SETSIZE);
 }
}

selectは正常にタイムアウト。問題なし。
0186175NGNG
二つ目はFD_SETSIZEより多くのソケットをfd_setに突っ込むテスト。
一個のソケットでSelect,二個のソケットでSelect...って繰り返してる。
改行が多いって言われたからエラーハンドリングは削りますた。

int a=0;
fd_set fds;
int b=0;
struct timeval tv;
int result,i,j,sockets[FD_SETSIZE*2],maxfdnum;
struct sockaddr_in localaddr;
memset(&localaddr,0,sizeof(struct sockaddr_in));
localaddr.sin_family=AF_INET;
localaddr.sin_addr.s_addr = INADDR_ANY;
localaddr.sin_port = 0;
for(i=0;i<FD_SETSIZE*2;i++){
 tv.tv_sec=0;
 tv.tv_usec=100*1000;
 FD_ZERO(&fds);
 sockets[i] = socket(AF_INET,SOCK_DGRAM,0);
 result = bind(sockets[i],(struct sockaddr*)&localaddr,sizeof(struct sockaddr_in));
 maxfdnum=0;
 for(j=0;j<i;j++){
  FD_SET(sockets[j],&fds);
  maxfdnum = (sockets[j] > maxfdnum)? sockets[j] : maxfdnum;
 }
 result = select(maxfdnum+1,&fds,NULL,NULL,&tv);
 printf("loop:%d a=%d\n",i,a);
}

65回目のループ(i=64)で処理が停止した。selectから制御が戻らなくなった。
ちなみにうちのCygwinだとソケットは90弱しかbindできなかった。
0187175NGNG
最後は大きな番号のディスクリプタをFD_SETしていくとどうなるかのテスト。
FD_SETSIZE+10(64+10)のソケットをbindして、最初の10個以外の64ソケットを
FD_SETしてる。エラーハンドリングは割愛。

int result;
int a=0;
fd_set fds;
int b=0;
int i,j;
int sockets[FD_SETSIZE+10];
struct sockaddr_in localaddr;

memset(&localaddr,0,sizeof(struct sockaddr_in));
localaddr.sin_family=AF_INET;
localaddr.sin_addr.s_addr = INADDR_ANY;
localaddr.sin_port = 0;

for(i=0;i<FD_SETSIZE+10;i++){
 sockets[i] = socket(AF_INET,SOCK_DGRAM,0);
 result = bind(sockets[i],(struct sockaddr*)&localaddr,sizeof(struct sockaddr_in));
}

for(j=0;j<FD_SETSIZE;j++){
 FD_SET(sockets[FD_SETSIZE+10-j-1],&fds);
}
printf("a=%d b=%d\n",a,b);

a=8192 b=0ですた。
長くてスマン
0188デフォルトの名無しさんNGNG
>>186
> 65回目のループ(i=64)で

これは下請のWinsockのselect()の制限だろうね。

> 処理が停止した。selectから制御が戻らなくなった。

これはcygwinの実装のせいかも知れないけど。
0189デフォルトの名無しさんNGNG
fdsってそのままだと64個分しか用意されてないと思うんだが。
0190デフォルトの名無しさんNGNG
>>189
> fdsって

fdsってなんだよ(w
0191デフォルトの名無しさんNGNG
ネットワークアップデート機能をWinアプリにつけたいのですが、
一般的な方法はどのようなものでしょうか?
参考文献があれば教えていただけないでしょうか。
お願いします。
0192デフォルトの名無しさんNGNG
>>191
文献に頼るな。
0193デフォルトの名無しさんNGNG
>>191
文献に頼るほどのものじゃないだろw

まぁ、俺がやる方法は
アップデートが必要と思われる部分はあらかじめDLLにしておいて
DLLを開放した後上書きする方法
0194デフォルトの名無しさんNGNG
というか、ネットワーク関係ない。
ネットワークダウンロードだろうが、CD-ROM配布だろうが、やること一緒。
0195デフォルトの名無しさんNGNG
小さいローダを作って、それでアップデートのチェックと
ダウンロードやれば?
0196デフォルトの名無しさんNGNG
>>191
http://aux.tora3.net/
0197191NGNG
いろいろな意見情報ありがとうございました。
もうちょい勉強してでなおします。
0198デフォルトの名無しさんNGNG
普通はアップデート用のプログラムを別に作るよな。
0199デフォルトの名無しさんNGNG
たまに、「アップデート用の小さなローダ」をアップデートしたくなるよネ。
0200デフォルトの名無しさんNGNG
finkはselfupdateってpackage systemのupdateがあるね。
http://fink.sourceforge.net
プラットフォームはDarwinだけどね。
0201デフォルトの名無しさんNGNG
質問です。
WSASyncSelect()使えばWSASend()とか非同期系不要でしょうか?
0202デフォルトの名無しさんNGNG
>>201
非同期と非ブロックは区別(ry
0203デフォルトの名無しさんNGNG
>>202
でも、WSASyncSelect()使えば、WSASendとか使わなくて良いようになりますよね?
ブロックしなくて直ぐに終わるんだったら、結局一緒のような・・・
0204デフォルトの名無しさんNGNG
>>203
プログラムの仕方次第で、同じコトを実現するための複数の方法があるってことよ。
正解は一つじゃないの。
0205デフォルトの名無しさんNGNG
>>203
あなたの頭の中に描いている用途にはそれで十分であっても、
>>201のような一般的な質問をすれば、答えはノーしかあり得ない。
0206デフォルトの名無しさんNGNG
ちょっと俺の認識が甘かった
非ブロックってブロックしないだけで処理してる間は止まっちゃうんだね。
なら巨大な容量のものを送ったり受信したりする時は、WSASend()とかは必要 か
0207デフォルトの名無しさんNGNG
linuxでマシンのIPアドレスを全部取るのってどうすればいいの?
Windowsだとgethostnameして、gethostbynameすればとれたんだけど、
同じことをやると127.0.0.1しか取れない。
なんかうまい手ない?
0208デフォルトの名無しさんNGNG
>>207
ioctlでSIOCGIFCONFしる。
man 7 netdevice参照のこと。
0209207NGNG
>>208
愛してる。
0210デフォルトの名無しさんNGNG
208は俺の彼氏だヴォケ
0211デフォルトの名無しさんNGNG
>>208 は俺の穴兄弟だヴォケ
0212デフォルトの名無しさんNGNG
>>208 は俺の右手だヴォケ
0213デフォルトの名無しさんNGNG
母です。
0214デフォルトの名無しさんNGNG
>>208の娘です
0215デフォルトの名無しさんNGNG
   211
穴兄弟\    213   212
      \ 母↑  /本体?
  好き?  \ │/
  207←───208←────209
         /↑  愛してる  ↑
       /  │         │
     / 彼氏│   嫉妬    │
  娘/      210─────┘
  214

複雑だな…
0216デフォルトの名無しさんNGNG
ワラタ
0217デフォルトの名無しさんNGNG
>>215
ネットワークになっているね
0218218NGNG
>>215
尊敬ってのを加えて
0219デフォルトの名無しさんNGNG
受け側と送り側があって、
UDPでデータ転送をすることにして、
受け側が送り側によって送られたデータを処理し切れなくなると
バッファが満タンになったりして宜しくない状態になる気がするんですが、
そこのところは世の中ではどうなってるんでしょうか?
0220デフォルトの名無しさんNGNG
UDPを使うならお前が制御せよ。いやならTCPを使え。
0221デフォルトの名無しさんNGNG
ネットワークプログラミングをかじってみようと思ってる超初心者です。
ネットワークプログラミングの1番の基礎ってなんですか?Hello Worldてきな
ものありませんか?
0222デフォルトの名無しさんNGNG
echo
0223デフォルトの名無しさんNGNG
echo?????
0224デフォルトの名無しさんNGNG
>>221
Hello worldを送るプログラムと受けるプログラムを書いてみれば。
0225デフォルトの名無しさんNGNG
>>221
俺の一番最初のネットワークプログラミングは、HTTP受信だったが。
ようはそういうことだろ>Hello World
0226デフォルトの名無しさんNGNG
HTTP/0.9, HTTP/1.0までなら入門にいいかもな。
HTTP/1.1はちょっとでかい。
0227デフォルトの名無しさんNGNG
どこかに良いサイトないですかね〜?スレの最初に貼ってあるリンクもみたけど
いまいちわからなです。
HTTP受信ってなんですか?
0228デフォルトの名無しさんNGNG
ぐぐってきます
0229デフォルトの名無しさんNGNG
IBMのTCP/IP チュートリアルおよび技術解説書
1000ページぐらいのPDF。サイズも8M近くあるが、ただでDL可能。

ttp://www-6.ibm.com/jp/support/redbooks/redirect/dblue_rb_red_tcp-GG88-4005-01.html
0230デフォルトの名無しさんNGNG
>>229
ダウンロードした。結構感動した。
0231デフォルトの名無しさんNGNG
http://www-6.ibm.com/jp/support/redbooks/redirect/dblue_rb_red_tcp-GG88-4005-01.html
0232デフォルトの名無しさんNGNG
>>222
ハロワくらいのレベルっつーと、確かに TCP echo だわな。
023323才NGNG
vb.netでFTPファイル転送ってどうやるかわかるかたいます?
0234デフォルトの名無しさんNGNG
・
0235ミナツキ サヤ ◆SAYAC2HJWE NGNG
235
0236デフォルトの名無しさんNGNG
>>233
ftp.exeを実行する。

ftp -s:filename

みたいに。お手軽お手軽
0237デフォルトの名無しさんNGNG
>>233
MFCのCFtpConnectionに相当するモノも無いみたいだね。
面倒だけど、Socketを使って自作するしか。
0238デフォルトの名無しさんNGNG
質問です。
UDPって、1つのデータを受信中に別のデータが送られてきても待ってくれるんでしょうか?
それとも、その送られてきた時点で受け取れなかったら破棄されるんでしょうか?
0239デフォルトの名無しさんNGNG
待ってくれる場合もあるし、破棄される場合もある。
0240デフォルトの名無しさんNGNG
>>239
それは困るんですけど、どうにかなりませんか?
0241デフォルトの名無しさんNGNG
>>240
setsockopt()で受信バッファを大きくする。
でも、どっかで消えてしまう事は必ずあるよ。
0242デフォルトの名無しさんNGNG
>240
自分でデータの連結や、再送処理をしろ
それが嫌なら、TCP/IPを使え
いったい何のためのUDPだと思ってるんだと小(ry
0243デフォルトの名無しさんNGNG
>>240
寝る前に>>220を100回唱えろよ。
0244デフォルトの名無しさんNGNG
> TCP/IPを使え
0245デフォルトの名無しさんNGNG
> TCP/IPを使え
0246デフォルトの名無しさんNGNG
もう寝たのかよ!
0247デフォルトの名無しさんNGNG
UDPを使うならお前が制御せよ。いやならTCPを使え。
UDPを使うならお前が制御せよ。いやならTCPを使え。
UDPを使うならお前が制御せよ。いやならTCPを使え。
UDPを使うならお前が制御せよ。いやならTCPを使え。
UDPを使うならお前が制御せよ。いやならTCPを使え。
UDPを使うならお前が制御せよ。いやならTCPを使え。
UDPを使うならお前が制御せよ。いやならTCPを使え。
UDPを使うならお前が制御せよ。いやならTCPを使え。
UDPを使うならお前が制御せよ。いやならTCPを使え。
UDPを使うならお前が制御せよ。いやならTCPを使え。
UDPを使うならお前が制御せよ。いやならTCPを使え。

中略

UDPを使うならお前が制御せよ。いやならTCPを使え。
UDPを使うならお前が制御せよ。いやならTCPを使え。
0248デフォルトの名無しさんNGNG
(;´Д`)ハァハァ
0249デフォルトの名無しさんNGNG
http://www.aa.alpha-net.ne.jp/bosuke/trash/upnp.htm

XPのAPIを使わずにUPnPでポートを開く方法
意外と簡単っぽいね
0250デフォルトの名無しさんNGNG
>>237
それよりはWinInet系のAPIを使う方が楽だろう。
まあ細かいことやりたければSocket直叩きだがナ。

ぐぐればC#によるFTPクライアント実装の例は簡単に見つかるよ。
0251デフォルトの名無しさんNGNG
ftp.exe最強
0252デフォルトの名無しさんNGNG
質問です。
ATL/MFC には、SMTPを簡単に扱える CSMTPConnection クラスがありますが、
これを用いてメールを送信する場合、サーバが返す値(エラーコード)を取得するには
どうしたらいいでしょうか?
0253デフォルトの名無しさんNGNG
しらね
0254デフォルトの名無しさんNGNG
>>252
VCにはソースついてるんだから CSMTPConnectionクラスのソースみればわかるだろ?
0255デフォルトの名無しさんNGNG
SMTPぐらい実装しちゃえ。
0256デフォルトの名無しさんNGNG
そういう細かいことを気にしなくてもいいためのクラスなんじゃねぇの?
0257デフォルトの名無しさんNGNG
発生したエラー内容によってその後の処理は変わるんだから、
クラス化しようがしまいが気にしないわけにはいかんだろ。
0258デフォルトの名無しさんNGNG
そういう人は、実装しちゃえ。

つか、CSMTPConnectionなんて、漏れの持ってるヘルプには載ってないorz
VisualStudio6.0じゃそろそろダメか?
0259デフォルトの名無しさんNGNG
ttp://www.codeproject.com/internet/csmtpconn.asp#APIReference
のことかな。
CSMTPConnection::GetLastCommandResponse
CSMTPConnection::GetLastCommandResponseCode
とか、なんかそのものズバリっぽいものがある気がするのだが気のせいか。

>>258
VC7(.NET)以降はCRT、MFC、ATLあたりが大幅に変わってるから、
新しいの買うにしてもVC6は手放さない方がいいよ。デフォのCランタイムが
MSVCRT.DLLじゃなくてMSVCR70.DLLになっちゃってる。これはなにげに
嫌でしょう。
俺はVC6のincludeとlibだけ取っておいて、VC7のcl使ったりという
邪道な真似をやったりもするけど。
0260 NGNG
http://www.codeproject.com/internet/csmtpconn.asp#APIReference
0261デフォルトの名無しさんNGNG
MFCでWinsock2を使いたいんですが
MFCのafxsock.hの中の記述を勝手に書き換えても大丈夫でしょうか?
0262デフォルトの名無しさんNGNG
かなりよくない
0263デフォルトの名無しさんNGNG
.NET Framework 開発者ガイド 非同期サーバー ソケットの使用

サンプルで接続要求待ちに無限ループを使ってるみたいなんですが、これ、いいんでしょうか?
なんか、力技に思えてしょうがないんですが。
0264デフォルトの名無しさんNGNG
>>261
stdafx.hの中に#include <winsock2.h>を書く。
(VS6.0しかしらんけど)
0265263NGNG
C#マンセー.Netマンセーーとかおもってた熱が、すげぇいかす速度でさめてきやがりました!!
やはり、C&WTLにしとけばよかったと、微妙に
0266デフォルトの名無しさんNGNG
>>263
ループ終了は例外処理を使ってるみたいだね。
簡単に実装できる方法だし、サンプルでこれを認めているんなら使わない手は無いと思うけどなぁ。
0267266NGNG
てゆか、Java辺りではすごくありふれた手法だよね。
大分見慣れてきたからそうは思わないんだけど、俺もJavaでこれ見たときはテンション下がったよ。
ロジックで解決しないコードって何だよって(←この考え方自体、既に古いかもしれんが)。
0268266NGNG
ロジックじゃなくて返値。
てか、三つもレス消費するなや俺……。
0269デフォルトの名無しさんNGNG
>>263
サーバアプリだと無問題だと思うが。
0270デフォルトの名無しさんNGNG
ビジーループじゃなければ無問題
0271デフォルトの名無しさんNGNG
ぶっちゃけ、鯖なんて黙って要求に答え続けてりゃ良いんだよ
0272デフォルトの名無しさんNGNG
C#で次のようなclassを作って

private string SockRecv(Socket tmpS)
{
int bytes;
byte[] RecvBuff = new byte[256];
MemoryStream RecvMsg = new MemoryStream();
Socket pop3 = tmpS;

do
{
bytes = pop3.Receive(RecvBuff,RecvBuff.Length,SocketFlags.None);
RecvMsg.Write(RecvBuff,0,bytes);
}
while(pop3.Poll(100000,SelectMode.SelectRead));

return Encoding.ASCII.GetString(RecvMsg.ToArray());
}
0273デフォルトの名無しさんNGNG
//接続成功の応答
RecvComd = SockRecv(pop3);
Console.WriteLine(RecvComd);

//USERコマンドの送信
SendComd = "USER " + User + "\r\n";
SendBuff = Encoding.ASCII.GetBytes(SendComd);
pop3.Send(SendBuff,SendBuff.Length,SocketFlags.None);
RecvComd = SockRecv(pop3);
Console.WriteLine(RecvComd);

//PASSコマンドの送信
SendComd = "PASS " + Passwd + "\r\n";
SendBuff = Encoding.ASCII.GetBytes(SendComd);
pop3.Send(SendBuff,SendBuff.Length,SocketFlags.None);
RecvComd = SockRecv(pop3);
Console.WriteLine(RecvComd);
0274デフォルトの名無しさんNGNG
//STATコマンドの送信
SendComd = "STAT\r\n";
SendBuff = Encoding.ASCII.GetBytes(SendComd);
pop3.Send(SendBuff,SendBuff.Length,SocketFlags.None);
RecvComd = SockRecv(pop3);
Console.WriteLine(RecvComd);

//STATコマンドの結果からメールの数を抽出
MailCount = int.Parse(RecvComd.Split(' ')[1]);

if(MailCount != 0)
{
//RETRコマンドの送信
for(int count = 1; count <= MailCount; count++)
{
SendComd = "RETR " + count + "\r\n";
SendBuff = Encoding.ASCII.GetBytes(SendComd);
pop3.Send(SendBuff,SendBuff.Length,SocketFlags.None);
RecvComd = SockRecv(pop3);
Console.WriteLine(SendComd);
Console.WriteLine(RecvComd);
}
}
0275デフォルトの名無しさんNGNG
//QUITコマンドの送信
SendComd = "QUIT\r\n";
SendBuff = Encoding.ASCII.GetBytes(SendComd);
pop3.Send(SendBuff,SendBuff.Length,SocketFlags.None);
RecvComd = SockRecv(pop3);
Console.WriteLine(RecvComd);

pop3.Shutdown(SocketShutdown.Both);
pop3.Close();

return true;

0276デフォルトの名無しさんNGNG
のような通信をすると
quitコマンドを実行した直後あたりでプログラム
が固まるのですが原因は何なのでしょうか?
0277デフォルトの名無しさんNGNG
長い上にインデント潰れまくり、その上sageることも知らんような
お前のためにこんな糞コードを読み通せと?
0278デフォルトの名無しさんNGNG
普通、イベントを待つか
Thread分けるかするものなのだが・・・

返ってくる保障が無いんだし、帰ってこなけりゃ固まるよ。
0279デフォルトの名無しさんNGNG
>278
ありがとうございます
ネットワークプログラミングをするの始めたばかりなんで・・・
こんな厨な私にちょうどいい入門書ないですか?
0280デフォルトの名無しさんNGNG
UNIXドメインソケットをSOCK_DGRAMで使っています。
recvfromでブロックしているときにsocketファイルが削除されたら
戻るようにできるでしょうか。
0281デフォルトの名無しさんNGNG
質問です。
PunchngHoleUDPについてなのですが

クライアントのルーターのポートを空けなくても
Winsockの送信元ポートを設定し、サーバーへアクセスすると
自動的にルーターでポートが空くので、その穴を別のポートを設定していないクライアントが利用するって技術ですよね?

で、どうもサイト見る限り、Winsockで設定したクライアントのポート+1の番号のポートがルーターに開けられるような事が書いてたのですが・・・
これは本当ですか?ルーターの仕様として決まってるとはあまり思えないんですが・・・
0282デフォルトの名無しさんNGNG
UDPを使った場合
NATはどれくらいの時間サーバーを記憶してくれるんでしょうか?
サーバーへコマンドを送信してから1時間後くらいにサーバーからクライアントへコマンドを返すようなのを作りたいのですが・・・・
0283デフォルトの名無しさんNGNG
>>281
そのサイト教えれ。

>>282
実装次第なのでなんとも。
設定すればなんぼでも出来るだろうが、
デフォルトで1時間はいくら何でも期待できないだろう。

ちなみにうちの場合は10分。
5分間隔くらいでハートビート送ってくれないとな〜。
0284281NGNG
>>283
http://www.ht.sfc.keio.ac.jp/~suno/term/2003s/sunet.ppt
これです。
図を見る限りクライアントのルーターのポートが1つ増えてます。
0285デフォルトの名無しさんNGNG
>>284
この例だけで、>>281のように考えるのはどうかと思います。
ルータを通したローカルの複数のクライアントが同じポートを使用としたときに、
ルータは皆別々なポートにマッピングするべきなので。
0286281NGNG
>>285
確かにそうですね。

という事は、実装としては
サーバー側で送信元のポートを覚えておいて、他のクライアントにその情報を回せばOK って感じでしょうか?
0287263NGNG
while (True) {
orz;
}
0288263NGNG
>>271
殺伐としたサバですね。
鯖の中の人に聞かれたら、刺されそうです。
0289デフォルトの名無しさんNGNG
>>287-288
くだらない書き込みをするなよ。
0290デフォルトの名無しさんNGNG
>>287-289
くだらない書き込みをするなよ。
0291デフォルトの名無しさんNGNG
>>287-291
くだらない書き込みをするなよ。
0292デフォルトの名無しさんNGNG
>>287-292
くだらない書き込みをするなよ。
0293デフォルトの名無しさんNGNG
>>287-294
くだらない書き込みをするなよ。
0294デフォルトの名無しさんNGNG
にょほ〜
0295デフォルトの名無しさんNGNG
>>286
送信元のPortを鯖側で把握する事は可能だが
それはあくまであちらで設定されたWinsockのポートであって
ルーターでマッピングされたPortではない。

よって、鯖は相手のルーターのマッピングされたPortは知る事は出来ない
なので現状PunchingHoleUDPをWinsockベースで利用する事は不可能

生ソケット使いな
0296デフォルトの名無しさんNGNG
「あちらで設定されたWinsockのポート」って意味わからん。

クライアントが[srcip:srcport -> dstip:dstport]でUDPを発射するだろ。
ルータが[routerip:routerport -> dstip:dstpor]にすり替えるだろ。
サーバはrouterip:routerportをとれるやん。
0297デフォルトの名無しさんNGNG
>>282
俺はTCPを7500秒、UDPを60秒にしてある。
データの流れる方向が逆だが、そうじゃないとゲームホストをしたときに、
他の端末から来たGameSpyサーバPingのUDPでNATテーブルが簡単に埋まりつくすから。

まあ内側にホスト立てるとかそういうのは置いといてだw
0298デフォルトの名無しさんNGNG
質問です。
RecvFrom()の5つ目の引数に入る(struct sockaddr_in *)&hoge
に格納されるポートはルーターのポートなのでしょうか?
0299デフォルトの名無しさんNGNG
winsockを使ったネットワークゲームで、クライアントにデータを送るときにキャラクタの座標などを、数値を文字列に変換する関数を使って一回固定サイズのバッファにコピーしておくっているのですが、
他に良い方法ありますか?
0300デフォルトの名無しさんNGNG
それのどこが悪いと考えているのか述べよ。
0301デフォルトの名無しさんNGNG
>>300
アホか?
考えれば分かるだろ。
0302263NGNG
>>301 それは、エントロピの無駄、簡単にでも暗号化されてないと解析されて、場合によってはなんかすげぇいかすことに使われちゃうとか、そういう事ですか?
0303デフォルトの名無しさんNGNG
>>301
考えたけど分かりません。>>299は頭悪そうだから何考えてるか見当もつかん。
0304デフォルトの名無しさんNGNG
Win系専用でゲームサーバーを立てようとする>>299に、みなさん拍手を!!
0305デフォルトの名無しさんNGNG
バイナリで送るとエンディアン問題や値範囲の拡張性がなくなるってことで
そういう意味ではテキストで送るのは良いわけだが
その場合固定長バッファは危険かもな
0306263NGNG
>>300 は、ある意味、真理をついていることに改めて気づき、このスレは騒然とする....
0307デフォルトの名無しさんNGNG
>>305
俺は>>299読んだだけじゃ「バイナリ」とは判断がつかないな。

「数値を文字列に変換する関数を使って」という頭悪そうな表現は
ともかく、文字列と言ってるからにはテキストなんだろうし、
多分昔のCOBOLの帳票データみたいな、スペース産めされた
固定長のフォーマットなんだろ?

俺も>>300に同意だね。
0308デフォルトの名無しさんNGNG
300の自作自演か?
0309299NGNG
ちょとすみません。数値を文字列に変換する関数を使って のどこが頭悪いですか?
0310デフォルトの名無しさんNGNG
>>309
それより先に、>>299 で述べた方法のマズいと思っている点を述べよ。
0311デフォルトの名無しさんNGNG
頭が悪いのは263では。
0312デフォルトの名無しさんNGNG
>307
>305 もバイナリじゃなくてテキストだと思って書いてるはず。もちつけ。

>309
とりあえず、一般的過ぎて結局何をどうやってどういうデータにしてるかが
よくわかんね、というのはあるかもしれない。

>311
>263 には申し訳ないが、同意せざるを得ないということを否定しがたい。
0313309NGNG
>>310
全ての送信データを変換関数で変換するので、時間を食ってしまうのではないかと思ったからです。
0314デフォルトの名無しさんNGNG
>>313
> 時間を食ってしまうのではないか
などという問題の立て方は限りなく無駄だ。悩むのは計測してボトルネックが
明らかになってからにしなはれ。

一般論としては、Xのようにバイナリの形でやりとりするプロトコルも
あるけれど、ホスト毎のハードの差を吸収するにはテキスト化するのは
現実的で無難な解だと思われ。
human readableなデータはデバグしやすいという多大な利点があるし
単純な整数以外の型が絡んだりすると、やってらんないぞ。
興味あるんなら
RPCなどで使われてるXDR(External Representation Standard, RFC1014)ってのを
調べてみ。
0315313NGNG
>>314
なるほど。確かにデバックには便利ですね。
その場の思いつきの方法で不安でしたが、これで安心しました。
どうもありがとうございました。
0316デフォルトの名無しさんNGNG
初歩的な質問で申し訳ないのですが
WinsockでUDPを使ってファイルの転送をするプログラムを組もうと思うのですが
RecvFrom()でファイルを受信する場合、どの型を使うと良いのでしょうか?
Fileの始めの位置に印をつけるので、それを取り除くだけの処理をした後
Fileに保存するようにしたいのですが・・・

やはり、char型の配列でしょうか?
ちなみに印とは、分割してFileを受信するので順序良く並べる必要があるので、その番号を入れようと思ってます。
0317デフォルトの名無しさんNGNG
その程度だったらint型の方が良いと思われる。
int型のほうが高速なのでな
0318デフォルトの名無しさんNGNG
>>315
まあ、表現形式を切り替えられるようなプログラミングをすることですな。

>>316
RecvFrom()では、byte列を扱うんだから、charの配列でいいんじゃない?
0〜255じゃ小さければ、2 byte使って、(data[0] << 8) & data[1]すりゃいいし。
0319デフォルトの名無しさんNGNG
そして再送要求(中略)TCPの再実装を体験する、と。
0320デフォルトの名無しさんNGNG
>>319
そうそう。何でTCPで実装しないのかと小(ry
0321デフォルトの名無しさんNGNG
PunchingHoleUDPとかTCPで実装出来るか?
もしスンナリ転送できた場合、TCPより高速化しないか?
毎度毎度確認するTCPより、転送出来なかった所だけ最後に転送する方法にしたらかなり高速化するぞ
0322デフォルトの名無しさんNGNG
>>321
Skypeとかもそうだけど、今はUDPがトレンドだよねぇ・・・
NAT超えについての解決策が無いTCPだと正直辛い。

回線が高速化した分だけUDPがどんどん有利になってくる。
TCPの方が絶対的に良いと言うのはもう古い話
0323デフォルトの名無しさんNGNG
>>321
> もしスンナリ転送できた場合、TCPより高速化しないか?

スンナリ転送できなかった時、劇遅にならないためには、
それなりのスキルがいる。
0324デフォルトの名無しさんNGNG
TCPのNAT越え、NATルータを騙すだけでいいなら、
ftpのデータセッションのフリをする手もあるけどな。
実装にもよるから100%うまくはいかんだろうけど。
0325デフォルトの名無しさんNGNG
初歩的な質問で申し訳ないのですが
ある特定のIPアドレスのある特定ポートが
開いているかどうかってどうやって調べるんですが?
まっさらのWinXPで調べるにはやはりtelnetしかないのでしょうか?
スレ違いな気がしますが他に適当な所も見つからないので
どなたか教えてくださいませ。
0326デフォルトの名無しさんNGNG
>>322
TCPのNAT越えしる。
0327デフォルトの名無しさんNGNG
>>325
多少スレ違いな気もするが、nmap等のポートスキャナを導入汁。
自分のIPアドレスに対してなら ttp://scan.sygatetech.com/ こういったサービスが
いくつかあるのでそういうのを探して使うのもありだが
0328デフォルトの名無しさんNGNG
>>327
アドバイスありがとうございます。
参考にさせていただきます!
0329デフォルトの名無しさんNGNG
LinuxをサーバーにしてWindowsをクライアントにしたいのですが
どうもWinsockとSocketは同期しないみたいなのですが
どうしたら出来るようになるのか教えてくださいませんか?
0330デフォルトの名無しさんNGNG
エスパーさん出番ですよ!
0331デフォルトの名無しさんNGNG
>>329
この質問に答えられたら、その質問に答えてあげよう。


なんかプログラムを実行したら変な感じになるんですけど、
どうしたらちゃんと動くようになるのか教えてくださいませんか?
0332デフォルトの名無しさんNGNG
>>331
変な感じになる場所にブレークポイントを設定して
その一文をもう一度調べてみる。
0333デフォルトの名無しさんNGNG
>>329
普通にやってできるよ。
0334デフォルトの名無しさんNGNG
では回答
>>329
同期してないようにみえる場所をもう一度調べてみる。
0335デフォルトの名無しさんNGNG
バッファリングの半分は優しさで出来ています・・・
0336デフォルトの名無しさんNGNG
>>329
同期するように自分で通信プロトコルを作る。
0337デフォルトの名無しさんNGNG
winsockのラッパーDLLってないでしょうか?通信内容を保存するだけでいいのですが。
自分で作る必要がありますかね。
0338デフォルトの名無しさんNGNG
単に通信内容を保存するだけなら、WinDump とかネットワークモニタでいいんじゃ。
自分の目的に特化させたいならそりゃ自作するしかないでしょ。
0339デフォルトの名無しさんNGNG
とあるネットゲームのクラックに必要なんです。
意地悪しないで教えてください。
0340デフォルトの名無しさんNGNG
338は至極まともな回答だと思うが、
それが意地悪に見えてしまう君は一体何様ですか?
0341デフォルトの名無しさんNGNG
>>340
お客様です。
0342デフォルトの名無しさんNGNG
俺はお子様だぞ。
0343デフォルトの名無しさんNGNG
ウサマだ。
0344デフォルトの名無しさんNGNG
>>343
通報しました
0345デフォルトの名無しさんNGNG
htonsを、エイチトンズって発音しているのですが何か問題があるでしょうか?
0346デフォルトの名無しさんNGNG
>>345
君がprintfをプリントフと発音しているなら別にいいんじゃないの。
プリントエフと発音しているんだったら、エイチトゥーエヌエスと読むべきだと思う。
0347デフォルトの名無しさんNGNG
>346
htonsがエイチトゥーエヌエスなら、
printfはピーアールアイエヌティーエフと呼んで下さい
0348デフォルトの名無しさんNGNG
>>347
エイチティーオーエヌエスとは読んでいないので
その提案には賛同できません
0349デフォルトの名無しさんNGNG
>348
じゃあ
htonsはトン
printfはリン
ということで
0350デフォルトの名無しさんNGNG
>>347
> >346
> htonsがエイチトゥーエヌエスなら、
> printfはピーアールアイエヌティーエフと呼んで下さい
h(略) to n(略) s(略)
print f(略)
だ。
0351デフォルトの名無しさんNGNG
>>345
同じだ。
エイチトゥーエヌエスと読む時もあるけど。
0352デフォルトの名無しさんNGNG
スタジオの綴りはstudioであるにもかかわらず
stdio.hをスタジオヘッダと読んでる人
↓
0353デフォルトの名無しさんNGNG
無駄無駄無駄無駄
0354デフォルトの名無しさんNGNG
>>352
すとぅどあいおうって読んでる
0355デフォルトの名無しさんNGNG
スタジオ・エッチ
0356デフォルトの名無しさんNGNG
俺はすたんだーどあいおー若しくはえすてぃーでぃーあいおーだな。
上司にatoi→あとい itoa→いとあ
って発音する香具師が居るんだがどうにかならんのか・・・
0357スレ違いすまんNGNG
atoi(3)なんか止めてstrtol(3)使いなよ。
0358デフォルトの名無しさんNGNG
std → すたんだーど
cnt → count
atoi → あとい
itoa → いとあ
str → ストリップ
0359デフォルトの名無しさんNGNG
stdio → すたんだーど あいおー
cnt → かうんと
atoi → えー とぅー あい
itoa → あい とぅー えー
str → すとあ
strtol → すとあ とぅー える
char → きゃら (相手が ちゃー という場合は ちゃー)
0360デフォルトの名無しさんNGNG
スレ的には、
inet_ntoa
inet_ntop
inet_lnaof
in_addr
sockaddr_in
getnetent
SIOCSIFADDR
辺りが適当かと。
0361デフォルトの名無しさんNGNG
htons
ヒートンズ
だろ!!??
0362デフォルトの名無しさんNGNG
addr→アドドラ

当然dllはドルル
0363デフォルトの名無しさんNGNG
inet_ntoa あいねっと えぬとぅーえー
inet_ntop あいねっと えぬとぅーぴー
inet_lnaof あいねっと えるえぬえーおーえふ
in_addr いん あだー
sockaddr_in そっくあだー いん
getnetent げっとねっとえんと

げっとねっとえんと、って韻を踏んでて響きがいいな。
0364デフォルトの名無しさんNGNG
addrはアドョロォァー
0365デフォルトの名無しさんNGNG
>>360
>>363と↓だけ違う
in_addr いん あどれ
sockaddr_in そっく あどれ いん
0366デフォルトの名無しさんNGNG
>>364 (;´Д`)
0367デフォルトの名無しさんNGNG
>>364
ワロタよ。
0368デフォルトの名無しさんNGNG
すげぇ規模でスレ違いですよおあえら
0369デフォルトの名無しさんNGNG
>>368
そんなことない。
0370デフォルトの名無しさんNGNG
>>369
そんなことない。
0371デフォルトの名無しさんNGNG
口頭でプログラムするのに必要。
0372デフォルトの名無しさんNGNG
どこかでWin2kだったかで直接プロトコル弄って
UPnP通信の実験してるリンクがあったと思うのですが
失ってしまいました。

どなたか心当たりないでしょうか?
0373デフォルトの名無しさんNGNG
思いっきりこのスレだOTL
すまんかった
0374デフォルトの名無しさんNGNG
マルチクライアントサーバを作っています。
WSAAsyncSelectを使用していて
FD_ACCEPTを受け取ったら
 for(iConnect = 0;talk[iConnect]!=INVALID_SOCKET;iConnect++);
 talk[iConnect] = accept(sock,(LPSOCKADDR)&client, &namelen);
の処理をして、SOCKET型のtalk配列のあいてるところで接続確立してるんですが
FD_READを受け取ったときにtalk配列の何番で、つまりどのソケットディスクリプタで
recvをしたらよいかを調べる方法がわかりません。

どうかお力添えをお願いします。
0375デフォルトの名無しさんNGNG
WPARAMの値でサーチ
0376374NGNG
おはようございます。
WPARAMでわかるんですか!
ぜんぜん気づきませんでした。
ありがとうございました。
0377374NGNG
すみません解決したのでさげます。
0378デフォルトの名無しさんNGNG
>>377
ちょっとまって〜
同じ質問しそうなので
どう解決したのか教えてください。
WPARAMにはパケしかないと思
0379378NGNG
解決しました
acceptの引数にちゃっかり入れられてました。
(bindと同じやつ入れてた)
orz
0380デフォルトの名無しさんNGNG
微笑ましい。
0381デフォルトの名無しさんNGNG
ちょっと質問ですが、
sendtoをする前に受信バッファーに残ってる全てのデータを取り除きたいのですが
どのようにしたらいいでしょうか?
0382381NGNG
Winsockで特定範囲のIPアドレスから送信された
ブロードキャストのパケットを受信する方法について
質問があります。
手違いでデバイスをクラスDのIPアドレスに設定して
しまったのですが、このデバイスが送信するブロード
キャストを受信するアプリを作成しています。
Winsockを使用した自作のアプリケーションでは取得できず、
WinPcapを使用したアプリケーション(Etherreal)では
取得できました。
WinsockではクラスA〜C以外のIPアドレスからのパケットは
取得することができないのでしょうか?
0383382NGNG
自己解決しました^^
0384名無し@沢村NGNG
ネットワークプログラミングで質問です。
銀行の口座にこっそりアクセスするには、どうすればいいんですか?
自分の口座の残高を増やす操作はどうやるんですか?
0385名無し@沢村NGNG
ネットワークプログラミングで質問です。
銀行の自分の口座にアクセスするには、インターネットバンキングを使えばいいから簡単ですね。
では残高を増やす操作はどうやるんですか?
インターネットバンキングでアクセスして、残高の末尾に0をたくさん書き込めばいいんですか?

0386名無し@沢村NGNG
自己解決しました^^
0387testNGNG
test
0388デフォルトの名無しさんNGNG
ちょっと質問ですが、
sendtoをする前に受信バッファーに残ってる全てのデータを取り除きたいのですが
どのようにしたらいいでしょうか?
0389デフォルトの名無しさんNGNG
>>388
無理
送信を省略できるようにしたいなら、sendtoするより前でそういう処理を入れれ
0390デフォルトの名無しさんNGNG
non-blockingにして、recvfromを呼び出しまくれば?
0391デフォルトの名無しさんNGNG
>>389-390
>>381
0392デフォルトの名無しさんNGNG
氏ねよ>>391お前みたいなクズがいるからアレなんだよ
0393デフォルトの名無しさんNGNG
>>389-390
既にバッファーにあるデータのバイト数がわかれば
その分recvfromで受信でいいんですが・・
普通にrecvfromの戻りが0になるまでひたすら受信でもいいっぽいですかね?
0394デフォルトの名無しさんNGNG
>>392
他人の質問をコピペして釣ろうとしているお前が死ね
0395デフォルトの名無しさんNGNG
>>393
0になるまでじゃなくて、エラーになるまで。
で、エラーの詳細を見て、ブロックする場合のエラーコードの時
(EAGAINとかWSAEWOULDBLOCKとか)のみ、その後の処理を
するようにすればOKじゃないか?

もちろん、non-blockingにしないとデータがなくなった時点で
ブロックしてしまうんで、non-blockingは必須になる。
0396デフォルトの名無しさんNGNG
>>395
すみません、かなり初歩的なことを聞きますが
non-blockingはどうやって行うのでしょうか?
0397デフォルトの名無しさんNGNG
>>396
Winsockでググれ。
0398デフォルトの名無しさんNGNG
>>397
すみません、ググりましたが540000件も出てきてさっぱりわかりません。
0399デフォルトの名無しさんNGNG
>>1のFAQ読んでこい
0400デフォルトの名無しさんNGNG
めんどいから教えやがって下さい
0401デフォルトの名無しさんNGNG
>>393
shutdownで無効にするってのはダメかい?
0402デフォルトの名無しさんNGNG
>>401
PCの電源を切るのはいくらなんでもまずいです。
0403デフォルトの名無しさんNGNG
>>402
久しぶりに「くすっ」くらいは笑えたレス。
0404デフォルトの名無しさんNGNG
>>402
無知な香具師はレスしないでくれ。
ここはお前みたいな厨房がくるところではない。
0405デフォルトの名無しさんNGNG
>>403-404
で、どうすればいいんでしょうか。
具体的に教えてください。
0406デフォルトの名無しさんNGNG
>404
ネタにマジレスすんなと
0407デフォルトの名無しさんNGNG
>>405
402に書いてあるのは試した?
0408デフォルトの名無しさんNGNG
>>407
すいません、仰っている意味が良くわからないのですが、
電源切ってしまったらプロセスが終了してしまいませんか?

どうしたんすか?
僕 なんかまずいことを…
0409デフォルトの名無しさんNGNG
>>393
先方から送られて、まだこっちに着いていない分のパケット(そのうち着く)はどう処理するつもり?
応答毎にシーケンス番号とか付けて、捨てるべきもの、処理すべきものを管理しなきゃダメだと思うよ。
0410デフォルトの名無しさんNGNG
なんでみんなしてコピペネタにマジレスしているんだろう・・・
0411デフォルトの名無しさんNGNG
>>388
> sendtoをする前に受信バッファーに残ってる全てのデータを取り除きたいのですが

この考え(特に「全部」)が猛烈にバッドセンス。
捨てたいパケット(UDP)があるなら、recvfrom()で受け取って捨てればいい。
人に聞くまでもないこと。

ところがあなたは何か「銀の弾丸」のようなものが存在すると思っている。
しかしそれはネットワークプログラミング初心者にありがちな誤解だ。
何を持って「全て」というのか。ネットワークには神の視点は存在しない。
0412デフォルトの名無しさんNGNG
マジレスも出たところで、このネタ、
=======終了=======
0413デフォルトの名無しさんNGNG
>>409
こっちが要求したら向こうから返答が返って来るので、向こうからいきなりくることはないんで、
ちなみに、向こうが何らかの理由で遅れて送信することがあるばあい、こっちはタイムアウトで再度要求するので
この辺りで以前に要求したデータが返って来る恐れがあるので、受信バッファーを空にしときたいんですよ

>>411
そんな幼稚な返答は望んでいないから消えていいよお前
0414デフォルトの名無しさんNGNG
マジアホ決定
0415デフォルトの名無しさんNGNG
>>414=マジアホ
0416デフォルトの名無しさんNGNG
マジかネタか知らんが、マジならそういう受け答えは
褒められたもんじゃないぞ。
それに、>>411の表現はともかく内容は間違っちゃいない。

空にしておきたいと言うが、空にしたあとに到着したらどうする?
無いと割り切って組むのもいいが、100%無いとは言い切れんぞ。

>>413のような仕組みなら>>409の方法で組むことをお勧めする。
0417デフォルトの名無しさんNGNG
>>413
「で」が多いよ。

受信バッファを空にした後に「以前に要求したデータ」が届いたらどうするんだ?
要求再送分の応答を受け取った後に「以前に要求したデータ」が届いたらどうするんだ?

ちゃんとシーケンス管理すれば済む問題でないの?
0418417NGNG
('A`) ア゙ー かぶっちまった。
0419デフォルトの名無しさんNGNG
> 無いと割り切って組むのもいいが、100%無いとは言い切れんぞ。

< 無いと割り切って組むのは、100%無いとは言い切れないからよくない。

0420デフォルトの名無しさんNGNG
>>413の前半("空にしときたい"は除く)への答えが、実は>>409で、
それを>>413が理解できないのは、>>411の言うように考えているから。

「全て捨てて空にしたい」
 →「ネットワークプログラミングの性質上出来ません」
0421デフォルトの名無しさんNGNG
>>413
要求に番号をつけておいて、返答にも要求と同じ番号をつける。
で、要求を送って返答を待つときには要求した番号以外のついたパケットを受信したら捨てる、
って風にすればよいわけ。前回の要求への返事なら、番号が違うから捨てられる。

あと態度悪いよ。
0422デフォルトの名無しさんNGNG
そんなことしてるよぉ〜
0423デフォルトの名無しさんNGNG
偉そうにほざいてる割にろくな意見でてねーな(´,_ゝ`)
0424デフォルトの名無しさんNGNG
そのろくな意見とやらを聞きたいもんだな(w
0425デフォルトの名無しさんNGNG
腹へったなあ
0426デフォルトの名無しさんNGNG
UDPでSuperTCPを作ればいいんだよ
0427デフォルトの名無しさんNGNG
>>426
せめてTCP/IPスタックを自作しろって言えよ。
0428デフォルトの名無しさんNGNG
もうね、送信のたびにソケット作り直しなよ。
0429デフォルトの名無しさんNGNG
>>2で紹介されている推薦書籍
TCP/IPによるネットワーク構築〈Vol.3〉
―クライアント‐サーバプログラミングとアプリケーション
を洋書で読みたいのですが、同じ本でUNIXバージョン、
BSDバージョン、Windows(WinSock)バージョンと3つに
わかれているのですが、Windows専門の私はWinSock
バージョンでいいのでしょうか?
3冊とも内容的にはいっしょと考えていいのでしょうか?
0430デフォルトの名無しさんNGNG
内容はほぼ一緒ですが、
WinsockはBSD socketと違うところがあるので、
programとその説明が違います。しかしまあほとんど同じです。
0431デフォルトの名無しさんNGNG
WinsockももとはBSDからパクったからな。
WSA系は違うけど。
0432デフォルトの名無しさんNGNG
>>3に、

ethereal
http://www.ethereal.com/

UPnP
http://www.upnp.org/

も入れとかないとね。
0433429NGNG
>>430-431
どうもありがとう。
WinSock買ってみようと思いまつ...
0434デフォルトの名無しさんNGNG
リステン
0435デフォルトの名無しさんNGNG
びんど
0436デフォルトの名無しさんNGNG
ああんあんああああああああああああああああああーーーん!!
0437デフォルトの名無しさんNGNG
スレ違いかもしれませんが
Linux RedHat9 上で次のようなTCP通信プログラムを作成しました。

  クライアント側:
    通信先IPアドレスの入力を促す。通信先ポート番号の入力を促す。
    通信先に接続。
    標準入力からの文字列の入力をネットワークに出力する。

  サーバ側:
    クライアントからの接続を待つ。接続が確立したら connected 文字列をクライアント側に送信。
    クライアント側から受信した文字列を標準出力に出力する。

で、同一ホスト上で動かして

  $ server
  
  別端末にて
  $ client
  IPaddr: 192.168.0.10
  port: 10000

tcpdump でパケットを見ようとしたのですがパケットをキャプチャすることができないようです。
プログラムは表面上は望んだとおりの動作をしております。
また client と server を異なるホストで動かすとキャプチャできます。

同一ホスト上でキャプチャするには何か設定等が必要なのでしょうか?
どなたかご教授下さい m(_ _)m
0438デフォルトの名無しさんNGNG
監視しているinterfaceを流れてないだけだろ
同一ホスト上で動かしているならloopbackに流れてるだろうから
そっちを監視してみな。
0439437NGNG
>>438
解決しますた!

> 同一ホスト上で動かしているならloopbackに流れてるだろうから
こういうことだったんですね。
IPアドレス指定してたんで eth0 に流れていると思ってました。

どうもありがとうございます。
0440デフォルトの名無しさんNGNG
質問です。
VC++ + WinsockのUDPでプログラミングしてるのですが
サーバーでクライアント側のルーターでマッピングされたポートを知りたいのですが
どうすれば良いのでしょうか?
0441デフォルトの名無しさんNGNG
無理
0442デフォルトの名無しさんNGNG
ちうかサーバが受け取ったデータの、元ポート番号がマッピングされたポートじゃないのか
PC自身のポート番号のことなら、通信データの中身に埋め込んで送ればよいかと
0443デフォルトの名無しさんNGNG
普通に受信した(struct sockaddr_in *)&hoge
で受信すれば取れないか?
使うのと言えばスレで散々既出のPunching Hole UDPとSTUNくらいだが…
そもそもクライアントはサーバーと違ってポートなんぞ知る必要ないからな
0444デフォルトの名無しさんNGNG
いっとくが送信するときに使うポートは普通は不定。
受ける(待つ)側は特定できるけど。
0445デフォルトの名無しさんNGNG
>>444
それじゃあPunchingHoleUDPが実装出来ないジャン
クライアント側が把握しているのはあくまでアプリケーションが使用するポートであって
ルーターがマッピングするポートはクライアント側にも判らんし
0446デフォルトの名無しさんNGNG
ルーターのポートマッピングは外部からのポート接続を
内部のどこにもってくかだから送信するときは関係ない。
0447質問野郎NGNG
一方はsendばっかり、もう一方はrecvばっかりのプログラムで、
sendするプログラムをパラレル実行するとrecvする側がデータ
を取りこぼすことがあります。

Windows XPからsendする場合、10パラレルでも宛先ホストは
すべてデータを受信できますが、AIXからsendすると、10個に
2つ程度、宛先ホストでおかしなデータを受け取ります。

send側もrecv側も同期型のTCPストリームソケットにしている
ので、sendは宛先からのACKを受け取るまでブロックすると
思っていたのですが、受信側の能力を上回ってsendを最後
まで実行してしまっているようです。

AIX側でTCP_NODELAYを設定し、sendとsendの間に1ミリ秒の
sleepをはさむと10パラレルで転送できるようになりました。
このような場合、他に解決方法はあるのでしょうか。

0448デフォルトの名無しさんNGNG
データ長とかつけた独自ヘッダはさむようにしたら?
0449デフォルトの名無しさんNGNG
パラレルってのはスレッドのことなのか?
0450質問野郎NGNG
データ長は固定長ヘッダにつけてます。
パラレルはスレッドではなく、プログラムを同時に10個起動した場合です。
Windows は start ***.exe、AIX は *** & のような形で10プロセス起動してます。
0451デフォルトの名無しさんNGNG
> sendは宛先からのACKを受け取るまでブロックすると(以下略)
これはちと違うぞ。
sendは送信バッファがいっぱいになるまで、ブロックしない。
ACKとかの手続きはアプリケーションの関与しないところで
勝手にやってるだけ。

ちょっと気になるのが、recv時に受け取れるだけ受け取って
余った分を捨ててたりはしないよな?
まぁそういう状態だったら、おかしなデータ以後は全部
ぐちゃぐちゃになるから分かるか…。
0452デフォルトの名無しさんNGNG
>>447
ストリーム型のsocketでそんなことが起きるなら、大抵の場合447さんの
プログラムにバグがあるので、それを直すのが普通だと思います。

stream 型ソケットの場合、
send で送っているデータ区切りと、recv が読み込むデータ区切りには
一致しないのが普通ということには配慮していますよね。
0453デフォルトの名無しさんNGNG
このスレで最近STUNとかUDPHolePunchingの話がよく出てるけど、
あれ流行ってんの?

俺はやってるけど。
0454デフォルトの名無しさんNGNG
送信側「10バイト送ったぜ!」
受信側「10バイト受け取ったぜ!」←実は6バイトしか取れてない
送信側「また10バイト送ったぜ!」
受信側「・・・先頭に変な4バイトついてるよー(つд`)ぅゎ-ン」
0455デフォルトの名無しさんNGNG
「パイプが切断されました」というエラーは何が原因かわかるかたいらっしゃいますか?
メールを送信する簡易的なプログラムです。
0456デフォルトの名無しさんNGNG
>455
そのまんまの内容
0457デフォルトの名無しさんNGNG
>>456
レスありがとうございます。
しかし、自分自身パイプというものがわかっておりません。
どのような書籍をみれば書いてあるでしょうか。
0458デフォルトの名無しさんNGNG
>457
OS依存の話になるから
WinならMSDNでCreatePipeなどで検索
Unix系なら"Unix パイプ"などで検索すれば
充分情報あると思うよ
0459デフォルトの名無しさんNGNG
>>458
ありがとうございました。
たくさんincludeしているファイルのソースに問題ありそうなのでもう少し
調べてみます。
0460デフォルトの名無しさんNGNG
>>455
sendしようとしたときに既にconnectionが切れてたんだろ。
別にEPIPEはいわゆるIPCの「パイプ」のみで起きるエラーじゃないよ。
0461デフォルトの名無しさんNGNG
  _,,,,,,,,
     , - ' ゙    `` ‐ 、_,,,,,
   ,r'          /=ミ
  /           彡ll',''´
. /             彡lll
 !-- .、    ,、、、、,,,   彡lノ
 l,,,,,__ /   ___     'r''゙ヽ
. |`゙'' ./   `'゙'''"    .〉,l |
 |.   ,'           //
. ',. ,'           , r'
.  ゙, ゙'ー ‐`      l  |
   ゙、''゙ ,,、二''‐    ノ  l、
''''''''7'ヽ  '''    /   /`〉`゙T''''''''''
  l  ` 、,,,,、- ' "    / /.|  |
.  |  |  .l i       / ./ |  |
  |  |  | l      / ./ .|  |
. |  |   | l     / /  |  |
 |  |   | ',   / /  l  .l
【ゴールデンレス】
このレスを見た人はコピペでもいいので
10分以内に3つのスレへ貼り付けてください。
そうすれば14日後好きな人から告白されるわ宝くじは当たるわ
出世しまくるわ体の悪い所全部治るわでえらい事です
0462質問野郎(447)NGNG
レスありがとうございます。

>>451
よく調べてみたら、ACKは確かにsendで必ず返ってくるわけではないようです。
だからTCP_NODELAYを設定するとうまくいくのかもしれません。
recvは受信できたバイト数を戻しますので、ヘッダで受け取ったレングス分の
受信が完了するまでループしています。sendも同様です。

>>452
バイナリデータを送信してるので、データ区切りというものはつけていません。
send側プログラムで、送信に対する相手からの応答をrecvする処理を間にはさめば
うまく動くのですが、sendのみを繰り返すとAIXに限りうまくいかないのです。

状況としては454さんの書かれているようなことが起こっています。
聞きたかったのは、sendでデータを送りっぱなしにする場合にTCP_NODELAYを
設定する解決方法が正しいのかどうか、ということだったのですが、
このような状況に遭遇された方はいないようですね。
プログラムのバグも含めていろいろ調べてみます。ありがとうございました。
0463質問野郎(447)NGNG
訂正。
454さんの書いている状況とはちょっと違いました。
前データの残りを後の受信処理で受けてるわけではなく、受信処理自体
は成立しています。但しデータの欠損があります。
TCP_NODELAYを設定せずに、sendとsendの間にACK遅延に相当する200ミリ秒
の遅延を入れても正常に動作します。
また、AIXからWindowsやLInuxへsendする場合はTCP_NODELAYやsleepを
入れなくても正常に動作します。
CPU負荷の高い宛先ホストに、10パラレル転送した場合のみデータ欠損が発生
している状態で、シングル実行や2〜3パラレルでは発生しません。
0464デフォルトの名無しさんNGNG
sendが正しく成功したかどうかも確認してる?
送るだけだからエラーチェックしていないなんて事は無いよね?
0465デフォルトの名無しさんNGNG
>>462
> バイナリデータを送信してるので、データ区切りというものはつけていません。

バイナリデータでも、データ区切りつけていいべ。

> うまく動くのですが、sendのみを繰り返すとAIXに限りうまくいかないのです。

特定の環境でしかうまく動かないプログラムなんでしょうね。

> 状況としては454さんの書かれているようなことが起こっています。
> 聞きたかったのは、sendでデータを送りっぱなしにする場合にTCP_NODELAYを
> 設定する解決方法が正しいのかどうか、ということだったのですが、

あなたの起こしている障害の解決方法としては正しくないです。
緩和はされるかも知れませんが。
0466デフォルトの名無しさんNGNG
>>464
他にはTCP、つまりSOCK_STREAMなのに、
SOCK_SEQPACKETのようなプログラミングしている可能性があるべ。

TCPがpacket streamじゃなくてbyte streamだってことを理解しているのかな?
0467デフォルトの名無しさんNGNG
書き忘れた。

初心者がTCP使う時は、sendやrecv使うんじゃなくて、
fwrite, fread使った方がいいよ。fdopen(3)してね。
packet size header使えば簡単だし。

recvで二つのpacket(だと初心者が考えている)dataを
まとめて受ける可能性だってあるわけだし。
0468質問野郎(447)NGNG
プログラムの障害(バグ)ということで、TCP_NODELAYを使うよりも
別の方法を利用すればよいとのレス、ありがとうございます。

ただ、>>467 でパケット2つ分を受け取る可能性があるそうですが、
以下のようにrecvで必要なバイト数ずつ読み取れば、まとめてデータ
を受信しようが問題ないように思うのですが。

 固定長ヘッダのレングス分sendループ ---> 固定長ヘッダのレングス分recvループ 
 ヘッダで送ったデータ長分sendループ ---> ヘッダで受信したデータ長分recvループ 

プログラム内では「固定長ヘッダ+データ」をひとつのまとまりとして
扱っています。固定長ヘッダにはシーケンス番号をつけており、処理も
この順序に依存します。SOCK_STREAMは順序性が維持されるため問題ない
と判断しましたが、SOCK_SEQPACKETを利用する方が適切なのでしょうか?

また、fdopen(3)を利用すれば回避できるものでしょうか。あるいは、
バグがないように書けば現在のようにsendばかりのプログラムと
recvばかりのプログラムでも問題ないのでしょうか。
0469質問野郎(447)NGNG
>>464
レス見落としていました。ありがとうございます。

エラーチェックですが、sendで戻り値がSOCKET_ERRORの場合だけチェックしています。
SIGPIPEをalarmでハンドリングできるようにしているので、sendの戻り値が
0 の場合は特に何もしていないのですが、チェックすべきでしょうか。
固定長ヘッダの送信も同じような形で行っています。
ヘッダで送信するデータ長はビッグエンディアンの並びになるよう統一
しています。

nSendLength = 0;
  while(nSendLength<BuffLength)
{
nRc = send(sock, pBuffer+nSendLength, BuffLength-nSendLength, 0);
if(SOCKET_ERROR == nRc)
{
return errno;
}
nSendLength+=nRc;
}
0470デフォルトの名無しさんNGNG
受信側はこんな感じですよね・・・

unsigned char data[MAX_DATA_SIZE];
uint32 size;
size_t to_read = 4;
size_t len;
unsigned char* ptr = (unsigned char*) &size;
while (to_read > 0 && (len = recv(s, ptr, to_read, 0) > 0) ptr += len, to_read -= len;
to_read = ntohl(size);
ptr = data;
while (to_read > 0 && (len = recv(s, ptr, to_read, 0) > 0) ptr += len, to_raad -= len;

どこかで間違ったデータ長を渡している可能性はありませんか?
あと、

>聞きたかったのは、sendでデータを送りっぱなしにする場合にTCP_NODELAYを
>設定する解決方法が正しいのかどうか、ということだったのですが、

パフォーマンスチューニングの一環としてはありえますが、今回のように
それなりの長さのデータをばーっと送るときにはそもそもあまり有効ではないと思います。
telnetみたいに間歇的に小サイズの送信を行って、かつdelayが許容されないときなんかに使います。
0471質問野郎(447)NGNG
>>470
サンプルのご提示、ありがとうございます。

受信側はデータ長だけでなく固定長ヘッダをまとめて受信します。
また、recvの戻り値でもSOCKET_ERRORのチェックをまず行っています。
あとは、サンプルコードで書かれている流れのように
・送受信バッファはunsigned charで確保しており、構造体ではない
・TCPバイトオーダーでデータ長を受信する
・ヘッダとデータはそれぞれ必要レングス分ループする
という処理になっており、>>470さんのいわれる処理と同じような形です。

またデータ長の誤りは考えにくいのです。
これまで、送信側はsend後に相手から受領確認をrecvし、受信側はデータ
recv後に受領確認をsendするような形で何年かプログラムを使ってきました。
もしデータ長が間違っていれば、これまでの運用でプログラム独自のプロトコル
エラーが出ていなければならないのですが、そのようなことはありませんでした。
今回、send-recvの繰り返しで通信速度が遅くなる点につき、送信側はsendのみ、
受信側はrecvのみに徹して速度向上を図ったところ、問題が生じた次第です。

TCP_NODELAYの設定については不適切とのご指摘を多くいただいているので、
プログラムに問題があるとは思うのですが、まだ問題点を見つけられずにおります。

ちなみに送信元はAIX、宛先ホストはOS/390でパラレル実行した場合にのみ問題が起こります。
同じソースでもWindowsからOS/390へ送信した場合や、OS/390からWindowsやAIXへ送信した
場合には問題は起こっておりません。

sendのみ(recvのみ)の通信処理で一般的に考慮すべき点を調べてみるつもりです。
参考になりそうな書籍やWebサイトがあればご紹介いただければ嬉しいです。
よろしくお願いいたします。
0472デフォルトの名無しさんNGNG
OSの製造元に再現コード送れば?
0473デフォルトの名無しさんNGNG
>>471
漏れもこのケースではサポートに頼るべきかもしれないと思う。

あと、TCP/IP 一般あるいは AIX でのパフォーマンスチューニングに関しては:
http://publib16.boulder.ibm.com/pseries/Ja_JP/aixbman/prftungd/2365a83.htm#idx725
あたりも参考になるような気がします。
0474デフォルトの名無しさんNGNG
>>447
この状況についての確認ですが、

> Windows XPからsendする場合、10パラレルでも宛先ホストは
> すべてデータを受信できますが、AIXからsendすると、10個に
> 2つ程度、宛先ホストでおかしなデータを受け取ります。

接続を10本張って、
送り側、受け側それぞれ独立のプログラムが10個動いている、
ってことでいいですか?
0475質問野郎(447)NGNG
>>472
OSを書いてしまうと、恐らくメーカーサポートを勧められると思ってました。
一般的なTCP/IPの仕様でOSに関わりなく何か見落としがあるかと思って質問させて
もらいました。メーカーへの問い合わせは行っていきたいと考えています。

>>473
情報ありがとうございます。
rc.netファイルでtcp_recvspaceを調整して試してみます。

>>474
はい、その通りです。
送信側、受信側は同じプログラムを10個動作させて、別プロセスとしています。
送信側(AIX)から受信側(ホスト)でACCEPTしているポートに接続する単純なものです。
それぞれ別々の10個のポートで接続を貼っています。
ホストではパラレル起動させるために別々のJOB名で同じPGMを動かしています。
もちろんJOBを動かすためのイニシエータも10個用意しております。
0476デフォルトの名無しさんNGNG
で、ヘッダ+データを何回も送ってんだよね。
データ欠損って言うけどどういう症状なの?

1. 正常にヘッダ+データを幾つか受ける。
2. データが欠けていて次のヘッダを受けている。
3. 以後、データ区切りが分からなくなり滅茶苦茶。

こう進行するわけ?
0477デフォルトの名無しさんNGNG
JOB名とPGMとか、オフコンとか方面の人?
0478デフォルトの名無しさんNGNG
簡単なところで、fdopen して fread するっての試してみる手もあるけど、
それでうまくいっても安心できない状況ですよね。。。
0479デフォルトの名無しさんNGNG
NIC(ドライバ)が腐ってるオチだったり
0480デフォルトの名無しさんNGNG
そのレベルでおかしいとTCP checksumでひっかかる。
0481デフォルトの名無しさんNGNG
どう考えても受信側の問題にしかみえないのになんで受信側OSが書いてないの?
と思ってたら、OS/390 かよ。俺には未知の世界だ…。
通信処理で一般的に考慮すべき点、という話では、典型的なストリーム型とパケット型の混同
による受信側のバグにしか見えないなあ。俺にはね。

>>454 風に書くと、こういうことが起こっているように見える。

送信側「10バイト送ったぜ!」
送信側「また10バイト送ったぜ!」
受信側「10バイトくれ! お、来た来た、10バイト受け取ったぜ!」←実は16バイト受け取ったのに気がついていない
受信側「次の10バイトくれ!・・・先頭の6バイトが足りないよー(つд`)ぅゎ-ン」
0482デフォルトの名無しさんNGNG
まあ、それがダントツの第一候補だろうね。
0483デフォルトの名無しさんNGNG
それか、>>12みたいな苦しいネタか。
0484デフォルトの名無しさんNGNG
>>481
>>469を見るとその手の間違いをやっているとも思えん。
全然別の場所にバッファオーバーランをやっているとか?
0485481NGNG
>>484
だって >>469 は送信側のコードだし。

受信側は >>470 で別の人がサンプル書いてるけど、本当にこれと全く同じ
ロジックだったら問題はないはずなんだが、元質問者が「同じような形」だ、
と書いてあるだけなので検証できてない。
そうしてるつもりで実はそうなってなかった、ってのがバグなんだからさ。

他の書き込みも一通り目を通したけど、これが原因だった場合と
矛盾している症状はないと思う。
0486481NGNG
念の為補足しておくと、>>470 の処理で重要なのは to_read の処理だからね。
0487デフォルトの名無しさんNGNG
これ以上ソース晒さずに話しても無駄だとオモウ
晒すかサポートに電話するかどっちかにしろ
0488デフォルトの名無しさんNGNG
パフォーマンス・マネージメント・ガイド
http://publib16.boulder.ibm.com/pseries/Ja_JP/aixbman/prftungd/netperf3.htm
もあるけど、、、
0489デフォルトの名無しさんNGNG
サーバ側で、接続待ちループとメインループをそれぞれ別スレッドで動かしています。
クライアントを定義したクラスをvectorで持っており、接続待ちループでクライアントの追加イベントがあった場合、
そのvectorクラスのpush_backを呼び出して、クライアントを追加します。
しかしその場合、メインループでそのvectorクラスのインスタンスを操作している可能性があり、ましてpush_backでメモリの再確保が行われてしまったら、動作がおかしくなると思います。
こういう場合、クライアントの追加はどういう風にするべきなのでしょう?
0490デフォルトの名無しさんNGNG
fry
0491デフォルトの名無しさんNGNG
>>489
CriticalSection使えば?
0492デフォルトの名無しさんNGNG
メインループに「接続キター」メッセージを送ればよい
0493デフォルトの名無しさんNGNG
"エラーキタ━━━━━━(゚∀゚)━━━━━━!!!!","ERROR"
0494質問野郎(447)NGNG
しばらく見ないうちにレスを多くいただきましてありがとうございます。
みなみなさまのおかげで無事解決いたしました。おっしゃるとおりバグでした。
しかも通信とはまったく関係ないところで・・・本当申し訳ないです。
ホストではJOBLOGに受信内容をHEX PRINTして受信内容を確認していたのですが、
その出力処理がフルワードの受信レングスをハーフワードで解釈しておりまして、
受信は正しくできていたのに内容をレングス分きちっと表示できていないケース
があったような次第です。
追加した処理が正しいか確認するための処理にミスがあったというお粗末な結果
となりました。
いろいろお知恵下さった方々、本当すいませんでした。ごめんなさい。逝きます。
0495質問野郎(447)NGNG
ちなみに、パラレルとかシングルとかまったく関係ありませんでした。
送るデータのレコード長がそれぞれ違ってたので、たまたま10個のPGM中で
長いレコードを扱うものだけおかしかった次第です。すいません。
0496ただ・・・NGNG
TCP_NODELAYを設定したときだけ出力に問題がなかった件についてはまだ謎です。
0497デフォルトの名無しさんNGNG
>>489
ベクターかよ。リストじゃダメなの?
ベクター+マルチスレッド+push_*()は、iterator使うと悲惨だよ。
まあ、あらかじめallocate()した分しか使わないと保証があれば別だけど。
0498デフォルトの名無しさんNGNG
>>494
あのなあ、無視されるのも辛いだろうからあえて言わせて貰うが、
「氏ねや!」
0499デフォルトの名無しさんNGNG
>>497
リストかどうはカンケーネーヨ
0500デフォルトの名無しさんNGNG
>>498
他人を許せる人になろうよ
0501デフォルトの名無しさんNGNG
>>489
私なら別に登録キューを用意して、接続待ちループの追加イベントでは
そのキューに追加するだけ、実際のvectorへの追加はメインループ内の
安全な場所でlook inにするかな。もちろん登録キューの操作はモニタなり
Mutexなりで安全に。
0502デフォルトの名無しさんNGNG
>>499
いや関係あるんじゃないか?
「追加時のメモリの再配置」はおこらんでしょlistなら。
ロックが必要な箇所を減らせる可能性はあるよね。
0503名無しさん@お腹いっぱい。NGNG
Windows2000/XP環境で、MACアドレスを知るにはどうすればいいの?
NICにケーブルが刺さっていないような場合でもMACアドレスを取得したいんだけど。
最悪、ipconfig /allした結果を使おうかと思うのだが。。。
0504名無しさん@お腹いっぱい。NGNG
Windows2000/XP環境で、MACアドレスを知るにはどうすればいいの?
NICにケーブルが刺さっていないような場合でもMACアドレスを取得したいんだけど。
最悪、ipconfig /allした結果を使おうかと思うのだが。。。
0505名無しさん@お腹いっぱい。NGNG
Windows2000/XP環境で、MACアドレスを知るにはどうすればいいの?
NICにケーブルが刺さっていないような場合でもMACアドレスを取得したいんだけど。
最悪、ipconfig /allした結果を使おうかと思うのだが。。。
0506名無しさん@お腹いっぱい。NGNG
Windows2000/XP環境で、MACアドレスを知るにはどうすればいいの?
NICにケーブルが刺さっていないような場合でもMACアドレスを取得したいんだけど。
最悪、ipconfig /allした結果を使おうかと思うのだが。。。
0507あひゃっNGNG
JAVAでTCPIP通信のサーバ側に接続するのに、connectメソッドを呼んでいるのですが、
connectメソッドから1分以上応答がありません。
接続タイムアウト時間(即時タイムアウト等)を任意で設定したいのですが設定方法がわかりません。
どなたかご存知の方教えていただけないでしょうか?
環境は、SunEWS + Solaris8です。
0508デフォルトの名無しさんNGNG
>>505
MSDNをiphelperで引いて味噌。(iphelper.lib)
0509デフォルトの名無しさんNGNG
>>506
ゲラゲラゲラ
厨丸出しだな(藁
厨房はMSDNで ip helper api を検索しやがれ。
0510デフォルトの名無しさんNGNG
>>502
少なくとも、お前みたいな足りんやつはやらないほうがいいな。
0511名無しさん@お腹いっぱい。NGNG
Windows2000/XP環境で、MACアドレスを知るにはどうすればいいの?
NICにケーブルが刺さっていないような場合でもMACアドレスを取得したいんだけど。
最悪、ipconfig /allした結果を使おうかと思うのだが。。。
0512名無しさん@お腹いっぱい。NGNG
プゲラ
0513デフォルトの名無しさんNGNG
>>508
4つあるなかから>>505を選んだ理由を知りたい。興味本位で。
0514デフォルトの名無しさんNGNG
汚いやり方だけどDOSコマンドでも不正解とは思わんのだけども…
0515仕様書無しさんNGNG
>>503--506, >>511の連投をしたバカモノです。
一応言い訳すると、カキコしたあとサーバエラーが出たんで再カキコをしたんです。
別板で、鯖移転がらみでカキコはできてもエラーを返す状態になっていると知ったので、そういうことだったのでしょう。

で、iphlpapiについての情報、サンクス。環境を書かなくてすまんかったけれど、VC++6.0でコンパイルしたいのね。
VC++.NETではGetAddresses()でMACアドレス得られたけれど、VC++6.0だとiphlpapi.hがないからコンパイルできぬ。
0516デフォルトの名無しさんNGNG
プラットフォームSDKを入れてみたら?
0517デフォルトの名無しさんNGNG
>>515
PlatformSDKぐらい入れとけ。
0518デフォルトの名無しさんNGNG
>>516
そうします
0519デフォルトの名無しさんNGNG
>> 508
JAVAでは知らないけど、Solarisのconnect(2)を最終的に
呼んでるのであれば、タイムアウトの指定は出来ないと思うよ。
自分でalarm(2) みたいなタイマを用意して、connect(2) に
割り込みって入れられないの?
最近の*BSDなんかだど、setsockopt(2)とかでタイムアウト時間が
指定出来たりするんだけどね。
0520519NGNG
すまん、
>> 508 じゃなくて、 >>507 でした。
0521デフォルトの名無しさんNGNG
java.io.socketでWANを経由するsocket通信をするのはただのアフォ。
自前のnativeラッパーを作るか、プロキシを立てるのが定石。
0522デフォルトの名無しさんNGNG
521をさらしあげ
0523デフォルトの名無しさんNGNG
>522
そして漏れは522をさらしあげ
0524仕様書無しさんNGNG
>>516>>517
PlatformSDKを入れました。うん、VC++6.0でもコンパイルできた。サンクス。

ところで、いつもコマンドプロンプトでコンパイルしてるんですけれど、
cl.exeにこの新しいPlatformSDKのincludeとlibのパスを与えるにはどうしたらいいんでしょうかね?
-Iでincludeパスは渡せたんですが、libのパスをどうやって与えるのか。
cl .... /link /libpath:"c:\promgram files\platform SDK\lib" みたいにすると、おバカなLINKコマンドは "files\platform" を開けませんなんて言うし。
0525仕様書無しさんNGNG
>>524
自己レスです。8.3表記を使ったらできました(哀)。
0526デフォルトの名無しさんNGNG
実は、clがおバカで、linkへオプションを渡す時に「"」をはずしてるとか。
linkを別途呼び出してみたら?
0527仕様書無しさんNGNG
>>526
実験しました。linkに対しては"..."は有効のようです。clが超おバカでした。
色々な実験を経た結果、"\"path"\" のように書けばうまくいきます。
8.3表記しなきゃならないかと思ってカグブルでした。。。
0528デフォルトの名無しさんNGNG
Punching hole UDPについて だれか 教えて
過去ログからの 俺の理解だと
1) A -> B UDPにて通信 
2) 生ソケでAが使用したポートを調べる
3) Cがそのポートに対して通信
これでOK? ただ ネットで検索するとこんな簡単そうでないし
UDPの場合 パケット毎にポートかわるよね?
どうも 理解できん・・・ たのむ おしえてください
0529デフォルトの名無しさんNGNG
生ソケットを使わずとも、送信元のポートは分かる。
しかし相手のNATが送信元と送信先を厳密に検査するテーブルを持っている限り、
何をやっても通信が通ることはない。
0530デフォルトの名無しさんNGNG
>>529
まじ?
んっじゃ skypeは?
0531デフォルトの名無しさんNGNG
つまるところ、NATの実装に依存しまくり
0532デフォルトの名無しさんNGNG
マーケットスピードの株価自動更新って、どんなプログラムですか?
0533デフォルトの名無しさんNGNG
ちょっと質問です。
ソケットで、たとえばsend(割と大きいでーた);をしたときに、
フラグメンテーションがおこりますよね?
(APLレベルで)recv関数を呼んでデータを受信しますが
ここで受信できるデータって、受信側がACKパケットを
返したところまでと考えていいんですかね?
0534デャtォルトの名無bオさんNGNG
>>530
Synmetric系以外のNATならほぼOKだと思われ。
しかもSynmetrickなんて高セキュリティーなNATはスループット低下を招いたり高額になったりするから
普通のユーザーには受け入れられてないぞ。
企業くらいだと思われ。
0535デフォルトの名無しさんNGNG
雑談もいいけど質問に対する回答も・・・
0536デフォルトの名無しさんNGNG
別に解答する義務は無いと思うが?
新手の催促か?
0537デフォルトの名無しさんNGNG
新手の煽りではw
0538デフォルトの名無しさんNGNG
>>534
関連してだけど
その場合ケーブルテレビ系でもOK?
Upnpはケーブルテレビでも開ける? 
もちろん LinuxもUpnpできるけど
実際のところ どうなんだろ?
Punching hole UDP なんて使わなくても Upnpで
十分なきもするが みなさんの見解おしえて
0539デフォルトの名無しさんNGNG
>>538
UPnPはルーターにXML形式でこのポート開けて!
と命令を送って対応ルータが開けてくれる仕組みで
対応してないのはほぼ全て無理
ISPのNATは絶対に超えられないと思われ。

それに対してPunching hole UDPはUDPの特性を生かしたもので
殆どのルーターで成功する。
あと、ISPのNATも場合によっては超えられる事が多い。
UDPはコネクション型ではないので応答の為に一時NATが経路を確保する必要があるので
その経路を利用するものだからな。
0540デフォルトの名無しさんNGNG
質問です。
60k程度の情報リストをUDP形式でサーバーから受け取る仕組みを作ってるのですが
UDPはどれくらいのサイズの情報あたりから失敗する可能性が出てくるのでしょうか?
1回の転送でOKなサイズはどれくらいなのでしょうか?
0541デフォルトの名無しさんNGNG
1バイトでもダメ
0542デフォルトの名無しさんNGNG
>>533
良くない。
基本的に,そういう隠蔽された部分の動作に期待するべきじゃない。
特定の実装,特定のバージョンのみに限定するなら,別だがな。
0543デフォルトの名無しさんNGNG
>>541
おまえもだめ
0544デフォルトの名無しさんNGNG
>>539
そうですねISPは できたとしても Upnpでポート開くなんて
いやがるでしょうね サーバーおかれたり

>>539
すみません 1つ教えてください

>>UDPはコネクション型ではないので応答の為に一時NATが経路を確保する必要があるので
その経路を利用するものだからな。
わたしの理解もこれなんですが

ttp://homepage3.nifty.com/toremoro/p2p/firewall.html
このサイトをみると 私の理解を超える複雑さなんですが
どうなんでしょ?

0545デフォルトの名無しさんNGNG
>>544
そのサイトの通り、多くのNATで動かすには双方のNATで経路を確保する必要がある。
片方だけだとダメな事が多い。
出来る事もあるんだけど・・・
0546デフォルトの名無しさんNGNG
>> 533
違うと思うよ。
受信側(recv)のOSは、受信データを受け取ってOSの内部バッファ(setsockoptで変更可能)に
格納した時点で、ACKを返してると思います。
アプリ側にデータが渡ったがどうか(recvをコールしたかどうか)には依存していません。

0547デフォルトの名無しさんNGNG
>>533
かなりびみょ〜。どこにも確証はない。
0548デフォルトの名無しさんNGNG
質問です。
UDPで通信する時に、zlibで圧縮して通信したいのですが
具体的な説明がされてるサイトってありますか?
一応調べたんですが、どうもソケットは扱えないと書いてあったので
どうすれば良いのかサッパリわからないんです。


0549デフォルトの名無しさんNGNG
扱えなければ、扱うようなプログラムを書けばよい。
0550デフォルトの名無しさんNGNG
>>548
送信バッファに圧縮掛けろ。
0551デフォルトの名無しさんNGNG
質問です。
TCPを使えばコネクションが切れたとき確実に判りますか?
コネクションが切れた時点で鯖側でクライアントの情報をデータベースから確実に削除したいのですが…
0552533NGNG
>>546

> 受信側(recv)のOSは、受信データを受け取ってOSの内部バッファ(setsockoptで変更可能)に
> 格納した時点で、ACKを返してると思います。

では、スライディングウィンドウの範囲内のデータもsetsockopt(SO_RCVBUF?)
で変更可能なOSの内部バッファに入ってるんですかね?
OSの内部バッファ(setsockopt)に入っているデータの中に、スライディング
ウィンドウの対象範囲内となっているデータが入っていると、
(トランスポートレイヤレベルで)受信途中のものも受信しそうなきがするんですが・・・。


>アプリ側にデータが渡ったがどうか(recvをコールしたかどうか)には依存していません。

おつけいです。
0553デフォルトの名無しさんNGNG
>>551
ちゃんと切ってくれれば判るが放置されたらわからん。
回線が勝手に切れたりとかな。
結局確実にと言うわけにはいかんな。
0554デフォルトの名無しさんNGNG
>>551
553のいうとおりで、マシンの電源引っこ抜かれたら気づかなかったりするかも。
相手側がKEEPALIVEをサポートしてれば、短めに設定しておいて早めに
切断を検知する方法しかなさそうな気がする。
0555552NGNG
訂正。

>(トランスポートレイヤレベルで)受信途中のものも受信しそうなきがするんですが・・・。

(トランスポートレイヤレベルで)受信途中のものもrecv関数で(APLレベルで)受信しそうなきがするんですが・・・。

0556デフォルトの名無しさんNGNG
>> 533
OSの内部バッファ(SO_RCVBUF)にあとどれだけデータを詰め込むことが
可能かを示すのが、ウィンドウサイズだと思うけど。

>>(トランスポートレイヤレベルで)受信途中のものもrecv関数で(APLレベルで)受信しそうなきがするんですが・・・。
意味がわからない。
受信途中ってのはどういう意味で使ってる?
OSの内部バッファに受信データが入っていればそれをrecvで取り出すことは出来ると思うけど。
そもそも、selectで受信データが在れば抜けてくるっていうのはそういうことじゃないの?
0557デフォルトの名無しさんNGNG
>>554
そりゃまだICMPホストアンリー茶ブルがあるがね。
プログラムが暴走して音信不通ってのが一番イヤらしいのの一つ。
0558デフォルトの名無しさんNGNG
temporary problem
accessing database.

自作ソフトでメールを受信してみるとサーバーから上記のようなエラーが
帰ってきます。原因は何なんでしょうか?
それとメールは、ヤフーの無料のものです
0559555NGNG
>>556
>OSの内部バッファ(SO_RCVBUF)にあとどれだけデータを詰め込むことが
>可能かを示すのが、ウィンドウサイズだと思うけど。

セマンティックスギャップがおきているみたいです。
ウィンドウサイズ=スライディングウィンドウのサイズ=受信確認(ACK)無しに送信されるバイト数
のことを言ってます。


>受信途中ってのはどういう意味で使ってる?
>OSの内部バッファに受信データが入っていればそれをrecvで取り出すことは出来ると思うけど。

送信側
PACKET100-----------------------> 受信側
<------------------------ACK100
PACKET101-----------------------> 受信側
<------------------------ACK101
PACKET102--------------->(途中で消失)
届いてないのでACK102送らず
PACKET103----------------------->
<------------------------ACK103

データ送ってPACKET102が途中消失しちゃって PACKET100,PACKET101,PACKET103が届いている状態。 PACKET102が受信途中。
この場合、PACKET101まではrecv()関数で受信してもいいけど PACKET103をsetsockopt(SO_RCVBUF)で指定するバッファに入れちゃうと
PACKET102受信前に、PACKET103を受信して順番がくるうと思う。

だからスライディングウィンドウ用のバッファと、 recv受信待ちバッファ(OSの内部バッファ(SO_RCVBUF)のもの)
の最低2つのバッファをOSで持っていないとだめなような気がするのは 私だけでしょうか?一番いいのはソケット実装のソースみればいいのかも。。。。
0560559NGNG
あ、PACKET102受信してないからACK103は返さないな・・・。
もういっかいでなおしてくる
0561デフォルトの名無しさんNGNG
>>556 >>559
おいおい,お前ら,どっちもDQN。
TCPレベルでの処理なんて,ブラックボックス。
さも世の中全てそうであるかのように語るなよ(プゲラ

お前らがお話しているのはどこ製のブラックボックスでちゅか〜?
どっちも自家製妄想ボックスか〜な〜?
0562デフォルトの名無しさんNGNG
>>561
ソース公開されてるのに何でブラックボックス??おまえがDQN
0563デフォルトの名無しさんNGNG
厨房しつもんで すんませn
UDPでconnectを使用した場合
UDPの到着順が狂うという特性は回避
されます?
また、 UDPのノウハウがつまったような
サイトがあったら ぜひ教えてください
0564デフォルトの名無しさんNGNG
>>1くらい嫁
0565デフォルトの名無しさんNGNG
>> 563
されません。
0566563NGNG
よくかんがえたら TCPでも 順序違いが
発生したんですね
0567デフォルトの名無しさんNGNG
>>563>>566
荒しですか?

0568デフォルトの名無しさんNGNG
質問させて下さい。

Windowsで、GetIfTable()を使い 通信情報の取得をしているのですが
dwLastChangeの値がどうにもよく分かりません。。。
ネットワークの接続時間を調べたいのですが
dwLastChangeの値がどういう単位なのか教えて頂けませんか?
0569デフォルトの名無しさんNGNG
>データ送ってPACKET102が途中消失しちゃって PACKET100,PACKET101,PACKET103が届いている状態。
>PACKET102が受信途中。
この状態は、TCP的には、PACKET101までが受信完了。
PACKET102の受信を待っているところ。

>この場合、PACKET101まではrecv()関数で受信してもいいけど
よいですね。

>PACKET103をsetsockopt(SO_RCVBUF)で指定するバッファに入れちゃうと
>PACKET102受信前に、PACKET103を受信して順番がくるうと思う。
これは、ないでしょう。
TCP的には、こんなことは出来ません。

>だからスライディングウィンドウ用のバッファと、 recv受信待ちバッファ(OSの内部バッファ(SO_RCVBUF)のもの)
>の最低2つのバッファをOSで持っていないとだめなような気がするのは 私だけでしょうか?
実際の実装に関しては、それぞれだからなんともいえないけど、バッファリング機構としては、そうなりそうですね。

そっか、おいらが、OSの内部バッファに受信したパケットを格納した時点でACKを返すって言ったからか。
TCP的にACKを返すってことは、ACKで指定したシーケンス番号までのデータがきちんと順序良く受信出来てます
ってことだから、
> あ、PACKET102受信してないからACK103は返さないな・・・。
ということだと思います。

結局、「受信途中のデータ」というものは存在しないってことでOK?


0570デフォルトの名無しさんNGNG
もうちょっと、補足すると、
「TCPが処理を完了する前のデータ」ならあるかもね。
だけど、それがrecvをコールするアプリに渡されることはない。
0571560 NGNG
>>569

>結局、「受信途中のデータ」というものは存在しないってことでOK?

かもしれんし、

>「TCPが処理を完了する前のデータ」ならあるかもね。

かもしれん。

バッファをどうやて使ってるかわからんけど

>だけど、それがrecvをコールするアプリに渡されることはない。

これは保証されてるってことやね。
なかなか考えさせられました。
0572デフォルトの名無しさんNGNG
>>571
流れ着いたままの順序で渡してくれるのが UDP
送信したとおりの順序で渡してくれるのが TCP
TCPスタック内部の動作は知らなくてもいいよというのが
TCP使う基本

0573デフォルトの七氏さんNGNG
自然対数eを実数変数の精度の範囲内で数値的に求めるプログラムを作って
0574デフォルトの名無しさんNGNG
楽勝だな。誰か教えてやれ
0575デフォルトの名無しさんNGNG
なんという授業の宿題ですか?
0576デフォルトの名無しさんNGNG
ここはネット関連のスレだろ。
もしかしたら、複数のPCを使って並列計算させるプログラムを教えてくれってことじゃないのか?
0577デフォルトの名無しさんNGNG
UDみたいなものか。
0578デフォルトの名無しさんNGNG
tcpサーバでコネクションがあるごとにFORKして子プロつくってそいつ等に通信さ
せようとおもうんだけど子プロで通信がうまくいってないのを検知するのってどう
やってやるの?とりあえずソケットがきれたら自殺してSIGCHLDを親が検知してゾ
ンビ回収する方向でやろうと思ってるんだけど、SIGCHLDを検出できなかったらア
ウトっぽいし、デッドロックとかで半死半生状態の場合も考えられるし。
ちなみに子プロはソケットとFIFOで通信させようと思ってるんで、親から定期的に
子のFIFOに書き込んで一定時間内に応答がなかったら死んでるっていうふうに解釈
してもいいのかな?子プロの巧い管理方法があったら教えて下さい。
0579560NGNG
tcpサーバでコネクションがあるごとにFORKして子プロつくってそいつ等に通信さ
せようとおもうんだけど子プロで通信がうまくいってないのを検知するのってどう
やってやるの?とりあえずソケットがきれたら自殺してSIGCHLDを親が検知してゾ
ンビ回収する方向でやろうと思ってるんだけど、SIGCHLDを検出できなかったらア
ウトっぽいし、デッドロックとかで半死半生状態の場合も考えられるし。
ちなみに子プロはソケットとFIFOで通信させようと思ってるんで、親から定期的に
子のFIFOに書き込んで一定時間内に応答がなかったら死んでるっていうふうに解釈
してもいいのかな?子プロの巧い管理方法があったら教えて下さい。
0580デフォルトの名無しさんNGNG
>> 579
とりあえず、UNIX系のOSだね。

子プロセス側で通信がうまくいっていない事を子プロセス自身がきちんと
認識できる事という事と、
子プロセスで検出した事象を親プロセスに通知するという部分は、
まったく別の次元の話ですよね。

まずは、起こりえる障害に対してきちんと検出、対応が可能なロジックが
組めるかどうかを考えたほうが良いんじゃないの?

子プロセスが、デッドロック状態になった時に親プロセスで検出しようとしてる
見たいだけど、子プロセスがデッドロックにならない様に作る事って出来ないの?

通信中に回線が切れたり、相手のマシンの電源が切れたり、間のルータがとまったり
なんでのは、みんな検出可能だよね。

その上で、
>親から定期的に子のFIFOに書き込んで
>一定時間内に応答がなかったら死んでるって
>いうふうに解釈してもいいのかな?
>子プロの巧い管理方法があったら教えて下さい。
って言うのであれば、それはスレ違い。

0581デフォルトの名無しさんNGNG
質問です。
Winsock2での質問なのですが
TCPで複数のセッションを管理する場合
どのようにするのでしょうか?
配列にsockaddr_in構造体をどんどん蓄積して行って
一致するIPを検索するような形でしょうか?
接続があればデータベースへ登録して、コネクションが切れたらデータを消すようにしたいのですが・・・
0582デフォルトの名無しさんNGNG
質問させてください。winsock2の非同期型で、
FD_RECVが来るごとに1度だけrecv()を呼び出した場合、
recv()がSOCKET_ERRORを返すことって通常あり得ますか?

<LEN (4byte)><BODY (LEN byte)>
という構造のデータを、
// LENあらかじめ受信され、バッファbufBodyも十分に長い
lenRecv := WinSock.recv(FSOCK, bufBody[Pos], LEN - pos);
inc(pos, lenRecv);
(Delphi)
……みたいな感じで受信していたのですが、LANではいつもうまくいくのに
インターネット上で離れた場所のPCとやると、時々データが壊れます。
recvの戻り値が怪しいと思い、エラーチェックするように変更したのですが、
本当にそこが原因なのかなあ? 、、、と。

recv()がSOCKET_ERRORを返す場合としては、どんな状況が考えられますか?
心当たりのある方、教えてくださいオナガイシマス
0583デフォルトの名無しさんNGNG
すいませんすいませんネットワークプログラムとは全く関係のないことなんですが、
>>340-344
がおもろかったので記念カキコ
0584デフォルトの名無しさんNGNG
藁。
歴史に残る名レスだ。
しかし、この程度歴史に残してたら、いくら歴史があっても足りん。
0585デフォルトの名無しさんNGNG
>>581
データを消すタイミングを知りたいだけなら、SOCKET変数とか
コネクションごとに、一意なデータを関連付けておけばOKでしょ。

>>582
Delphiでどう呼び出すかは知らないけど、WSAGetLastError()で
詳細とってみたら?
0586デフォルトの名無しさんNGNG
http://pc5.2ch.net/test/read.cgi/tech/1086238859/
0587デフォルトの名無しさんNGNG
WinPAP ライブラリを使ったプログラミングで,
取得した IP パケットのプロトコル番号や
TCP のポート番号などでフィルタをかけたいんだが,
どうしたらいいの?
0588デフォルトの名無しさんNGNG
>>588
ネタにマジレスすんなよ、バカ!
0589デフォルトの名無しさんNGNG
>>589
ネタにマジレスすんなよ、バカ
0590デフォルトの名無しさんNGNG
>>588-589
何自閉モード入ってんだよおまいら?
0591デフォルトの名無しさんNGNG
>>590
ネタにマジレスすんなよ、バカ
0592デフォルトの名無しさんNGNG
>>593
ネタにマジレスすんなよ、バカ
0593デフォルトの名無しさんNGNG
>>588-594
お前ら、いい加減にしる!
0594デフォルトの名無しさんNGNG
>>593
ネタにマジレスすんなよ、バカ
ネタにマジレスすんなよ、バカ
ネタにマジレスすんなよ、バカ
ネタにマジレスすんなよ、バカ
ネタにマジレスすんなよ、バカ
ネタにマジレスすんなよ、バカ
ネタにマジレスすんなよ、バカ
0595デフォルトの名無しさんNGNG
えっと、もういいのかな?
0596デフォルトの名無しさんNGNG
>>596
いいわけねーだろ、バカ
0597デフォルトの名無しさんNGNG
↓じゃあ、何事もなかったかのように、ネットワークの質問どぞ。
0598デフォルトの名無しさんNGNG
WinCHAP ライブラリを使った(ry
0599デフォルトの名無しさんNGNG
bindの使い方を教えて
0600デフォルトの名無しさんNGNG
ノーブラボイン撃ち

ソケットに名前を付ける
socketで作ってbindで名前付けてlistenで待つ

バインバインと音がするのでbindになった
0601初心者NGNG
突然すみません。
出力結果をテキスト方式で保存する方法ってわかりますか?
ほんとに初心者で専門用語とかわからないので、
できれば初心者にもわかるように優しく教えてください。

あと、これは友達に聞いてといわれたモノなので実際は俺自身もよくわかってません・・・
よろしくお願いします。
0602デフォルトの名無しさんNGNG
>>601
socketで作ってbindで名前付けてlistenで待つ
0603デフォルトの名無しさんNGNG
>>601
どこがネットワークプログラミングなんだ?
0604デフォルトの名無しさんNGNG
ネットワークを使ってプログラミングの質問をしたんだろう。
0605デフォルトの名無しさんNGNG
>>604
つまらん書き込みだな。ageるほどでもないぞ。
0606デフォルトの名無しさんNGNG
>>605
こんな上にあるのにage/sageにこだわるなよ・・・
0607デフォルトの名無しさんNGNG
>>606
お前も細かい事にこだわるなよ・・・
0608デフォルトの名無しさんNGNG
>>607
細かいことってなに?
>>605のくだらない煽りか?
0609デフォルトの名無しさんNGNG
アホかおまえら
0610デフォルトの名無しさんNGNG
親切な俺が教えてやろう。

./a.out > output.txt
0611デフォルトの名無しさんNGNG
うざがられる初心者の条件をピンポイントで満たしている>>601はエライ
0612デフォルトの名無しさんNGNG
UNIXダサすぎ。
つかってて平気ですか?
0613デフォルトの名無しさんNGNG
>>612
みんな我慢して使ってる。
0614デフォルトの名無しさんNGNG
ブサイクなやつほど見た目にこだわる。
0615デフォルトの名無しさんNGNG
手のかかる子はかわいいんだよ。
0616デフォルトの名無しさんNGNG
最近は虐待などが問題になってるわけだが
0617デフォルトの名無しさんNGNG
複数人が同時にログインして作業できるOSって、他にないからなあ。
UNIXがなかったらと思うとぞっとするよ。
0618デフォルトの名無しさんNGNG
>>617
汎用コンピュータやスパコンあるじゃん
ま、こぼらーしかつかいませんが・・・ w
0619デフォルトの名無しさんNGNG
>>618
>>617 じゃないけど、ぞっとするな。
0620デフォルトの名無しさんNGNG
>>617
そういう面だけなら VMS もそんなに悪くなかったような気がするけど・・・
0621デフォルトの名無しさんNGNG
>617-618
・・・頼むからもっと勉強してくれ
0622デフォルトの名無しさんNGNG
OpenVMSならTeraTermでログインして使った事あるけど、あのOSは
Unixの思想(特にSoftware Toolsの考え方)とは全く違うからなぁ…

部分部分では「これってなんかNTっぽいかも」と思う部分はあったが、
なんつーかCygwin載ってない素のWin2000にtelnetd経由でログオン
したような感じで。

「リモートログインできてコマンド叩けるのはいいけど、標準ツールは
少ないわ、正規表現使えないわ、それどころかリダイレクトもパイプ
も使えなくて一体何をどうしろってんだ」

ってのが俺の感想。(リダイレクトは一応できなくはないけど、事前に
リダイレクトONのコマンド叩いとかないといけないので、かったるくて
やってられない。実際GNUの〜utils系入れたけど使い物にならず)

登場当時はともかく、今となっては完全に過去の遺物としか思えん
なぁ。(逆に今でも第一線でバリバリ使われてるUnixが驚異的とも
言えるが)

…そういやOpenVMSのTCP/IP周りは結局触らずじまいだったな。
(仕事的にもアレだったので、そこまでやる前に逃げた)
0623デフォルトの名無しさんNGNG
>>622
なにも勉強せずにいきなり使いこなせるわけないだろう…。
それを棚に上げて、使い物にならずとか、完全に過去の遺物としか思えんなぁ
という発言はおかしいぞ。
0624デフォルトの名無しさんNGNG
>>623
>>622の言っていることは至極まともだぞ。スレ違いなのが痛いが。
0625デフォルトの名無しさんNGNG
>>622
Unix 風に使うなら shell もいれないと・・・
いまだと GNV (GNU's Not VMS) なんていうので一式入るみたいですね。
0626デフォルトの名無しさんNGNG
>>625
DCL以外になにがいる! 私は1994年ごろVMSに移植された
CERN httpサーバーの上でCGIスクリプトをDCLで書いていた。 

(スレ違いスマンがVMSってなかなか話題にならんのでつい)
0627デフォルトの名無しさんNGNG
IPアドレスから逆引きできる名前を
すべて収集する方法がわからんです
0628デフォルトの名無しさんNGNG
>>627
困りましたね。
0629627NGNG
>>628
ええ、困りました
0630デフォルトの名無しさんNGNG
大変ですね
0631デフォルトの名無しさんNGNG
Winsock で、メッセージ機構(とウィンドウ)を全く使わずに組みたいのですが、
そういうやり方に関して載ってるお薦め書籍ってありますか?
0632デフォルトの名無しさんNGNG
>>631
捕捉
普通の Berkley socket なスタイルの組み方はわかるんですが、
FAQ で言うような非同期 I/O やオーバーラップ I/O など性能いいのを使いたいのですが、
ぐぐってみた限りでは、非同期 I/O だとウィンドウプロシージャ宛てに
メッセージが届く仕様のようだし、オーバーラップ I/O は
検索キーワードがよくわかってないせいかほとんど情報がありませんでした。
0633デフォルトの名無しさんNGNG
散々既出で申し訳ないのですが…selectについて教えて下さい。
WindowsXPでVC++使ってます。
サーバ側のプログラムで、データが送信されたときだけrecvをしたいのですが…
例えば要点だけ書くと
NewSocket = accept(OldSocket, (struct sockaddr *) &NewAddr, &NewAddrSize);
として
FD_SET(NewSocket, &read_set);
でFDをセットして
while(1){
if(select(1, &read_set, NULL, NULL, &timeout)){
recv(NewSocket, buffer, NET_BUFFER_SIZE, 0);
}
else ---;
}
とやってみたのですが、クライアントからデータを送っても一度もrecvに入らないのです。
色々試したり調べたりしたのですが、なぜかどこもUNIX、LINUXのソースばかりで…。
変数はそれぞれ適当な値が入ってます…おそらく。
どこが悪いか分かる方、教えてもらえませんでしょうか?
0634633NGNG
訂正
if(select(1, &read_set, NULL, NULL, &timeout))
ではなく
if(!(select(1, &read_set, NULL, NULL, &timeout) == -1))
でした。すみません。
0635デフォルトの名無しさんNGNG
>>633
if(select(NewSocket+1, &read_set, NULL, NULL, &timeout)){
0636635NGNG
じゃなくて
if(select(NewSocket+1, &read_set, NULL, NULL, &timeout)!=-1){
0637デフォルトの名無しさんNGNG
>>631
漏れは、SOFTBAKがDEVELOPER PRESSというシリーズで出していた
「WinSock 2.0 プログラミング」という本で、概要を勉強したけど、
もうamazon.co.jpにも出てこないような本だからなあ。役立たずでスマン。

でも、MSDN地道に読むのも、勉強になるよ。
0638633NGNG
>>636
それでやってみたところ、一回目のselect呼び出しで一度0が返り、
データの送信なんてしていないのにservが呼び出されてしまいました。
…で、とりあえずデータ送信してやったら、2度目からのselect呼び出しでは
ずっと-1が返ってます。
データを送信してもservに入ってくれなくなりました。

GetLastErrorでみると
無効な引数が提供されました。
と言われます。
謎です。
0639デフォルトの名無しさんNGNG
>>632
こんな感じでやればほとんどBerkley socketの非同期とかわらんよ
ちと汚いが・・・

//ソケット作成(現時点ではブロッキングモード)
SOCKET Socket.Socket = socket(AF_INET, SOCK_STREAM, 0);
if (Socket.Socket == INVALID_SOCKET)
{
 WSACleanup();
 return FALSE;
}
// ソケットを非ブロッキングモードに設定
arg = 1L;
nRet = ioctlsocket(Socket.Socket, FIONBIO, &arg);
if (nRet == SOCKET_ERROR)
{
 WSACleanup();
 return FALSE;
}
0640デフォルトの名無しさんNGNG
//これ以降は完全非ブロッキング
SOCKET SocketRcv;
struct sockaddr_in acp;
int len = sizeof( acp );
//accept処理
for (;;)
{
 if( ( SocketRcv = accept( Socket, (struct sockaddr *)&acp, &len)) < 0 )
 {
  closesocket( Socket );
  exit(1)
 }
 if(WSAGetLastError() != WSAEWOULDBLOCK)
 {
  // 接続エラー
  closesocket(Socket.Socket);
  exit(1);
 }
}
0641デフォルトの名無しさんNGNG
//recv処理
char szBuf[BUF_SIZE];
WSABUF wsaBuf;
DWORD dwRetByteCount;
WSAOVERLAPPED wsaOverlap;
DWORD dwWsaFlg;
wsaOverlap.hEvent = WSACreateEvent();
wsaBuf.buf = szBuf;
wsaBuf.len = sizeof(szBuf);
dwWsaFlg = 0;

for(;;)
{
 dwRetByteCount = 0;
 memset(szBuf,0,sizeof(szBuf));
 if ( WSARecv( SocketRcv, &wsaBuf, 1, &dwRetByteCount, &dwWsaFlg, &wsaOverlap, NULL) != 0)
 {
  // とりあえず受信完了するまでまってみる?!
  nRet = WSAGetOverlappedResult(SocketRcv, &wsaOverlap, &dwRetByteCount, FALSE, &dwWsaFlg);
  switch (WSAGetLastError())
  {
  case WAIT_TIMEOUT: break;
  case WSA_IO_INCOMPLETE: break; // 非ブロッキング状態なので常にここへはいってくる
  case WSA_IO_PENDING: break; //変なエラーなのでおとしたほうがいいかも・・
  default:
  }
  continue;
 }
//RECV完了処理
}
0642デフォルトの名無しさんNGNG
>>638
Winsockの場合、第一引数はBSD互換の為に
残されてるだけで、実際は使われてない。
ただ、一応残されてるので>>636のようにBSD互換で書いておいた方がいい。

で、read_setはselectを呼び出すたびに設定しなおさなきゃダメよ。
だから、この場合

FD_SET(NewSocket, &def_set);
while(1){
read_set=def_set;
if(!(select(NewSocket+1, &read_set, NULL, NULL, &timeout) == -1))

でいけると思う。
0643633NGNG
>>642
どうもありがとうございます。
解決しました。
read_setの書き換えと、データが送信されたときのselect()の戻り値が1であることの2点が悪かったようです。
データ送信されてないときのselectの戻り値0なんですね…。
忘れていました。
0644627NGNG
>>630
gethostbyaddr を使って h_aliases を見ればよいのですね
助かりました
0645デフォルトの名無しさんNGNG
>>637
http://www.amazon.co.jp/exec/obidos/ASIN/4797306882/249-4245099-5917164
これですか?
このスレのテンプレ(>>2)にも書かれてる本ですね。
ありがとうございます。早速注文してみます。

>>639-641
おおおお。ありがとうございます。
コードを見ながら色々試してみます。
0646デフォルトの名無しさんNGNG
>>645
あれ?WinSockで検索しても、出てこないから、取り扱いが
無いのかと思ってた。(WinSock2.0で検索したら出てきやがったorz)
>>2は見落としてた crt
0647デフォルトの名無しさんNGNG
>とりあえず、UNIX系のOSだね。
YES.

>子プロセス側で通信がうまくいっていない事を子プロセス自身がきちんと
>認識できる事という事と、
>子プロセスで検出した事象を親プロセスに通知するという部分は、
>まったく別の次元の話ですよね。

ですね。


>まずは、起こりえる障害に対してきちんと検出、対応が可能なロジックが
>組めるかどうかを考えたほうが良いんじゃないの?
>子プロセスが、デッドロック状態になった時に親プロセスで検出しようとしてる
>見たいだけど、子プロセスがデッドロックにならない様に作る事って出来ないの?
>通信中に回線が切れたり、相手のマシンの電源が切れたり、間のルータがとまったり
>なんでのは、みんな検出可能だよね。

おっしゃるとおり。てゆか、
>通信中に回線が切れたり、相手のマシンの電源が切れたり、間のルータがとまったり
>なんでのは、みんな検出可能だよね。

は、普通に親から検出可能だよね。だから↑の事象はあまり気にしてない。
0648デフォルトの名無しさんNGNG
>その上で、
>>親から定期的に子のFIFOに書き込んで
>>一定時間内に応答がなかったら死んでるって
>>いうふうに解釈してもいいのかな?
>>子プロの巧い管理方法があったら教えて下さい。
>って言うのであれば、それはスレ違い。

まあね、普通に親から検出可能なものを監視する必要ないもんね。
それに子のFIFOに書き込んで子からFIFO経由で応答があっても
ちゃんと動いているっていえないもんね。おっしゃるとおり。

じゃあ結局、ちゃんとつくっていれば、
子供の通信を100%管理できるよってことね。
特に監視する必要はないと。。。そういうこと?
そもそも監視すること自体がナンセンスってことですか?
0649デフォルトの名無しさんNGNG
>>648
> じゃあ結局、ちゃんとつくっていれば、
> 子供の通信を100%管理できるよってことね。

まさか。100%なんて出来ませんよ。
通信しているプロセス本人でも、
100%は制御できないのがネットワークプログラミングですから。

> 特に監視する必要はないと。。。そういうこと?
> そもそも監視すること自体がナンセンスってことですか?

それはネットワークプログラミングではない。
子プロセスが何やっているかには大きく影響されない事だからね。
0650デフォルトの名無しさんNGNG
>647-648
さげろ、カス
0651デフォルトの名無しさんNGNG
>>647-648
sage厨(>>650)は無視していいぞ。
0652デフォルトの名無しさんNGNG
非同期とノンブロックを混同するなよ
0653デフォルトの名無しさんNGNG
一緒じゃないの?ΣΣ(゚д゚lll)
0654デフォルトの名無しさんNGNG
>>652
またお前か?
0655デフォルトの名無しさんNGNG
WinInetのInternetReadFileってデータをダウンロードするとき
実際にはどれくらいの大きさのパケットとして受け取っているんですか?
なるべくならそのサイズとバッファサイズをそろえたいんですが。
0656デフォルトの名無しさんNGNG
>>655
そんな事を考えるヒマがあったら他のことをしろ
0657デフォルトの名無しさんNGNG
>> 648
>じゃあ結局、ちゃんとつくっていれば、
>子供の通信を100%管理できるよってことね。
>特に監視する必要はないと。。。そういうこと?
>そもそも監視すること自体がナンセンスってことですか?

ちゃんと通信が行えているかどうかを一番把握できるのは、
通信を行っている子プロセス側。
よって、通信エラーに関する部分については子プロセス側ですべて
処理を行う。
そして、きちんと通信エラーを検出するプログラムが書けるのであれば、
子プロセス側がデッドロック状態になることはない。

ただし、子プロセス側が通信に関する部分以外でデッドロックとなりうる
ロジックを書く必要があって、それを親プロセス側で監視したいというのであれば、
それは、通信とは関係ない話であり、スレ違いでしょ。

ってこと。
そういう部分について意見が聞きたいというのであれば、もう少し具体的にね。



0658デフォルトの名無しさんNGNG
TCPでの質問です。

readOK = mask;
select(1024, &readOK, NULL,NULL,BULL);

/*待ちうけソケットに反応があった場合*/
if( FD_ISSET(soc_waiting, &readOK)==1)

でsoc_waitingは待ちうけソケットなのですが
こんな感じで判別してacceptしようと思ってるのです。
でも、このコードでは待ちうけソケットにどれだけの数のコネクション待ちがあるかわからないのですが
どうすれば判るように出来るのでしょうか?
0659デフォルトの名無しさんNGNG
   /⌒ヽ
  / ´_ゝ`)    /⌒ヽ  ちょっと通りますね、ここ通らないと行けないので・・・
  |    /    / ´_ゝ`)
  | /| |     |    /      /⌒ヽ  チャプッ
  // | |      | /| |      / ´_ゝ`)
 U  .U      // | |      |    /       /⌒ヽ  プクプクッ      プクプクプク・・・・
          U  .U     二| /| |二-_  -_/_´_ゝ`)二-    - /⌒ヽ= _        _   ッ・・・・・
                  ̄- ̄- ̄    ─  ─  ̄-      ̄- ̄  ̄-  
0660デフォルトの名無しさんNGNG
>>658
たぶん、待ちがいくつあるか判別する方法はsocketライブラリでは無いと思う。
そもそも、待ち状態のがいくつあるか知ってる必要あるの?
そのまま、ループまわせば一個ずつacceptできるし。

あと、selectの第一引数は直した方がいいぞ。
0661デフォルトの名無しさんNGNG
>>658
とりあえずBULLとは何なのかを15文字以内で簡潔に説明せよ。
0662658NGNG
>>660
レスどうもありがとうございます。
それほど重要な情報ではないので諦めます。

あと、常時複数のコネクションを張るシステムでして・・・
その上コネクションが頻繁に繋げられたり消されたりするシステムなんです。
それで現在のfdの最大値が判れば無駄なくselect()が出来何とかなるのですが…
いちいち記録しておくしか方法は無いでしょうか?

>>661
指摘どうもです。
ミスタイプです。。。
0663デフォルトの名無しさんNGNG
>>662
少なくとも、max()とか使って走査範囲を順次拡大するだけでもいいと思う。
最大値のコネクションが切れてもこの場合は無視。
そう組むだけでも、最初っから最大値固定でやるより、パフォーマンス
いいと思うよ。

その上で、一定時間毎にアクティブな奴全てを走査して最大値を求めなおす。
ってのもあるが、こっちはあまり効果なさそうな気がする。
0664デフォルトの名無しさんNGNG
プログラムと直接関係なくてすまないんだが、Windows XP の hosts ファイルに
ホスト名の重複した 3 つのエントリ (上下 2 つは同一の IP アドレス) を記述
した場合、そのホスト名へのアクセスでブラウザやら ping やらが以上終了する
見たいなんだけど、もまいらのマシンもそう?

192.168.1.1 aaa
192.168.1.2 aaa
192.168.1.1 aaa

上記の順で書いた時 ping aaa や http://aaa/ へのアクセスでプロセスが異常
終了するみたい。まぁそもそも同一ホスト名に別アドレス割り当てる事自体
イレギュラーなんだけどね。http://support.microsoft.com/default.aspx?scid=kb;ja;177075
動作は未定義って事なんだろうけど、プロセス異常終了とは…
0665デフォルトの名無しさんNGNG
>664

ばか?
0666デフォルトの名無しさんNGNG
つまりそのファイルを書き換えればネット使うソフトは軒並みダメになるわけだな
ウヒヒ
0667デフォルトの名無しさんNGNG
2000や2003Server相手じゃ,全く効果なし。
0668デフォルトの名無しさんNGNG
>>664
割り当てに関することだが、それはhostsの動作の話であってこういうのはある
ttp://ash.jp/env/srv/rounddns.htm
0669デフォルトの名無しさんNGNG
>>665
馬鹿はお前とゲイツ。
0670デフォルトの名無しさんNGNG
てst
0671デフォルトの名無しさんNGNG
>>668
あーごめん、読み直さずに書き込んでしまった。
"「hosts ファイル上で」同一ホスト名に別アドレス割り当てる事自体" って気で書いてました。
0672デフォルトの名無しさんNGNG
>>664
winsock が msvcrt の wcslen に NULL 渡して落ちてるね・・・
お粗末だなー
0673デフォルトの名無しさんNGNG
Windows Update や LiveUpdate のサイトに >>664 やるウィルスが出たら
素人は駆除できんな。
0674デフォルトの名無しさんNGNG
ぬるぽ
0675デフォルトの名無しさんNGNG
cygwin(Windows2000)上でsocketいじくっています。
それで質問させて頂きたいのですが、socketを、

socket(AF_INET, SOCK_RAW, 6);

の様にraw socketでプロトコルはTCPに指定して作成し、
sendtoするとinvalid argumentでエラーになってしまいます。
sendtoの引数には、

//th : TCPヘッダ自作のためのtcphdrをメンバにした構造体
//sa : sockaddr_in
sendto(sid, (void *)&th.tcp, sizeof(struct tcphdr), 0, (struct sockaddr *)&sa, (int)sizeof(sa))

としているのですが、なぜエラーになるのでしょうか?
ちなみにsocket関数の第3引数を0(IP)に指定すると成功します。
0676デフォルトの名無しさんNGNG
>>675
確か、Windowsの制限でSOCK_RAWのTCP/UDPは使えなかったはず。

俺もここら辺詳しくないから、詳細は
ttp://www.kt.rim.or.jp/~ksk/wskfaq-ja/advanced.html
↑でも見てくれ
0677デフォルトの名無しさんNGNG
>>673
実際に hosts を書き換えるスパイウェアはあるね。・゚・(ノД`)・゚・。
まれにPC初心者板の「エロサイト見たら・・助けて」スレで相談受けるよ
0678675NGNG
>>676
レスありがとうございます。
TCP/IPヘッダから自前で用意してパケット送りたいなーとか思ってたんですが、
winでは低レベルなとこで処理しないと駄目なんですね。
0679675NGNG
何度も質問して申し訳ありませんが、また質問させて下さい。
winsock2で、setsockopt()のIP_HDRINCL(.NETではSocket.SetSocketOption()のHeaderIncluded)
を有効にしたいんですが、
しようとすると割り込み入って失敗します。
せっかくこういう関数/メソッドがあるのに、Windows上でヘッダいじるのは無理なんでしょうか?
0680デフォルトの名無しさんNGNG
>>679
割り込みってなんだ??? signal か Exception か?
どっちにしてもちゃんと具体的なメッセージ書けって。このスレにはエスパーはいないぞ。

とりあえず管理者権限が要るって >>676 の先に書いてあるが、それは大丈夫か?
0681675NGNG
>>680
レスありがとうございます!
権限は管理者です。
C#でコード書いてみて、Exceptionをcatchすると以下のようなエラーメッセージが出ます。
ちなみにエラー番号は10004です。
System.Net.Sockets.SocketException: ブロック操作は WSACancelBlockingCall の呼び出しに割り込まれました。
at System.Net.Sockets.Socket.SendTo(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags, EndPoint remoteEP)
at System.Net.Sockets.Socket.SendTo(Byte[] buffer, EndPoint remoteEP)

調べてみるとシステムコールの割り込みが発生しているようです。

HeaderIncludedをtrueにすることによってヘッダを自作してパケットを送ることが出来ると解釈しているんですが、
それは間違いなんですかね?
0682デフォルトの名無しさんNGNG
.NETはよくワカンネ
0683デフォルトの名無しさんNGNG
>>681
暇だったんで、昔作った自前ICMPツールを改造してテストしてみた。
言語はC++だが、特に問題なく送信できた。
ちなみにICMPとTCPで試したけど、どっちも問題なし。

IPヘッダーからTCPヘッダーまで、チェックサム含めて間違って無いよな?
0684680NGNG
>>681
俺も C#.NET で簡単なサンプル書いてみたけど、フツーに動いたよ。
(昔Cで作った Wake On LAN のパケット投げる奴を C# にしてみた)

その Exception から推測するに、SendTo() 処理中に異常処理かなんかで
プロセスorスレッドを強制的に終了させているように見える
(あくまで推測で、あまり根拠はないが)。

また関係あるかどうかはわからんが、MSDNの SendTo() のドキュメントには、
下のレイヤでバッファリングするため長さが長すぎたりすると
SocketException が飛ぶという記述もある。

>>683 が言うように、ヘッダの長さやチェックサムが全部正しいか
チェックしてみたら?

0685デフォルトの名無しさんNGNG
ネットワーク系の関数とかアプリって、どうやってテストするの?
0686デフォルトの名無しさんNGNG
>>685
localhostじゃね?ネトゲならβ版公開してテストしてるけど。
まあスレッド使って擬似DoSとかできんことも無いw
0687デフォルトの名無しさんNGNG
普通にLANでテストすりゃいい
0688デフォルトの名無しさんNGNG
etherealで調べる
0689658NGNG
もうぬるぽ!
0690デフォルトの名無しさんNGNG
>>689
ガッ
0691デフォルトの名無しさんNGNG
selectとthreadとでは、どっちがリソースの効率がいい?
dev/pollとかOS依存のものは使わない方向で教えて。
0692デフォルトの名無しさんNGNG
規模による
0693デフォルトの名無しさんNGNG
あと無印pollはポータブルかつselectより効率的。
0694デフォルトの名無しさんNGNG
>>692
大体同時アクセス100人前後までを想定してる。

>>693
でも無印pollはwin系では実装されてないしなぁ。(VC6.0のリファレンスで確認した分には)
殆ど共通のアルゴリズムでコンパイルしたかったので。

単純なメッセンジャー鯖を作りたいんだけどね。
0695デフォルトの名無しさんNGNG
online/offlineのチェック/広告は別スレッド掘った。
0696デフォルトの名無しさんNGNG
>>694
それくらいならselectで十分効率的。
うまく組んだらthread+selectの方がいいだろうけどいろいろ面倒でしょ。
0697デフォルトの名無しさんNGNG
>>696
じゃあselectで頑張ってみる。

> うまく組んだらthread+selectの方がいいだろうけどいろいろ面倒でしょ。
必要に迫られたらそうするよ。うん。面倒は嫌いw
0698デフォルトの名無しさんNGNG
selectの嫌がらせとしか思えないあの仕様は何だろうねw
0699デフォルトの名無しさんNGNG
UNIX発の言語やライブラリの仕様は変態的なのばっかだよ。
0700デフォルトの名無しさんNGNG
メクソハナクソ
0701デフォルトの名無しさんNGNG
selectって便利なんだけど仕様は糞だよね
0702デフォルトの名無しさんNGNG
もっと糞なのはあれだ アドレスの構造体
0703デフォルトの名無しさんNGNG
SSLの PEM ファイルについてですが、
これの最大ファイルサイズってどれくらいでしょうか?
規格上決まってますか?
0704デフォルトの名無しさんNGNG
SSL自体の仕様ではないと思うけど・・・
0705デフォルトの名無しさんNGNG
0706デフォルトの名無しさんNGNG
VCでarp -aコマンドみたいなものを作ることは可能ですか?
0707デフォルトの名無しさんNGNG
可能か否かという問いなら可能です
だってWinにarpコマンドあるしねw
0708番組の途中ですが名無しですNGNG
ねえ、誰かP2Pネットワークを利用して2chに匿名で書き込む(ネットワーク中の誰かに書き込ませる)ソフト作ってくれない?
画像などの簡易交換機能をつけるとそれなりに利用者は多くて、ネットワークとして機能すると思うんだけど自分の技術じゃむりぽ
0709デフォルトの名無しさんNGNG
>>707
つまりMS以外は事実上無理なんですね?
0710デフォルトの名無しさんNGNG
>>709
なんでそうなるの?
0711デフォルトの名無しさんNGNG
GetAdaptersInfoでぐぐればでてこないかな?
iphelpなんたら.libってので出来たはず
0712デフォルトの名無しさんNGNG
iphlpapi.dllにあるね
0713デフォルトの名無しさんNGNG
>>708
犯罪者続出のロシアンルーレットツールなんて作ったら、開発者までしょっぴかれますがな
0714デフォルトの名無しさんNGNG
ipconfig /a
程度のものしか作れないみたいですが…
0715デフォルトの名無しさんNGNG
GetIpNetTableとかね
英語読めんから情報がすくねw
0716デフォルトの名無しさんNGNG
>>715
ばっちりです。
どうやったらそんなに詳しくなれるんでしょうかね
0717デフォルトの名無しさんNGNG
愛、かな
0718デフォルトの名無しさんNGNG
ws2_32.dllのラッパを作って見たんですが(出力されたのをコンパイルしただけ・・・)
send関数が上手く動作してくれません。recv関数も上手く動いてないと思うけど。

戻り値とか引数とかの書き方間違ってるのでしょうか?

int WSAAPI d_send(SOCKET s, const char FAR * buf, int len, int flags) {
int ret = send(s, buf, len, flags);
return ret
}
0719718NGNG
>>718
>return ret
にはちゃんと;付けてます。
0720デフォルトの名無しさんNGNG
> 上手く動作してくれません

ほほう。
0721田沼意次NGNG
> 上手く動作してくれません

日頃の賄賂が足りないのでは?
0722デフォルトの名無しさんNGNG
なんたらSTARTとかはしてる?
あれをしないと使えないんじゃなかったっけ?
0723デフォルトの名無しさんNGNG
>>718
エラーならWSAGetLastError()の戻り値調べてみましょう?
http://msdn.microsoft.com/library/en-us/winsock/winsock/windows_sockets_error_codes_2.asp?FRAME=true
英語だけどエラーコードの一覧があるので参考にどうぞ

>>722
WSAStartup()のことですね。
この関数を呼ばないとWinsockAPIの呼び出しが失敗しますね。
0724718NGNG
>>719 >>720
日本語おかしいですか?バカですみません・・・

>>722>>723
WSAStartup関数は呼んでませんでした。
試してみます。

エラーが出る前にsend関数でプログラムが落ちるので・・・
上の関数ためしてきます。
0725デフォルトの名無しさんNGNG
>>724
おかしいのは>>720-721だから気にするな。
0726718NGNG
DLL_PROCESS_ATTACHでWSAStartup関数を呼んでも、WSAStartup関数のラッパで
呼んでも死んで(?)しまいます。

DLL_PROCESS_ATTACHの場合は、WSAStartup関数以降が処理されない。
WSAStartup関数のラッパの場合は、「unknown software exception」のエラー。

同じ名前のdllを作成して、中でそのdllの関数を呼んでたりするからダメなのかな?
一筋縄ではいかないようで・・・もう少し頑張ってみます。

>>725
ありがとー
0727デフォルトの名無しさんNGNG
kageのソースを見るとDLL_PROCESS_ATTACHでの呼び出しが
コメントアウトされてるから呼び出すと何か問題がありそうな予感
0728デフォルトの名無しさんNGNG
>>727
kageがDLL_PROCESS_ATTACHでやってるのはwsock32.dllの
LoadLibraryであって、そのタイミングでWSAStartup()はしてない。
(後でかちゅ〜しゃ本体から呼ばれてるっぽい)
0729718NGNG
ws2_32.dllのラッパとりあえず作成できました!
レスしてくれた方ありがとうございます。

「ws2_32.dll」と同じ名前にしているので(?)ラッパする関数を再起していました。
それで、本物のdllの関数を呼ぶようにしたら出来ました。
当たり前と言ったら当たり前の事ですね・・・勉強が足りないようです。

あと、WSAStartup関数を呼ばなくてもsend関数、recv関数を呼べました。


参考HPを探していて見つけた事
ラッパを作成しなくても、そのexeがロードしたsend関数なりrecv関数なりの
アドレスに新しく作成した関数のアドレスを上書きすれば、関数のHookが
出来そうですね。
0730718 補足NGNG
>本物のdllの関数
LoadLibraryで呼び出したdllの関数
0731デフォルトの名無しさんNGNG
datalinkでパケット除く方法がいまいちわかりません。
言語はCでLinuxかC#でWindowsなんですけど

datalinkでsocketをつくって
あとはrecvfromとかで読む込むのですか?

0732デフォルトの名無しさんNGNG
datalinkでパケット除くという意味がいまいちわかりません。
0733デフォルトの名無しさんNGNG
覗くんだろ
近頃の子供は漢字に弱いな
0734デフォルトの名無しさんNGNG
link layer socketだろうな。
0735デフォルトの名無しさんNGNG
PunchingHoleUDPって複数同時の通信って出来るんですか?
例えば、サーバーとメッセージのやり取りをしながら、他のクライアントとボイスチャットをするとか・・・
0736デフォルトの名無しさんNGNG
何でこのスレではPunchingHoleUDPって言う人が多いのだろう…

ところで、STUNとの違いって何なのかな?
同じもののように思えるのだけれど…
UDP Hole Punchingっていうのは概念で、
STUNは具体的な実装?
的外れなこと言ってたらすみません。
0737デフォルトの名無しさんNGNG
>>736
同じ人が繰り返し言っているだけ。
0738デフォルトの名無しさんNGNG
WindowsでWebDAVのファイル読み書きするのってどんなAPI使えばいいの?
0739デフォルトの名無しさんNGNG
>>738
板違い
WebProg板へどうぞ。
0740デフォルトの名無しさんNGNG
>>739
WebDAVスレなんてないし。
それにWinSock, WinInetと同種の話ではないの?
0741デフォルトの名無しさんNGNG
>>740
Microsoft Internet Publisher に付いてくる OLE DB Publisher は http/dav をサポートしてる
みたいだけど、この publisher だけ入手できるのかとか、通常の IE 6 あたりに含まれてるのか
とかは不明。
0742デフォルトの名無しさんNGNG
Windows でローカルホストの IPv6 アドレスを得るにはどうしたらいいでしょう?
0743デフォルトの名無しさんNGNG
::1
0744デフォルトの名無しさんNGNG
>>738
ファイルの"読み"と"書き"だけなら,WinInetでHTTPの"GET"と"PUT"するだけ。
WinSockでべた書きでもいいけどさ。

GUIなら>>741が言ってるのを使えばいい。ほい,サンプル。
http://support.microsoft.com/default.aspx?scid=kb;EN-US;248501
Webフォルダ(webdav)が使えるWindowsなら,ちゃんと入ってる
0745過去にSTUNの質問した一人NGNG
>>737
流石にそれは無いだろ・・・w
多分Skypeに採用されたのが人気に拍子をかけたのだろう。
元々NAT超えに関しては多くの人が関心のあった分野だし。

>>736
同じ。
単にRFCに登録されたのがPunchingHoleUDPじゃなかったっけ?
0746過去にSTUNの質問した一人NGNG
>>735
何故分ける?
UDPはコネクション型では無いという事を思い出せ(セッションに区別が無い)。
パケットを個別に分ける必要なんぞ無いだろう。
0747デフォルトの名無しさんNGNG
>>736
> UDP Hole Punchingっていうのは概念で、
> STUNは具体的な実装?

そうです。

/FYI/
http://midcom-p2p.sourceforge.net/draft-ford-midcom-p2p-01.txt
http://sebsauvage.net/punching/
http://alumnus.caltech.edu/~dank/peer-nat.html
ftp://ftp.ietf.org/rfc/rfc3489.html
http://www.skype.com/home.ja.html

0748デフォルトの名無しさんNGNG
ネットワークコンピュータのホスト名を繋がってるだけ列挙する方法を教えてください。
出来ればUNIXのサーバリストも探したいです。
0749デフォルトの名無しさんNGNG
>ネットワークコンピュータのホスト名を繋がってるだけ
誰か,この日本語解釈できる?
わしには理解できない。
2行目も意味不明。
0750デフォルトの名無しさんNGNG
某P2P逮捕ソフトに毒されてる希ガス
0751デフォルトの名無しさんNGNG
> 某P2P逮捕ソフト

ネーミング(?)にワラタ
0752748NGNG
ワークグループ等に属しているコンピュータ名全てという意味です
0753デフォルトの名無しさんNGNG
include<stdio.h>
#include<stdlib.h>
void main(void)
{char *str;
str=malloc(sizeof(char)*20);
scanf("%s",str);
printf("%s",str);
free(str);
}
voidがなんとかってエラーがでます、でもこれは本にのってた
サンプルプログラムのはずなんですけど。
もしかしてこの本はだめなんでしょうか?
0754デフォルトの名無しさんNGNG
>>753
str=(char *)malloc(sizeof(char)*20);
0755デフォルトの名無しさんNGNG
>>752
NetBIOSかよ。ほれ。
http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&oe=UTF-8&q=netbios+ncb
NCBSTATかNCBASTATか,どっちが必要かは自分で判断しろ。

2行目はDQN確定?
0756デフォルトの名無しさんNGNG
>>753
どのへんがネットワークなのか
0757デフォルトの名無しさんNGNG
>>756
C
0758デフォルトの名無しさんNGNG
>>753
   ヘ_ヘ
 ミ ・ ・ ミ 「なんとか!」
  (  ° )〜
0759デフォルトの名無しさんNGNG
一行目に#
0760デフォルトの名無しさんNGNG
>>758-759
つまらない。
0761デフォルトの名無しさんNGNG
wininet を使ったプログラミングについて
おれに1から手とり足とりおしえてくれ!
くそども
0762デフォルトの名無しさんNGNG
>>761
悲惨だなw
0763デフォルトの名無しさんNGNG
1から始めるnyつくり。
0764デフォルトの名無しさんNGNG
"こんにちは!世界" でも作ってろ
0765 NGNG
自分の学習のためにIriaのようなダウンロードソフトを
作ってみようかと思うのですが、参考になるソースとか
サイトとかないですかね
0766デフォルトの名無しさんNGNG
>>765
WWWブラウザやftpのソースを呼んだらどうだろうか?
socketでぐぐればUNIX関係の簡単なサンプルが手に入るかと
0767デフォルトの名無しさんNGNG
>>765
アレの後継のソフトのソースはOpenであったんじゃなかった?
0768765NGNG
>>766
あ〜、ブラウザのソースなら必要な情報が全部
わかりそうですね
でも敷居が高いような・・・
http のダウンロードに関する簡単なサンプルがあればと
思うんですけど
0769765NGNG
>>767
まじっすか
でも何でググればよいんでしょうか
0770765NGNG
あ〜、OpenIvine というのがオープンソースですね・・・
頑張ってみます
ありがとうございました。
0771デフォルトの名無しさんNGNG
ところで、
Windowsには、
UNIXドメインみたいなソケットってあるんですか?

cygwin + postgresqlでpsqlを連続して使うと、
前のpsqlのTIME_WAITが残ったままになって、
後のpsqlがエラーになってしまうのですが。
0772デフォルトの名無しさんNGNG
>>768
昔、Netscapeのソースが公開されたことあったな。
0773デフォルトの名無しさんNGNG
>>772
netscapeなんていわずlynxとかw3mでもいいだろ
0774デフォルトの名無しさんNGNG
いやGET送ってレスポンス貰うだけでいいじゃんw
0775デフォルトの名無しさんNGNG
>>774
だからその方法を知りたいんだろ?
0776デフォルトの名無しさんNGNG
ソース見るより HTTP/1.1 の仕様を調べた方がいいと思った
0777デフォルトの名無しさんNGNG
あの仕様書から実装を導き出すのは結構難儀するぞ
ソースコードをいくつか見たほうがいいと思う
0778デフォルトの名無しさんNGNG
>>765
とりあえず、wget, curlから始めれば?
次はlftp。
0779デフォルトの名無しさんNGNG
オプソ物のソースは人力スクランブルがかかってて読めたもんじゃないな。
0780デフォルトの名無しさんNGNG
UNIXとWINのコードの違いってあんまり無いよ
openが_openだったりする程度だったような
0781デフォルトの名無しさんNGNG
>>780
本気で言ってるのか
じゃあ、fork()やsigaction()、ttyの制御をやりまくりのシェルでも
移植してみ。
むろんcygwinとかハンパなことを言わずにWin32ネイティブで
0782デフォルトの名無しさんNGNG
httpクライアントの話だろ?
何剥きになってるの?
0783デフォルトの名無しさんNGNG
>>782
改行の違いだとか
WinsockのSOCKETはfile descripterじゃないからfdopen()できないとか
read(), write()はできないからrecv(), send()だとか
writev()?なにそれとか
alarm()つかえんとか
腐るほど違いはあるだろ
0784765NGNG
取得はできるようになったのですが、今後
レジュームとかをやってみようとすると
ちゃんと仕様を知らないと駄目っぽいですね

HTTP_GET に関しては以下のサイトを参考にしました

ttp://www.sea-bird.org/doc/Cygwin/http2.html

今は以下のサイトのソースを眺めてます

ttp://aria.rednoah.com/linux_j.shtml
0785デフォルトの名無しさんNGNG
_read, _writeで出来るのでは?
0786デフォルトの名無しさんNGNG
>>785
え?今のMSVCRTだとできるの?
ReadFile(), WriteFile()が使えるようになってるのは知ってるが

少なくとも以前は、
_open_osfhandle()→fdopen()しても、
結局CRTのエミュレーション層がブロッキングなハンドルじゃないと
扱えなかったんだよね
# ブロッキングソケットではダメ
0787デフォルトの名無しさんNGNG
まあcygwinのソースでも眺めりゃいいんじゃなかろうか。
0788デフォルトの名無しさんNGNG
>ReadFile(), WriteFile()が使えるようになってる

98/Me とかはダメだったりしない?
0789765NGNG
>>778
wget が良い感じです!
まさにこういうソースを求めていました
ありがとうございました
0790デフォルトの名無しさんNGNG
>>788
95系とNT4はダメですね
2000以降のリダイレクタが強化されたんでしょう
その他もGetLastError()がWSAGetLastError()の代わりに使えるかどうかとか
UDPでconnect()したときの挙動とか
色々違いはありますよね同じWinsockでも
0791デフォルトの名無しさんNGNG
>>790
いや、95系もNT4もできた(というかやってた)けど。> ReadFile(), WriteFile()
おまけに95系はソケット相手ならoverlapped I/Oまで使えた。
が、調子に乗って同期取らずにガンガンWriteFile()したらOS巻き込んで
落ちた(w
0792デフォルトの名無しさんNGNG
>>790
0793デフォルトの名無しさんNGNG

エロイ人に教えて欲すぃんだけどさ、
Winsock2 でね、割り当てられたIPv6グローバルアドレスを取得できるAPIって何なのでせう?
0794デフォルトの名無しさんNGNG
普通にAF_INET6でsocket作って、getsocknameでできない?
0795デフォルトの名無しさんNGNG
つか、PlatformSDKのIPv6 Guideにサンプルコードあるし。
0796793NGNG
>>794
今環境無いところに居るんで試せないスマン。今度やってみる。

>>795
getaddrinfo() 使うやつ?これってDNSに登録して無いやつでもええの?
0797デフォルトの名無しさんNGNG
>>790
確かそのヘンの違いは(OS毎の動作の怪しさは別として) Winsock 2 と
素の winsock の違いだったと記憶しているけど。
0798デフォルトの名無しさんNGNG
winnt/system32/drivers/etc/hosts に自ホスト名とIPアドレスを
書いてLANケーブル抜いた状態で Winsock 2.2 の
gethostbyname()に自ホスト名を渡してコールしたら、
hostent の h_addr_list に 127.0.0.1 だけが入ってて驚いたんだけど、

Winsock ってこんな不思議な動きをするものなのでしょうか?
エロイ人教えてください。
0799デフォルトの名無しさんNGNG
インターネットエクスプローラーの、
HTTPリクエストヘッダのUser-Agentの文字列(製品トークン)を
誰か教えてくださいませ。

0800デフォルトの名無しさんNGNG
>>798
する。それに気が付かなくて、昔はまったことがある。
悲しい想い出。

要するに、IPアドレスはNICに付く物だから。ケーブル抜くと、
カードが無効になっちゃうんだろうねえ。よくわかってないけど。
0801デフォルトの名無しさんNGNG
>>799
Windows2000 5.00.2195 + Service Pack 4
Internet Explorer 6.0.2800.1106 + Service Pack 1

User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)\r\n
0802デフォルトの名無しさんNGNG
>>800
ありがとうございます。
自分の環境のせいではないと判明して安心しました。

そのときにどうやって回避されたかも教えていただけますか?
#欲張りですいません。
0803デフォルトの名無しさんNGNG
>>801
わざわざ、どうもありがとうございます。
0804デフォルトの名無しさんNGNG
>>798
DHCPの場合、動的に変わらないと腹たつでしょ。
仕方ないんじゃないの?

俺のLinuxも127.0.0.1と::1だけだべ。
0805デフォルトの名無しさんNGNG
>>800
そりゃ,hostsファイルじゃなく,NETBIOS名引いてるからじゃねーのか?
コンピュータ名とhostsファイルのホスト名が同一とみた。
両者の名前,ばらばらにしてみ?
0806デフォルトの名無しさんNGNG
if( (Socket = ::socket( AF_INET, SOCK_STREAM, 0 )) != INVALID_SOCKET ){
  struct sockaddr_in sa;
  ::ZeroMemory( &sa, sizeof( sa ) );
  sa.sin_family = AF_INET;
  sa.sin_addr.s_addr = ::htonl(INADDR_ANY);
  sa.sin_port = ::htons( (WORD)pPort );
  if( ::bind( Socket, (struct sockaddr *)&sa, sizeof( sa ) ) == SOCKET_ERROR ){
  }
}
上記のようにするとbindでエラーになるのですが何が原因なのでしょうか?
OSはXPでコンパイラはBCB5です。
0807デフォルトの名無しさんNGNG
0808793NGNG
>>794
まだ試してないが調べてみると getsockname()使ってもダメみたい。
コネクションが確立してからならそれに割り当てられたローカルIPアドレスを知ることができるらしいが
コネクション以前の段階で知りたいんです。
あとUDPだし。


>>795
どんなコードか教えてくらはいエロイ人!
getaddrinfo(NULL, 〜)だと得られるのはワイルドカードアドレス「::」で、これじゃダメなんだわし。
2001:100:ff::ac とかこんなのが欲しいのだわし。


Linuxだと /proc/net/if_inet6 を見ればいいんだが、Winsockの場合がわからんヽ(`Д´)ノ
0809デフォルトの名無しさんNGNG
>>800
 回避不可能です。大掛かりになっても良いなら、if が down したら
loopback device を up するようなプログラムを作って動かしておくとか、
やりようもあるでしょうけど。
0810デフォルトの名無しさんNGNG
>>806
(WORD) pPort っていう部分が非常に怪しい。
もし外すとエラーになるからキャストしてるんなら、
もう少し C の勉強をしたほうが良いと思う。
0811デフォルトの名無しさんNGNG
>>808
できれば口調はそろえてほしい・・・
0812デフォルトの名無しさんNGNG
>>810
着眼点がそもそも違いますね。
WORDはunsigned shortですよ。全然問題ないですねそこは。
0813デフォルトの名無しさんNGNG
TCP/IPでUDPのようにコネクトせずにrecvするとは可能でしょうか?
サーバー側ね
0814デフォルトの名無しさんNGNG
できね
0815デフォルトの名無しさんNGNG
>>806
BCBにはエラー内容は出てこないの?
0816デフォルトの名無しさんNGNG
>>808
じゃあ、IPHelperのGetAdaptersAddresses()あたりは?
0817デフォルトの名無しさんNGNG
>>806
pPortと言う名前からして、ポインタくさいんだがそこは大丈夫か?
まぁキャストしてるから、なんかのポート番号にはなってるんだろうが…。

あと、そこが問題ないとして既に使用しているポート、または解放直後の
ポートを使おうとしてるとかはない?
とにかく、errnoなりWSAGetLastErrorなりでエラーの詳細を確認してみ
0818デフォルトの名無しさんNGNG
しんでください
0819デフォルトの名無しさんNGNG
>>817
必死すぎ
0820デフォルトの名無しさんNGNG
>>819
 >>818
0821デフォルトの名無しさんNGNG
>>820
age荒しは>>818
0822デフォルトの名無しさんNGNG
>>802
今,hostsファイルに
10.0.0.1 hostname
と書いてあるとしたら
10.0.0.1 hostname hostname.local
という風にaliasを付け足せ。
そして, gethostname("hostname.local")で引く。

>>809
お前さんは一体何をしようとしているんだ?
0823810NGNG
>>812
pPort って書かれてるからポインタ臭いなとオモタワケです。
わざわざ (WORD) ってキャストする理由も他に無いだろうし。

あと >>817 が言っているように SO_REUSEADDR つけ忘れてて
2度目以降が失敗、という可能性もありますね。

非ポインタを pPort という変数にしたり、あそこに (WORD) なんてキャストを
入れたりすることから、C そのものにも慣れていないのでは、と思いました。
0824デフォルトの名無しさんNGNG
>>816
GetAdaptersAddresses()でいけまつた!

ただ取得したデータのフォーマットがよくわからんでし (´・ω・`)
ググルとIPv6マガジンのサイトがひっかりまつ。http://www.ipv6style.jp/jp/apps/20030711/20030711_p.shtml
が、アドレスファミリの表示とかはあるものの肝心のIPアドレスの表示処理がないでつ。

で、テキトウにあたりをつけてやってみたところ取得できますた。以下やっつけのコードの一部分でつ。

  struct sockaddr_in6 *in6;
  unsigned long len;
  IP_ADAPTER_ADDRESSES *adaddr;
  FILE *fp = fopen("/Prog/ip.txt", "w");
  GetAdaptersAddresses(AF_INET6, 0, NULL, NULL, &len); ← まずこれでサイズを取得するらすい
  adaddr = (IP_ADAPTER_ADDRESSES*)calloc(1, len);
  if (fp != NULL) {
    char tmp[64] = "";
    GetAdaptersAddresses(AF_INET6, 0, NULL, adaddr, &len); ← で、ここで情報を取得
    in6 = (struct sockaddr_in6*)adaddr->FirstUnicastAddress->Address.lpSockaddr; ← おもいきしテキトウにキャストしてみた
    inet_ntop(AF_INET6, &in6->sin6_addr, tmp, sizeof tmp); ← inet_ntop()無いっていわれたけど別のとっからソース持ってきた
    fprintf(fp, "|%s|\n", tmp);
    fclose(fp);
  }

これで WindowsCE(PocketPC 2003) で IPv6アドレスが取得できますたヨ。
ありがとうエロイ人!∩(`・ω・´)∩
0825793NGNG
>>824は >793からの流れでつ。
0826デフォルトの名無しさんNGNG
ファイヤーウォールがやってるような特定のポートを
つぶすのってどうしたらいいんですか?
0827デフォルトの名無しさんNGNG
>>826
受信してほっとく
または
受信しない
0828826NGNG
初心者的な質問で申し訳ないんですが
プログラムA、Bがあるとします
(A=特定のサーバーソフト、B=ファイヤーウォール)
Aがアクセプトで特定ポートで接続待機してて
外部から接続要求をいつでも受け付けるような状況で
Bが特殊な操作をすることでAのアクセプトからソケットを
生成することを阻止するようなことってできるんですか?
0829デフォルトの名無しさんNGNG
>>828
Bはルータなんだから出来ます。

IPプロトコル、ルーティングから勉強し直すといい。
Comer本でも読んで。
0830デフォルトの名無しさんNGNG
>>829
質問と無関係の返事してもしようがないような気が・・・

>>828
モダンなOSならカーネル側にそういった操作を支援する機能があって、
それを用いるのが一般的だと思います。
0831デフォルトの名無しさんNGNG
>>830
Windowsならフィルタドライバ、BSDならbpf(BerkleyPacketFilter)かな。linuxはしらね。
0832デフォルトの名無しさんNGNG
Linuxはiptables。
Solarisはipfilter。
0833802NGNG
>>822
既に alias を定義済みでしたので、gethostbyname()に alias を渡したところ
hosts 上の IPアドレスが返却されました。

結局 >>805 で指摘されたように
コンピュータ名と hosts ファイルのホスト名が同一だったため、
NETBIOS名に対応する IPアドレスが返却されていたようです。

ただ、コンピュータ名とホスト名に別の名前を定義するのは、
なんとなく違和感がありますので alias 使用することにしようと
思います。

質問に回答していただいた皆さんありがとうございました。
0834デフォルトの名無しさんNGNG
フラグメントを再構成するライブラリて知らない?
0835デフォルトの名無しさんNGNG
>>834
こんなのはどうかな?
http://www.packetfactory.net/projects/libnids/
0836デフォルトの名無しさんNGNG
>>835

nice!
えんがちょ
0837デフォルトの名無しさんNGNG
質問があります
for(;;){
  acsept(****);
  close(****);
}
と
for(;;){
  send(****);
}
だったら
OS、ネットワークの面でどっちが良いですか?
0838デフォルトの名無しさんNGNG
質問があります
for(;;){
  acsept(****);
  close(****);
}
と
for(;;){
  send(****);
}
だったら
OS、ネットワークの面でどっちが良いですか?
0839デフォルトの名無しさんNGNG
ミスりました。すいません。
要するにどっちが負荷が軽いですか?
0840デフォルトの名無しさんNGNG
>>839
自分で試せって。
0841デフォルトの名無しさんNGNG
>>835

クソありがとう
0842デフォルトの名無しさんNGNG
ファイル送受信を行うコードについてちょっと質問です。

buf[1024]のようにメモリ確保をしておいて、このバッファにファイルを随時読み出して
sendtoにぶちこんで送信しています。そこで少し疑問が出てきました。

光やADSL等の帯域のでかさ加減によって
sendtoにぶちこむbuf[1024]の大きさは調整したほうがより早く送受信が行える
なんてことはありますか?

よくソフトウェアでは「回線なにつかってる?」とか聞いてきますよね。
あれってこのバッファの大きさを調整してるんですか?
0843デフォルトの名無しさんNGNG
( ´,_ゝ`) プッ
0844デフォルトの名無しさんNGNG
>>842
MTU setsockopt ioctl とかでググレ
0845デフォルトの名無しさんNGNG
ライブカメラの映像をリアルタイムで相手に送るにはどうすればいい?
0846デフォルトの名無しさんNGNG
>>845
H.323とかリアルプレイヤーとかWMPとか色々あるが?
0847デフォルトの名無しさんNGNG
>>846
うーんそういうのじゃなくて
自分でプログラム作ってネットワークの勉強したいんですよね。
かなり前から猫でもわかるネットワークプログラムっていう本を買って
ネットワークを勉強してるんですが
こういう本にはそういう上級なテクニックは乗ってないんですよね
なにかそういうテクニックがのってるちょっとレベルの高い本で
お勧めのやつないですか?
0848デフォルトの名無しさんNGNG
RTSPやUDPでググれ
0849デフォルトの名無しさんNGNG
通信より画像処理の勉強をしたほうがいいのでは?
通信なんてただデータを送受信するだけだし
0850デフォルトの名無しさんNGNG
849はTCPで画像を送るおばかさん
0851デフォルトの名無しさんNGNG
え?なんでそう思うの?
0852デフォルトの名無しさんNGNG
リアルタイム画像転送だと画像コーデックも工夫が必要になるぞ
0853デフォルトの名無しさんNGNG
TCPで送ってもいいんじゃないの? なんかマズイ?
0854デフォルトの名無しさんNGNG
>>853
最近のNW環境なら、別にまずくない。
0855デフォルトの名無しさんNGNG
>>847
DirectShowで取り込むんだから、まずはそっち方面からでそ。
0856デフォルトの名無しさんNGNG
ストリーミングが上級なのかは知らんけど
確かにネットワークで実際のアプリ作成時のプロトコルの設計や
ノウハウをしっかり書いた本ってないよな。
0857デフォルトの名無しさんNGNG
3WAYハンドシェイクの実装の仕方とかわからんし
0858デフォルトの名無しさんNGNG
>>856
英語のならあると思うよ。売れないから翻訳されないだろうけど。

アドベンチャーゲームの作り方、なんて本ならいくらでも日本語で出てるのになあ。はあ。
0859デフォルトの名無しさんNGNG
>>857
3WAYハンドシェイクってコネクションを確立するときに自動的にやるものだから
Winsockの場合TCPソケットで「connect()」呼び出せば勝手にやってくれてんじゃないの?
普通プロトコルを実装するのはアプリ層のものでトランスポート層以下のプロトコルは
再実装しないんじゃない?

間違ってたらスイマセン。
0860デフォルトの名無しさんNGNG
JAVAのソケットから取り出した入出力ストリームを
Object***Streamをかぶせれば簡単に通信できて
ネットワークアプリケーションが楽に作れるような気がするんですがどうでしょうか?
プロトコルの実装とかC++との互換性抜きにすれば・・・
0861デフォルトの名無しさんNGNG
>>860
すまんが、何を言いたいのかさっぱりわからん。
0862デフォルトの名無しさんNGNG
>>860
いつまでも あるとおもうな コネクション
0863デフォルトの名無しさんNGNG
>>846
スレチガイ
ここはプログラム板
下手糞な茶々入れるなや

>>846
とりあえずDirectPlayとかのサンプル探してみたら?
それかUDPで作るとか・・・
0864デフォルトの名無しさんNGNG
>>863
お前の頭の中はどうなってるんだ?
0865デフォルトの名無しさんNGNG
>>864
中の人などいない!
0866デフォルトの名無しさんNGNG
同一ポートでTPCとUDPのデータ受けたりできるの?
0867デフォルトの名無しさんNGNG
>>866
試すがいい。
0868デフォルトの名無しさんNGNG
挙動以前に仕様が知りたいです。
0869デフォルトの名無しさんNGNG
>>866
>同一ポートでTPCとUDPのデータ受けたりできるの?
あえて言おう、"TPC"は無理だ。
0870デフォルトの名無しさんNGNG
>>868
ググレ。

で、TPCッテナニ???
0871デフォルトの名無しさんNGNG
>>866
TCPで開いたポート番号とUDPで(ry)は無関係だ
0872デフォルトの名無しさんNGNG
TCPやUDPのようなプロトコルは自作できないとか?
仮に出来てもルータに殺されそう
0873デフォルトの名無しさんNGNG
UDPつっても、recvする際はフラグメントしたパケットはきちんとひとつにしてから渡されるね。
0874デフォルトの名無しさんNGNG
> アドベンチャーゲーム
それって要するにエロgあqwせdrftgyふじこlp;@:「」
0875デフォルトの名無しさんNGNG
>872
他のレイヤーには干渉しないのがプロトコルの礼儀
0876デフォルトの名無しさんNGNG
>>860
ふつーRMIとかCORBAとか使うんじゃなかろーか。
0877デフォルトの名無しさんNGNG
>>860
つかObjectを簡単にbinaryにシリアライズできることを活用するべし
通信路はHTTPでも生TCPでもかまわない
0878デフォルトの名無しさんNGNG
UNIXネットワークプログラミング

                   ...入門
、という本を読みはじめた。
サンプルがたくさん載っていて、
解説を読んでる時間より、
キーボードをがちゃがちゃいわせている時間のほうが長い。

むつかしそうな構造体のメンバに
なにやら値を入れて、それから一連の関数を呼んで...
という手続きが、むつかしそうで...

だったのだが、
それは"儀式"のような定型化した一連の手続きであって

C++でいうところの
コンストラクタのような感じで
int を渡したら sockfd が返るような関数を書いて、
それを使いまわせば、楽ができるようだ。

通信自体もSOCK_STREAMだと、 データの送受は
単にsockfdを読み書きすればいいだけなので
チャットぐらいなら、とても簡単のようだ。

難しいのは、両端で動いているプログラム相互で
タイミングを合わせるとか、同期をとるとか、そのへんのようだ。

そのうち本物のUNPにも挑戦...できたらいいなと思う。
0879デフォルトの名無しさんNGNG
TPCにUNPですか
0880デフォルトの名無しさんNGNG
WindowsでプロセスごとのTCPパケットフィルタ作りたいんだけどさ、
ソケット使ってるプロセスってわかるもんなの?
0881デフォルトの名無しさんNGNG
すいません。
若干スレ違いですが、自分のUser-agentやIPアドレスなどを
表示してくれるページを教えてください。
以前、自宅サーバー関連のサイトで見つけた事があるのですが
忘れてしまいました。
お願いします。
0882デフォルトの名無しさんNGNG
>>881
http://www.ugtop.com/spill.shtml
0883デフォルトの名無しさんNGNG
>>882
どうもありがとうございました。
0884デフォルトの名無しさんNGNG
以下のようなソースで、HTTP GET を10回おこなう
処理を試したのですが、WaitForMultipleObject の
処理がいつまでたっても戻ってこない・・・なぜ?
スレッドの数を減らすとうまくいくときもある。
ちなみにrcvthread は connect, send, recv をして
引数で与えた番号をファイル名にして保存して終わるスレッド
です

int _tmain(int argc, _TCHAR* argv[])
{
unsigned short ver = MAKEWORD(1,1);
WSADATA wsadata;
HANDLE vthread[10];

WSAStartup( ver, &wsadata );

for( int i = 0; i < sizeof(vthread)/sizeof(HANDLE); i++ ){
unsigned int lth;
vthread[i] = (HANDLE)::_beginthreadex( NULL, 0, recvthread,(void*)i, 0, <h );
}

WaitForMultipleObjects( sizeof(vthread)/sizeof(HANDLE), vthread, TRUE, INFINITE );

for( int j = 0; j < sizeof(vthread)/sizeof(HANDLE); j++ ){
CloseHandle( vthread[i] );
}


WSACleanup();
return 0;
}
0885デフォルトの名無しさんNGNG
>>884
recvthread()の中身は?
あと、本物のコードではちゃんと全てのAPIエラーチェックしてる?
してなければまずはそれから。


大方GET requestの送信辺りでコケてて、でもエラーチェックして
ないのでそのまま受信待ちに入ってブロックしたまんま、とかじゃ
ないかと思うが。
0886884NGNG
>>885
確かに受信待ちに入ってブロックしたまんまでした
けどsend は成功しているみたい

受信待ちループが駄目っぽいのはわかった
以下がそれです
受信待ち失敗と終了を知ることができずにずっとrcvが失敗している
っぽいですね

while(1){
rcvlen = recv( sock, recvbuffer, sizeof(recvbuffer), 0 );
if( rcvlen <= 0 ){
printf( "receive complete\n");
break;
}
prebuffer = buffer;
buffer = new char[prelen + rcvlen];
memcpy( buffer + prelen, recvbuffer, rcvlen );
if( prebuffer ){
memcpy( buffer, prebuffer, prelen );
delete [] prebuffer;
}
prelen = prelen + rcvlen;
//printf( "total %d kbytes...%x\n", prelen / 1024, GetCurrentThreadId() );
}
0887デフォルトの名無しさんNGNG
質問させていただきます。
ファイル送受信プログラムくらいは作ったことがありますが、何しろ独学だったもので基本は無知なので
お恥ずかしい質問だと思いますが…。
こういうことはWindowsプログラムで可能でしょうか。


ある通信クライアントがあり、それがaaa.aaa.aaa.aaa:5000につなぐとします。
このコネクト先を捻じ曲げて、自作のプログラムに接続させることはできますでしょうか?

そしてその自作プログラムはaaa.aaa.aaa.aaa:5000につなぐことにより
中間に入り串のような役割を果たせるので、例えばデータの中身を送信前にチェックしたり、
受け取ったデータを改ざんしてクライアントに伝えたりすることができるようになると期待しています。


ノートン先生あたりがやっている気がするなー。と思ったので妄想してみました。
知っている方いらっしゃいましたら、やり方のとっかかりなどご教授お願いいたします。
0888デフォルトの名無しさんNGNG
hostsとか
0889デフォルトの名無しさんNGNG
hostsを書き換える案も考えてみたのですが、あれって
名前解決ようのファイルですよね?
それとも
127.0.0.1   aaa.aaa.aaa.aaa
のように、あるIPを別のIPに摩り替えることもできるのでしょうか?
0890デフォルトの名無しさんNGNG
ルータ設定せれ。
0891デフォルトの名無しさんNGNG
ルータは最後の手段かなと思ってまして。
偽者のws2_32.dllを作って、クライアントのフォルダと同じ場所におくってのが正解ですかね?
0892デフォルトの名無しさんNGNG
フィルタドライバ
0893デフォルトの名無しさんNGNG
>>887
アプリケーションを問わない通信の横取りや加工がしたいのなら、
>>831-832あたりにあるような、OSが持ってる支援機能を使うのが一般的。

Windowsに限定するなら、プロキシDLLの設置やAPIフック等で局地的に似たようなこともできるが、
スレ違いなので該当するスレで聞くか、自分で調べれ。
0894デフォルトの名無しさんNGNG
>>879
TPC は知らんが、UNPは文脈上 UNIX NETWORK PROGRAMMING (R・スティーヴン著)のことだろう。
>878が現在読んでるのは UNIXネットワークプログラミング入門 ということらしいから。
0895デフォルトの名無しさんNGNG
WSAAcceptに失敗し、WSAGetLastErrorでエラーを調べた
ところ「6」と・・・
エラーコード6ってなんですか?!
普通は10023とかそういう値じゃ・・
0896デフォルトの名無しさんNGNG
Error Lookup使っとけ
0897デフォルトの名無しさんNGNG
>>895
Win32のエラーコードかな。
だとすれば、VC++6.0付属のError lookupによると
>ハンドルが無効です。
だそうだが…
0898895NGNG
>896
>897
なるほど・・勉強してみます。

解決
単に初期化していない変数を引数に使ってたマヌケでした
0899デフォルトの名無しさんNGNG
ところで
WindowsでプロセスごとのTCPパケットフィルタ作りたいんだけどさ、
ソケット使ってるプロセスってわかるもんなの?
0900デフォルトの名無しさんNGNG
>>899
無理。
でもNEGiESやNetLimiterは実現している。

この矛盾の答えはいかに?
0901デフォルトの名無しさんNGNG
質問。
UDPでconnectした場合の挙動ってどうなるんですか?
TCPのエラー訂正なしのバージョンとしてコネクション型が使えるの?
0902デフォルトの名無しさんNGNG
UDPでconnectできませn
0903デフォルトの名無しさんNGNG
>>901
connectで指定した相手以外のパケットが捨てられて、
recvfromで拾えなくなるんじゃなかったっかな…
0904デフォルトの名無しさんNGNG
>>901
デフォルトの送信先を設定するだけでは。
0905デフォルトの名無しさんNGNG

プログラミングじゃないのですがn個の数字を基本選択法(選択ソート)で昇順に並び替えるアルゴリズムをフロチャートで示せ。
ってわかりますか?
0906スレ違いやでNGNG
>>905
お前が馬鹿なことは分かりました。
0907デフォルトの名無しさんNGNG
FORMをつかってファイルをアップロードできるホームページを
作ったんだけど、ここにVC++からアップロードしたい
なんかサンプルになりそうなサイトある?
0908デフォルトの名無しさんNGNG
http://rfc.net/rfc2616.html
0909デフォルトの名無しさん NGNG
JavaってJ2EEでサーバサイドな技術が盛り上がってますけど
サーバアプリケーションを自前で作るほうが楽じゃんって思うのは
激しく私だけでしょうか?
0910909NGNG
お馬鹿な事書いてごめんなさぁ〜い♪
0911デフォルトの名無しさんNGNG
>>907
\   そんなエサにクマー
  (・(ェ)・) 三=ズザー
0912デフォルトの名無しさんNGNG
>>909
運用とかスケーラビリチーとか考えるとそうでもない
0913デフォルトの名無しさんNGNG
>>909
どうせ Java なら >>912 の理由もあるし、JSP+J2EE でも別にイイや、ということでは。
フレームワークのオーバーヘッドも大したことないし。

検索エンジンのように本格的なチューニングが必要でかつ処理自体も重いものだと、
そもそも Java は使われないことが多いし・・・
0914デフォルトの名無しさんNGNG
>>913
> 検索エンジンのように本格的なチューニングが必要でかつ処理自体も重いものだと、
> そもそも Java は使われないことが多いし・・・

そりゃ、RDBだってJavaで書いてないって(w
0915デフォルトの名無しさんNGNG
え?OracleってJavaで作ってるんじゃないの?
0916907NGNG
あれからいろいろやってるけどギブアップ気味
どうにも難しいな
0917testerNGNG
IPv6 スレから飛んできたモノです。

winsock2 で IPv6 な UDP クライアントを作っているのだが、
connect() すると select() で read_fds に UDP ソケット入れると、
読み込み可能の有無にかかわらず、必ずタイムアウトしてしまう。

IPv4 だと動作する。 getaddrinfo() に AF_INET6 指定させるとだめのご様子。
select() はそういう挙動をするもの?教えてえらい人!

環境: Visual C++
0918デフォルトの名無しさんNGNG
>>917
口調は統一してください。
0919デフォルトの名無しさんNGNG
WinInet ← ってなんて読むんですかね? 適当な読み方でOKなのっすか?
0920デフォルトの名無しさんNGNG
うぃんあいねっと
0921デフォルトの名無しさんNGNG
>>920
わかりました。
0922デフォルトの名無しさんNGNG
ポートスキャナー作ったんですけど1秒につき1ポートしか調べてくれません
どうにか早くする方法はないでしょうか?
0923デフォルトの名無しさんNGNG
ポートスキャンって全ポートにconnectする奴?
256個くらいのスレッドでまわしたら?
0924名無しさん@そうだ選挙に行こうNGNG
実際にマルチスレッドで256個のスレッド作って
ルーターをスキャンしてみたんですけどちゃんとした結果が出ませんでした。
ほかのスキャナーでやったりスレッド数を64に落とすと80番ポートが開いてるのがわかるんですが、
256個のスレッドでやると80番ポートに反応しません
これってプログラムかなんかの上限が関係してるんでしょうか、それともハード的な問題でしょうか?
0925名無しさん@そうだ選挙に行こうNGNG
>>924
プログラムの問題。
0926名無しさん@そうだ選挙に行こうNGNG
256は普通に作りすぎ。ただそれによって不具合が発生するかどうかは知らないけど。
0927デフォルトの名無しさんNGNG
通報しておきました。
0928ヽ(´ー`)ノ ◆.ogCuANUcE NGNG
> どうにか早くする方法はないでしょうか?
nmap を使う。開発期間も短縮できてオススメ。
0929デフォルトの名無しさんNGNG
>>928
その顔文字嫌い
0930デフォルトの名無しさんNGNG
お前の好みなど誰も聞いてない
0931デフォルトの名無しさんNGNG
角煮の住人でショタスレがうぜーと思ってる奴だろう
0932デフォルトの名無しさんNGNG
>>930
カックイイ
0933デフォルトの名無しさんNGNG
send関数は、呼び出された瞬間にデータを送信してくれるのでしょうか?
0934デフォルトの名無しさんNGNG
いいえ。
0935デフォルトの名無しさんNGNG
それどころか、send から戻ってきても
まだ送信してないかも知れないかも知れない。
0936デフォルトの名無しさんNGNG
質問です。
クラサバでクラの方がいきなり強制で回線を切断したりすると
sendするとSIGPIPEが発生するんですが、そのシグナルをキャッチ
して、エラーのコネクションを通常処理で切りたいのですが
signal(SIGPIPE,hoge) としてもどのコネクションかわからず
回線切断できないのですが、どのようにしたら強制切断された
ソケットを特定&切断できますか?
ちなみにタイムアウト処理をいれているのでSIGPIPEを無視すれば
いいのですが・・・
0937デフォルトの名無しさんNGNG
sendする前に、どのソケットで作業しているか記憶させれば?
0938デフォルトの名無しさんNGNG
>>937
あ、なるほど。
無理に引数で渡さなくともグローバル使えばできますね?!
グローバル・・・
助言どうもです。
0939デフォルトの名無しさんNGNG
SIGPIPEは無視して別の方法にしたほうが簡単確実。
0940デフォルトの名無しさんNGNG
どうせsendでエラーぶっこくしね
0941デフォルトの名無しさんNGNG
まあsend/recvの返り値、errnoで調べるのがいいと思うけども、
sigaction使うとSIGPIPEが起きた時にsiginfo_tのsi_fdに保存してくれる実装はないのかね。
0942デフォルトの名無しさんNGNG
特定のOSでだけそんな素晴らしい実装をされても困る。
0943デフォルトの名無しさんNGNG
いろいろと参考になりました。
結局この形が一番無難なのかな?
実装したのは
(void) signal(SIGPIPE, SIG_IGN);
と、いう感じで無視しといて
int nRet = send(......)
if(nRet==-1)
{
//エラー処理
}
と、いう形ですね。
0944デフォルトの名無しさんNGNG
ていうか、無意味に上げちゃった・・・。
0945デフォルトの名無しさんNGNG
>>942
そんな感じだと思います。
一応、これ ttp://www.kt.rim.or.jp/~ksk/sock-faq/unix-socket-faq-ja-2.html#closed
0946デフォルトの名無しさんNGNG
>>944
そんな感じだってさ。
0947デフォルトの名無しさんNGNG
マゾです
0948デフォルトの名無しさんNGNG
>>945
>>942かよ!
0949デフォルトの名無しさんNGNG
そろそろ次スレ立てる? 970 あたりの人よろしく。
テンプレについての要望はそれまでにね。

>>6
> pc2はpc5に直しておけよな
> Port6 http://pc5.2ch.net/tech/kako/1052/10521/1052106444.html
> Port7 http://pc5.2ch.net/test/read.cgi/tech/1063035045/

これ忘れずに。あと、

> ネットワークプログラミングの基礎知識
> http://x68000.startshop.co.jp/~68user/net/

は http://X68000.q-e-d.net/~68user/net/ に移転している。それ以外の
リンクは大丈夫っぽい。
0950デフォルトの名無しさんNGNG
>>949
おい、おいそんなところのリンク貼るなよ、ぼけ
あんなのくずだぞ
0951デフォルトの名無しさんNGNG
次スレは990を越えてからで十分
0952デフォルトの名無しさんNGNG
>>950
何の粘着だよ
リンク先覗いたがサンプルが多くて結構使えるじゃん
0953デフォルトの名無しさんNGNG
>>952
粘着・・・?
0954デフォルトの名無しさんNGNG
力作ではあるんだが、
返り値見てないなど基本的なところがなってなかったり、
ちょっちピントハズレな記述もあるし。
あまり勧められないな、と俺も思う。
0955デフォルトの名無しさんNGNG
>>954
とりあえず動けサンプル
なんだからいいんじゃないか

まあそろそろ
きちんと全部見守る優秀なサンプル
ってのもほしいけど
ネット関係ない場合多いし
0956デフォルトの名無しさんNGNG
W.リチャード.スティーブンスさんの本が高いけど勉強になった。
0957デフォルトの名無しさんNGNG
950さんがテンプレ&サンプルHPを作ってくれるみたいです。
0958デフォルトの名無しさんNGNG
>>957
いいよ、作るから待ってなよ
あんな、ネットワークのネの字も知らないような奴が適当に書いたページ
じゃなくてしっかりしたものを書きます。
0959デフォルトの名無しさんNGNG
echo ftp http をお願いします。
select、thread、複合型まで作って頂けると大変ありがたい。
0960デフォルトの名無しさんNGNG
質問です。
1ヶ月単位一人1票で投票するシステムの作成を請け負ったんですが
IP・cookie以外で複数投稿を無効にできそうな仕組みは無いでしょうか?
上記2つの方法だと、どう考えても不完全そうなので。
いい案がありましたらご教授お願いいたします。
0961960NGNG
ごめんなさい
板違いですね・・・逝って来ます。
0962デフォルトの名無しさんNGNG
>>960
別に板違い気はしないけど。
XPのアクティベーションみたいなことをやってみるとかかなぁ。
0963デフォルトの名無しさんNGNG
>>954
> ちょっちピントハズレな記述もあるし。

たとえばどの辺? 初心者な俺が見ても、へぇとしか思わないけど、
知ってる人から見るとどこが変なのかなぁと思って。
0964デフォルトの名無しさんNGNG
できるなら同期、非同期両方ともつくってほしいですー
0965デフォルトの名無しさんNGNG
OpenSSL を使わない TLS クライアントもキボンヌ。
0966デフォルトの名無しさんNGNG
>>957
必ずこういうことを言う奴がいるよな
0967デフォルトの名無しさんNGNG
まあ本人も了承したことだし、スレの発展にはよかんべことさ
0968デフォルトの名無しさんNGNG
>>966
作ってくれるみたい (>>958) だから別に良いのでは?
0969デフォルトの名無しさんNGNG
>>963
APOP
0970デフォルトの名無しさんNGNG
CPU換装したら、ここで試せや↓
http://www5e.biglobe.ne.jp/~liquor/raytrace/
0971デフォルトの名無しさんNGNG
なんですか、あのソースは・・・
久しぶりにみたぞ、あんなのw
0972デフォルトの名無しさんNGNG
ソケットのブロッキングモードと非ブロッキングモードは、どう使い分けるんですか?
0973デフォルトの名無しさんNGNG
ブロックして構わないときはブロック。
0974デフォルトの名無しさんNGNG
基本はブロックで、データが来ない時にも別なことをしたいときは非ブロックって感じですか?
0975デフォルトの名無しさんNGNG
>>974
わかってるじゃん
0976デフォルトの名無しさんNGNG
僕はブロックの方がエレガントだと思うからブロック。
だけど、現実問題としては・・・・

データが来ない時は一生待ってください。
0977デフォルトの名無しさんNGNG
select使えばいじゃん
0978デフォルトの名無しさんNGNG
どれでもそうだけど、selectですぐ同時処理上限が見える
0979デフォルトの名無しさんNGNG
selectって30ユーザくらいしか受付できへんの?
0980デフォルトの名無しさんNGNG
selectはunlimit次第でいくつでもいけるが一定数超えると無駄が多すぎて非効率的になる。
空振りが多すぎるんだな。だから非同期APIとかに切り替えるべし。
0981デフォルトの名無しさんNGNG
dev/poll、epoll、kqueueはいつ一本化されるの?
0982デフォルトの名無しさんNGNG
kqueue以外は実質死滅してるので無問題
0983デフォルトの名無しさんNGNG
非同期処理と非ブロッキングモードってどう使い分ければ良いの?
0984デフォルトの名無しさんNGNG
使い分けるも何もそもそも目的が違う
ところで次スレってもう立ってたっけ?
0985デフォルトの名無しさんNGNG
>>980
> 空振りが多すぎるんだな。

違うよ。
多重プロセス、マルチスレッド対応のselect(2)なら問題ない。

select(2)の一番の問題は、bitmaskの処理が重い。
>>3のhttp://www.kegel.com/c10k.htmlに論文へのリンクがある。
0986デフォルトの名無しさんNGNG
>>983
真剣に聞いてるなら、過去スレ読んでみない?
HTML化待ちで読めないかな?

その話題、なんだか知らないけど荒れるんだよ…
0987デフォルトの名無しさんNGNG
GUIアプリでブロック型を採用するのはちょっとなぁ・・・。
0988デフォルトの名無しさんNGNG
スレッド分けてブロックさせとくのが1番簡単なんじゃない?
0989デフォルトの名無しさんNGNG
数百個のスレッド作るのはちょっと・・・
0990デフォルトの名無しさんNGNG
ほとんどの場合は数百もコネクションを維持しとく必要ないでしょ?
0991デフォルトの名無しさんNGNG
990を越えたし、次スレ立ててくる。
0992デフォルトの名無しさんNGNG
次スレ
http://pc5.2ch.net/test/read.cgi/tech/1090385857/
0993デフォルトの名無しさんNGNG
>>985
空振りが多いからスレッドに分けざるを得ないというのは
selectの明らかな欠点だし。
それにオーバーヘッドを比較するならselect v.s. pollでないの。

ところでselectとepoll/kqueueって計算量って前者はO(n), 後者はO(1)であってる?
0994デフォルトの名無しさんNGNG
epoll は知らないけど、kqueue は O(1) ってどっかに書いてあったな。
select/poll は見た感じが O(n) ぽいよね。

以上、僕の感想ですた。
0995デフォルトの名無しさんNGNG
カーネルからのシステムコールならそうなるんじゃないのかな
0996デフォルトの名無しさんNGNG
あ〜今日も残業か...
0997デフォルトの名無しさんNGNG
記念カキコ v(^o^*)
0998デフォルトの名無しさんNGNG
998
0999デフォルトの名無しさんNGNG
999
1000デフォルトの名無しさんNGNG
終わり
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。