ネットワークプログラミング相談室
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001名無しさん@お腹いっぱい。
NGNG0883kevin hikinik
NGNGtracertがUDPを利用してるとかICMPを利用してるとか・・・
どゆこと?
プロトコルに基づいてる!?
コードになりゃみんないっしょじゃんか・・・。
用はソケットなりストリームなりを使えばいいだけじゃん。
システムが全治2週間ほどあるんで、見ようにも見れんし。
プロトコル専用のヘッダやライブラリがあるわじゃないっしょ?
プロトコルに基づいて実装するってどゆこと?
0884デフォルトの名無しさん
NGNGマジなのか?
もう少し勉強してから質問したほうがいいぞ。
それか、質問する時の言葉遣いを覚えろ。
0885kevin hikinik
NGNG勉強いっぱいしました。
実装してないだけだい!
頼むから教えろ。
0886デフォルトの名無しさん
NGNG知るにはどうしたらいいの?
0887デフォルトの名無しさん
NGNG小出しにして送信できたバイト数をカウントしなさいYO!
0888デフォルトの名無しさん
NGNGプロトコルをプログラミング言語か何かだと誤解してるような。
0889デフォルトの名無しさん
NGNGプロトコルという言葉の意味を考えてみよう。
0890デフォルトの名無しさん
NGNG小出しにすると送信速度遅くならない?
0891デフォルトの名無しさん
NGNG「PGなのに知らなかった事を潔く質問してみるスレ」で解決できたんじゃないの?
http://pc.2ch.net/test/read.cgi/prog/1002086817/643-656
0892デフォルトの名無しさん
NGNG本当は資格の勉強なんかしたくないんだけど簡単なら取っちゃおうかなと思ってるのですが・・
0893( メ ´Д`)<893 ◆HHJeUSD6
NGNG0894質問。
NGNGrecvの方を固定サイズにした場合、2回以上send
すると正しい文字列でrecvできませんよね?
これを正しく受信するにはどうしたらよいですか??
場合わけしようにもかなりあるような気がして。
send回数は1〜何回でも連続でするものとします。
0895デフォルトの名無しさん
NGNG可変長のデータをやりとりしたい時は、
最初に長さを送るのが簡単だとおもいます。
それか受けとった後に'\0'を探して…
0896質問。
NGNGありがとうございます。でも、
他の方法ってありますか?
0897デフォルトの名無しさん
NGNG結果をグラフで逐次表示したいんですが何か良い方法を
教えて下さい。
0898デフォルトの名無しさん
NGNGそれはネットワークプログラミングと、どのような関係がありますか?
0899デフォルトの名無しさん
NGNGいまいち言いたいことが分からんけど。
(1)相手が1回目のデータをすべて受信できたことを確認してから2回目のデータを送る
(2)データサイズを固定長にしておく
(3)データを見ればどこで切れるか分かる構造にしておく(データサイズを送る、データを\0で区切る、など)
の、どれか。
0900質問。
NGNG説明不足ですみません。
sendする文字サイズは文字の長さなので可変長です。
recvする文字サイズは固定長です。
んでもって、sendとrecvが1:1に同期しながら
動かしているんで・・・。(^^;
ありがとうございました。
0901デフォルトの名無しさん
NGNGsendとrecvが1:1に同期しながら動く?
それは、そもそも無理では?
1回のsendで送ったデータが、2回以上のrecvに分割されるかもしれない。
2回のsendで送ったデータが、1回のrecvで受け取れるかもしれない。
このへんは何も保証されないので、データサイズを送信するなりしなければ、解決になりません。
0903デフォルトの名無しさん
NGNGきっと、計算プログラムとグラフプログラムがあって、その間を
ネットワークで繋いで逐次表示させたいんだよ。だけど、tcp/ipか
udp/ipか、HTTP tunnelingか、RPCかDCOMかの何を使えばいいかで
迷っていたりするんだよ(ワラ。
0904デフォルトの名無しさん
NGNGUDP/IP っていう言い方、あんまし聞かないな・・・
とりあえず TCP でいいんじゃない?
0905905
NGNG通信対戦っぽいソフト作ってるんですが、
HTTPプロキシを通して出来ないかと試してみたら、
POSTが効かなかったり、バッファリングしたりしやがりまして、
なかなか上手くいかないんです。
なんか良い方法をご存じの方いらっしゃらないでしょーか?
1回データをやりとりするたびに
HTTPを繋いだり切ったりするしかないんでしょーか?
0906デフォルトの名無しさん
NGNGとりあえずWin+cygwin/Winsockを考えているのですが。
0907デフォルトの名無しさん
NGNGOSが高速でも、ネットワーク回線自体の伝送速度で制限を受けるので、意味ないです。
10Mbps の回線では、どんなOSを使っても 10Mbps しか出ないのです。
・・・それとも、ネットワークとは関係なく、単にCPUパワーを得たいだけ?
0908デフォルトの名無しさん
NGNGWindows2000Server+Winsock2+完了I/Oポートを使って組むやり方が
Windowsだと最もパフォーマンスが高い。
マルチプロセッサ対応もさせやすいのでCPU毎に得意な処理を分散可能だ。
ただしライセンス料もべらぼうに高い(w
0909908
NGNGクライアントサイドなら組み方を問題にするべきでOSはなんでもいいと思うが
0910デフォルトの名無しさん
NGNG>Windowsだと最もパフォーマンスが高い。
これをUNIXでやる場合、各ポートをselectでチェックする処理を
ループでぐるぐる回すの?なんか遅そうだな...
0911デフォルトの名無しさん
NGNGなんかミスリーディングな言い方してるけど、
selectすると一度に全部のポートがチェックできるよ。
0912デフォルトの名無しさん
NGNGあれがイヤ。
0913デフォルトの名無しさん
NGNG0914無党派さん
NGNG固定の奴でも128〜4096はあるし、変更できるUNIXもあるが…
0915デフォルトの名無しさん
NGNGMacOS X
0916デフォルトの名無しさん
NGNGそれだけは絶対にない
0917908
NGNG自分がMSマンセーなのでWindows2000/XP
むしろUnix系は良く知らんので判断できん。
>>911
私未だにselectの使い方がよく判らんのですが。
複数のソケットをチェックできても、どのソケットが反応したのか
調べる効率的な方法があるんでしょか
ちなみに完了I/OポートではなくてI/O完了ポートAPIだった。
0918デフォルトの名無しさん
NGNGパラメータはtimeslot以外ほとんどNULLにすればいいんじゃない。
ブロッキングをいちいち気にしてられないよ。
selectってようはエラーがないか調べるだけでしょ。
0919デフォルトの名無しさん
NGNG0920デフォルトの名無しさん
NGNG複数のソケットに対する、普通は受信を待つために、使うもの。
0921デフォルトの名無しさん
NGNGソケットに限らない
0922デフォルトの名無しさん
NGNGつうかselectを使わないための完了IOポートでしょ?
0923デフォルトの名無しさん
NGNG苦肉の策
0924デフォルトの名無しさん
NGNGSolarisちがうかな?
>>923
マルチスレッド使うときと使えないときで、非同期処理はどう違うのさ?
0925デフォルトの名無しさん
NGNGマルチスレッドなし → メッセージループでメッセージ待ち
0926デフォルトの名無しさん
NGNGつか、そのマルチスレッド有りは「非同期」やなく「同期」やとおもうんだが。
0927デフォルトの名無しさん
NGNGdispatcherに専用threadがいるだけで、
その先はportにbindされた非同期methodをpoolされていたthreadに実行させる、
って実装を想定しているんじゃないかな?
実際、I/O完了ポートAPIだって、kernel/dll内threadがdispatchしているわけでしょう?
>>920
file, socket, diviceなどの複数のstreamが、
readableか、writableか、例外が起きてないか調べます。
真であるstreamがあれば復帰して、bit maskが1になります。
acceptで受けるような接続要求も検知できます。(inetdで使っている)
>>923
そんなことはない。
素朴にどんどんthreadを生成すると、SunOS 5の様に強力なthreadをsupportするOSでも
bottle neckになるから、複数のstream待ちを、何本かのselect/dispatcherにまとめて、
別のthreadに管理させる、ってのは、highly multi-threadedなprogrammingの常套手段。
まあ、普通のprogrammerは、滅多にそういうsystem設計する機会ないと思うけど、
知らないし、bottle neckを調べられから、hardwareを増強させて逃げるdesignerも多い。
0928デフォルトの名無しさん
NGNG横文字使いすぎでみっともない
0929908
NGNGプールしておいたいくつかのワーカスレッドに対して行うって事で良いのかな?
これによって平行動作するスレッドの数を制限する事には賛成。
無制限にスレッド作りつづけるとWindowsならいづれブルースクリーンだ。
つまりこの実装を強力にサポートするI/O完了ポートがあるWindows最高(w
0930デフォルトの名無しさん
NGNGおよそ18Kバイト分のパケットを受信したあたりからデータが所々おかしくなって
しまいます。虫食い状態です。recvfromで受けた直後でデータを見てみたのですが
その時点で既におかしいってことは、あとはどこらへんを調べていったらいいんで
しょうか?はまってます。(泣)
(ちなみにLinuxで問題なく動いていたものをWinsock2(Windows)に移植
したものです。)
0931デフォルトの名無しさん
NGNGちなみにrecvfromの受信バッファの大きさは十分大きくしたり毎回0リセットしてみたり
色々やってみましたが症状変わりませんでした。
0932デフォルトの名無しさん
NGNG送信側はだいじょぶ?
0933デフォルトの名無しさん
NGNG同じサーバに対してLinuxからアクセスした場合は問題ないんです。(とほほ)
VisualC++6.0なんですが、昔recvfromでSin_Zeroに誤ったデータを書いてしまう
バグがあったようなのですが、パッチのSP2は既にあてているので環境は問題無さ気
なんですけどね。ここの皆さんはそういう経験は無いでしょうか?やっぱこんなの
俺だけかな(藁
0934デフォルトの名無しさん
NGNG単にUDPの制限(仕様)とかやなくて?
>927
http://state-threads.sourceforge.net/docs/st.html
つまり、こういうこと?(/.でみつけた。)
0935デフォルトの名無しさん
NGNGその後色々調べて見たところサーバからは正しいパケットが送信されている事が
モニターツールにより分かりました。つまりクライアント側の問題であると…。
さらに、クライアント側のイーサーのインターフェースをモニタリングするとなんと
UDPでなくIPパケットとしか認識されてませんでした。何故だぁ…(怒)
IPパケットが山のように見えます。(藁
ちなみにTCP,ARPのレイヤーはちゃんと見えてます。また他のUDPを使うソフト
で試しに通信してみるとUDPはちゃんと通りますのでUDPが通らないという事では
ないみたいです。クライアントソフトの問題ということになるのかな…謎
0936デフォルトの名無しさん
NGNGつーかよ、
> また他のUDPを使うソフトで試しに通信してみるとUDPはちゃんと通りま
> すのでUDPが通らないという事ではないみたいです。
の時によ、
> さらに、クライアント側のイーサーのインターフェースをモニタリングするとなんと
> UDPでなくIPパケットとしか認識されてませんでした。何故だぁ…(怒)
すると、どうなるんだ?
「UDPパケット」と表示されるのか? 「IPパケット」と表示されるのか?
どうせ、「他のUDPを使うソフト」でも「IPパケット」と表示されていて、
単に、UDPパケットだから、Winが破棄しちゃう事があるだけだろ。
そのプログラムにパケットの再送機構は含まれているわけ?
なければ、たまには虫食いになるのが正しい動作。
0937デフォルトの名無しさん
NGNGパケットが途中で失せたり、順序がごっちゃになったりしても
UDPは関知しない(ので、対策は上位レイヤーでしろや)、
ちゅうUDPの仕様を理解した上で、UDPを利用してる?
つーかさ、なんでUDPなわけ?TCPの方がいいと思うが
>データが所々おかしくなって
CRCでもつけて、おかしいところを再送するように書けや。
0938デフォルトの名無しさん
NGNG>>937
状況がきちんと説明できてなかったのでちょっとあれなんですが、
ご指摘ごもっともです。たしかにTCPでやっちまえってのもそうなん
ですが、今回の症状の原因が知りたくて。あとUDPの特性はベスト
エフォートってことで分かって使ってます。モニターツールで見てると
受け側のマシンのイーサ?までは正しいパケットが正しい順番で来
ているのです。それをrecvfromでソケットから取り出した後データが
おかしくなってる。なんだかVC++の環境やライブラリの問題?の
ような気がしてきました。いずれにせよくだらん質問にレス頂いて感
謝しています。
0939938
NGNG>なんだかVC++の環境やライブラリの問題
えっとソケットライブラリのバグパッチがちゃんと当たってない
のかもという意味です。その変もちっと調べてみます。それでは。
0940デフォルトの名無しさん
NGNGべつにイーサまで正しいパケットが来てて、
それがプロトコルスタックで破棄されてもUDPなら問題ではないと思いますが…
>>937もそういうことを言ってるのだと…
0941デフォルトの奈々氏さん
NGNGWinNT4.0でnetstatを実行してるんですが、TIME_WAIT状態になったソケットって
1000コまでしか表示されないようなんですが、何かの仕様でしょうか?
#ちなみにESTABLISHED状態とかのソケットは1000以上でも表示される。
SnmpExtensionXXX()系のAPIを叩いてソケットの状態を表示するnetstatもどきを
作ってみたんですが、同じ結果になってしまいました。
0942デフォルトの名無しさん
NGNG0943デフォルトの名無しさん
NGNGここで、send の呼ばれる間隔が短すぎると、
送信するデータが 1 つのパケットにまとめられてしまうのですが、
これを避ける方法はないでしょうか?
具体的には、
「4 バイトデータのパケット送信
-> 4 バイトデータのパケット送信
-> 4 バイトデータのパケット送信」
となって欲しいところが
「12 バイトデータのパケット送信」
となってしまいます
ブロッキングするようにすると、send の返り値にはちゃんと 4 が入るのですが、
パケットフィルタして確認すると、12 バイトなどにまとめられて送信されています
Java では flush という関数がありましたが、
WinSock には内部バッファを明示的に送信するような手段はないのでしょうか
どなたかご存知でしたら、ご教授よろしくお願いします
0944デフォルトの名無しさん
NGNGsetsockopt(TCP_NODELAY)
0945デフォルトの名無しさん
NGNG4バイトだろうが12バイトにまとめられようが
0946943
NGNGおおおお!できました!ありがとうございます!
今日一日中悩んでたのに・・・、思いきって質問して良かったです
お礼にお団子どうぞ!
-○○○-
>>945
たしかにその通りなんですが・・・
タイミングが重要だったので、バッファに溜められると困るのです
0947デフォルトの名無しさん
NGNGネットワークプログラミング相談室 Port2
http://pc.2ch.net/test/read.cgi/tech/1006258198/
0948デフォルトの名無しさん
NGNG教えていただきたいのですが。
0949Disca ◆NAfP6znE
NGNGhttp://www.ccad.sccs.chukyo-u.ac.jp/manualc/prgrm/dialogbase/media/network/
WSAStartupも知らなかったのに、見つけたYO。
すべてのログ見るのに疲れた(はぁ〜
0950foovar
NGNGselect()を使わずに、ファイルディスクリプタの指すストリームが
ファイルなのかソケットなのかを判断する方法って無いですか。
ストリームからデータを読み出して加工するルーチンがあって、
内部でファイルディスクリプタがファイルを指す場合とソケットの
場合で分けたいのです。
で、最初からselect()を意識した作りではないので、select()を用
いた仕様に作りかえるのがわずらわしいのです。
0951デフォルトの名無しさん
NGNG0953初心者
NGNGそのACKが返ってきたときの時刻が知りたい場合、どの
関数の戻り値を知ればいいでしょうか?
それとも他にいい方法があるでしょうか?
0954デフォルトの名無しさん
NGNG‥‥そういうことではなくて?
0955デフォルトの名無しさん
NGNGっていうか、mmsとか関係ないですか?
0956デフォルトの名無しさん
NGNGネットワークプログラミング相談室 Port2
http://pc.2ch.net/test/read.cgi/tech/1006258198/
レス数が950を超えています。1000を超えると書き込みができなくなります。