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

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん ◆TCP/IPmFAM NGNG
主にソケットに関しての質疑応答スレです。

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://pc5.2ch.net/tech/kako/1052/10521/1052106444.html
Port7 http://pc5.2ch.net/test/read.cgi/tech/1063035045/
Port8 http://pc5.2ch.net/test/read.cgi/tech/1073560271/
Port9 http://pc5.2ch.net/test/read.cgi/tech/1080658835/
Port10 http://pc5.2ch.net/test/read.cgi/tech/1090385857/

関連リンクは>>2-10辺り
足りなかったら適当に付け足してね
0075デフォルトの名無しさんNGNG
>>73
そういうのはレイヤが違います。
メーラ開発スレ(あるのか?)とかjavaスレへでもいってください。

0076デフォルトの名無しさんNGNG
>>70
無駄とは思えないが
0077デフォルトの名無しさんNGNG
>>76
理由は?
0078デフォルトの名無しさんNGNG
>>77
圧縮の手間を省ける
0079デフォルトの名無しさんNGNG
>>78
ttp://megumi.delta-z.org/~yajiman/no-heavy/flash/unix.swf
見たこと無いのかな
0080デフォルトの名無しさんNGNG
>>30は>>22よりかなり馬鹿なことは判った。

>>22はカマー本読んでTCP/IPの基本的なところを勉強してね。
プログラミングスキルは問題ないみたいだから。
ちなみにあなたの懸念は的中です。順番さえね…
0081デフォルトの名無しさんNGNG
>>74
HEADで更新チェックしてるから負荷は小さいはずというのは
あまりなりたたないね。
つーか更新チェックならAccept-Encoding: gzipすべきでないってことか
0082デフォルトの名無しさんNGNG
>>80
Comerの本を読めというのがとっくに既出なのに今頃出てきて何言ってんだ……。

0083デフォルトの名無しさんNGNG
>>82
みんな無視してるのに今頃出てきて何言ってんだ……。
0084デフォルトの名無しさんNGNG
80から82はまだそれほど時間たってないだろ。
ヒキコモリ>>83的には半日もあれば既に誰もがスレチェックずみなのかも知れんが。
0085デフォルトの名無しさんNGNG
粘着かよ
0086デフォルトの名無しさんNGNG
せめてageろ
0087デフォルトの名無しさんNGNG
仮想ストレージに関する提案。

ストレージはデータの保存要求を受け付けるとすぐさま
ネットワーク上の別のストレージへデータを転送する。

この要求を受け付けた別のストレージは、すぐさま
ネットワーク上の別のストレージへデータを転送する。

これを繰り返すことでデータはストレージではなくネット上に配備されることになる。

即ち、受け付けるデータ分のメモリーがあれば、無限の仮想ストレージを構築できる。

偉大なるネットワークに感謝。
0088デフォルトの名無しさんNGNG
suretigai
0089デフォルトの名無しさんNGNG
MFCのCAsyncSocketを用いて
ソケット通信プロセスを作っています
サーバ、クライアント両方からsend()すると
両者の送信タイミングはかなりずれてるのに
遅れてsend()したソケットは
自分が送信したあとでないと受信しない現象が発生します
どうしてでしょうか?
よきアドバイスをよろしくお願いします。
0090デフォルトの名無しさんNGNG
>>89
ストリーム型でかつ即座に送信すべきデータが流れるソケットならば、
ソケットトオプションでTCP_NODELAY あたりを指定してみては?
0091デフォルトの名無しさんNGNG
テンプレに挙げられてる「WinSock2.0プログラミング」が絶版のままなんですけど、
和書でこれに代わる様なものはないのでしょうか?
0092デフォルトの名無しさんNGNG
>>91
http://pc5.2ch.net/test/read.cgi/tech/1089492835/
0093デフォルトの名無しさんNGNG
MFCのCAsyncsockを用いてソケット通信を行っています。
1対1の通信で、サーバがメッセージを投げそれの返信を
クライアントが返す通信を10msec間隔で繰り返しています
このときランダムに(強いて言えば3万トランザクションに1回)、
どちらかで200強msecの送信か受信遅延が発生しているようです
どうしてでしょうか?
心当たりのある方、お助けください。
0094デフォルトの名無しさんNGNG
そんなもんだ
0095デフォルトの名無しさんNGNG
MFCのCAsyncSocketを用いて
ソケット通信プロセスを作っています
今度はサーバからsend()でメッセージを送信し
クライアントはそれに対してsend()で返信します
これを10msec間隔でおこなっていますが
30000回に1回くらいのわりあいで
どちらかの送信または受信遅延が発生します
どうしてでしょうか?
よきアドバイスをよろしくお願いします
0096デフォルトの名無しさんNGNG
>>94
そんなもんなんですかね〜
あ〜何とかなりませんかね〜
どうも受信遅延が怪しいのですが・・・
0097デフォルトの名無しさんNGNG
まあええことよ
0098デフォルトの名無しさんNGNG
>>96
プロトコル設計の段階で道を誤っていると思われ。
0099デフォルトの名無しさんNGNG
そもそもネットワーク技術を正しく理解していないような気がするが。
0100デフォルトの名無しさんNGNG
> MFCのCAsyncsockを用いて

