1 :
デフォルトの名無しさん ◆TCP/IPmFAM :
04/09/26 17:26:23
2 :
デフォルトの名無しさん :04/09/26 17:27:08
3 :
デフォルトの名無しさん :04/09/26 17:27:39
4 :
デフォルトの名無しさん :04/09/26 17:28:00
5げっと
9 :
デフォルトの名無しさん :04/09/26 21:10:16
漏れはPacMonPro使ってるが、使いやすいぞ もちろん不正利用だが(w
12 :
デフォルトの名無しさん :04/09/27 07:18:54
RedHatLinux使っています。 socket システムコールshutdownを調べようと $ man shutdown すると、/sbin/shutdownのmanualが表示される どうしたらsocket システムコールshutdownのmanualみれるの?
14 :
デフォルトの名無しさん :04/09/27 08:18:16
man 2 shutdown
15 :
デフォルトの名無しさん :04/09/27 08:24:23
17 :
デフォルトの名無しさん :04/09/27 08:43:38
18 :
デフォルトの名無しさん :04/09/27 10:57:55
19 :
デフォルトの名無しさん :04/09/27 11:24:17
int MakeSocket(void){ struct hostent* myhost; struct servent* service; struct sockaddr_in server; int sock; service = getservbyname(SERVICE_NAME,"tcp") myhost = gethostbyname("hoge-.com") sock = socket(AF_INET,SOCK_STREAM,0) server.sin_family = AF_INET; server.sin_addr.s_addr = htonl(INADDR_ANY); service -> s_port = 25; server.sin_port = htons(service -> s_port); bind(sock,(struct sockaddr*)&server,sizeof(server)) listen(sock,5); return sock; } としてこの後acceptしているのですが,25ポートにアクセスしてもサーバから 反応がありません. 何が問題でしょうか. 25番ポートを使用する他のプログラム(SMTP)は他に走っていません.
>>19 ・socket(), bind(), listen() のエラーチェックをちゃんとやりましょう
・そのプログラムが動いている同じホストから繋がるかどうか確認しましょう
>>20 ありがとうございます.
解決しました.
関数にあくせぷとしたときの戻り値を渡すべきところを,ソケットを作ったときの
ディスクリプタをそのまま渡してしまったので,エラーが出ていたようです.
なんでこんなことに気がつかなかったのだろうか。。。
C#の方のスレに一度投稿したのですが、話題がこちら向けだと思うので、此方にて再度質問させてください。
現在、下記URLのC#を使ったRawSocketのサンプルを元にネットワークプログラムを勉強しています。
ttp://www.thecodeproject.com/csharp/networkmonitor.asp 上記のソースを改良し、パケット取得時にIPヘッダにてTCPプロトコルのものだけを抽出し、
その後、パケットからTCPヘッダを取り、それぞれのデータに分割し、さらにデータ部だけを取り出し、
パケットモニタのように表示するという事をしました。
そこで、今度は分割されて送信されたTCPパケットを再結成したいのですが、
どのように行えばよいのでしょうか。
やりたいことは、分割されたパケットの場合、分割パケットが全て届いた所で、
データ部を全て結合して、別の処理部に渡したいのです。
また疑問なのは、TCP/IPパケットが分割されている途中に、他のパケットが割り込む事はあるのでしょうか?
つまり、AとBというデータが共に分割されて送られたとして、
Aの分割された複数のパケットが最後まで届く前にBの分割されたパケットが割り込むといった事は
あるのでしょうか。
それとも、分割されたデータを全部受け取るまでは、他のパケットは何処かにプールされていて、
割り込む事はないのでしょうか?
>>23 RFC2549を自前で実装すればなんとかなるんじゃねーの
すこし前にウィルスがかなり問題になってたからオススメはしないが
バナーのひとつもメモリに入らないとみた
28 :
デフォルトの名無しさん :04/09/27 15:12:29
>>22 RAW ソケットなら、たぶんパケットは受信した順に読み込まれます。
どんな順序で受信されるかは、送信側の機器及び通信経路上に存在する機器等に依存します。
getsockoptでSO_LINGER指定でlinger構造体読みたいんだけど読めない 初期値が知りたいんだけど どうしたらいいかな
30 :
デフォルトの名無しさん :04/09/28 00:15:45
>>22 ほぉ〜、このレベルの方がここにいたとは。ちょっと驚いた。
ワームを書く際によく用いられるチッキングという技術をyahooってみなよ
長文ってだけでは。
>>31 確かに聞いてる時点で
>>22 のネットワークプログラムのレベルは低いだろうけど、
『何を疑問に思っているのか』とか『何をしたい』とかそういう部分での
向上心?というか知識欲という部分ではレベル高いんじゃない?
そして、
>>22 に対する的確な回答を誰もしていない時点で
このスレの住民のレベルが知れてる・・・
勿論、俺も含めてだけどな。
いや、別にいいんじゃない? パケットは割れることあるし ケツの片割れが先についても 頭が来るまでプールされるし そのための背番号ついてるし
>>32 基本的なところで知識の詰め込みが足りません、という気がするけど。
>>22 はComerの本でも読みなさい、ってことで。
> そして、
>>22 に対する的確な回答を誰もしていない時点で
> このスレの住民のレベルが知れてる・・・
あまりにも当たり前のことを聞いてるので誰も答えてないのかと。
>>35 その返し方って、答えられない奴がよく使う方法だよね。
質問の仕方がアレな訳じゃないし、知ってるなら答えてやっても良い気がする。
俺?俺はその部分知らないから答えられないや。
仕事だとDLL化されたモジュールから呼んでるだけだから、
中身のロジック(アルゴリズム)なんてシラネ。
22=30=32=36
38 :
デフォルトの名無しさん :04/09/28 14:22:45
>>32 んなこたないって。
知識欲があるなら「TCP 仕組み」とかでググって、セグメントという重要な言葉くらいは見つけてくるはずだし、
IPパケットのフラグメント化とTCPデータのセグメント分割の区別のつかないような質問の仕方はしないはず。
答えられない奴の常套句 「ググったほうが力になる。」
googleした方が力になる。間違いない。
41 :
デフォルトの名無しさん :04/09/28 23:18:26
だったら、こんなスレッドもMLも必要なくね?
42 :
デフォルトの名無しさん :04/09/28 23:47:33
>>41 リソースの無駄だな。
過去スレ含めて削除したほうが良い。
検索で探すのはね、結構時間のかかるものなのよ。 技術関連の情報なら、半日くらい直ぐに飛んでいく。 まあそれでも、90%位はそれで済ませてるが。
素直に本買えと
inet_ntoaとかの戻り値は、deleteしないでもいいんですよね
46 :
デフォルトの名無しさん :04/09/29 15:39:23
当たり前だろ
ごめんなさい
ここはネスペも持ってない人ばかりですねw
ネスペってのは Netscape の略
>>51 もう存在しない資格を取れと言われても……と思っただけだよ。
なーんだ。しょうもな。そんな返しかよ。もう見飽きた。
つーか、ネスペレベルの知識もないやつばっかりだなと思った。
>>51 何歳で取ったのか気になったのです
参考にしたいので教えてください
なんでそんなことが聞きたいんだ? 俺が持ってるのはテクネだぞ。 でも、ネスペのほうがかっこいいだろ。 じじいよばわりしたいのか?俺は若いぞ。
プログラマーも免許制にするべきだな。
59 :
◆cReQ1pJtI. :04/09/30 18:42:03
間違ってUNIXスレに書いてしまったんですが、移動してきました。 FTPクライアントのサブセットを作成していますが、 コマンドに対する応答の終了をどのように判断したらいいのか 悩んでいます。 多くのコマンドは1行の応答のようなので、その場合は改行を 見ればいいと思いますが、なかには複数行返ってくるものも あるし、RFCにも複数行処理しろと書いてあります。 コマンドを送って、応答を待って、次のコマンドを送って、、 ってやれれば簡単でいいなと思ってるんですが、そのためには 応答の終了を知る必要があると思います。 回線状況が悪い場合も想定したいので、タイミングでの処理は 避けたいと思っています。 よろしくお願いします。
61 :
◆cReQ1pJtI. :04/09/30 18:54:34
>>60 ありがとうございます!!
すごく参考になりました。
ネタだろどうみても
2chのdatを取得する際の判断として
HEADを見るようにしようとしてたのですが、
どうもdatによってヘッダ情報のパラメータがあったりなかったりするようなのですが、
なぜなのか分かる方いませんか?
例)
http://pc5.2ch.net/tech/dat/1095479831.dat HTTP/1.1 200 OK
Date: Thu, 30 Sep 2004 20:20:32 GMT
Server: Apache/2.0.48 (Unix) PHP/4.3.4 mod_ssl/2.0.48 OpenSSL/0.9.7c
Last-Modified: Thu, 30 Sep 2004 17:13:29 GMT
ETag: "496df-1a469-cc126040"
Accept-Ranges: bytes
Vary: Accept-Encoding
Content-Encoding: gzip
Connection: close
Content-Type: text/plain
↑このヘッダ例では、なぜかContent-Lengthが含まれていない
こちら場合はContent-Lengthがあります。 ほとんどの場合はこちらです。 pc5.2ch.net/tech/dat/1095583235.dat HTTP/1.1 200 OK Date: Thu, 30 Sep 2004 20:20:31 GMT Server: Apache/2.0.48 (Unix) PHP/4.3.4 mod_ssl/2.0.48 OpenSSL/0.9.7c Last-Modified: Thu, 30 Sep 2004 00:52:11 GMT ETag: "4972f-6904-16ab64c0" Accept-Ranges: bytes Vary: Accept-Encoding Content-Encoding: gzip Content-Length: 9495 Connection: close Content-Type: text/plain
すみません、
>>64 こっち余計な改行入ってしまいました。
ちなみに要求側はこうしてます HEAD $uri HTTP/1.1 Accept-Encoding: gzip Host: $host User-Agent: Monazilla/1.00 (test) Connection: close
>>64 mod_deflateの仕様です。
datのサイズが大きいとContent-Lengthが付かなくなります。
したがって付いたり付かなかったりする可能性をあらかじめ
想定してコードを組むしかありません。
69 :
デフォルトの名無しさん :04/10/01 10:34:49
>>67 Accept-Encoding: gzipを外せ
それじゃ無駄に転送量増える
>>68 うーむなるほど。
鯖側ではある程度のサイズからdat.gzに圧縮しているということで、
dat.gzのContent-Lengthを表示しても dat.gzじゃない他のファイルや、
datからdat.gzに切り替わった時などのサイズ比較には使えないから
敢えてContent-Lengthをヘッダに含めなくしている。
ということでしょうかね・・・ん?違うかな
>>71 全然違う。
dat.gzの場合Content-Lengthは圧縮後のサイズになる(これはHTTPの
仕様)。
mod_deflateはメモリ上で一度にすべて圧縮できなかったとき、
圧縮後のサイズをその場で計算できないので
仕方がないからContent-Lengthなしで送り出す。
HTTP/1.1なんだからchunkedエンコーディングで送ってくれても
よさそうなもんだが
ネットワークプログラミングの話題かどうか微妙なんですが、 javaMailって使えないって噂はほんとですか?
>>72 その辺の話からすると、gzip を Accept して HEAD 要求するのって
そこそこCPUに厳しい処理っぽいような気がするけど、あってる?
>>73 そういうのはレイヤが違います。
メーラ開発スレ(あるのか?)とかjavaスレへでもいってください。
76 :
デフォルトの名無しさん :04/10/02 08:52:50
78 :
デフォルトの名無しさん :04/10/02 09:15:18
>>30 は
>>22 よりかなり馬鹿なことは判った。
>>22 はカマー本読んでTCP/IPの基本的なところを勉強してね。
プログラミングスキルは問題ないみたいだから。
ちなみにあなたの懸念は的中です。順番さえね…
>>74 HEADで更新チェックしてるから負荷は小さいはずというのは
あまりなりたたないね。
つーか更新チェックならAccept-Encoding: gzipすべきでないってことか
>>80 Comerの本を読めというのがとっくに既出なのに今頃出てきて何言ってんだ……。
>>82 みんな無視してるのに今頃出てきて何言ってんだ……。
80から82はまだそれほど時間たってないだろ。
ヒキコモリ
>>83 的には半日もあれば既に誰もがスレチェックずみなのかも知れんが。
粘着かよ
86 :
デフォルトの名無しさん :04/10/05 15:22:16
せめてageろ
87 :
デフォルトの名無しさん :04/10/05 18:30:55
仮想ストレージに関する提案。 ストレージはデータの保存要求を受け付けるとすぐさま ネットワーク上の別のストレージへデータを転送する。 この要求を受け付けた別のストレージは、すぐさま ネットワーク上の別のストレージへデータを転送する。 これを繰り返すことでデータはストレージではなくネット上に配備されることになる。 即ち、受け付けるデータ分のメモリーがあれば、無限の仮想ストレージを構築できる。 偉大なるネットワークに感謝。
suretigai
MFCのCAsyncSocketを用いて ソケット通信プロセスを作っています サーバ、クライアント両方からsend()すると 両者の送信タイミングはかなりずれてるのに 遅れてsend()したソケットは 自分が送信したあとでないと受信しない現象が発生します どうしてでしょうか? よきアドバイスをよろしくお願いします。
>>89 ストリーム型でかつ即座に送信すべきデータが流れるソケットならば、
ソケットトオプションでTCP_NODELAY あたりを指定してみては?
91 :
デフォルトの名無しさん :04/10/06 12:42:27
テンプレに挙げられてる「WinSock2.0プログラミング」が絶版のままなんですけど、 和書でこれに代わる様なものはないのでしょうか?
92 :
デフォルトの名無しさん :04/10/06 12:44:00
MFCのCAsyncsockを用いてソケット通信を行っています。 1対1の通信で、サーバがメッセージを投げそれの返信を クライアントが返す通信を10msec間隔で繰り返しています このときランダムに(強いて言えば3万トランザクションに1回)、 どちらかで200強msecの送信か受信遅延が発生しているようです どうしてでしょうか? 心当たりのある方、お助けください。
そんなもんだ
MFCのCAsyncSocketを用いて ソケット通信プロセスを作っています 今度はサーバからsend()でメッセージを送信し クライアントはそれに対してsend()で返信します これを10msec間隔でおこなっていますが 30000回に1回くらいのわりあいで どちらかの送信または受信遅延が発生します どうしてでしょうか? よきアドバイスをよろしくお願いします
>>94 そんなもんなんですかね〜
あ〜何とかなりませんかね〜
どうも受信遅延が怪しいのですが・・・
まあええことよ
>>96 プロトコル設計の段階で道を誤っていると思われ。
そもそもネットワーク技術を正しく理解していないような気がするが。
> MFCのCAsyncsockを用いて 今時何故… こんなの考える気力も起きない…
>>95 リアルタイム制御系かあるいは音声かVideoを載せてるか、どっちかか?
10msec間隔で送受信するような処理をMFCで実装しようとしてる時点でDQN決定!
遅延が許容できないのならwin32のWSAEventSelectでも使え、
ってwinsockの専門書に英語で書いてあるぞ。
>>95 MFC/非MFCを問わず、Winsock2 のメッセージベースの非同期ソケットはメッセージポンプが
何らかの事情で滞ると、ネットワークの状況に関わらず遅延が生じてしまう。
専任のスレッドで select で待つか、I/O コンプリーションポート(ReadFileでコンプリーション
ルーチンを指定する)のが吉。
>>102 I/O コンプリーションポート、最高パフォーマンスだが難しくねか?
オイラまだキッチリ実装されたサンプルソース見たことねえ
あれば教えてくれ
>>103 難しいっていうか面倒なだけのような。トライアンドエラーとかしたくないコードになるし・・・
漏れは結局同期IOでプロトタイピングしてデバグ済ませて状態遷移を整理したうえで、
あらためてIOコンプリーションポートで実装しなおした。
IO Queueing とか企むとプログラムに不要な複雑さが増して死ねそうだったので、
結局パフォーマンスは出ていない模様(w
ところで .NET Framework では、メッセージベースじゃなくてI/Oコンプリーションポートの
方が非同期IOの基本になってるけど、皆これ使うかなぁ・・・
105 :
デフォルトの名無しさん :04/10/07 23:45:48
サーバ側のrecvの返値が、クライアントから送ったデータのサイズになりません。 つまり全部送られてきていないみたいなんです。 どういう原因が考えられますでしょうか。
>>105 それは正常な動作です。
ソケットプログラミングの入門書でも読みましょう
ひょっとして何回もrecvする必要があるんですか? いちおう、受信バッファのサイズは十分とっているんですが。
結局あなたたちは、質問してきた初心者をバカにすることしかできないんですね。
ばーか ばーか
>>105 今どきIPv6経由しないネットがあると思うか?
そりゃあるだろ。
第一IPv6と
>>105 は全く関係ないぞ。
パケット分割されないようにオプション付けて送信すれば?
>>112 というか「FAQ読め」と思う。
ネットワークの世界では自分の都合だけでAPIを決められないから、
>>109 なんてことは当たり前にある。初心者がどれだけ不合理に思っても。
それを理解するのがネットワークプログラミングの始まり。
マルチクライアントのサーバーを作ってるんですが、 recvの返値が0という方法以外ですべてのデータが送られたことを確認するには どうしたらいいのでしょうか。
最初にレングスを送る
122 :
デフォルトの名無しさん :04/10/08 12:12:06
それだな
やっぱり長さの情報を送るのがベストですか。 何か良い関数があればと思ったのですが・・・。 ともかくありがとうございました。
124 :
デフォルトの名無しさん :04/10/08 20:55:36
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();
125 :
デフォルトの名無しさん :04/10/08 23:47:11
放置されているのでage
> かなり少ない ってどのくらいよ?
127 :
124 :04/10/09 00:47:30
>>126 え〜と、例えば1MB超えるようなデータでも 16824バイトと表示されてしまいます・・
というより、16824バイト以上のファイルは必ず、16824バイトになってしまいます。
FFFTPで見てみると、正しいサイズが表示されていますので、プログラムの問題だと思うのですが・・
結局あなたたちは、質問してきた初心者をバカにすることしかできないんですね。
結局あなたは、自分で一つも調べようとしないんですね。
130 :
124 :04/10/09 01:01:46
>>128 自分は皆が呆れるほど、何か根本的な部分で間違いを犯しているのでしょうか?
本当にわからないので、何方かご教示して頂けるとありがたいのですが・・
131 :
デフォルトの名無しさん :04/10/09 01:04:03
ちなみに、
>>125 で上げたり、途中でちゃちゃ入れたりしているのは自分ではないです。
133 :
131 :04/10/09 01:04:43
受信はしていないのか。
135 :
デフォルトの名無しさん :04/10/09 01:05:49
レスが早くつくようにageてやったのに、なんだその言いぐさは・・・
ageてやったのにだって( ´,_ゝ`)プッ
137 :
124 :04/10/09 01:06:49
>>131 OpenFile()の時点で受信しているのではないのですか?
138 :
デフォルトの名無しさん :04/10/09 01:11:31
MSDN> アプリケーションは OpenFile を使ってファイルを開いてから、 MSDN> CInternetFile::Read を使用します。
140 :
124 :04/10/09 01:18:25
>>135 すみません・・ 上げて頂いたお陰でレスが付いた事は感謝しています。
>>134 Read(), Write(), Close(), FindFile() 以外呼べないんですか・・・
ではファイルサイズはどうやって取得するのでしょうか?
ちょっと、またテストプログラム書いてから来ます。
141 :
デフォルトの名無しさん :04/10/09 01:21:31
サーバがSIZEコマンド対応してないか、 ls -lの結果がCFtpConnectionでパーズ出来ない形式なんだろう。 別のサーバで試してみたら? いずれにせよ、ftpでファイルサイズが必ず取得できると 仮定したプログラムはまずい。サーバ固定でないのなら。
143 :
124 :04/10/09 02:34:14
>>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]); }
}
144 :
デフォルトの名無しさん :04/10/09 03:38:53
だせー
145 :
デフォルトの名無しさん :04/10/09 03:47:39
>>124 また荒しが粘着しているみたいなんで放置。
147=某スレの88
149 :
デフォルトの名無しさん :04/10/10 18:29:35
すみません。質問させてください。 ネットワークプログラミングっていうのは、一番上の層での話ですか? 業務 〜〜〜〜〜 基盤 〜〜〜〜〜 ネットワーク って感じで層構造になっているじゃないですか? それの一番上の層での話ですか?
OSIの下の方
え?下の方? 情報システム板で聞いたら、ネットワークエンジニアはOSIの下層をやるから プログラミングなんて関係ない、と聞いたのですが・・・。
それはネットワークエンジニアの話だろ
>>151 くだらん事に頭使うヒマがあったら仕事しろ
>>152 はい。ネットワークエンジニアのことです。
初心者ですまそ。
とりあえずソケット使ってれば ネットワークプログラミングしてるって言えなくも無い
いや、来年就職活動です。 業務系・基盤系・ネットワーク系のどれが自分にあってるのか、模索してます。
あんまり厳密にわけなくても・・ 大きくない会社だとなんでもやらされるし
>>151 下の層だからプログラミング関係ないという事はないだろ。
スイッチングHUBだってソフトウェアで動いているんだから。
機械のお守りするだけの人ならプログラミングは必要ないけどね。
160 :
デフォルトの名無しさん :04/10/10 18:58:53
>>149 一番上は political or religious layer だろ。
どこにでもいるんだな、
>>160 のように空気の読めない奴が。
すみません。最後に一つだけ。 では、ネットワークエンジニアだったら、プログラミングはあまり関係ないということですか?
ネットワークエンジニアは大雑把に分けて 1. ソフト(プログラム)を作る人 2. ハードを作る人 3. 1.2.を設置・運用する人 に分類されていてプログラミングをするのは1.の人だけ。 だから仕事によってはプログラミングする。
>>165 ありがとうございます。ネットワークの設計・構築・運用をやってみたいと思っています。
ということは3.ですね。
みなさん、お邪魔しました。どうも!
1.2.は通信機器を開発してる人ってこと? で、3.がNEか。
1.2.はあまりネットワークエンジニアとは呼ばないんじゃ?
>>168 あくまでも、ネットワーク関連に携わる人の種類、ってことだろ。
170 :
デフォルトの名無しさん :04/10/10 19:54:49
れんさば屋は3か
>>170 サーバ管理者であって、ネットワークエンジニアじゃないだろ。
ネットワークエンジニアの定義がわからん つーかスレ違いsage…
プログラミングってキーワードを出しまくってる割に選ばなかったってことは、
>>166 は苦手なんだな
>>173 再び参上。
そうなんです。苦手というか興味がないというか。
話を振ってきたから再び書き込んだのに・・。 ウワアア━━━━━(`Д')━━━━━ ン ...
うざ……
ネットワークの設置やら保守なんてつまんなそう。 ソフト書くほうがよっぽどいいと思うが。
床下に潜ってUTPケーブル這わせるだけでPGと同程度の給料がもらえます。 残業もほとんど無いし。
だな
WAN内でウィルス蔓延して、L3スイッチが高負荷で落ちて休日出勤とか、 SNMPマネージャのバグで基幹系ルータの設定がぐちゃになって、 ルータメーカのエンジニアとマシン室で一夜を明かしたり。
PGよりマシだな
>>179 そういうのの作業マニュアルを書く人を
おれはこの世で3番目くらいに尊敬する
>>183 たいてい既存のドキュメントの切り貼りなんでつまんねーよ。
具体的には、コーディングが終わった後で作る納品用仕様書の次につまらない。
実際に作業するのはど素人だったりするんで、図解入れたりしてやらないと
いけないのは面倒だが。
>>184 そうか・・・
マニュアル作成能力はオレには実装されてない機能だったから
あこがれてたんだよ
186 :
デフォルトの名無しさん :04/10/12 18:40:18
初心者です FreeBSDを入れたPCにNICを2枚差して、ルーターではなく サーバーAとサーバーBのクライアント(データーの受取)として 動作させたいんですが、socket()以下の書き方が判らずnetを探して も、例がなくて困っております。 どなたかご教授願えませんか?
>>187 bind()で、INADDR_ANYでbindするのではなく、
それぞれのインターフェイスについてるアドレスでbindすれば良い。
>>188 なーんだ、ってとこです。
1週間悩んでいましたが、、、周りに詳しいのが
いないもんで。(中小企業)
ありがとうございました。
APUE買いなさい。
>>189 ソースを読め、ソースを。
ソースは君のお友達だよ!
いつでも君を待っている。
192 :
デフォルトの名無しさん :04/10/14 02:32:21
二言目にはソースを読めなんていってるけど ソースを読んで理解できる程度の知識があるなら こんなところで質問しないと思うが・・・
193 :
デフォルトの名無しさん :04/10/14 02:49:38
>>192 知識の問題じゃない。
理解しようという努力を怠ってるだけだ。
bindが何の為にあるのかという意味を・・・
確かに質問スレでソースを読めなんていうレスは要らない罠。
ソースを読めば解決する質問もいらない
ソース読んで解決しない問題とは?このスレいらないじゃん
ソースに間違いが無いとは限らない。
ちゃんとドキュメント書けよ
201 :
デフォルトの名無しさん :04/10/14 17:29:28
ERROR:もうちょっと落ち着いて書きこみしてください。8秒ぐらい。 ホストnanashi.net 名前: デフォルトの名無しさん E-mail: 内容: 201げっと
202 :
デフォルトの名無しさん :04/10/15 06:36:46
引きこもってソフトウェアのソース読んでるようなヲタクばかり じゃないんだから・・・ いやいややらされてる身にもなれ
203 :
デフォルトの名無しさん :04/10/15 09:30:31
仕事としてベストを尽くせないやつはゴミ
嫌々やってるとストレス溜まるし、コルチゾールやインスリンが過剰分泌されて 肥満になったり鬱になったりするんだよね。 その先には、生活習慣病や免疫力低下、更には発癌が待ってる。 楽しめないなら早めに見切って転職するのが吉かな
>>191 だ、ちょっと待ってくれ。
ソースって言ったのは
>>189 が
> 1週間悩んでいましたが、、、周りに詳しいのが
> いないもんで。(中小企業)
って言ったからだ。毎回掲示板じゃ面倒だから、
ソースも読めるようになった方がいいだろ?
俺を置いてきぼりにして荒れないでくれ。
207 :
デフォルトの名無しさん :04/10/17 02:19:06
宿題でUDPでTCPのようにエラー処理をし、相手に確実にデータを送れるようにしなさい。 と言うのが出ました。 Winsockを使い、5秒でタイムアウトするまで送れるようにし、タイムアウトするとエラーを返すようなのを組む問題です。 どのようにすればいいのでしょうか? CRCチェックをするにも、そのチェック情報自体のチェックが必要だと思われますし・・・ フラグで破損の場合、破棄するようにしても、相手に届いたかどうかのチェック自体が届かない場合の処理などなど どのように解決するとスマートに出来るのでしょうか? 宜しくお願いします。
>>207 それはだね、UDPを使ってTCPを自力で実装しなさいという事なので、
>>1 以下にあるリンクや本を漁れという、辛い修行なのだよ
>>209 マジですか・・・
そんなに大変だったのですが・・・。
どうりで一ヶ月も期間をくれたわけか・・・
早くから手を付けといてよかった・・・。
危うく提出五日前辺りから手を付けて泣きを見る所でした。。。
一番手っ取り早いのが、データをブロック単位に分けて それらのチェック用データを先に相手側へ転送 相手側がチェック用データを要求する形でブロック単位で転送していく 相手側は要求したデータが来るまで要求し続ける。 最後に相手側が転送完了データを送信側に送って来た時点で、送信側のバッファを開放する。 そのデータが来なかった場合、タイムアウト時間を過ぎれば強制的にエラー吐いてタイムアウトを出せば良い。 受信側も要求したデータがいつまでたっても来なかった場合はタイムアウトを出す。
付け足し。 送信先にデータが届いており、送信側に完了データが届かずにタイムアウトしたとして プログラム側から再度データを送ろうとした時は、受信側はずっと完了データを送り続けるようにする。
>それらのチェック用データを先に相手側へ転送 このデータが壊れてたり届かなかったときは?
>>213 相手からの要求が来なければタイムアウトだから、その場合はタイムアウトでしょ
>>207 >CRCチェックをするにも、そのチェック情報自体のチェックが必要だと思われますし・・・
一致しなければデータとCRC共に間違ってるとして扱えばいい
そもそもUDPってフラグ指定でデータ化けしたら破棄するから 届くか届かないかしかないんじゃないかね?
宿題なんだから自分で考えないと意味無いじゃん。 教えたがりもいいけどさ。
しかも>211はセンスが悪い。
>>218 じゃあセンスの良い方法を挙げてみろよ。
220 :
デフォルトの名無しさん :04/10/17 09:59:40
>>216 それと、パケットの到達順序くらいか。
UDP使ったことないんで、普通の状態で順番の入れ替わりが
おきるのかどうか知らんけど。
222 :
デフォルトの名無しさん :04/10/17 11:06:06
おきまくり
ネタにマジレスするのもあれだけど、 おきまくりだったな。 ローカルでやってもおきた。
>>207 >211のように横着すると,このようにネタにされるわけです。
ちゃんと,
>>1 以下のリンクや本漁れよ〜。
手間かかる割に意味のない課題だな
届かないとか壊れたりとかならまだマシだが、順序が変わるのはめんどくさい
問題は順序だな・・・
プールしてソートすればいいだけ
送るデータそのものに番号も付加しとけば良いだけじゃない?
そんな簡単な物だったら誰も何も言わないわな
なんの基準もなしに並べ替えたいなら超能力でも使っとけ。
>>233 そういう問題で言ってるんじゃないだろう。
まあやってみなよ。
何の説明もなしに脳内問題を持ち出されても意味わからん。
お前が何を問題にしているのかと聞いてるんだが。 ID仕込んで何がまずいんだ?
実際にやってみればすぐに。
本当にそんな難問が宿題なのかよ。 俺だったら月60万で2ヶ月もらっても自身がないな。
先生が簡単にできるであろうと考えて問題作ったのならご愁傷様だな
>>240 宿題なんだから、こんなもんだろ。
仕事で受けるような課題じゃ意味ないし。
・タイムアウト5秒 ・UDPを使って確実にデータを送る 確実にデータを受けとる必要は無いみたいだぞ?
スマートに作ろうとすると難しいよ。 ヘンテコなプログラムで我慢しる。
うち、通信系を重視する大学なんだけどさ エラー訂正とSocketの勉強が同時に出来るって事でUDPでTCPモドキな実装の宿題出された事あったよ。 送れなかったら送れないとエラーを表示さえ出来ればOKな問題だったので、何とかなったけど・・・ でも、多分殆ど送れないソースだったろうなぁ・・、課題としてはOKだったので問題なかったけどw
じゃあ、常にエラーでどうよ?w
248 :
デフォルトの名無しさん :04/10/17 20:33:27
なにもしないで5秒間待て。
つーかさ 昔のパソコン通信はどうしてたんだ? UDPみたいな感じだったんでしょ? 送信順序とかデータチェックとかどうやってたのかね?
MNPつーのがあったけど。
ていうかこんなの簡単だろ。 お前らレベル低すぎ。
昔はパケット交換じゃなかったしな。
>>251 じゃあお前のレベルとやらを披露してみせろや
簡単な概要で良いから手段を挙げろ。
留byさいこー
ここのスレで回答してる人はスキル高そうなんで勉強がてらみてるけど
全然具体的な答えを書かないので勉強にならなかったり
素直に
>>1 からのリンクをみた方がいいかな
送信側はデータを分割して ID(4byte)+DATALEN(4byte)+DATA(DATALENbyte) という形式で送信する。IDは0から1ずつ増やしていく。 データの終わりはDATALENに0を指定する。 受信側はデータを受け取ったらその印にIDだけを投げ返す。まとめて投げても構わない。 データは保存しておき最も若いIDが存在するならそれをアプリに渡して破棄する。 # 0, 3(データの終わり), 2, 1の順に受け取ったら0をアプリに渡し、1を待ってから1, 2, 3と渡す。 送信側は受信側からの受け取り通知のあったIDのデータを破棄する。 送信して受け取り通知のないまま1秒経過したデータを再送する。 5回再送してもなお通知がなければ送信を打ち切る。 受信側は最初の受信から5秒間受信がなければ受信を打ち切る。 データの破損は考慮しない。UDPに任せる。 同時に送信するデータの個数は受け取り通知を見ながら調整する。 # 同時送信を1にすれば順番を考慮する必要はないので実装が楽になる。 # ただしパフォーマンスが落ちる。
>>256 質問。
ラストの0を受け取った受信側が番号の0を送信側に送るみたいですが
それがもし届かなかった場合。
受信側では受信は完了してるのに、送信側は完了してないと言う矛盾が発生すると思われるのですが・・・
再度0を送ればいいんじゃない?
っていうかパケロスとか順番入れ替わったときの 補正機能の実装が出来たとしても確認試験とかそういうのが えらい大変そう。
>>257 それはキリがないのでどこであきらめるかという話になる。
受信完了が送信側に届かないことがあるので
受信完了のackをを返してもらうことにして届くまで再送しよう
↓
受信完了ackが受信側に届かないことがあるので、
受信完了ackのackを返してもらうことにして届くまで再送しよう
↓
受信完了ackのackが送信側に届かないことがあるので、
受信完了ackのackのackを返してもらうことにして届くまで再送しよう
↓
...
ノープロブレム
順番が飛んだら、思いきって捨てましょう。 後は確認応答、リトライだけでなんとかなるんでない。
・・・
こればかりは真面目に考えた事が無い人にはわからんだろう 才能ある人は、なんとかなるんでない なんて言えないよな
白ヤギさんからお手紙着いた 黒ヤギさんたら読まずに食べた しかたがないからお手紙書いた 「さっきのお手紙ご用事なぁに?」
ウィンドウ制御の実装か... 低レベル過ぎて詰まらん
>>257 その食い違いが発生しても受信側は困らないから問題ない。
どうしても厳密にやりたいなら受信側が最後に終了通知を投げて
その応答がなかったらエラーにすればいい。
>>259 テストはライブラリのデバッグビルドでn%の確率で故意に順番入れ替えたり
ロストさせたり受信通知を送信しなかったりすればいい。
アプリがデータの整合性チェックするようにすれば異常も検出できるし。
あと同時に100プロセスとか立ち上げてこの方式が破綻する様を眺めてみるのも面白いかも。
帯域埋める->UDPロストしまくり->再送されまくりの悪循環
>>262 どっちみち複数のUDPを同時に受信して溜め込むようにしないと
パフォーマンスがた落ちになるから整列させる機能をつけない手はない。
>>267 >帯域埋める->UDPロストしまくり->再送されまくりの悪循環
タイムアウト5秒で終了だな
再送って、もっと下の層でも行われてなかったっけ?
どの層だよ。
コリジョン層
コチジャン層?
おねーさん、ナムル追加ね
まず、カルビを全部網の上に並べるのよ。 そこでタイマーをセットする、タイムアウト時間は50秒ね。 タイムアウトが発生したら一気にID番号順に喰い始める。 ここでもたもたしてると肉が黒焦げになってロストするから要注意だ。
>>274 先生! ID順に食べてるんですが真ん中にあるカルビが焦げてます!
>>275 焦げてロストしたらリセットして再送要求を送るのよ。
おねーさん、カルビもう一人前追加
先生! ホルモンがくっいて境目も順序もわかりません!
>>277 そうなったらリセットです。
おねーさん、焼き網交換して
我々のカルビが隣りの席に行ってしまったみたいです…
すみませんC言語の宿題スレで質問したのですがこっち向きかと思い来ました。
すれ違いでしたらゴメンナサイ
http://www.geocities.jp/i035192/forksample.c 上のプログラムの実行結果をもとに
fork関数の使い方と親プロセスと子プロセスの処理について説明せよ
ネットワークアプリケーションとして複数のクライアントからの要求を受け付けるサーバプログラムの例をあげ説明せよ
すみませんが、この2つについて教えてください
281 :
デフォルトの名無しさん :04/10/19 04:35:58
(・3・)
>>282 宿題スレにも投げてるんだよ、彼は
何故誰も答えないかもわからず、あちこちに投げまくってるようだが。
宿題スレは答えてやればいいのにな。 俺は行かないけどな。
Google代行者に成り下がるような気分でイヤだ
>>285 Google宣伝者に成り下がる気分は良いのか?
自分がわからなければ氏ねという低脳が居るのはここですか?w
最近の学校は図書館もないのか。
IPヘッダの先頭から9バイト目以降の8ビットの各値は、 デフォルトで0のようですが、任意のビットを立てる方法はないのでしょうか? 開発はVC++6.0です。 MFC使ったソケット通信プロセスに反映できないでしょうか?
bit立てても、立てた通りに届かないのでは?
>>292 9byte目ってprotocolか? それとも+8byte目のttlのことか?
なんにせよ意味のある値なので書き変えちゃダメ。
>>294 TypeofServiceの優先度0〜2とD・T・Rの部分の話なんですが。
独自プロトコルを定義したいのか?
10msec間隔でソケット通信をしたいのだけど どうしても20000回に1度程度の割合で300msec程度の送信か受信遅延が 発生しています。それの解決方法の一つとして 優先度や遅延処理のビットを変更して試したいのです。
またお前か。
そうです
質問です。 IPアドレスからホスト名に変換する関数ってありませんか? 言語はCです。
gethostbyaddr これしきのことすら知らなくてネットワークプログラムを書くのは無謀。
ネット周りのAPIなんて数限られてるんだから 遅延学習は非効率的だよな。
303 :
デフォルトの名無しさん :04/10/19 18:42:28
事実だろ
ウザ
306 :
デフォルトの名無しさん :04/10/19 18:47:20
そうだけど・・・
ネットワークプログラムの場合、プログラマがタコなリスクはSEGVどころじゃないからねえ セキュアなプログラミングが必要と叫ばれたのはもう数年以上前だけどまだ場末には全然浸透してないし
ウザ
今使ってるOSじゃSEGVなんて出ません!
MS-DOSでつか
311 :
デフォルトの名無しさん :04/10/19 20:19:19
OS板の貴公子が作っているOSとか
312 :
デフォルトの名無しさん :04/10/19 20:32:59
MXレコードを参照したいので,popenした後,標準出力から結果(nslookupした結果)を読んでいるのですが, 結果の途中でnull文字にぶち当たって,%s等をすると正確に全てを読み出せません. MXレコードを参照するのはどんな方法で行うべきしょうか?
>>313 だってSEGVがないなんてまともなOSならほとんど考えられないし
つーかマジでMS-DOSでしたか
ご愁傷様('A`)
316 :
デフォルトの名無しさん :04/10/19 21:00:02
ふつーのSMTP鯖を勉強で作ってます 悪用する気はないです ので,だれか回答お願いします
%s等をしないで別の方法を使う
普通のMTAはそんなショボいことはしない
>>317 2ch だからとか悪用とかいうのは抜きにしても、質問の仕方が悪すぎ。
「%s等をすると正確に全てを読み出せません」
なんだこりゃ。質問事項すら手抜きする馬鹿に誰が回答するんだ。この馬鹿。
>>312 UNIXならres_query(3resolv)使えよ。
323 :
デフォルトの名無しさん :04/10/20 01:27:58
これからの時代はJavaで書けば別にそんなもの知らなくてもいいような。
326 :
デフォルトの名無しさん :04/10/20 17:40:30
POSIXの規格制定って、今更って気がするよね UNIX自体死滅の寸前なのに 動くのが遅すぎだよ
CはもうObsolescent
328 :
デフォルトの名無しさん :04/10/20 21:10:38
これからの時代、Cを使ってネットワークプログラムを書くのは無謀。
無謀も何もバッファオーバーフローしまくりで破綻してる品。
かといってJavaでサーバ作るのもなー
331 :
デフォルトの名無しさん :04/10/20 22:07:36
初歩的な質問ですがお願いします Win32で名前つきパイプを使っているのですが、 サーバ側で、UNIXでいうselect()やpoll()の様に多重待ち(?) を実現するのはどうやればいいんでしょうか
332 :
デフォルトの名無しさん :04/10/20 22:08:28
なんで、Win使ってるのにイベント駆動型にしないんだろ・・・ といつも思うのは俺だけ?
調べてみました WaitForMultipleObjects() が使えそうなのでコレでやってみます
WSAWaitForMultipleEventsのほうがいいかもな
WSAWaitForMultipleEvents ってNamedPipeで使えるのかな
イベントで待ち合わせられるソケットの最大数は制限がある。 しかもかなり低め。本格的なサーバには使えない。 素直にメッセージループで処理するのが吉。 WindowsOSとsocketの親和性は次の通り。 WinProc > WaitForXXX > select
重複I/Oでブロッキングせずにガンガン処理していった方が パフォーマンスも良くなるし、簡単に実装出来る様な・・・
>>338 MAXIMUM_WAIT_OBJECTS はいくつになってる?
想定される実用サーバの同時クライアント接続数と比較してみるとどうだろうか?
とうてい使い物にならないことがわかるはずだ。
WaitForXXXは噂に反して、決して低負荷じゃない。 噂に流されないよう注意。
WinでサーバサイドならIOCPじゃないのか。
そうなんだ selectって万能だから好んで使ってたんだけど
346 :
デフォルトの名無しさん :04/10/22 12:01:08
347 :
デフォルトの名無しさん :04/10/22 13:11:58
UNIXでTCPを使って通信をしたいのですが、どのヘッダをインクルードして、どの関数を使えばよいのでしょうか?
www.turbolinux.co.jp/world/library/features/c_magazine/vol_11.html
自分はここを参考にしました
>>347
>>347 ヘッダはいろいろあるよ。
そういうのはまとまった情報無いんで。
10のうち真実が1しかないような初心者向け解説サイト
がたくさんあるから一通り読んで。
StevensのUNIX Network Programmingの和訳を買え。
> ヘッダはいろいろあるよ。 > そういうのはまとまった情報無いんで。 は? 使いたい関数の man を読め。必要な include ファイルが書いてある。 でおしまいじゃん。
>>351 自分がどの関数を使いたいかなんて素人にわかるわけ無いじゃん
「どの関数を」ってのを読み落としていたじゃん。
WindowsのオーバーラップI/OとI/O完了ポートを使ってサーバを作ろうとしてます。 MSDNライブラリなどを見て、とりあえず1つのクライアントの接続を受け付けて 送受信を行うプログラムは動作したのですが、 なにぶん情報が少なくてよくワカンナイコトがいっぱいです。 1)複数の接続を受け入れる場合はバックログの数だけソケット確保・AcceptEXを しておいて適宜追加していく、という方法で良いのでしょうか。 2)AcceptEXは接続受け入れと最初のパケットの受信を行いますが クライアントが接続してきたにも関わらず何も送信してこない場合には とりあえず接続だけ確認して、しばらく待って何も送ってこないようなら 切断したいのですが、コレはどのように対処すれば良いのでしょうか... なんか根本的に間違ってる気がしないでもないのですが アドバイスしていただけるとありがたいです。
proposed-updates って何?
ごめん誤爆した
>>359 ありがd!超参考になったです( ´▽`)
コネクションの終了時に、相手のFINに対する応答でACKではなくRSTを返すって、 普通じゃないとはおもうんですが、実装のヒントいただけないですかね? いきなりRSTっていうのはsetsockoptで、SO_LINGER使えば できることはわかったんですがRSTの契機をを相手のFINに対して 行いたいんです。
>>361 「このままでは二人はダメになってしまうよ。もう別れようか・・・」
「うーん、あーごめんねーキャッチ入ったからー ばいばーい」 ガチャッ
「・・・」
あんまりだよそれは
>>362 そうそう、そんな感じ。
二股はおろか、百股くらいなんでわずらわしいのは全部リセットしたいんですw
別れの余韻(TIME_WAIT)も不要です。
RSTだと未受信のまで捨てられちまいそうな気がする
Windowsの、しかもソケットじゃなくてMACアドレス取得に関しての 質問なのですが一応ネットワーク絡みということでこのスレで質問 させて下さい。 Win32APIのGetAdaptersInfoを使って全アダプタを調査、MACアドレスを 取得したのですが、IEEE1394のMACアドレスだけ取れませんでした。 ipconfig /allでも出てこないMACアドレスなのですが、getmac.exeでは 出てきます。どうやって取得するのでしょうか。
>>364 一般的にはそうですね。
けど、特殊な要件でRSTとばすのは上位のAPレベルではもう処理が
終わったタイミングなんでとりあえず、それは無視できます。
>>365 レスd。
すいません。私がおバカなだけなのかもしれませんが、
残念ながら参考になりませんでした。
datagramのパケットにSYN/FINフラグの付けてパケットを減らすという技術は
わかりましたが、ちょっと意図するところと違ってそうです。
引き続き、なんか情報あればお願いします。
368 :
デフォルトの名無しさん :04/10/26 21:34:25
age
>>368 発言数が少ないわけでも無し、何故無意味に上げる?
370 :
デフォルトの名無しさん :04/10/26 21:42:52
age
372 :
デフォルトの名無しさん :04/10/26 21:50:16
( ´-`).。o(ageただけで噛みつかれた・・・)
いらん事するからだろ
>>375 余計なお世話だからやめとけ
全部のスレがそんな事やったらどうなると思う?
379 :
776デフォルトの名無しさん :04/10/27 00:32:32
VC6とWinsockで簡単なチャットプログラムを組んでまして、 今まではchar型の文字列を↓のようなかたちでそのまま送受信してたのですが、 GetDlgItemText(hDlg,IDC_SENDTEXT,SendMsg,sizeof(SendMsg));//テキストボックスの文字を受け取って send(sock,SendMsg,(int)strlen(SendMsg),0);//そのまま送信 これって文字列がそのまま覗き見されるような形で送受信されてるんでしょうか? (基本的な部分の仕組みが分かってない…) そうだとした場合、例えばですが、 内容を簡単に見られたくないテキストファイルをバイナリファイルにするような感じで 送受信するデータをバイナリ化するにはどうすればいいのでしょうか? 教えてください。お願いします。
テキストファイルをバイナリファイルにする方法を使えばいいのでは?
バイナリでファイル出力するときは確かWriteFile(〜)で 勝手にやってくれたように思いますが、、、これ以外方法をしらないんですが、 これでどうすればよいのか見当がつかないであります。 できればもう少し具体的に教えていただけないでしょうか。
カエサル暗号でも使っとけ。
fd = socket()でソケットを取得しておいて その後、ネットワークのインターフェースをifdownしちゃったとしたら このfdって使えるの? その後でifupしたら、このfdって使えるの?
やってみりゃいいじゃん? 簡単に試せるでしょ。
385 :
デフォルトの名無しさん :04/10/27 03:08:02
g++ hoge.cc -lresolv としてコンパイルしようとすると usr/lib/gcc-lib/i686-pc-cygwin/3.3.3/../../../../i-686-pc-cygwin/bin/ld: cannot find -lresolv collect2: ld returned 1 exit status となってしまうのですが,解決策をお願いします. Cygwinです.
386 :
デフォルトの名無しさん :04/10/27 03:32:59
resolvライブラリをインストールする。
BGPについて詳しく説明してるサイトってないですか?
本買え。最近出てなかったか? ってーかBGPいじる奴がRFCも読めないんじゃ世の中迷惑するわけだが。
Windowsでファイルを転送するプログラムの具体的な例が欲しいんだけど スレッドと非同期I/Oを組み合わせてCかC++かJavaで誰かプログラム書いてソース公開して! と言ってみるとソースがあがってくるか試してみるテスト
javaならいくらでもあるだろ。探せ。
391 :
デフォルトの名無しさん :04/10/28 08:23:59
WinとUNIX系で、ソースコードコンパチなネットワークサーバープログラムを組みたいのですが そういうのに適したライブラリとか無いですかね?
aprとかは? 俺はよく知らないけど
cygwin
394 :
デフォルトの名無しさん :04/10/28 09:24:19
Perl
boost::socket ace
>>389 つーかソース手に入れて何すんの?
ファイル転送プログラムなんてググりゃすぐでてくるだろ
目的を聞かしてよ
>>395 boostにsocketなんてあったっけか?
>>398 pukiwikiに書いてある。
まだ正式実装はされてない模様。
>>399 探しちゃったじゃん、バカチンが...
でも仕様ドキュメントを見たけど、
select使ってんのね、Linuxは問題ないけどWindowsじゃパフォーマンスは期待できんなあ。
文句あるなら自分で作れよ
ACEだけど、日本で使ってるの見たこと無いなあ。 英語のトレーニングになるからと一応ドキュメントはチェックしたけど、話題にもならん。
>>401 Windows版はパフォーマンスやスケーラビリティが要求されない処理向きだよね。
>>400 Linuxだってパフォーマンス期待できないだろ。
Linuxでselectって実際どうなの? ソケット周りはなんでもかんでもselectに押し込んじゃって 時間かかってほったらかせるのだけpthreadってのが マイブームなんだけど
>>397 PureP2Pのファイル転送システムを作りたいんだよ
オープンソースにして漏れみたいな初心者プログラマーの
スキルアップに使えるようにしたいんだ
実際に作ろうと思ってるんだけどスレッドと非同期I/Oのところが
よくわかんないんだよ ググってもでてこないしね
Windowsでselect()はまずいだろ。 Unixのselect()使用のオープンソースをWindows環境にそのまま移植しようとして 返って手間がかかる羽目に陥るってのは、大抵のsocketプログラマが一度は経験する。
>>408 言いたいことがよくわからん。具体的に何がまずいの?
英語読めない俺はboost::socketの解説がされる入門書が出るまで待たねばなるまいか・・・ はぁ・・・
412 :
デフォルトの名無しさん :04/10/29 02:28:38
多分出ないよ
英語が読めないのにC++使ってるのかよ
国産のはずのRubyですら英語読めないといけないしな
ぶっちゃけ、英文で読んで意味が分からない文章というのは、 日本語だったとしても意味が分からないことが多い。 つまり、あまりに説明不足で説明したうちに入らないような文章は、 万国共通で存在するのである。
>>415 だから何?と聞き返したくなるような趣旨不明の文章の典型。
417 :
デフォルトの名無しさん :04/10/29 12:39:24
416はネタだよな・・・
で、Windowsではなんでselectまずいの?>408
419 :
マイク ◆yrBrqfF1Ew :04/10/29 14:27:51
Winsock 2.0プログラミングだかなんだかで selectでブロックしてると Windowsのメッセージイベントを処理しないとかあったような気がするな。
420 :
デフォルトの名無しさん :04/10/29 14:30:37
Windowsで関数名が全て小文字の関数を使うと格好悪いからでは?
>>419 それはWindowsのスレッドがわかってない無知のたわごとです。
selectしてブロックしてるからメッセージを処理できない当たり前であって、
select待ちをワーカースレッドに追いやれば済む問題ですよ。
ただしselectにタイムアウトを設定してポーリングで毎度アプリケーションの
終了要求等に答えるための処理が必要だとは思いますけど。
むしろ非同期メッセージ通知で処理するselectの代わりに用意されたWSA〜の方は メッセージキュー処理に依存するので逆にパフォーマンスが悪くなったりする 弊害の方がやばいです。 素直にselect使いましょう。
>421 >メッセージを処理できない当たり前であって メッセージを処理できないのが当たり前であって の間違いです。
>>422 それは無いでしょ。
select()は使うな、WSASelect()を使えというのが一般的だけどね。
勿論、実装次第でパフォーマンスが悪化するケースはあるだろうけど、
それは使い方がマズイだけでしょ?
まあ、ホントはIOCPとか使えば良いんだろうけど
重複I/O使える環境で、オーバーラップI/O使わない理由ってあるの?
>>426 対話的処理とかで、応答の過半が UI スレッド(メインスレッド)の介入を必要するケースとか、
IOCP でやっても結局 UI スレッドにメッセージングで通知する(かつ転送量が少い)場合にはおとなしく
WSAAsyncホゲホゲ使っとくのがいいのかも知れない。
漏れはAPI覚えるのがメンドクサイからつい IOCP で何でもやっちゃうけど・・・
>>427 俺様専用お約束ライブラリを作っときゃいいじゃん。
429 :
デフォルトの名無しさん :04/10/30 01:30:14
うーん、WinSOCKのLSPつかってみた。 WSAduplicatesocket()でlistenできなくなった。 回避方法しらない?
戻り値確認しる
>>408 どういうとこに困るの?
漏れは逆にWindows->Linuxの移植やってんだが、
Windows/Unixのselectを使用する際に気をつけるべき点とかあったら教えてください。
おながいします。
winsockのselectは64個まで
Linuxもそんなもんだろ
さすがに今の主なUNIX系OSでそんな制限はないだろ。昔はともかく。
437 :
デフォルトの名無しさん :04/10/30 21:07:35
ネ
selectって何であんなに変な仕様になったの? ソケットの実装上あれが最適だったとか(まさかね・・・)。 そこらへんの歴史的経緯ってどっかに書いてあるのかな。
どこが変なのだ? まずそれを書け。
とりあえずselectはソケット専用ではないですから!残念!
selectは変だとは思わないが、socket関連の関数群には変な仕様のものが多い
どこが変なのだ? まずそれを書け。
変というか非効率的って事だな。
一ループごとに登録でループまわしてポーリングして
チェックでまたループまわしてで空振り多すぎ。
add_fd(this, fd), del_fd(this, fd), poll_fd(this, read_callback, write_callback)
なんてインターフェースにしとけば字面上は無駄なく書けるのに。
きっと設計時には数十程度のコネクションしか想定してなくててきとーに作ったんじゃないかと
想像してるんだけど真相はどんなものかと。
>>441 fdを統一的に扱えるから専用ではないけどソケットを想定してなきゃあんな大げさな仕様にはなってないだろ。
なんだ厨房か。
callbackって…
TCP/IPの実装はBSD UNIXの頃だからもう20年くらい経つんだよね。 ビルジョイは今何してんだろ?
そもそも、その時代はイベントの概念ないだろ・・・ OSが到達を教えてくれるなんて親切設計になったのは、つい最近の話だよ。 それまでは全てプログラム側でチェックしなきゃいけなかった。
signalはイベントですよ。 マルチスレッド環境じゃないと、I/Oのイベントを効率的に使いづらいね。
>>444 つうかselectはsocketができるよりも前にすでにあったんじゃないか?
妄想はいいからソース出せ
selectもsocketもマニュアルには4.2BSDからと書いてあるので 同時といってもいいんじゃないのかね。
>>451 ソケットのソースなんていくらでもあるだろ。
てめーがソース読めないだけだろ!
454 :
デフォルトの名無しさん :04/10/31 20:32:00
スレ違いかもですが、 会社がウィルス(W32.Beagle.AV@mm)にやられちゃったみたいです。 明日、ローラー作戦で退治させられると思うと激しく鬱なんです。 なんかパケット追跡して変なメール出してたりアクセスしてるPCを特定しちゃうような プログラムって簡単に作れないでしょうか? 力業で探すのはとてもつかれるので。。。
普通にログ見ればいいじゃん。
>>455 あ、そうか!そうだよ。サンクスです。m(__)m
あれ、でもメールsubjectとかもログされるんだったか。。な
明日出勤したらちょっと調べてみるです。
>>444 select はシステムコールで、カーネル側で実行されるから、
そこからユーザプログラムの関数を呼ぶなんて無理。
signal みたいなことをやると、そこからは async signal safe
な関数しか呼べなくなるから、プログラミングが困難。
でもまあ今時の *BSD にある kqueue は、add_fd に近い発想。
libevent は、callback 登録方式なので、まさに 444みたいな
感じ。libevent はユーザランド実装なので、async 問題はない
のね。
>>457 >select はシステムコールで、カーネル側で実行されるから
?
460 :
デフォルトの名無しさん :04/11/01 09:52:40
?
!
@
@!ため吾郎
>>459 select はシステムコールでしょ?
質問です。 winsock2が使える環境で以下の二つのプロセスがあります。 ・プロセスA : ソケットの作成、listenまでを行う。プロセスBを起動。listenを行ったソケットハンドルを複製してプロセスBにパイプを使って渡す。 ・プロセスB : パイプ経由でプロセスAから渡されたソケットハンドルを使用してAcceptを行う。 ここでプロセスAで、WSADuplicateSocketを使用してソケットを複製するとハンドル数(タスクマネージャーに表示されるハンドル数)が 増加していきます。 ハンドル数の増加を防止する為に、複製したソケットハンドルをプロセスBに渡した後にプロセスAで明示的にクローズしたいのですが プロセスAでclosesocketを使用してクローズしようとするとエラーが返ってきます。 (closesocketに渡すソケットハンドルは、WSADuplicateSocketで取得したWSAPROTOCOL_INFO構造体をWSASocket関数に渡して作成してハンドルです。) この為、プロセスAがプロセスBを起動するたびにハンドル数が増加していって困っています。 同様の現象が起こった方がいらっしゃればどのような対策をされたか伺いたいです。
B->Aの順に両方閉じる
PunchingHoleUDPを簡単に利用する為のDLL作ったけど需要あるのかな? 今はとてもじゃないけど外部に公開できる状態じゃないので、需要あるなら色々手直しして公開してみようと思うけど・・・ ちなみに、サーバーサイドにDLLを置いて、サーバーだけはTCPで接続して、設定したバッファーサイズ分ブロックにわけて そいつのhashをサーバー経由で相手に確実に送った後、データを転送。 バッファーサイズが到達する度にhashの同一チェックしてサーバー経由で確実に届いたと知らせるようなシステムなんだけどね。 サーバーのレスポンスが悪いと、到達通達が送れて、せっかく転送速度速くても遅くなってしまうと言う難点あり。
うpきぼんぬ ソースも公開してくれるとなお嬉しい
>>467 その素晴らしい作品をネタに議論して盛り上がろうよ。
到達通知がサーバ経由なのが解せない・・・ 別に批評でもなんでもないけど。
>>470 UDPだけで完全なTCPエミュレーションが不可能なのは過去logの議論で実証されてるだろ。
UDPだけだと、到達通知が確実に届いたと言う通知のエラー処理をせねばならない。でそのエラー処理のエラー処理が(ry
とキリが無いって話だったはず。
鯖味噌なんだろ
TCPはUDPと同様に不確実なIPで実装されてるのに不可能なの?
WindowsXPではOverIEEE1394が使えますが Windows2000用のドライバってないですか?
>>471 難しいという話は出たが、不可能と実証されたっけ?
477 :
デフォルトの名無しさん :04/11/01 20:54:32
ソース期待age!
>>476 確か直近の関連したカキコで、
・宿題で UDP でエラー訂正してXXXってのが出た
・TCP のプロトコルの説明読め
ってのがあったような気がする・・・
そもそも別に難しくない。世のほぼ全ての P2P ソフトが普通にやってることだし。
P2PはTCPだろ
480 :
デフォルトの名無しさん :04/11/01 21:01:39
WinMXはUDPも使っている。
TCPがやっていることを、UDPを使って模擬ることは 普通に出来るでしょ。
難しくないのであれば、こんな話にはならないのだがな。
>>482 WinMXが人生においてほぼすべてのウェイトを占めてるんだろ。
>>483 どこが難しいのか、俺には全くわからない。
TCP が使える状況で車輪の再発明みたいなことをするのは意味無いけど、
UDP で(TCP程度に)リライアブルなデータ転送を行うのは何も難しくない。
API一発でできないから難しい、という意味?
>>485 ただ実装するのは難しくもないけど(実際課題レベルだし)
高負荷時にもTCPと同レベルでちゃんと動くものを作るのは結構しんどいよ。
あえてTCP使わないって事はパフォーマンス重視なことが多いから
いい加減に作ると使い物にならない。
>>486 課題レベルの話なので、この場合では
高負荷とか多分どうでもよくて、それなりに安定した
通信が出来ればいいんじゃないかな
ソフトイーサの人が確かやってたが結構なスループットだった気がする。
>>486 なるどほ。UDP Hole Punching なんかしか使えない状況でなら、
パフォーマンスが若干劣化しても意味アリか。
「いい加減に」って例えば1パケ毎に応答確認とか(w?
>>471 TCPもそんなことやってないよ。両側で完全な送達確認ができたことの確認が
できたことの確認....は本質的に不可能(笑) 最後はどちらかが送りっぱなし
であきらめるしかない。TCPだとFINに対するACKは待つけどACKは送りっぱなし
というあたりに相当する。
>>490 うちのサーバに FIN_WAIT っていっぱい表示されてるのは喪前のせいか!!
492 :
デフォルトの名無しさん :04/11/01 22:07:25
494 :
デフォルトの名無しさん :04/11/02 01:19:35
何気に良スレあげ
496 :
デフォルトの名無しさん :04/11/02 10:19:14
晒しage
497 :
デフォルトの名無しさん :04/11/02 10:20:47
馬鹿じゃないよ
馬鹿じゃなければいい
普通に考えればわかると思うけど、UDPで完全なTCPエミュレーションは不可能 絶対どこかで妥協しなければならなくなる。 よく考えれば必ずチェックのチェックと言う永久ループに突入するから どこかで妥協して限りなく信頼性をあげる事は出来るものの、100%の正確性は得られるはずが無い。 生ソケットとかでも使わん限りな。 出来るって言ってるヤツは、その方法晒してみ? まぁ、間違いなく突っ込みどころ満載だと思うが・・・
まぁ、間違いなく突っ込みどころ満載だと思うが・・・ まぁ、間違いなく突っ込みどころ満載だと思うが・・・ まぁ、間違いなく突っ込みどころ満載だと思うが・・・ それはお前だろ・・・
>>500 まずお前の方法とやらを晒してみろ。
話はそれからだ。
出来ないならただの口だけ野郎だ
>>256-260 ↑結局こういう事になるんだよな。
出来るって言ってるヤツは、実例示さない辺りあんまり深く考えてないと思われる。
ちょっと考えれば無理な事に気づくだろ。
>>503 >>256-260 は、「完全なエラー通知処理は無理」ってことを言ってるわけだけど、
>>490 にあるように TCP でもそれは同じこと。
(最後のパケットが lost すると FIN_WAIT2 ステートまでしか行けない)。
最後の「さよなら」を相手がちゃんと聞いたかどうかなんて、超能力者にもわからない。
アホを相手にするのは面倒なのでTCP over UDPでググってください。
再送の話か・・・ TCP in TCPだと、外側と内側のそれぞれのTCPが再送して それはもう大変なことに
507 :
デフォルトの名無しさん :04/11/02 12:28:07
質問です。 これからネットワークプログラミング入門をしようと思うんですが まずここで上がってるようなUDP,TCP,TCP over UDP と言うような基本的な用語を理解出来る様になりたいのですが どのような本を読めばいいのでしょうか?
>>4 のサイトが問題ありとされているのは何故ですか?
511 :
masataka :04/11/02 15:35:59
現在、WSAEventSelectを使用していろいろやってみているのですが、 どうも使い方がよくわかりません。 いままでは、WSAAsyncSelectの方を使っていて、問題ありませんでした。 socket → WSACreateEvent → WSAEventSelect → bind → → listen → WSAWaitForMultipleEvents → WSAEnumNetworkEvents の順番で呼び出すのですが、たしかに、FD_ACCEPTイベントは発生し、所得でき ます。 しかし、それ以外のイベントが発生しません。 また、FD_READがもし発生したとしても、WSAAsyncSelectのように、socketが引 数で飛んでくるわけでもありませんので、socketハンドルを所得することができ ません。 もしかして、こういうものなのでしょうか? もちろん、FD_ACCEPTが発生した時に、accept関数を呼び出し、その後、recv関 数を呼び出せば正常に読み込めます。 現在は、 FD_ACCEPTが発生→accept関数→read関数→close関数 という順序で、やりたいことはできているのですが、 なんとなく納得できません。 WSAEventSelect(listenSocket,hEvent,FD_ACCEPT | FD_READ | FD_WRITE | FD_CLOSE) として呼び出しているので、FD_CLOSEイベントに対応してclose関数 を呼び出さなくてはいけないような気がするのですが。 以上、詳しい方がいらっしゃいましたらば、よろしくお願いします。
>>511 >しかし、それ以外のイベントが発生しません。
一回 select が完了 (イベントが発生) したら再度 WSAEventSelect する必要があります。
>もしかして、こういうものなのでしょうか?
そういうものです。普通の select のケースと同様、自分で覚えておいてください。
>close関数を呼び出さなくてはいけないような気がするのですが。
必要ありません。
>>510 別にいいんだよわからなくても。
そこで勉強して実装して勉強して実装して
ある日問題に気づいたときに
「今までありがとう!そして、バーカバーカ」
と言うためのページ
PunchingHoleUDPのサンプル作ってみたけど、やっぱルーターが変換したポート番号を感知するサーバーが必要なんだね・・・。 ポート番号固定でやってたら、ルーターがどんどんポート番号変えてくるんで、そいつに変えてイタチゴッコしてみたけど・・・ う〜ん、微妙な技術だ・・・。 使いどころがわからん。
>>514 例えばIP電話プログラムで、交換局に相当するサーバでクライアント A, B を結びつけたら
あとは A <-> B で自立してパケットをやりとりできる。
IP電話は電話帳役のサーバはいても交換局は普通いないよ。
え? 交換局=ルータだろ?
519 :
相談あげ :04/11/03 02:03:00
UDP通信についての相談です。 現在某社の制御機器のUDP通信機能を作っています。 プロトコル自体はそのメーカーの独自のもので、接続を許可する クライアントのIPとポートをあらかじめサーバ(=制御機器)に登録 しておき、クライアントからは自分のクライアントIDをヘッダに含めて コマンドを送信します。 基本的な通信部分は実装できたのですが、同時に複数のクライアント からコマンドを受信した場合の処理の仕様が無いため、提案するための 仕様を考えています。一般的な処理などあれば教えてください。 現在は ・ 1回のコマンドが複数のパケットに分割されてもOK ・ 最初のパケットから設定されたタイムアウト以内にコマンドが完結 しなかったらNG ・ NGの場合は何も返さない としています。この方法だとクライアントでもタイマを実装してNGの 場合を判定しなければならないという問題が考えられます。 「そんなもんだ」でもいいし「○○という概念を調べれ!」でもいいので 教えて!エロい人!
「制御機器」がUDP通信でいいのか、その点について提案する方が先じゃないだろうか?
クライアントがタイマでNGにした、その0.0001秒後に制御機器側で受理してしまった。 さて、運命や如何に?
受理してなんか返してもクライアントはもうNGだから無視するだけだろ。
でもその制御機器がそれにより何か動作をしてしまい、 クライアントは動作していないはずだと思い込む(応答は捨てるわけだから)。 というパターンは?
クライアントは無視するからそのうちサーバもNGで切断。そんだけ。
>>520 ファームなんで、あんましデカい処理は実装できないんですよ。。。
>>521-522 仰るとおり、クライアントでNGになった後に制御機器から応答が返って
しまう場合も考えられます。
この状態を想定して、ベタなんですけれどもクライアント側でコマンドを
送信する前に受信して受信バッファを空にしてから送信する、という
サンプルを配っておきました。一応皆さんそれに合わせてくださってるんで
今のところ問題にはなってないです。
>>523 クライアント→制御機器:コマンドビット
クライアント←制御機器:完了ビット
クライアント→制御機器:状態監視
クライアント←制御機器:状態通知
というメンドいハンドシェイク(?)で回避してます。UDPなので「なってるはず」
というのは極力避けるように考えています。
皆さんありがとうございます。
>>520 (追記)
そもそも状態監視ではなく制御をEtherNetでやること自体
私は反対だったんですけどねw
>>524 残念ながらクライアントの受信スッドレは常時動いちゃってたりするのですよ。。。
そんなわけで
>>525 のような事をして回避してまつ。。。
制御機器って何だ?
ちなみにUDPだとパケット順序が入れかわるかもしれないことも 考えておけよ
>>525 クライアントがエラー、終了、再接続したとき受信が前回分のと混ざる可能性があるんじゃないのか?
バッファが空かどうかって怪しい感じ。
セッションごとにユニークID振らないとまずいんじゃないの。
TCPをデカイ処理だと認識しているようなシビアで高度なプログラマがこんなサイトで質問しているとは驚きだ。
なんだかUDP入門みたくなっちゃってすみませんね。
>>528 サーバにあたります。
数十点のI/Oで検査機器の制御を行うものです。
人が死ぬような種類のものでは無いので、仕様にも危機意識が
若干無視されているような気がしますが、、、それはスレ違いっとw
>>529 ありがとうございます。
実験ではルータ/ハブをかませても2分割程度だったので
入れ替わっちゃったらヘッダが無くなってNGになるからあんまり
問題視されていません。
>>530 それこそが今回の質問の核心なんですよ。。。タイムアウト時間内に
混ざっちゃったらどうしたらいいのかが解らないんです。
一応ユニークIDは振ってあります。
>>531 まったくもって同感です。私のようなド素人(入社2年目)に任せてるのは
マズいんじゃないかと。。。
ファームのTCP/IP以外の通信プロトコルが過去の遺物で 高負荷・OS道連れロックとかいうオチは用意されてないよな? 全てLAN環境とかいうオチは用意されてないよな?
楽しようとUDPにして却ってハマル奴が多いんだよね。 それなりのシステムになりそうだね。
>>533 > 高負荷・OS道連れロックとかいうオチ
制御ユニットとはバス接続で切り離されています。
ネットワークユニット単体でウォッチドックされています。
> 全てLAN環境とかいうオチ
最初の構想でありましたが、猛反対して回避しました。ルータ使用は
オプティカルユニットがルータ機能を持っちゃってるためです。
制御端末(=PC)が3台、制御機器(=サーバ)が1台の閉じた
ネットワークです。
>>534 えぇ、ハマってますとも。どっぷりとw
仕事でお勉強しちゃうのもどうかとは思いますが、
しっかりと基礎理論を構築しておこうと思っています。
余談だけど仕様の段階での危機意識って薄い感じでも 実際テストをやりだすととたんに厳しいこと言ってくることってあるよね。 そんな細かいこというなら仕様の段階からもっとつめとけと。
なんでTCPにしなかったの?
>>536 以前やった仕事がまったくもってそんな状態でしたよw
後から言った、言わないの話になるのは嫌なので、気付いた事は
先手を打ってテストして仕様に盛り込んでもらうようにしています。
>>537 私が勉強不足なのでTCPの実装にどれくらいの工数が掛かるのか
見積もりできない、というのが本音です。お客さんもUDPしか経験が
無いみたいですし。。。
UDPで出しているパケットを全て強く型付けして、
パケット到着、タイムアウトのイベントに対して、
きっちりと(マトリックスに抜けがないように)状態遷移図を書く。
こういう基本をやっておけば、
>>523 というようなことは起きないというか、
起きても問題なく処理される。
シーケンス番号を使う場合は、
シーケンス番号順にパケットを渡してくれるdaemon (thread)を動かすとよい。
そうすれば後は全てシーケンス番号順と仮定して構築できる。
うぅ、、、なんだかTCPをマトモに実装した方がラクな気がしてきた。。。
>>539 ありがとうございます。
シーケンス番号というものを振るdaemonというのは、自分で実装する
ものなんでしょうか?
ならば別のセッションのパケットの一部が割り込んでもそこでハジく
ことができますね。
>>540 > うぅ、、、なんだかTCPをマトモに実装した方がラクな気がしてきた。。。
TCPでやってもちゃーんと状態遷移を確認する必要がありますよ。
相手は何送ってくるか分からないし、(mal-functional failure)
途中で勝手に接続切るかもしれない。
というか状態遷移も書かずにマルチベンダーで開発するのは無謀。
大部分が未定義のまま実装が始まることになる。
学生の頃バイトでシステム構築やっていたけど、
仕様の書き直し、詳細化をたくさん上流に上げましたね。
シーケンス番号はセンダーが付けたのを、レシーバ側で整列する、
と言うつもりで書きました。(UDPはなくなったり順番変ったりするので)
再送ロジックがない場合は、特別な型のパケットが来た時には、
resetするようにすればいいでしょう。
スキルが無いと異常系が想定できないんだよね。
> 再送ロジックがない場合は、特別な型のパケットが来た時には、
> resetするようにすればいいでしょう。
現在は受信スレッド内で受信したパケットは「全てそのまま」ループバッファに
溜めてますが、仰る通りパケットごとに判別しなければいけない(というか
回避不可能)ですね。どういった実装になるかは今は思い付けないんですが、
キチンと練るための時間をもらうことにします。
厳密にやるとTCPが何をしているのかが勉強できそう♪
> 状態遷移も書かずにマルチベンダーで開発するのは無謀。
ループバッファに溜まったデータを解析する際の状態遷移は起こした
んですが、確かにパケット単位での状態遷移は今初めて考えている
ような状態です。
>>542 仰るとおりです。精進しまつ。。。
一応の結論。
・ UDPのパケット単位での判定方法を練り直す。
・ TCPの実装を検討してみる。
ということにします。
レスをくださった皆様、こんな夜更けにお付き合いいただき
ありがとうございました m(_ _)m
>>535 >制御端末(=PC)が3台、制御機器(=サーバ)が1台の閉じたネットワークです。
・・・これがLAN【Local Area Network】じゃなかったら何なんだ、と小一時間(ry
>>543 >厳密にやるとTCPが何をしているのかが勉強できそう♪
なにをやってるが勉強してからにすれ
ちなみにTCPはbyte streamなので、 ill-functional failureのclientを想定すると、 ・どんどんデータを送りつけてくる。 例えば、データ境界として定義したNULを全然送らずにデータが続く。 ・layer 6のヘッダにあるデータ長が間違っている!(ジーザス!) などなどの状況を想定する必要があります。 つまりデータ境界の保証は上のレイヤーの仕事です。 (アプリ内や自作ミドルウェア内などで) そんな状況を引き起こすのは、例えば糞ベンダーの書いた糞クライアントです。 最初からコードきっちり書いておかないと屑ベンダーに引っかき回されます。 今まで一番酷かったケースは(板違いなのでry
524 :デフォルトの名無しさん :04/02/17 19:06
tcp over udpなソースってどこかにあったりしませんか?
525 :デフォルトの名無しさん :04/02/17 19:09
>>524 airhookとか。
死ぬ程糞だけど。
>>547 ありがとうございます。
バグとして突き返すのも必要だけれど、それだけじゃマズいんで
切るようにします。幸いコマンドは長くて20バイト以下なので、
そのあたりで切れるかな?
>547さんがどのように対処なさったのかを教えてくださると嬉しいです。
> 今まで一番酷かったケースは(板違いなのでry
すっごく聞きたいけれど、マ板じゃないので諦めますw
>>547 そうなんだよね。
TCPのストリームを扱う煩雑さを回避するために
1回のデータ送受信毎にセッション接続・切断する糞プログラムを良く見かける。
それじゃ学習用のサンプルプログラムそのままじゃねえか、ってな感じ。
>>550 「そうなんだよね。」とか言ってるが、
>>547 とまるで内容が違わないかね。
セッションを分割できる仕様なのであればそうするに越した事はないと思うが?
障害の影響を最小域に留めることができると思うのだが、どのへんが糞なのか教えてもらいたいものだ。
HTTPでキープアライブ導入前は要求、応答、切断だったんじゃ。
オレはとりあえず、
>>550 の作った糞プログラムへの障害対応を重ねて
>>550 に依頼する煩雑さを回避するより、
TCPのストリームを扱う煩雑さを回避するね。
TCPはセッション接続時のオーバヘッドが大きいし、伝送効率も悪くなる。
socketのコネクション・プーリングとか知らないのかなあ
>>554 実測したの?
何か、具体的な実例挙げてもらえるとうれしいな。
>>556 "slow start"するので、あんまり接続しなおさない方がいいよ。
けど本当にスループットを必要とする場合だけね。
VPN over TCPとか。
>>549 異常な状態の生起もイベントとして定義して全て状態遷移図に書き込む、です。
イベントのフィルタリングをして、扱うイベントを少なくしてやると、楽です。
layer 6がしっかりしていれば、
layer 7に異常なリクエストを渡すこともないですよね。
ネットワークプログラミングこれから始めるとしたらお勧めの本は なによ。
linuxのソケット通信に関する質問なのですが gethostbyname,socket,connectを1まとめに関数にして、 connectできないと、この関数を実行する。 という方法でソケット通信のプログラムを作ったのですが、 通信の相手がいない場合、1時間半弱で必ずプログラムが終了する という状態です。(リコネクトのウエイトは5秒) connectだけをループするようにすると、 connectが、Bad file descriptor を返します。 接続の手順に問題があるとは思うのですが、どのように すればよいか、調べてもわかりませんでした。 どなたか教えてください。 アーキテクチャはsh4です。
UNIX Network Programming
Internetworking with TCP/IP volume3 client-server programming and applications もいい本ですよ。ただし、IPV4のみ。
connect 失敗時の closeにもれがあったようです 失礼しました
それが何か?
567 :
デフォルトの名無しさん :04/11/03 20:49:28
ここで話題になってるPunchingHoleUDPについて質問です。 Winsockでの実装の話なんですが。 クライアントAとクライアントBとサーバーSがあって。 AからSへUDPで適当なデータを送って、SはAのグローバルIPアドレスとソースポートを記録 BからSへUDPで適当なデータを送って、SはBのグローバルIPアドレスとソースポートを記録 SはAへBの情報を送信 Aはその情報を元にBへ適当なデータを送信(でも送れない)。 SはBへAのデータを送信 Bはその情報を元にAへ適当なデータを送信(これで遅れる)。 こんな感じでしょうか?
568 :
デフォルトの名無しさん :04/11/03 20:57:20
しょっちゅうPunchingHoleUDPネタが出るね
それくらいの設定ユーザーにやらせろよと思うが。
PunchingHoleUDPって何?
NAT超えってのは、ネットワーク関係の膨大にある問題の中でも大きな問題の一つだったからな。 それが解決できるって言うんだから、その手のシステムに興味ある人には夢のような話なんじゃない? ・・・今流行のP2P系では、今後スタンダードな技術となりそう。
そういうのはUPnPで解決すると思ってたけど MS発ってだけで反発されてそうだなw
UPnPとはまた違うでしょ。 UPnPは UPnP対応のハードじゃないといけないって事と ISPからプライベートIPアドレスしか貰ってない場合、どうしようもない って事 PunchingHoleはUDPがNATを経由する本来の仕組みを使ったものだから 後から追加する必要性が殆ど無いって事。 唯一の欠点は、シンメトリックNATの場合通過出来ないって事くらい。 でもこれはよほどセキュ重視してる企業でもない限り使ってないから、一般ユーザーとは無縁の話
>>519 でおくれちゃったけど、ひとこと。
linee(イーサネット回線エミュレータ)使って、パケットを
ドロップさせたりすると、テストの足しになるかもしれん。
# 残念ながら、パケットの順序の入れ替えはできなかったような気がするけど。
# 改造すればできるかなあ。
がんばれ。
575 :
質問 :04/11/04 16:25:35
質問させてください。 ルーター(192.168.0.1)の下にホストA(192.168.0.2)、ホストB(192.168.0.3)だけが存在し ルーターが192.168.0.4(本当は存在しない)にARPリクエストを出してきたときにホストA が偽造ARPパケットを作成して応答するというプログラムを作りたいのですが、そのような 事が分かるサイトを教えてください、お願いします。 やりたい事はルーターに対して存在しないホストのMACアドレスとIPアドレスの対応表を 覚えさせ、ルーターの外からくる192.168.0.2から192.168.0.255すべてのパケットを ルーターで遮断させずに中に入れたいのです。 環境 WindowsXP Visual C++
わざわざ作らんでも昔からある。 proxy arpでぐぐれ。
ついでに言うとルータがいわゆるご家庭向けの箱物ルータでなければ そいつのarp tableに書いちゃう方が早い。
/usr/sbin/arp -s IP_address ethernet_address
579 :
質問 :04/11/04 20:38:39
>>577 ,578
回答有難うございます。
もし ホストAで arp -s 192.168.0.4 適当なMACアドレス を実行した場合に
ルーターからくる192.168.0.4に対するARPリクエストにホストAが代理に
応答してくれるのでしょうか?
だからそれはproxy arpでぐぐるか本読めば書いてあるんだってば。
>>575 ルターは言った、「キリスト者の自由」において「人は信仰によってのみ義とされる」と...
キリスト者を欺くとは何事ぞ!
584 :
デフォルトの名無しさん :04/11/05 10:55:02
ゼロウィンドウのプローブって何ですか?
586 :
デフォルトの名無しさん :04/11/05 13:27:08
LinuxにもWindowsで言う所のOverlapped I/Oみたいな機能はありますか?
aio_read/write/...
>>587 頭が腐りそうな日本語だな。
英語の方がよっぽど判り易いし簡単じゃん。
スペイン語とかのサイトを読むときは直接日本語に翻訳しても 読めたもんじゃないから英語にして読んでるよ
592 :
デフォルトの名無しさん :04/11/06 15:56:15
質問です. res_queryでDNSに問い合わせしてるのですが,なぜか戻り値-1が返ってきて,うまく接続できていないようです. res_queryの問合せ先はどのように設定されているかわかる方いますか?
環境は?
594 :
デフォルトの名無しさん :04/11/06 16:04:51
>>593 Cygwin
BIND
あたりが関係しているでしょうか?
>>593 自己解決しました.
thx!
resolv.confの設定をいじったらうまく動きました.
>589 ありがとう!
linux kernelのversion調べてね。
598 :
デフォルトの名無しさん :04/11/07 19:48:01
あ
マルチキャストしてるから
601 :
599 :04/11/07 22:19:28
送信先のホストは1つだけなのですが、 これをマルチキャストと呼ぶのでしょうか?
>>601 ユニキャスト/マルチキャスト/ブロードキャスト について調べてみれ。
httpプロトコルで RESUMEやりたいんですが。 どうすればいいでしょうか? あと、HTTPプロトコルを詳しく書いてるサイトが合ったら教えてください。 日本語で
馬から落馬
電子レンジ
。°°(>_<)°°。 えーん
Cで、Httpでファイル受信プログラム書いてるんです。
MFCは、使いません。
で、普通の送受信ですが、
GET
http://pc5.2ch.net/test/read.cgi/tech/1096187183/ HTTP/1.0\r\n
…
をSendすると、
サーバーから、返事戻ってくるだろ。
そのあとファイルも帰ってくる。
そのファイル受信を途中から(RESUME)やりたいんです
Recvに、fseekみたいなものがあるんですか?
あるわけ無いですよね。
で、実現するには、どのようなメッセージを送ればいいのですか?
という相談なのです。
2ちゃんねる用ブラウザがレジュームやってるから それを見ろ Janeならこんな風 GET /tech/dat/1096187183.dat HTTP/1.1 Content-Type: text/html If-Modified-Since: Fri, 15 Oct 2004 07:28:32 GMT Host: pc5.2ch.net Accept: text/html, */* User-Agent: Monazilla/1.00 (Jane2ch/0.1.9.2) Range: bytes=45543- Connection: keep-alive
613 :
デフォルトの名無しさん :04/11/08 17:02:35
Linuxでネットワークデーモン作りたいと思っています。 Apacheのpreforkのように、リクエストに応答するプロセスをそのたびにforkするのではなく あらかじめ起動しておきたいのです。かなりリクエストが多くなると思うので、 いちいちforkする方法は避けたいです。 そこで、子プロセスにソケットの複製を渡すにはどうしたらいいでしょうか? スレッドの使用も考えたんですが、プロセスごとにユーザー権限を変えられるようにしたいので プロセスを複数作る方式で行きたいです。
614 :
デフォルトの名無しさん :04/11/08 17:07:06
615 :
613 :04/11/08 17:20:12
>614 親プロセスがacceptしたときに得られるクライアントとの通信用ソケットを すでにfork済みのプロセスに送りたい、ということです。説明が不十分ですみません。
>>613 「UNIXネットワークプログラミング〈Vol.1〉ネットワークAPI:ソケットとXTI」の14.7
617 :
613 :04/11/08 20:57:00
>616 ありがとうございます。暇ができたら購入してみようと思います。
618 :
デフォルトの名無しさん :04/11/08 20:59:17
買わなくても図書館にゆけばあるかも
暇がなくても今すぐ買って最初から熟読しろ。
教科書は買っておいたほうがよいというか、 目も通さずに質問したら、叩かれる可能性高い。
>>603 そーゆーテの開発をしたいのなら送受信しているパケットをモニタする
環境を早めに用意しておいた方がラクだよ。
623 :
VC初心者スレの685 :04/11/09 00:44:12
> 別スレッドで描画 別スレからUpdateAllView()なんてできねーYO! ダウンロードスレッドはダウンロード専門にして、 メインウィンドウに対しPostMessageするのがいいと思うYO!
625 :
VC初心者スレの685 :04/11/09 01:55:51
>>624 さんきゅ、よう分からんけどやってみるわ。
よう分からんのならやるなよ。理解してから動け。
627 :
VC初心者スレの685 :04/11/09 08:20:31
>>626 うるさいんじゃ。我ドタマおかしいんけ。
っていうかそれネットワークプログラミングと本質的に関係ないだろ
629 :
デフォルトの名無しさん :04/11/09 08:42:22
630 :
デフォルトの名無しさん :04/11/09 09:10:34
>>611 通常のレジュームは更新なかったとき続きを取得だが
2chブラウザは更新があったときに取得だから
ちょっと特殊だけどな
632 :
デフォルトの名無しさん :04/11/09 14:38:01
スレ違いかもしれないけど質問させて下さい。 RHL の上でコード書いてるんだけど、 楽しようと思って xinetd を使っています。 (serverで指定する)プログラムに xinetd から 接続にきたリモートホストのIPアドレスを渡すことって出来ます? プログラムの中から取得することも無理だよね。 (リモートホストに教えてもらうしかないかな?)
何も考えずにgetpeername(0, ...) でいけるのか。 お騒がせしました。
634 :
613 :04/11/09 18:16:00
「UNIXネットワークプログラミング〈Vol.1〉ネットワークAPI:ソケットXTI」どこいっても在庫がありませんでした。(絶版!?) 後日、図書館とかもあたってみようと思います。
みんなUDPが好きだなあ。 おいらはUDPを「うだっぺー」と呼んでる。
UDPのチェックサムわけわかめ 疑似ヘッダ、イラネ。
637 :
デフォルトの名無しさん :04/11/10 03:11:18
そういや前から気になってたんだけど Punchingなんちゃらってシンメトリックでは使えないんだよね? IPアドレスもチェックするから・・・ じゃあ、Skypeはどうやってんの? 全てのNATを通過させる事に成功したって書いてるけど・・・ もしかして、RAWソケットでUDP自作して、アドレス偽装する方式とか?(汗 UDP自作なんて俺にゃ無理だ・・・orz
638 :
デフォルトの名無しさん :04/11/10 03:14:58
同期 >>>>>>>>>>>>>>>>>>>>>>>>>>>> 非同期
UDPでできることって大抵TCPでもできるからあまり使わないなぁ。 ブロードキャスト使わなきゃいけないときくらいか。あとはよっぽどパフォーマンスが 気になるところとか。
Ethernet装備だけどUDPもTCPもインプリメントされていない環境で これから実装するとしたらUDPとTCPのどっちが良いですか?
>>640 まず IP。
ってか、OS でも作ってんの?
IPと同時にICMPやARPもいる。
ARPはもちろんとして、俺なら全部ICMPでやるな
いやIP実装しないとICMP働かない。(大昔はともかく)
>>639 漏れは最近 HTTP 以外の生の TCP 使うことって殆ど無いなぁ。http なら proxy も通るし、
サーバ側の構築もラクだし。peer to peer だと TCP 通ることが殆ど期待できないのでudp
になっちゃうし。
>>637 サーバ側のNWを自前で構築していれば、A <-> B で UDP 通すために、まずサーバがA からの
パケットを偽造して B に送るなんてこともそう難しくないです(4年くらい前にやったことある)。
ただ零細企業や民間人だと、ソースIPが変なパケットは ISP やらホスティング元等のルータを
通過しない可能性があって難しいんだけど。
646 :
デフォルトの名無しさん :04/11/10 15:42:43
印刷の際にプリンタに送られるデータを 別のPC(OSはWin2000)のLPTポートで受信したいのですが 検索して調べてみた所、Win32APIだけでは不可能という文章を見つけました 実際にプリンタに送られるデータをPCで受信するソフトはあるのでしょうか? 素人の質問で申し訳ないです、よろしくお願いします
>>646 そのプリンタをネットワークで共有するのはできないの?
FILEにして流す事もできないわけじゃないけど。
648 :
646 :04/11/10 15:51:52
>>647 詳細を書いてなくてすみません
うちにある計測機器のCOMポートが調子悪いみたいで
PCでデータ受信ができない状態です
んで、計測機器からプリンタに繋げることができるんで
LPTポートからデータ取れるかなぁ、と思ってた所です
>>648 その計測器が出力するデータとは何者?
パラレルから受けて、何をするわけ?印刷のみ?
機械の修理はできないの?
>>649 計測器から出力されるのは数字の羅列で、テキストデータです
そのテキストデータをエクセルに入れて色々と編集するつもりですが
説明書にはプリンタにもテキストで送信されるとあったので
同様の作業ができるかな・・・と考えてる所です
自分は貧乏なんで装置の修理に大金出せない状態です・・・
>>651 それは調度いいですね
プログラミングと離れてすみません
ありがとうございました
654 :
デフォルトの名無しさん :04/11/11 10:20:06
655 :
デフォルトの名無しさん :04/11/12 13:38:41
657 :
デフォルトの名無しさん :04/11/12 23:21:16
ezwebのMXレコード引いてlsean.ezweb.ne.jpと帰ってきたので そこのSMTPサーバにTELNETから接続しようとしたのですが,なぜかConnection time outで 接続できません. なぜでしょうか?
>>657 ちゃと接続されるけど?
$telnet lsean.ezweb.ne.jp smtp
220 EZweb Mail
QUIT
221 Bye
659 :
デフォルトの名無しさん :04/11/12 23:55:31
660 :
デフォルトの名無しさん :04/11/13 00:14:36
663 :
デフォルトの名無しさん :04/11/15 15:55:33
ちょっと質問です 環境 端末A、B間は有線、端末B、C間は無線 端末AからCヘの経路を設定(GWをBとする) 無線は192.168.30.XX 有線は192.168.50.XX 各端末間の通信ができることは確認 以上のような環境でUDPパケットを端末Cに送ったのですが 端末C側でうまくパケットを取得(recvfromなど)できない状況が。。。 orz 端末CからAに対して経路を設定してやるとうまくパケットを取得できたのですが なんか納得できない。。。 だれか納得できる説明おながいしまつ
664 :
デフォルトの名無しさん :04/11/15 16:03:08
とどく保証はないから
模範的なプロセス間通信の方法について質問したいです。
LinuxでXML−RPCサーバを用いて分散処理が行えるシステムを
作っています。
http://xmlrpc-c.sourceforge.net/ XML-RPCサーバ上で
putJob()
getJob()
という二つの関数のRPCを作成し、クライアントが仕事を持ってきたり、
仕事を受け取ったりという事がやりたいです。
初めputJob()やgetJob()という関数の中で、普通にメモリ上に仕事を書き込む
スペースを用意してやっていたのですが、
putJob()したあとgetJob()をしてもputJob()した時の結果が反映されていませんでした。
調べると、クライアントからの要求ごとに別のプロセスが動いていて、メモリ空間が
異なるため、putJob()である値を変更しても、getJob()ではそれは反映されないようでした。
プロセス間通信のため共有メモリをしようしてこの問題を解決しようとしたのですが、
共有メモリにはサイズの制限があるのか、数十バイト以上の領域を確保しようとすると
実行時エラーがでます。
変更の記録をファイルに書き込む事で対応しようと考えてもいますが、実行速度の面で
少し不安な気もします。
こういう場合の模範的な回答を知りたいのですが、調べるためのキーワードかなにか
あったら教えてください。
> 共有メモリにはサイズの制限があるのか、数十バイト以上の領域を確保しようとすると > 実行時エラーがでます。 標準的な環境であれば、いくらなんでもこの程度のサイズが確保できないはずがない。
標準的な環境キター
DB使う。
>>665 「共有メモリ」とは具体的に何を指すのか? shm*(2)? mmap(2)?
XML-RPCの説明は余分で、「共有メモリ」に絞って質問し直すべきではないか?
それはLinux板が適当ではないか?
670 :
デフォルトの名無しさん :04/11/16 10:03:48
LANで結ばれたPC2台の間でバイナリデータのやりとりをしたいのですが、どのような方法が最適ですが? データは1MB程度で、それほど頻繁にはやりとりしません。
671 :
デフォルトの名無しさん :04/11/16 10:05:21
クロスのシリアルケーブルでつなげば?
>>665 プロセス間通信は RPC で行うのが最近の流行です。
Unix なら単に Pipe を利用しても良いでしょう。
共有メモリみたいなものが必要な場合には、まず DB の利用を考え、
SQL が解らないなどのくだらない理由以外できちんと否定的な結論が
出てから他の手段について検討してみてください。
また、多くのOSにおいて小さなファイルに対するファイルI/Oは
それほど低速なものではありません。
何言ってんだか
DB検討は一番最後だろ。 ローカルのプロセス通信にDBかよ。めでたい奴だな。
677 :
デフォルトの名無しさん :04/11/16 18:38:10
質問です。 RAWソケットでUDPを作りたいのですが(ソースアドレス偽装の為) どこかに良い資料ないですかね?
/usr/src
680 :
デフォルトの名無しさん :04/11/16 20:17:41
質問です。 最近Winsockの勉強を始めたのですが、 どうもあちこちでACKやSYNと言う用語を見ます。 普通のTCPやUDPのsend()/sendto()で送る文字列とは別の何か特別なパケットなのでしょうか?
はい。
>>680 あちこちで見てるんなら、読もうよ。それを。
683 :
デフォルトの名無しさん :04/11/16 20:38:06
質問です。 最近Winsockの勉強を始めたのですが、 どうもあちこちでACKやSYNと言う用語を見ます。 普通のTCPやUDPのsend()/sendto()で送る文字列とは別の何か特別なパケットなのでしょうか?
684 :
デフォルトの名無しさん :04/11/16 20:40:30
マルチポストしようとしたら最初に書いたスレにまた書いちゃった。 といったところか。
俺の想いもあの子に届いて欲しい
689 :
684 :04/11/16 22:40:40
ためになる回答をどうもありがとうございます。 共有メモリはshm*(2)という意味で使ってました。 共有したいメモリの量は、今はなんともわかんないですが、 数十メガ以上、場合によってはメモリに乗り切れない量にも なりそうなのでmmap(2)を使って解決しようと思います。 DBの使用はすごくありだと思っていて、考えてもいたんですが、 諸事情で今回はつかえないためこういった方法にします。 ありがとうございました。
それで分散処理になるの?
複数で通信すれば分散処理
すみません。やっぱりもう少し教えてください。 sys/shm.hを使って if((shmid = shmget(key,100, IPC_CREAT | 0666)) < 0) { perror("shmget"); exit(1); } といった事をしたいのですが、引数の100の所を200とか 大きな数字にすると実行時Invalid argumentといったエラーが出ます。 /proc/sys/kernel/shmmaxのファイルには33554432と書かれているので、 33Mまで共有メモリを使えるということなのかな?と考えているのですが、 なにがまずいのか教えてください。
確かにもうネットワークプログラミングの事じゃないですね。 質問が続いてたのでここがよいかなと思ったんですが、 UNIXプログラミング質問スレの方に移動したいと思います。 ありがとうございました。
696 :
デフォルトの名無しさん :04/11/17 11:17:47
質問です。 最近Winsockの勉強を始めたのですが、 どうもあちこちでACKやSYNと言う用語を見ます。 普通のTCPやUDPのsend()/sendto()で送る文字列とは別の何か特別なパケットなのでしょうか?
荒らしウゼ どうせ本人じゃないだろうな。 とりあえずこれ以上やるんだったら荒らし報告として通報してくるよ。
質問するときはトリップ必須にするかID導入要望でも出してくるか
私は、研究生なのですが,今,プログラムがわからず危機的状況です。 JAVAでファイルを保存するプログラムを作成したいのですが, どのようにすればよいかわからないのです。 (ついでに私は、JAVAプログラムど素人です。何処から初めていいのかも 分らないのです。) 動きとしては,以下のようなことです。 クライアント(ブラウザ)からファイルが送られる。 サーバ側で,そのファイルを受け取るとDBに保存する. DBに同じファイルがあるならば,クライアントで上書きするかどうかを確認する. 上書きOKならば,DBにあるファイル(同じファイル)を消して,上書きする. どのようなプログラムをすればできるのでしょうか? ⇒またこの場合DBは、どのような構造にすればよいのでしょうか? どうぞ皆さんのお力をお貸しください。
702 :
デフォルトの名無しさん :04/11/17 23:28:44
703 :
デフォルトの名無しさん :04/11/19 18:11:21
sshクライアントを作りたいのですが、そのようなクラスとかありますか?
704 :
困ったくん :04/11/19 18:14:15
Visual Basicについての質問はこちらでいいのでしょうか?
なぜそこまで必死に環境や言語を書かないのかわからない
Ruby!
>>705 VBでsshクライアント作りたいんでしょ
708 :
デフォルトの名無しさん :04/11/19 19:58:59
いいえ、C++Builderです。
ssh -p 44444 -fgNR 1080:localhost:44444 aaaaaaaa.bbbb.ccc pc1-----------------------------------------------------------pc2 ./client -p 1080 127.0.0.1 --------> ./server -p 1080 INADDR_ANY clientから'A'という文字コードを送りserver側で++して'B'を返すプロラムなんですが 'S'という文字しか帰ってきません。 で調べたら "SSH-2.0-OpenSSH_3.8.1p1 Debian-8.sarge.3"という文字コードが受け取れました。 サーバーまで接続できてないようですがなぜなのでしょうか? おしえてくだしー
ネットワークプログラミングとSSHの使いかたは関係ないので他所へどうぞ。
そうだそうだ、読解家や!
712 :
709 :04/11/20 22:04:34
お前等やくたたずだなw
713 :
デフォルトの名無しさん :04/11/20 22:07:10
Punchingなんとかの次はsshか
それにしてもOpenSSHはたかが暗号程度でなんであんな煩雑な構成になってんだろね 頭痛くない?
ファイル転送もポートフォワーディングも鍵管理もしますがなにか?
X11の転送もな
717 :
デフォルトの名無しさん :04/11/21 02:16:29
Punchingなんとかってマジでいらねーな。 RAWソケットでTCP自作して、ちょっと小細工すればNAT越え出来るじゃん。 UDPみたいなエラー処理しなくていいし。TCPのプロトコルは公開されてるから何にも考えずに実装できるよ。 Kazaaの作者もSkypeにPunchingなんとかっての使ってるみたいだが、所詮素人だなw
まぁどうにかして構って欲しいという意気込みは伝わった。
分かったんなら構ってやれよ
720 :
デフォルトの名無しさん :04/11/22 10:07:39
UDPソケットとTCPソケットを同じポートにバインドして, UDPソケット側でUDP hole punchingしていれば, 外部からのTCP接続を受けられ…ないか. ルータのアドレス変換テーブルがTCP/UDPで共有されていれば うまく行きそうだけど,だれもやってないということは,ダメなんだろうなぁ.
>>721 > ルータのアドレス変換テーブルがTCP/UDPで共有されていれば
んな実装するエンジニアがもしいたらアホです。
>>724 キタ━━━ヽ( ゚∀゚ )ノ━ヽ( )ノ━ヽ( ゚∀゚ )ノ━━━!!
サンクソ
とりあえず読んでみる
>>723 ただRAWでパケット生成するだけのツールだろ
こんなのだったらソース付きで他にいくらでもあるだろ・・・
>>723 割り込みエラーでるぜ・・・
このダイアログ ボックスではなく、Just-In-Time (JIT) デバッグを呼び出すための詳細については、
このメッセージの最後を参照してください。
************** 例外テキスト **************
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)
at IPhederIncl2.Form1.sendRawSock(Int32 SendCount, IPAddress sendhost_IP, Byte[] IPHEAD)
at IPhederIncl2.Form1.BuildByte()
at IPhederIncl2.Form1.Button_send_Click(Object sender, EventArgs e)
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
729 :
デフォルトの名無しさん :04/11/23 21:57:29
ほ
>>728 まじ?
SrcAddrをDNSに問い合わせないときはIP直打してくれ
それ以外だとバグの原因はわからん。
テストは結構したんだが。
731 :
デフォルトの名無しさん :04/11/27 14:40:38
Windows2003SP1でRawSockがつかえなくなったってまじですか? もうWindowsとさよならする日がきたのかも
732 :
デフォルトの名無しさん :04/11/27 14:41:54
WindowsXP SP2で使えなくなったという話は聞いたけど。
736 :
デフォルトの名無しさん :04/11/27 15:49:02
こんにちは WinsockでHTTPS通信をしたいのですが、 方法がわかりません。 誰か詳細がわかるサイトをご存知ではないでしょうか? ちなみに、SOFTBANK社のWinsockプログラミング2.0という本を持ってますが、 HTTPS通信に関して記述されてないみたいです。
737 :
デフォルトの名無しさん :04/11/27 16:43:42
・・・マジですか?>SP2以降のWindowsではRAW使えない。 ヤバイです。(汗 今やってるプロジェクトでモロRAW使ってます。。。 完成寸前なのですが。。。 それが本当ならうちの会社はつぶれます。。。
>>738 RAQ ってなんですか?
ググッても痴呆のぼくにはわからないので教えてください
RAWのタイポ
ソースアドレス偽装をしたUDPが使えないのか。 でも、SkypeとかってPunchingHoleUDP使ってシンメトリックNATを通過出来るから 恐らくUDPのソースアドレスを偽装してやってるんだと思ってたけど、これがSP2でも使えるのは何故?
742 :
デフォルトの名無しさん :04/11/27 21:39:04
OpenSSLのWindowsへのコンパイルですが
http://waga.homeip.net/openssl/install_win.html C:\src\openssl-0.9.6a>nmake -f ms\ntdll.makのコマンドを入れたら
>cryptlib.c
>crypto\cryptlib.c(59) : fatal error C1083: インクルード ファイルを開けません。'stdio.h': No such file or directory
>NMAKE : fatal error U1077: 'cl' : リターン コード '0x2'
>Stop.
となり、コンパイルがSTOPしてしまいます。
原因がわかりません。
どのように対処すればいいのでしょうか?
ご返答いただけると、助かります。
>>743 Skypeってシンメトリックは無理なの?
てっきり出来ると思ってたから、どうやってるんだろうな?と不思議だったのだが・・・
レジストリ書き換えれば送信出来るようになるらしい
Skypeがレジストリ書き換えるとは考えられない。 もしかすると、シンメトリックの場合だけ通信が可能なノードに仲介してもらうとかなのかな?
>・無効なソースアドレスによるUDPデータグラムはRAW socketで送信できない。送出されるあらゆるUDPデータグラムのIPソースアドレスは必ずネットワークインターフェイス上に存在しなければならない。そうでない場合データグラムはドロップされる。 これを問題視してるんじゃないの? つまり、シンメトリックは双方のアドレスまでチェックするのでPunchingHoleUDPをそのまま使っては駄目 そこでRAWソケットでソースアドレスを偽装したUDPを作成し使おうとするのだが ここで上記の制限のおかげで、無理 と
おいブタども、X800って10800っていう意味だって知ってたか?
( ・∀・)つ〃∩ ヘェーヘェーヘェー
関係ない話なので
>>751 死ね
753 :
デフォルトの名無しさん :04/11/28 07:35:01
RADEONのことかー!
754 :
sage :04/11/28 08:12:45
TCPで通信したい場合、WinsockではWSASocket(AF_INET, SOCK_STREAM, 〜 とソケットを作成する事で可能で、 「ホストAからホストBへ1000バイトデータを送る」場合、 ホストBではrecv一回のコールで1000バイト取得できない場合もあるので、 recvを1000バイト取得できるまで、コールする必要がありますよね? ここで質問なのですが、 プロミスキャスモードで受信する場合でも、上記と同様に 「IPパケット」が分断された状態で受信される事はあるのでしょうか? 同様にIPパケット長だけ受信できたかチェックし、できていない場合は再度 recvをコールする必要があるのでしょうか 実装例はたまに見るのですが、受信部を見るとrecv一回しかコールしないよう になっており、「IPパケットだから分割されて受信する事はないのかな?」 と思いつつ、これを正解とする資料を見つけ出せませんでしたので、質問しま した これについてご存知の方がいるならば、教えていただけませんか
あります
>>742 Microsoft Visual Studio\VC98\Bin\VCVARS32.bat
バージョソによってVCVARS32の場所が違うな
環境のためのメモリが足りません
今更9x系使ってるのかよ(w
760 :
デフォルトの名無しさん :04/11/28 15:15:44
行番つけサーバ作ってるんですが、なぜかだめです。 @平行サーバ Apipeを駆使して、クライアントからのデータを”cat -n”に与え、結果をもらったら、クライアントに送り返す、というやつなんですが、、、 おかしなところあったら、指摘してください。↓ pipe(fd),pipe(fd2) while (1) { cfd=accept(lfd,(struct sockaddr*)NULL,NULL); printf("accept OK.\n"); if ((pid=fork()) < 0) { perror("fork");exit(1);} if (pid == 0) { /* child */ close(lfd); printf("fork OK.\n"); while ((nbytes=read(cfd,buf,sizeof(buf))) > 0) { if ((pid2=fork()) < 0) { perror("fork2");exit(1);}
761 :
デフォルトの名無しさん :04/11/28 15:16:38
if (pid2 == 0) { /* child-child */ printf("fork2 OK.\n"); dup2(fd[0],STDIN_FILENO); close(fd[0]);close(fd[1]); dup2(fd2[1],STDOUT_FILENO); close(fd2[1]);close(fd2[0]); execlp("cat","cat","-n",(char*)NULL); perror("cat"); exit(1); } close(fd[0]);close(fd2[1]); printf("OK1 "); write(fd[1],buf,nbytes); printf("OK2 "); nbytes=read(fd2[0],buf,sizeof(buf)); printf("OK3 "); write(cfd,buf,nbytes); while (wait(&status) != -1) ; /* do nothing */ }
762 :
デフォルトの名無しさん :04/11/28 15:18:05
close(fd[0]);close(fd[1]);close(fd2[0]);close(fd2[1]); exit(0); } close(fd[0]);close(fd[1]);close(fd2[0]);close(fd2[1]); while (wait(&status) != -1) ; /* do nothing */ }
マルチ
こんなのすらわからんやつが書くソフト使う方も災難だな。
>>763 for(c=0;c<strlen(sessionID);c++){
wsprintf(encode,"%%%x",sessionID[c]);
}
簡単に書いたが、それの場合特殊文字だけをASCII文字へ変換しないとLoginできないんやとおもう。
そのセッションIDを一文字づつ特殊文字かどうか調べ、特殊文字ならprintfでASCII文字へ変換すればいい。
この辺はクセが強いから難しいだろうけどガンガレ。
>>742 誰も返答してないみたいなので一言
このスレでOpenSSLがきちんと分かる人はいないと思う。
あまり期待しないほうがいい。
俺もよくは知らんが^^
>>767 どんな難問かと思ったらただのコンパイルエラーかよ
がっくりさせるな
>>768 じゃどうしてコンパイルエラーになるのか答えてみぃー^^
>>767 よくわからんが、
漏れの環境だとActivePerl、ml.exe、MSVC6.0SP5が入ってて、
openssl-0.9.7dのバイナリは作成できてる。
途中でmasm使うやつな。
INSTALL.W32の中読めとしか言えんな。
OpenSSL使ってないけどな。
だって、どう見たって、「stdio.hが見つからない」だよ。 INCLUDEを設定するためのvcvars32.batを実行してないだけでしょ。 ネットワークプログラミングとは全く関係ない。
772 :
デフォルトの名無しさん :04/11/28 21:17:04
ネットワークプログラミング始めたばっかなんですけど ルータ通してインターネットに接続してる場合 なんか特別な設定しないでも外にデータ飛んでくれますか? ポートマッピングはしました、どうか教えてください
>>772 どういう通信でどういう不都合が起こると想定して言ってるのかをまず説明すれば?
ただアドレス指定してコネクトするだけのプログラム書くのに普通はルータ云々を
考慮することはないと思うけど。ルーティングの仕組み自体について理解がない
んならそっち勉強してきてからだな。
774 :
772 :04/11/28 22:13:13
>>773 申し訳ないです
IRCクライアントを作ろうとおもってwinsockの勉強しているのですが
とりあえずconnectだけさせるプログラム書いて実行させたのですが
10060エラー(接続要求がタイムアウト)がでてしまい
いろんなとこに接続させようとしてもかわらず
とりあえずあえてポート番号間違えて打って実行させたら10061エラー(接続拒否)
が出たのでプログラムは間違っていないのではないかと思い
質問させてもらいました
俺がただ単にプログラムを間違えてるだけなのでしょうか?よろしくお願いします
windump(
>>3 )で追跡しろ。
想定しているIPアドレス、ポート番号に接続しようとしているか。
>>755 ありがとうございます
やはり受信データ長をチェックする必要はあるのですね
もしこれについて、何か注意を促している書籍、情報へのポインタをご存知でしたら、
教えていただけないでしょうか?
何故受信データ長? 接続段階で失敗してるんでしょ。
778 :
774 :04/11/28 23:22:03
>>775 ありがとうございました
WinDumpで追跡したら、ポートが変になっていたので見てみたら
htonsしていなかっただけでした、athlonだからいらないと思ってました;
>athlon 一瞬新しく追加されたPOSIXの関数かと思ったよ・・・
At Host Local Network
Athlonは魔法の石ではない。
athlonだからいらないと思ってました;
alphaと間違えてるとか。alphaがbig endianか知らんけど。
athlonなら毛糸洗いに自信がもてるよ。
athronな
Ruby!!!!!!!!!!!!!!!!!!!!!!! >>>>>>>>>>>>>>>>>>>>asshole
athlon>>|超えられない壁|>>Ruby!!!!!!!!!!!!!!!!!!!!!!! >>>>>>>>>>>>>>>>>>>>asshole>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<お前
789 :
デフォルトの名無しさん :04/11/29 20:24:08
Rubyは
790 :
デフォルトの名無しさん :04/11/29 20:25:48
最高!
791 :
デフォルトの名無しさん :04/11/29 20:30:25
何この変な荒れ方
792 :
デフォルトの名無しさん :04/11/29 21:57:23
IPやTCP, ICMP等のパケットを自分で作りたいんですが、それぞれの関係や、具体的なデータの例を出して解説してるWebサイトってありませんか? (UDPパケットはIPパケットのデータ部分に含まれてるとか、そういうプロトコル同士の関係とか)
仕事なら金を惜しむな。遊びならそんな怪しげなことするな。
金を惜しむならRFC読め。
http://www.rfc-editor.org/ 時間を惜しむなら本を読め。
ComerのInternetworking with TCP/IPが代表的な教科書。
なぜかamazonにはハードカバーしか載ってないが、
安めのペーパーバックのものもあるはずなんだが(北米以外では)。
800 :
デフォルトの名無しさん :04/11/30 06:42:37
801 :
デフォルトの名無しさん :04/12/01 06:40:37
age
802 :
デフォルトの名無しさん :04/12/01 06:40:59
803 :
デフォルトの名無しさん :04/12/01 08:03:27
質問です。
HTTPのクライアントをWinsockで作成しています。
ttp://blog.goo.ne.jp/index.php?fid=freshEntryRss なんですが
HTTP/1.0とHTTP/1.1とバージョン番号を変えただけで取得する内容が異なってしまいます。
具体的には1.1の場合データ部の先頭に
”17a36”
のような形の文字列がつき、末尾には
2
(改行略)
0
などといったものがつきます。
他のURLではどちらにしても同じ内容がかえってきます。
レスポンスヘッダはどちらも
HTTP/1.1 200 OK
となっています。
何が原因でこういったことが起きるのでしょうか?
また先頭と、末尾にくっついたものはなんなのでしょうか?
わかる方がいらっしゃいましたら教えてください。お願いします。
chunked
chunked… OKわかりました。ありがとうございます。 …あきらめます。
>>796 この本、よさそうなんだけど、サンプルコードがCなのか、、、
>>806 漏れは昨日ゲッツしたよ。
いまサンプルコードをC#に修正中。
808 :
デフォルトの名無しさん :04/12/01 13:09:26
ストリームソケットで質問です。 連続してsend()を行った場合、 recv()すると、send()したデータが繋がって受信してしまいます。 分けて受信する方法は無いのでしょうか? 受信するバッファは、どんなデータが来ても良いように、 多めに取っています。 送信する際に \0 を付けてやると、1つ目は \0 の場所で受信するのですが、 残りを受信する際に、また連続で取れてしまいます。 送る側 send( "a\0" ); send( "bc\0" ); send( "def\0" ); 受け取る側 char* pcBuf = new char[ 100]; while( 1 ){ recv( pcBuf ); printf( "%s\n", pcBuf ) } //結果///////////// a bcdef ↑こんな感じになってしまいます。
FAQ嫁
FAQ読みました。 大体理解できました。 ありがとうございます。 というか、\0あってもなくても変わらないし...orz
Winsockの質問です。 TCPでサーバ動作させているとき、サーバソケットはオープンしたままで 接続先ソケットをclosesocketしても問題ないでしょうか? サンプルを見てみると、異常時には接続先ソケットを切断しているので、 処理としては問題ないように思うのですが…。
812 :
デフォルトの名無しさん :04/12/01 18:06:19
>>796 このURLアホみたいに貼る奴いるけど
作者か出版社か?あんまりしつこいと業者の宣伝として通報するぞ
先輩いわく データとデータの間は1秒休みが基本だぜ! ・・・マジかよ
合ってるよ
>>811 shutdownした場合と、closesocketした場合に、
blockingされていたrecvの戻り値を比べて見なされ。
>>810 > というか、\0あってもなくても変わらないし...orz
sendのところ省いて書いてるけど、strlen("ab\0")してない?
\0も送りたければ、strlen + 1だぜ?
>>813 その先輩はabsolutely糞。
817 :
デフォルトの名無しさん :04/12/02 00:27:56
>その先輩はabsolutely糞。 現実的かつ具体的にどう糞なのかを説明してください。
脳みそにウジ虫湧いてる。108匹/cm^3
要は相手が受け取れる速度でデータを送れってことだ。 アプリが固まった時にマウスをクリックしまくる奴は糞。
>>819 そういうアプリを作る奴こそが糞なんだけどな。
同期型ソケットしか使えない愚か者が愚痴をこぼすスレじゃないんで
無能さを露見するような恥ずかしいレスはしないでくれ。
>>821 はぁ?なにそれ
馬鹿?あんた馬鹿か?面白いの?それ。お前、面白いって思って打ったのか?!
どんなツラして送信したんだ?いっぺん鏡みてみろよ!
う〜ん、マンダム。
824 :
デフォルトの名無しさん :04/12/02 07:26:38
>>815 む、やってみます。
素人な質問に答えていただいて感謝。
Raw IPの話題をするのは厨房ときまってる Raw IPがわかってたら質問自体しないしな
828 :
デフォルトの名無しさん :04/12/02 09:29:42
/ // ̄ ̄\ヽ /: : : : . :`l、 | │| /^l l^ヽ | ∠-'''´: ̄ ̄``ヽ、| | │| l:::::l l:::::l | /: : : : . . : \ | │|┌┐┌┐| l : : : : ._,: -‐-:、_ . : .:.:/ | │| l::::l .|::::l .| l_ ,::-'''´ _,. --:、_`''-、_/ | │\┘.└'/| |_,. ,.::-: :|| | `''-、| |──┴────┤ .|,l.|,l-、!ー┘ニニ二r|!r-、 l::-‐―――‐―=―‐ヽ r‐:-.、 iハ!'´li゙}゙f| '´lリ` |l}、l ,r‐‐v‐、 / ノ リ ル' レ' リ リ`ー-ー` / (_i_ノl l;  ̄.ソ  ̄ j「ノノヽ.(_ァ ノ .) / レヽ| '"^二´ `ニ^h /ヽ、_,..:.:.:,ノヾ! Lャ- ,!r':. ヾ:. . ' ,ノ゙) く { ^r ゙⌒////(⌒ { | l:.: . '. .:.:/ .:', ーニ-''" /::.:i:.: `:.: . `ー-く ヽ ヽ.( ij ∠ィ リ >、.__,. ': .;ノ / i、 ー' /! ヽ ::.: :`.ヽ.、__) ) . ヽ ド、 r ⌒`ー--‐1 ,' ( '. .:.: _」 \_/ ,! `ヽ、、_:.: : . ヽ、,ノ ヽl ト、ヽ. l / \__,,、-‐''"´ |i , ′ `ー- 、..__,ノ゙ リ \` -─- , ' / `‐- _ ′! / ! _,..、 ''"´ ``丶、 ─- ..⊥. ` ー- イ-‐''" ̄ヽ. / _ ヾ  ̄`` r┴'''"´ ̄ -''゙
830 :
デフォルトの名無しさん :04/12/02 22:40:02
えーっと、、、保守
保守は上げなくても良いと何度いったr(ry
832 :
デフォルトの名無しさん :04/12/02 23:42:44
パンの枚数を(r
13枚 私は和食ですわ
835 :
デフォルトの名無しさん :04/12/03 06:50:25
WindowsをクライアントでLunuxをサーバーという アプリケーションを作りたいのですが、Winsockを 解説したサイトだと、WinsockとLinuxのsocketとは 互換性がなく、繋がらないで、送受信が出来ないという のを見たのですが、もし、Windowsのクライアントと Linuxサーバーを作るとしたらJavaくらいしか ないのでしょうか? それか、Linuxのsocket互換のWindowsのsocketを 作るしかないのでしょうか? すいませんが宜しくお願いします。
そのサイトのURL晒してくれ
>>836 >Winsockを解説したサイトだと
どこだ、そのDQNサイトって
ありえねーよw その理論だと、Linux + Apacheサーバなサイトは、Windowsじゃ見れないことになっちまうんじゃないのか?w
そこまでDQNなのも珍しいんじゃなかろうか。
プログラムをそのままもっていっても動かないというだけで、 > WinsockとLinuxのsocketとは互換性がなく、繋がらないで、送受信が出来ない なんて事は全くない。 あなたがどちらを普段使っているか知らないが、 Windows(IIS)のサーバにも、Linux(Apache)のサーバにも問題なくつながるでしょう。 その糞ページの記述は全て無視すること。
かぶった…orz
その糞サイト、どこなのか知りたいよー。 単に836が理解していないだけって可能性も大だけど。
その後、836の姿を見た者はいない・・・
FireFoxでIE用のサイトが見られないのは有名な話。
>>845 それはSocket云々じゃなくて、ブラウザのレンダリングエンジンの差じゃ?
TCP/IPという共通のルールがあって成り立ってるのがインターネットなわけですよ OSがなんだろうが開発環境がなんだろうがインターネットで通信するってことは そのTCP/IPの流儀に合わせてやるということなんですよ
ここでリセット ------------------------------------------------------------ ノーマルモード ↓
FireFoxでIE(ry
改行コード間違ってるんじゃないのか
>>836 > 解説したサイトだと、WinsockとLinuxのsocketとは
> 互換性がなく、
までを書いてあったんじゃないかと思う。同じC言語開発環境でsocketを扱っても
コードの互換性はないって言いたいだけじゃない?そこから後の部分は
>>836 が
勝手に思ったことだろ。だって「つながる」のなんのってのと「ソケット」云々っての
は話のレベルが違う部分だから。
Pentium4で送信したデータをPowerPCで読み込むと化けるのは有名な話。
エンディアン違いもいいとこ
こうして質問とは関係なく予想だけで論争が始まる ↓
856 :
デフォルトの名無しさん :04/12/04 00:47:31
さがりすぎ
つーかおまえらさすがに釣られすぎだろ。スルーしろよ。
WinsockとLinuxのSocketはm9(^Д^)プギャー
IEコンポーネントの話も、ここで良いのかな? ATLってのを使ってSDKで、IEコンポーネントをウインドウに貼り付けました。 それでIEコンポーネントをサブクラス化にしても、キーボードをフックしても いつのまにか、キーボードのメッセージが飛んで来なくなります。 どうやって、キーボードのメッセージを捕まえたら良いですか?
↑ 開発環境は、VC++6.0 (SP6)、OS 2000(SP4) 使ってます。
おまえ「IE」ってついてるだけで→Web→ネットワークって発想だろ。 質問する場所考えるときにもっと頭使えよ!
昔、IEコンポーネントスレってあったような気がするんだけど、どこいっちゃったの?
数日前に落ちた。
980越えで落ちてそのまま。 俺は、WinInetならともかく IEコンポーネントやFireFoxとネットワークプログラミングは 殆ど関係なく、思い切りスレ違いだと思ってるけどね。
Linuxのsocketはオープンソースですが、 winsockはクローズドソースなので、相性が悪いです。
???
嫁と相性が悪いのはソケットのせいでしょうか?
>>861 >>864 発想はその通りです。
このスレだとネットワーク全体のこと、やってるのかなと思って
質問させてもらいました。
勉強不足で、すみません。
>>862 昔みかけたことあったので、そのスレに聞きたかったのですが
落ちてたんですね。
>>865 >>866 誘導ありがとうございます、過去ログ読んで来ます。
>>853 そんな話あったっけ? と思ったが、
ネットワーク・バイトオーダーを知らん知障だったってことか。
872 :
デフォルトの名無しさん :04/12/04 09:27:52
すぐに分からない871も・・・
勘弁してやれ。当たり前のことすぎて気付かないってことはあるもんだ。
ここでリセット ------------------------------------------------------------ 再開 ↓
1台しかPCを持っていない場合、 ネットワークプログラミングの勉強をするにはどうしたらいいのかな。 ものすごく基礎的な話題にしてみるテスト
internetに接続されたPCのほとんどがIntel PCだというのに、 ネットワーク・バイト・オーダーがbig endianというのは はっきり言って無駄である。
じゃあ変えとけ。
>>876 TCPのクライアント/サーバなら一台でできるよ。
どうしても別ホストへの接続がやりたいなら、
VMWareやVirtualPCなどのエミュレータを導入するとか。
coLinuxもおすすめ。
勉強だったらこの環境でゲップが出ると思う
「ネットワーク・バイト・オーダーをlittle endianとする会」
127.0.0.1 を相手に通信する
普通テキストファイルは big endian だろうが。
ネットワークの話してるんだけど? スレ違いも甚だしい
>>876 中古でボロそうなPCを買ってくるという手も
886 :
デフォルトの名無しさん :04/12/04 12:25:55
性善説のUNIXサーバを使え。
>>876 「Virtual Server 2005」 イイヨ
>>876 localhostとloopback network interfaceを。
ネットワークにつなぐ必要すらない。
てか鯖クラックすればいいじゃない
確かに「1台のコンピュータにインストールできます」ってライセンスでも 実記と仮想PCの両方にはインストールできない場合が多いな ところで死ぬほどどーでもいーが喪前らFireFoxじゃなくてFirefoxですよ
894 :
デフォルトの名無しさん :04/12/04 21:02:21
だから性善説の(ry
>>877 Intelがビッグエンディアンにすりゃ問題解決だよなぁ、
と常々思っています。
いまさら変えられない
>877 組み込み系はビッグエンディアンが多いが... ネットにつなぐのはPCに限らない 携帯とか、いろんな機器類とかね
まあ、独自プロトコルなら困らないでしょうけど。
というか、通信データ内で、integer型が占める割合ってどのくらいよ? byte swapが無駄なんて考えている事自体、時間の無駄だと思うけど。
>>900 精神分裂病か?
一行目と二行目に関連がないぞ
>byte swapが無駄なんて考えている 誰もそんなこと言ってない。
>通信データ内で、integer型が占める割合ってどのくらいよ? どうやって調べろと?
無駄という話ならそんなどうでもいいことより チェックサム計算しながら使われていないとか もっと気にすることがあるだろ
そういえばさ、 TVでちらっと見ただけなので、詳しいことは知らんが、 痴呆症が認知症に名称変更されるらしいね。
>>905 リンク先には「統」合失調症って書いてますけど
クローズド・ソースならbyte orderは好きにしてくれていい。 オープン・ソースは、network byte orderを使うのが原則。
909 :
デフォルトの名無しさん :04/12/05 02:39:44
>>906 そうです。「認知障害」という案も出たそうなのですが、
すでに心理学で使用されているとかで。
>>908 リトルエンディアンかビッグエンディアンかの話なんだが?
リアル池沼?
913 :
デフォルトの名無しさん :04/12/05 03:23:38
>>911 阿呆か。ソースがクローズドかオープンなのかは関係ない。
Intel以外のCPUを使えばいい。
オープン・ソース・バイト・オーダー というのを決めればいいと思うんだ。
917 :
デフォルトの名無しさん :04/12/05 07:52:41
バイトオーダーくらいカタカナで書け
918 :
デフォルトの名無しさん :04/12/05 10:56:49
919 :
デフォルトの名無しさん :04/12/05 10:57:32
ネットワークバイトオーダーの実体がlittleだろうがbigだろうが、 アプリ側でntoh,htonをサボるいいわけには成らないよ。
統一すれば無駄が省けるって話だろ。 いくら劣勢とはいえゴキブリのようなbig連中を死滅させるのは難しいが。
>>898 ルータなんかはPowerPC, MIPS系が多いからね。 ネットワークコード書くのにバイトスワップを
しなくて良いのはやっぱり楽よ。
こんなにあほな流れが続いてるとは思わんかった
>>921 だから、「オープンソース・バイトオーダー」にしよう、と。
パケットモニタで見たとき読みやすいし
927 :
デフォルトの名無しさん :04/12/05 18:01:18
SMTP-POP等のメール用(?)サーバを経由せずに、メールを相手に確実に届ける方法ってありますか? 相手のIPアドレスだけがわかってる状態で、相手のシステムフォルダに送りたいんです。
928 :
デフォルトの名無しさん :04/12/05 18:06:24
(´・ω・`)なんで通報されるんだろ・・・ショボーン
悪いということを理解できない奴が真の悪。
>>929 は未成年の犯罪者予備軍。
>>927 > 相手のシステムフォルダに送りたいんです。
それってもうメールじゃないじゃん
マリネラ一の美少年
>>927 相手が何の準備もなくいきなり送れるわけないだろ。
ファイルコピーしたいならFTPかフォルダの共有させるとかなにかサービス利用しとけ。
934 :
デフォルトの名無しさん :04/12/05 19:49:11
935 :
デフォルトの名無しさん :04/12/05 19:56:36
hostはbig or little networkはmiddleにすればすべて解決
938 :
デフォルトの名無しさん :04/12/05 20:15:11
939 :
デフォルトの名無しさん :04/12/05 20:42:54
big endianでもlittle endianでもないものもあるよ。
>>927 システムフォルダじゃないけど、スパマーのルートにtelnetで送ったことならある。
だからそれはメールじゃないだろと・・・
944 :
デフォルトの名無しさん :04/12/06 15:05:51
ちょっと教えてください サーバー側でlisten後acceptすると相手から接続要求がくるまでacceptから抜けてこないのですが 一定時間経つとぬけるようにするにはどうしたらいいのでしょうか?
selectはダメ?
>>944 そういうケースって現実のどのくらい起こってるの?
acceptが即戻ることを前提に組んでるのが結構あったりして・・・
>>945 あ、すみませんselectではどうやってやればいいですか?
>>946 いえ、例えば普通にIPやポートを間違った状態でacceptすると現状では一生抜けてこないので・・
>>946 select使おうぜ。
acceptがすぐに戻るなんて幸せなことはほとんどない。
人生に幸せなことなんてほとんどない。
ないんだよ・・・
949 :
デフォルトの名無しさん :04/12/06 15:30:31
acceptの仕様を理解してるのかと小一時間・・・。
945の言うようにselectで待つか、acceptスレッドを切れ。
>>946 サーバなのにacceptが即戻ることを前提にするプログラムって、
どんなんだ。
950 :
デフォルトの名無しさん :04/12/06 15:32:44
>>947 なあ、まずはヘルプくらい読もうな。
selectにソケットIDとタイムアウトまでの時間を渡すんだ。
あ、selectでできたわ つか、おまいら文句ばっかで役にたたねーわ、あばよ(´,_ゝ`)
_ (⌒Y´ ̄ヽ ∧_/( ̄)) ∧_∧
γ´ `ヽ_`と.__ )( ゚ ∩( 《 ( ゚ ∞゚ ) ゴロン
)) ,、 , ) <、_,.ノ ヽ、.__,ノ l つ つ
((_/し∪V Å .ヽ.__ノ!__)) ゴロン
∧__∧ / \ ∧_∧
( ) ( ;・∀・) (゚∞゚ )ペーチュンチュン〜。
( つ (U_U )つ (つ と)
.ヽ___ノj
>>951 (⌒Y⌒)
∧__∧ . / ̄ヽ ̄
(゚ ) __ ( __ ) ( ゴロン
と ヽ ( ̄))∧_∧ /´ `Y⌒) VUVJ_)
(__ト、__丿 〉 》∩ _) ( .__つ´
ヽ、.__,ノ ヽ、__,.>
∧∧
(゚∞゚)ペー | |チュンチュンチュン!
と ) | | 人
Y /ノ .人 < >__Λ∩
/ ) .人 < >__Λ ∩Д´)/
_/し' < >_Λ∩Д´)/ / ←
>>951 (_フ彡 V`Д´)/ / ←
>>951 / ←
>>951
__
〜|・∀・|〜 ←
>>951 |__|
( ゚∞゚) | |
___ ?
〜lД・〜l
|___|
((((((( ゚∞゚) < |
___
Ξ( ゚∞゚)Σ l・Д・lァゥァ
|___|
< |
__
〜| ゚∞゚|〜ペーチュンチュン
|__|
| |
|\_____________|
| |:::::::::::::::::::::::: |
/⌒彡 /⌒彡 | |::::☆:::::::::::::::::::::::: |
/ ゚∞゚)ペーチュン / ゚∞゚)チュソ | | :::::::::::::::::::::::::::::::::::::|
| / | / | |:::::::::::::::::::::::: |
( ニニニニニニニニニニ_ア /::::::::::::;\ | | |
|:::::::::::: l | //´|:::::::::::: l | | | |
|:::::::::::: | | | | |::::卍::: | | | | |
/::::::::::::/| | // /::::::::::::/| | | | (゚∞゚)星 |
|::::::::::/ Uヽ /U |::::::::::/ | | | | 逝き↓ |
|::::||:::| | |???| | |::::||:::| U | | ___A___ |
|::::||::| |∧_∧/ |::::||::|. | (_o_o_o.) |
| / | | (; ゚Д゚) | / | | | |_______ハ___|
// | | | ` / // .| | | | / / |
// | | | /| | // .| | | | / / |
// | | // | | // | | | | / / |
U U U U U U  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
↑
>>951 このスレ内で(゚∞゚)ではない
>>951 を発見した。
>>951 はスレ内で
意味不明かつ不適切な発言をしたとして、我々は
>>951 を(゚∞゚)星に連行し
>>951 を(゚∞゚)化後、キティ星に追放の刑に処す
957 :
デフォルトの名無しさん :04/12/06 16:34:10
はにゃ〜ん
958 :
デフォルトの名無しさん :04/12/07 13:17:35
メールソフト作ってるんですが、ESMTPは実装したほうがいいんでしょうか? OEでは実装されてますか?
ESMTPは、クライアント主導で決定されるので、 必要な物があれば実装すればいいです。例えばSTARTTLSなど。 OEは実装してます。
OE以下のメールソフトなんて誰が使うものか
961 :
デフォルトの名無しさん :04/12/07 14:16:58
recvか何かで受信する前にデータ数がわかる方法があったら教えてください
962 :
デフォルトの名無しさん :04/12/07 14:18:59
ない。
あらかじめ定量しか送らないことに決めておく あるいは何らかの形で量を規則化しておく
964 :
デフォルトの名無しさん :04/12/07 14:34:57
んーやっぱりないですかあ recvで取ったデータをまた戻すってこともできないですよね?
そういうのはrecvしてバッファリングしておく層を作っておくのが定石。
966 :
デフォルトの名無しさん :04/12/07 14:41:46
つかMSG_PEEKでできますた(;´Д`)
>>966 それって
>>961 とはちょっと違うよ。
用意したバッファ分だけ受ける。ただしqueueから除かない。
だからもっとあるかも知れない。
>>967 え?そうなんですか?
>>964 みたいに戻しはしないけどキューから削除しないからいいかなって思って
試してみてもちゃんとできたしああ
「もっとあるかも知れない」 それが分からなくていいならMSG_PEEKで問題なし。
1つのソフトでクライアント(connect)とサーバー(bind)をあっせたい場合に各々ポート番号は何を指定すればいいのでしょうか? socketでAF_INETとSOCK_STREAMを指定している時です。両方とも80ではダメですよね?
>>970 サーバは 80 番に bind して listen する。
クライアントはbindしないで、80番に connect する。
誰か次スレ立てて。
>>971 ありがとうございます。
ちなみに80番以外では失敗するのですが、
>>970 での場合はポートは80限定になるのでしょうか?
>>973 具体的に何番がどう失敗したのかわからないとアドバイスもしにくい。
既に動いているアプリがそのポートを使用中なのかもしれないし、
ファイアウォールの様なソフトが介入しているのかもしれないし。
976 :
デフォルトの名無しさん :04/12/07 19:54:00
978 :
デフォルトの名無しさん :04/12/07 21:40:11
俺も無理だったからスレ立て依頼してきた。
ネットワークスレの住民がスレ立てることもできないとは笑止千万
糞スレ立てまくってたら、肝心な時にスレ立てれない
あFOX ★のせいだ。
982 :
デフォルトの名無しさん :04/12/07 22:57:56
983 :
デフォルトの名無しさん :04/12/07 22:58:35
984 :
デフォルトの名無しさん :04/12/07 22:58:43
985
986
0 埋めるときはzero fillで。 じゃないとchecksumが合わないよ。
988 :
デフォルトの名無しさん :04/12/08 17:38:10
(´,_ゝ`)プッ
989 :
デフォルトの名無しさん :04/12/08 17:45:41
チェンジアップの投げ方を教えて
990 :
デフォルトの名無しさん :04/12/08 18:00:23
どうせブラジャーのはずしかたも知らんのだろ?
>>989 腕をよく振ること
内角には投げないこと
993 :
デフォルトの名無しさん :04/12/08 23:53:57
listen()のキュー長を越えるアクセスがあった場合ってconnect()すると-1が返ってきますか? listen(sock,5); たとえば、このときに自分が6人目だったら… connect() == -1 ?
それくらい試せるだろ
995 :
デフォルトの名無しさん :04/12/09 13:38:32
Winsockでsend()する時に送信データのバイト数を 付加しようと思い、以下のようにコーディングしましたが・・・ うまくいきません。どうすればちゃんと送れるか、どなたか教えていただけませんか? char *data; long net_byte; int host_byte; int host_byte = strlen(data); net_byte = htonl(host_byte); // バイト数をビッグエンディアンで取得 send(sock, net_byte+data, sizeof(data)+4, 0) // 送信(ここがうまくいきません)
Cの勉強からやりなおせ。
>>995 ポインタにintを足したら何になると思ってるんだキミは。
1000 :
デフォルトの名無しさん :04/12/09 14:11:17
1000ゲット
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。