ネットワークプログラミング相談室 Port16
レス数が900を超えています。1000を超えると表示できなくなるよ。
0001デフォルトの名無しさん
2005/12/31(土) 14:07:24Programming 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/
関連リンクは>>2-10辺り
足りなかったら適当に付け足してね
前スレ
ネットワークプログラミング相談室 Port15
http://pc8.2ch.net/test/read.cgi/tech/1128088448/
0802デフォルトの名無しさん
2006/04/18(火) 17:30:410803デフォルトの名無しさん
2006/04/18(火) 19:10:08間違っています。
*** 終了 ***
0804デフォルトの名無しさん
2006/04/18(火) 21:31:39>>この状態でクライアント側で試しにCGIをシェル上で走らせてみると
この部分をこちらの理解可能な言葉に直してほしい。
client ----- apache (CGI)
ではないの?
CGIの標準入力は、postされたデータと繋がっているので、
処理が止まったりはしないけど、君の言っている意味がよく分からん。
0805801
2006/04/18(火) 22:04:37説明不足、言葉足らずですみません。
>client ----- apache (CGI)
クライアントでsocketを作成後connectしてApacheに繋ぎ、「GET / HTTP1.1/」などの
文字列をsendで送信するとApache(CGI)から結果が返ってくるのですが、
その途中でscanfなどで「待ち」の状態にできないものかと試行錯誤している状態です。
その際、ポートは80で繋がっていると思いますがこのポート番号でprintf,scanfなどを使い
クライアントとデータの送受信が出来ないものか悩んでおります。
何か書いているうちに自分でも訳が判らなくなってきました・・・
4月からソケットプログラミングの勉強を始めたばかりなのでご容赦頂ければと思います。
0806デフォルトの名無しさん
2006/04/18(火) 22:35:57間に httpd が居るので普通は無理です。
出来たとしても特定のウェブサーバの特殊な機能だと思った方がいい。
0807デフォルトの名無しさん
2006/04/18(火) 22:47:380808デフォルトの名無しさん
2006/04/19(水) 02:28:24そういうのはPOSTでやればやれんことも無いです。
Ajax push なんかはそんな感じ。
0809デフォルトの名無しさん
2006/04/19(水) 03:21:540810デフォルトの名無しさん
2006/04/19(水) 09:57:38回答するからちょっと待ちねぇ
0811デフォルトの名無しさん
2006/04/19(水) 17:41:28見ててうざいから消えて
0812デフォルトの名無しさん
2006/04/19(水) 20:13:41nphとPOSTの組み合わせでできるんじゃね?
とりあえずnphでぐぐれ。
0813>>804さん
2006/04/19(水) 21:38:44なにか送るまで待つってどうするのかというのがまず1つ。
HTTPだと、CGIに対してGETリクエストを出した後に、
さらにおなじプロセスに対してメッセージを送れないからなにを待つんだという話。
単にディレイ入れるならCGIでsleepするだけ。
CGIから別プロセスを立ち上げるか、別に待っているプロセスがいて、
CGIを通してそのプロセスにアクセスするのは可能。
ウェブベースのアプリケーションは大体そんな感じ。
>>809
帯域制限?
一定速度を上回るとディレイ時間を増やしていき、一定速度を下回ると減らす。
while () {
receive();
if (rate < max_rate) {
++delay;
} else {
--delay;
}
delay_thread(delay);// dly_tskやnanosleepなど
send();
}
ちょうどいい速度で落ち着く。
OSの機能であるならそれを使ったほうがよし。
0814デフォルトの名無しさん
2006/04/19(水) 21:40:25逆。
if (rate > max_rate) {
0815デフォルトの名無しさん
2006/04/23(日) 00:19:50ttp://ruffnex.oc.to/kenji/src/windows/HTTP/cHTTP.cpp
phpに対してHTMLを吸いだそうとすると、404だったり変な結果だったりします。
例)
cHTTP.exe http://www.phpoo.net/
cHTTP.exe http://www.phpoo.net/index.php
cHTTP.exe http://www.phpoo.net/index.php?p=index.html
何か解決方法はありませんか?
0816デフォルトの名無しさん
2006/04/23(日) 00:51:15リクエストヘッダをもう少し書いてあげれば?
Accept と User-Agent くらいは。
0817815
2006/04/23(日) 03:20:21ありがとうございます。
AcceptとUser-Agentは無くても大丈夫でしたが追加しておきます。
0818デフォルトの名無しさん
2006/04/23(日) 18:23:04環境はwindowsです。
LANとPHSが繋がっています。
PHSは、自動的に接続/切断 しています。
通信処理は、
socketでTCP/IPな転送と
InternetOpenの流れのAPI使っています。
0819デフォルトの名無しさん
2006/04/24(月) 15:56:50ソケットを Connect する前に、使いたいほうのインタフェイスアドレスに
bind しておけばsocket使うほうはインタフェイス固定にできます。
InternetOpen の方は・・・
route コマンドで一時的にそっちのIFの優先度を上げるくらいか。
0820デフォルトの名無しさん
2006/04/29(土) 20:07:55netperfのようなものでもっと小さいプログラムありませんか?
0821デフォルトの名無しさん
2006/04/29(土) 20:11:42死ねばいいよ^^
0822デフォルトの名無しさん
2006/04/29(土) 20:20:540823デフォルトの名無しさん
2006/04/30(日) 01:20:50まあネット関係の言語は歴史的にCのほうが実績が有る。
他の言語でも、Cの実装に忠実に再現されてれば大丈夫だけど、ほとんどは多少違うので他のシステムとの通信時のデバッグで嵌る。
UDPは基本的にセッションが無いので、アドレス変換用のテーブルが作れない。
自分でNAT作ってみれば分かるよ。UDPは通らないNATでいいやと思うから。
0824デフォルトの名無しさん
2006/04/30(日) 01:31:28| ノ ヽ
/ ● ● |
| ( _●_) ミ
彡、 |∪| 、`\
/ __ ヽノ /´> )
(___) / (_/
| /
| /\ \
| / ) )
∪ ( \
\_)
0825デフォルトの名無しさん
2006/04/30(日) 03:47:320826デフォルトの名無しさん
2006/04/30(日) 08:32:100828デフォルトの名無しさん
2006/04/30(日) 16:02:110829さらに釣られるとすると…
2006/04/30(日) 22:37:58えーと…200点満点では?
0830827
2006/04/30(日) 23:03:01何かOSI参照モデルが理解できないアフォが多いですね。
まあネット関係の言語は歴史的にBSDソケットのほうが実績が有る。
他のOSでも、BSDソケットの実装が忠実に再現されてれば大丈夫だけど、
Winsockの場合は多少違うので他のOSとの通信時のデバッグで嵌る。
ICMPは基本的にポート番号が存在しないので、NAPT変換用のテーブルが作られない。
自分でNAPT作ってみれば分かるよ。ICMPは通らないでいいやと思うから。
0832デフォルトの名無しさん
2006/05/05(金) 03:37:42Content-MD5 とはちゃうんか?
SCO-Hash: 6c9173af0bf8d9c21cb3526f8f39d0f6
とか。
0833デフォルトの名無しさん
2006/05/05(金) 10:42:320834デフォルトの名無しさん
2006/05/05(金) 22:27:26ここの独自機能っぽいが。
先頭1KBのハッシュとかなんとか。
0835デフォルトの名無しさん
2006/05/07(日) 00:52:05ドッキリでしょうか。
0836デフォルトの名無しさん
2006/05/07(日) 01:55:25Updated Date: 05-May-2006
Creation Date: 27-Apr-1994
Expiration Date: 28-Apr-2012
0837デフォルトの名無しさん
2006/05/07(日) 11:08:07どうもありがとう!!
0838デフォルトの名無しさん
2006/05/07(日) 16:49:52InternetSetOption/InternetQueryOptionでSECURITY_FLAG_IGNORE_REDIRECT_TO_HTTPというフラグがあるので試しにこれをONにしようとしたら、Setはできないフラグでした・・・orz なら何の為にQueryはできるのか・・・
0839デフォルトの名無しさん
2006/05/07(日) 19:15:450840デフォルトの名無しさん
2006/05/07(日) 21:57:260841デフォルトの名無しさん
2006/05/07(日) 22:06:04InterlockedIncrement
InterlockedDecrement
InterlockedExchange
辺りを使えばいいんでない?
0842841
2006/05/07(日) 22:07:060843841
2006/05/07(日) 22:14:01INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPは
InternetOpenUrlのdwFlagsであらかじめ指定しておく必要があるんじゃまいか。
0845デフォルトの名無しさん
2006/05/07(日) 22:20:52場合による。
その変数に対する複数の演算が、ひとつの不可分な処理として必要なら必要。
あと、スレ違い。
http://pc8.2ch.net/test/read.cgi/tech/1130984585/
0846841
2006/05/07(日) 22:28:50INTERNET_STATUS_REDIRECTメッセージが飛んできたら検出できるはず。
0847デフォルトの名無しさん
2006/05/08(月) 00:12:58どうもshutdown, closeの仕方が分からない。
その辺がうまくないせいで、
同じポート番号での通信が一回しかできない。
あるポート番号で通信を行った後、
また同じポート番号を使う設定でサーバを立ち上げ直すと、
サーバがきちんとaccept状態になっていないのか、
クライアント側がconnectのところで失敗しちゃう。
チラ裏スマソ
0848デフォルトの名無しさん
2006/05/08(月) 00:19:06setsockoptでSO_REUSEADDRすれ。
shutdownは、closeする直前に「受信はするが送信しない」or
「送信はするが受信しない」という状態を作るだけでその現象とは関係ない。
ていうかbindの戻り値ちゃんと見てエラーチェックしろよ…
0849デフォルトの名無しさん
2006/05/08(月) 00:20:080850デフォルトの名無しさん
2006/05/08(月) 00:25:42チラ裏にレスくれて
ほんとありがとう。。。
なにを質問したらいいのかさえ分からなくて、
チラ裏状態のまま書き込んでしまったんだけど、
ともかく、その点についてやってみます!
0851デフォルトの名無しさん
2006/05/08(月) 01:13:320852デフォルトの名無しさん
2006/05/08(月) 07:20:550853デフォルトの名無しさん
2006/05/08(月) 08:11:170854デフォルトの名無しさん
2006/05/08(月) 12:53:37REUSEPORTだと他のプロセスもbindできてしまうから、
積極的にそうしたい理由がなければREUSEADDRの方がいいと思う。
0855デフォルトの名無しさん
2006/05/10(水) 00:22:39クライアントはダイアルアップルータを通してインターネットに接続できる
非固定のIPアドレスを持つとします。
公開された中継サーバにクライアントから接続して双方向にパケットを送信するとします。
TCPならクライアントからサーバに接続すればそのソケットを通して双方向に送信できます。
このときTCPなのでコネクション指向の接続であり、その場合もっと下位のレイヤでも
「セッション」のような概念をもち、サーバとクライアントのルーティングの情報をセッションとして保持していて
よって双方向の通信できると私は理解しています。
ではUDPのようなコネクションレスの場合はどうなのでしょうか?
クライアントがサーバに対してUDPのパケットを送信したらその瞬間に双方向のルーティング情報が
各経路に出来上がり、サーバからの返信も確実にクライアントに届くのでしょうか?
いっぱい間違えていると思いますが、教えてください。m(_ _)m
0856デフォルトの名無しさん
2006/05/10(水) 00:27:380857デフォルトの名無しさん
2006/05/10(水) 00:37:09届かねえ。
0858デフォルトの名無しさん
2006/05/10(水) 00:42:18届くよ。
0859デフォルトの名無しさん
2006/05/10(水) 00:42:47ありがとうございます。
届きませんか・・
残念
0860デフォルトの名無しさん
2006/05/10(水) 00:46:12どうルーティング情報が保持されるのか、など)がわかるような良い教科書はありませんか?
0861デフォルトの名無しさん
2006/05/10(水) 00:52:480862デフォルトの名無しさん
2006/05/10(水) 01:01:250863デフォルトの名無しさん
2006/05/10(水) 01:03:31TCPはpeer-to-peerのプロトコルだということを理解してください。
次にIP層のルーティング機能について理解してください。
>>4の↓を読めばいいです。
TCP/IPによるネットワーク構築 〈Vol.1〉原理・プロトコル・アーキテクチャ
0864デフォルトの名無しさん
2006/05/10(水) 08:00:46わかりました。ありがとうございます。
0865デフォルトの名無しさん
2006/05/11(木) 07:21:59命令を出したりするメインポート以外のファイル転送ポート等は使用する時だけ
接続し、使い終わったら閉じるようにしているのですが、こういうやり方は
まずかったりするでしょうか??
0866デフォルトの名無しさん
2006/05/11(木) 07:30:57ftpはまさにそういうプロトコル。利点としては非同期にファイル転送を停止したり出来る。
0867デフォルトの名無しさん
2006/05/11(木) 11:42:09まずくないと思うけど、漏れならクライアント側で接続先が同じ、
かつ再接続の頻度がそこそこ高い場合にはUDPのソケットは開きっぱなしにする。
安定して同じポート番号使って、NATに優しいプログラムにしたいから。
サーバ側は1つのソケットでいいから当然開きっぱなし。
0868デフォルトの名無しさん
2006/05/11(木) 11:43:130870デフォルトの名無しさん
2006/05/11(木) 12:04:380871865
2006/05/11(木) 17:49:35>>866
なるほど。現状のまま行こうと思います。ありがとうございます。
>>867
そういうのもあるんですね。参考になります。ありがとうございます。
0872866
2006/05/12(金) 01:14:33あ、1つ重要な欠点を忘れてた。 そのデータ転送のポートの割り当て方を気をつけないと
ファイアーウォール、NATルータを通り抜けれない可能性がある。 FTPみたいに
ダイナミックにポートを当てはめてその情報をコマンドでやりとりしてとかやるとまず
だめ。 NATルータはFTPを通すためにえらく面倒な特別処理をしている。
詳しくは:
RFC 3235 NAT Friendly Application Design Guidelines
0873デフォルトの名無しさん
2006/05/12(金) 01:45:41これってメッセージをやり取りするたびにTCPのコネクションって
切っても良いものでしょうか?
RTSPを使うアプリを見てると基本的にTCPのコネクションを維持しているようです。
0874デフォルトの名無しさん
2006/05/12(金) 07:19:570875デフォルトの名無しさん
2006/05/12(金) 15:47:17そんな事考えてるのはお前くらいのもんだよ。
0876デフォルトの名無しさん
2006/05/12(金) 15:48:38HTTP に KeepAlive 導入したヤシも似たようなこと考えてたんじゃネーノ?
0877デフォルトの名無しさん
2006/05/12(金) 18:37:32HTTP/1.0以前は同じページにcssやら画像100枚やら張られるなんて
想像してなかったんだろうな。
0878デフォルトの名無しさん
2006/05/12(金) 20:20:32RTSPもHTTPに似てるから同じでいいんじゃないか?w
0879デフォルトの名無しさん
2006/05/13(土) 00:28:39レス、ありがとうございます。
結局のとこ、どうなんでしょうね。
接続を維持していたほうが負荷が小さいのは間違いないですが。
切っても良いっちゃ良いんでしょうが。
0880デフォルトの名無しさん
2006/05/13(土) 01:43:17参考情報
HTTPのKeep-Aliveの説明
ttp://www.studyinghttp.net/connections
0881デフォルトの名無しさん
2006/05/13(土) 16:59:59世の中には接続を切るとそのままセッションも捨てられるしょぼいサーバも存在するかも。
切らないほうがトラブルに見舞われることは少ないと思われ。
0882873
2006/05/13(土) 21:37:49ありがとうございます。
ここまで、書いててまったく気づいてなかったのですが、
実はサーバー側の話です。
サーバー側で切ってしまうと、クライアントの方で問題にならないかな〜と
思いました。
まあ、いろんなクライアント試してみろって話ではあるんですが。
0883デフォルトの名無しさん
2006/05/13(土) 22:06:130884デフォルトの名無しさん
2006/05/14(日) 02:13:35バッテリ駆動機器は別だろう、勿論。
0885デフォルトの名無しさん
2006/05/14(日) 09:05:04問題にならないようにHTTPにはCookieがある。
HTTPはもはや汎用のプロトコルでセッション管理も必要だから。
あなたがどういう応用を想定しているか分からないので、
あなたのケースではどうだかは分からない。
0886デフォルトの名無しさん
2006/05/15(月) 02:12:01送り側のシステムでMTUサイズに自動で分割され、受け側のシステムで自動合成される。
つまりパケット喪失や輻輳等はあるが、自動合成後のパケットデータは信用できる。
と認識しているのですが、正しいでしょうか?
winsock2.0
vs2003
winXP win2000
0887デフォルトの名無しさん
2006/05/15(月) 05:16:44沖縄から北海道へ行くのに地面を掘ってブラジルへ行こうとするほどズレている
0888デフォルトの名無しさん
2006/05/15(月) 11:05:21winsock2なんですが、一度listenしたものをプロセスを維持したまま解除
(listenしない)にしたいです。
listenに使用したfd(SOCKET)を使ってshutdownやclosesocketしても
まだLISTEN状態です。
「setsockoptでSO_REUSEADDRを使えばよい(次回からも同ソケットに
bind&listenできる)」って記述は多くあるんですがそのものを解除したい場合
はどうしたらよいでしょうか。
0889886
2006/05/15(月) 11:17:480890デフォルトの名無しさん
2006/05/15(月) 11:28:540891888
2006/05/15(月) 12:09:43早速ありがとうございました。
shutdown -> closesocket だとダメでしたが、closesocket だけにすればLISTENを
解除することができました。
「shutdownは必須」とばかり思ってましたがリスナーソケットですし明示的に
shutdown(s, SD_RECEIVE)する必要は無かったんですね。勉強になりました。
0892デフォルトの名無しさん
2006/05/15(月) 20:13:320893デフォルトの名無しさん
2006/05/16(火) 08:41:36心のポートで聞いてくれないんです!
0894デフォルトの名無しさん
2006/05/16(火) 13:01:25プログラム側でaccept()してないだけでしょ?
0895デフォルトの名無しさん
2006/05/16(火) 19:56:32クライアントから1秒ごとに送られてくる、文字列を受信して
クライアントへその都度文字列を送信する
というサーバープログラムを作りたいのですが、
C++もソケットプログラミングも初心者の自分が勉強しやすい
おすすめの参考書、サイトありませんか?
0896デフォルトの名無しさん
2006/05/16(火) 20:36:540897デフォルトの名無しさん
2006/05/19(金) 23:57:49IPヘッダのポート番号をいじりたいのですが。
よく下のような表をみるのですがあってますか?
RAW Socketでいじれる範囲
----------------------------------------------------
Win95/98/Me Win2000/XP(SP1)/XP(SP2)
Ether fame NG NG
IP header NG OK
0898デフォルトの名無しさん
2006/05/20(土) 00:13:07サーバ側にあるDLLをネットワークを介してクライアント側で
使用することは出来ますでしょうか?
具体的には、CGI等でサーバ側のDLL機能を呼び出しクライアントの
PCを操作するようなことを想定しています。
COMとかに関係してくるんですかね?
よろしくお願いします
0899デフォルトの名無しさん
2006/05/20(土) 03:40:11CGI ならネットワーク関係ないです。
手抜きしてないでちゃんとサーバの方の資料を読んで。
0900デフォルトの名無しさん
2006/05/20(土) 09:17:53IPヘッダにport番号はありません。
0901デフォルトの名無しさん
2006/05/20(土) 10:07:52プロトコルIDだろ。そのくらい推測してやれよ。
↓ここでも読んででなおしてこい。
http://www.kachijiten.com/realintention/realbbs032/
レス数が900を超えています。1000を超えると表示できなくなるよ。