今時何故…
こんなの考える気力も起きない…
0101デフォルトの名無しさんNGNG
>>95
リアルタイム制御系かあるいは音声かVideoを載せてるか、どっちかか?

10msec間隔で送受信するような処理をMFCで実装しようとしてる時点でDQN決定!
遅延が許容できないのならwin32のWSAEventSelectでも使え、
ってwinsockの専門書に英語で書いてあるぞ。
0102デフォルトの名無しさんNGNG
>>95
MFC/非MFCを問わず、Winsock2 のメッセージベースの非同期ソケットはメッセージポンプが
何らかの事情で滞ると、ネットワークの状況に関わらず遅延が生じてしまう。

専任のスレッドで select で待つか、I/O コンプリーションポート(ReadFileでコンプリーション
ルーチンを指定する)のが吉。
0103101NGNG
>>102
I/O コンプリーションポート、最高パフォーマンスだが難しくねか?
オイラまだキッチリ実装されたサンプルソース見たことねえ
あれば教えてくれ
0104デフォルトの名無しさんNGNG
>>103
難しいっていうか面倒なだけのような。トライアンドエラーとかしたくないコードになるし・・・
漏れは結局同期IOでプロトタイピングしてデバグ済ませて状態遷移を整理したうえで、
あらためてIOコンプリーションポートで実装しなおした。

IO Queueing とか企むとプログラムに不要な複雑さが増して死ねそうだったので、
結局パフォーマンスは出ていない模様(w

ところで .NET Framework では、メッセージベースじゃなくてI/Oコンプリーションポートの
方が非同期IOの基本になってるけど、皆これ使うかなぁ・・・
0105デフォルトの名無しさんNGNG
サーバ側のrecvの返値が、クライアントから送ったデータのサイズになりません。
つまり全部送られてきていないみたいなんです。
どういう原因が考えられますでしょうか。
0106デフォルトの名無しさんNGNG
>>105
まだデータが残っている。
0107デフォルトの名無しさんNGNG
>>105
それは正常な動作です。
ソケットプログラミングの入門書でも読みましょう
0108デフォルトの名無しさんNGNG
>>106
どこに?何の?
0109デフォルトの名無しさんNGNG
ひょっとして何回もrecvする必要があるんですか?
いちおう、受信バッファのサイズは十分とっているんですが。
0110デフォルトの名無しさんNGNG
>>109
だから>>1-のリンク見ろよ
0111デフォルトの名無しさんNGNG
>>109
あたりまえだ
0112デフォルトの名無しさんNGNG
結局あなたたちは、質問してきた初心者をバカにすることしかできないんですね。
0113デフォルトの名無しさんNGNG
>>112
どの書き込みの人がバカにしているの?
0114デフォルトの名無しさんNGNG
ばーか ばーか
0115デフォルトの名無しさんNGNG
>>105
今どきIPv6経由しないネットがあると思うか?
0116デフォルトの名無しさんNGNG
そりゃあるだろ。
第一IPv6と>>105は全く関係ないぞ。
0117 ◆FIcNi4f8js NGNG
パケット分割されないようにオプション付けて送信すれば?
0118デフォルトの名無しさんNGNG
>>117
どうやって?
0119デフォルトの名無しさんNGNG
>>112
というか「FAQ読め」と思う。

ネットワークの世界では自分の都合だけでAPIを決められないから、
>>109なんてことは当たり前にある。初心者がどれだけ不合理に思っても。
それを理解するのがネットワークプログラミングの始まり。
0120デフォルトの名無しさんNGNG
マルチクライアントのサーバーを作ってるんですが、
recvの返値が0という方法以外ですべてのデータが送られたことを確認するには
どうしたらいいのでしょうか。
0121デフォルトの名無しさんNGNG
最初にレングスを送る
0122デフォルトの名無しさんNGNG
それだな
0123デフォルトの名無しさんNGNG
やっぱり長さの情報を送るのがベストですか。
何か良い関数があればと思ったのですが・・・。
ともかくありがとうございました。
0124デフォルトの名無しさんNGNG
MFCで、FTP受信をする以下の様なテストプログラムを作成したのですが
実際のファイルサイズよりも、かなり少ないサイズが表示されてしまいます。
正しいファイルサイズを表示させるにはどの様にすればよいのでしょうか?

CInternetSession IntSession("Test");
CFtpConnection *pFtpCon;
CInternetFile *pFile;

pFtpCon = IntSession.GetFtpConnection("ServerName", "UserName", "Password");
pFtpCon->SetCurrentDirectory("CurrentDirectory");
pFile = pFtpCon->OpenFile("FileName", GENERIC_READ);

TRACE("size = %u\n", pFile->GetLength());

pFile->Close();
if(pFile != NULL){ delete pFile; }
IntSession.Close();
0125デフォルトの名無しさんNGNG
放置されているのでage
0126デフォルトの名無しさんNGNG
> かなり少ない
ってどのくらいよ?
0127124NGNG
>>126
え〜と、例えば1MB超えるようなデータでも 16824バイトと表示されてしまいます・・
というより、16824バイト以上のファイルは必ず、16824バイトになってしまいます。
FFFTPで見てみると、正しいサイズが表示されていますので、プログラムの問題だと思うのですが・・
0128デフォルトの名無しさんNGNG
結局あなたたちは、質問してきた初心者をバカにすることしかできないんですね。
0129デフォルトの名無しさんNGNG
結局あなたは、自分で一つも調べようとしないんですね。
0130124NGNG
>>128
自分は皆が呆れるほど、何か根本的な部分で間違いを犯しているのでしょうか?
本当にわからないので、何方かご教示して頂けるとありがたいのですが・・
0131デフォルトの名無しさんNGNG
>>130
1MB分受信できているの?
0132124NGNG
ちなみに、>>125で上げたり、途中でちゃちゃ入れたりしているのは自分ではないです。
0133131NGNG
受信はしていないのか。
0134デフォルトの名無しさんNGNG
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vclib/html/_mfc_cftpconnection.3a3a.openfile.asp
と書いてあるけど、どうなん?
0135デフォルトの名無しさんNGNG
レスが早くつくようにageてやったのに、なんだその言いぐさは・・・
0136デフォルトの名無しさんNGNG
ageてやったのにだって( ´,_ゝ`)プッ
0137124NGNG
>>131
OpenFile()の時点で受信しているのではないのですか?
0138デフォルトの名無しさんNGNG
>>134を読め
0139デフォルトの名無しさんNGNG
MSDN> アプリケーションは OpenFile を使ってファイルを開いてから、
MSDN> CInternetFile::Read を使用します。
0140124NGNG
>>135
すみません・・ 上げて頂いたお陰でレスが付いた事は感謝しています。

>>134
Read(), Write(), Close(), FindFile() 以外呼べないんですか・・・
ではファイルサイズはどうやって取得するのでしょうか?

ちょっと、またテストプログラム書いてから来ます。
0141デフォルトの名無しさんNGNG
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vclib/html/vcrefcinternetfilegetlength.asp
まあこれを見る限りではファイルサイズを得るには>>124でいいみたいだけど(%uを使っているのは別として)
0142デフォルトの名無しさんNGNG
サーバがSIZEコマンド対応してないか、
ls -lの結果がCFtpConnectionでパーズ出来ない形式なんだろう。

別のサーバで試してみたら?
いずれにせよ、ftpでファイルサイズが必ず取得できると
仮定したプログラムはまずい。サーバ固定でないのなら。
0143124NGNG
>>142
なるほど! 勉強になりました!
要するに、FTPではサーバによってはファイルサイズが取得出来ないという事ですね。

ファイルサイズが取得出来ないので、カッコ悪いですが、こんな感じにしました。
char tmp[128];
DWORD size;
vector<char> buf;
while(size = pFile->Read(tmp, sizeof(tmp))){
for(int i = 0; i < size; ++i){ buf.push_back(tmp[i]); }
}
0144デフォルトの名無しさんNGNG
だせー
0145デフォルトの名無しさんNGNG
>>144
スマートな方法ありますか?
0146デフォルトの名無しさんNGNG
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vclib/html/_mfc_cftpfilefind.asp
こんなのは?
0147デフォルトの名無しさんNGNG
>>124
また荒しが粘着しているみたいなんで放置。
0148デフォルトの名無しさんNGNG
147=某スレの88
0149デフォルトの名無しさんNGNG
すみません。質問させてください。
ネットワークプログラミングっていうのは、一番上の層での話ですか?
業務
〜〜〜〜〜
基盤
〜〜〜〜〜
ネットワーク
って感じで層構造になっているじゃないですか?
それの一番上の層での話ですか?
0150デフォルトの名無しさんNGNG
OSIの下の方
0151デフォルトの名無しさんNGNG
え?下の方?
情報システム板で聞いたら、ネットワークエンジニアはOSIの下層をやるから
プログラミングなんて関係ない、と聞いたのですが・・・。
0152デフォルトの名無しさんNGNG
それはネットワークエンジニアの話だろ
0153デフォルトの名無しさんNGNG
>>151
くだらん事に頭使うヒマがあったら仕事しろ
0154デフォルトの名無しさんNGNG
>>152
はい。ネットワークエンジニアのことです。
初心者ですまそ。
0155デフォルトの名無しさんNGNG
とりあえずソケット使ってれば
ネットワークプログラミングしてるって言えなくも無い
0156デフォルトの名無しさんNGNG
いや、来年就職活動です。
業務系・基盤系・ネットワーク系のどれが自分にあってるのか、模索してます。
0157デフォルトの名無しさんNGNG
あんまり厳密にわけなくても・・
大きくない会社だとなんでもやらされるし
0158デフォルトの名無しさんNGNG
>>156
なんにしろ、プログラマー板でやれよ
0159デフォルトの名無しさんNGNG
>>151
下の層だからプログラミング関係ないという事はないだろ。
スイッチングHUBだってソフトウェアで動いているんだから。

機械のお守りするだけの人ならプログラミングは必要ないけどね。
0160デフォルトの名無しさんNGNG
>>149
一番上は political or religious layer だろ。
0161デフォルトの名無しさんNGNG
>>160
この馬鹿野郎が
0162デフォルトの名無しさんNGNG
どこにでもいるんだな、>>160のように空気の読めない奴が。
0163デフォルトの名無しさんNGNG
すみません。最後に一つだけ。
では、ネットワークエンジニアだったら、プログラミングはあまり関係ないということですか?
0164デフォルトの名無しさんNGNG
情報システム板に行け。あそこは就職情報の板だから。
http://science3.2ch.net/infosys/
0165デフォルトの名無しさんNGNG
ネットワークエンジニアは大雑把に分けて
1. ソフト(プログラム)を作る人
2. ハードを作る人
3. 1.2.を設置・運用する人
に分類されていてプログラミングをするのは1.の人だけ。
だから仕事によってはプログラミングする。
0166デフォルトの名無しさんNGNG
>>165
ありがとうございます。ネットワークの設計・構築・運用をやってみたいと思っています。
ということは3.ですね。
みなさん、お邪魔しました。どうも!
0167デフォルトの名無しさんNGNG
1.2.は通信機器を開発してる人ってこと?
で、3.がNEか。
0168デフォルトの名無しさんNGNG
1.2.はあまりネットワークエンジニアとは呼ばないんじゃ?
0169デフォルトの名無しさんNGNG
>>168
あくまでも、ネットワーク関連に携わる人の種類、ってことだろ。
0170デフォルトの名無しさんNGNG
れんさば屋は3か
0171デフォルトの名無しさんNGNG
>>170
サーバ管理者であって、ネットワークエンジニアじゃないだろ。
0172デフォルトの名無しさんNGNG
ネットワークエンジニアの定義がわからん
つーかスレ違いsage…
0173デフォルトの名無しさんNGNG
プログラミングってキーワードを出しまくってる割に選ばなかったってことは、
>>166は苦手なんだな
0174デフォルトの名無しさんNGNG
>>173
再び参上。

そうなんです。苦手というか興味がないというか。
■ このスレッドは過去ログ倉庫に格納されています