ネットワークプログラミング相談室 Port16
■ このスレッドは過去ログ倉庫に格納されています
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/
0508デフォルトの名無しさん
2006/03/07(火) 00:59:410509デフォルトの名無しさん
2006/03/07(火) 01:05:00ちゃんとdraft-*も読んだ方がいいですよ。
0510デフォルトの名無しさん
2006/03/07(火) 09:48:04リクエストを送るときに
GET /index.html HTTP/1.0\r\n\r\n
と2回改行コードを入れないとサーバが改行コードとして認識して
くれてないみたいなんですがこれで普通なんですか?
とりあえず動いてるのでいいですけどすっきりしないので知ってる
方がいたら教えてください
0511デフォルトの名無しさん
2006/03/07(火) 11:37:06>>5行って、HTTPのRFC読んでください。
0512デフォルトの名無しさん
2006/03/07(火) 12:11:35\r\n
インデント正確にするとこうだな
空行が終了判定だぞ
0513デフォルトの名無しさん
2006/03/07(火) 12:22:16ああ〜そうか(´A`)アホでした
すっきりしました!どうもありがとうございます
0514デフォルトの名無しさん
2006/03/07(火) 12:26:51HTTPリクエスト・ヘッダを勉強しろ
0515^ω^ ◆8vOv.D2p4.
2006/03/07(火) 13:59:55かっ・・かわいい
0516482 = 294
2006/03/07(火) 14:21:33>>492
ありがとうございます。
上に指示を仰いだらUDPで一回送って一回受け取りで桶、ということでした。
「それならそうと書け、ヴォケが、はったおすぞ!」とは口が裂けても言えませんでした。
>>493
誰でも最初は初心者だろ、(#゜д゜)凸ゴルァー!
本だけ渡されて「ほら、やれ」って言われてる身にもなってみろ!…とキレてみるか。
なんでネットワーキングプログラミング関連の本や資料は全部ボトムアップアプローチなんだろ?
トップダウンアプローチで書かれた本でも売れば絶対に売れるのに。
0517^ω^ ◆8vOv.D2p4.
2006/03/07(火) 14:49:52簡単なHTTPサーバーとかならボトアプの本でも載ってるじゃん
逆にそれより複雑だと買う人が絞られすぎちゃうんじゃね??
てか、プロトコル仕様とかで質問するなら
ボトアプの本も一個買ったらいいんじゃね?
なんか勘違いしてたらごめん
0518デフォルトの名無しさん
2006/03/07(火) 15:15:36表示するフォントを変えると可愛くなくなると思う。
0520デフォルトの名無しさん
2006/03/08(水) 00:57:39struct sockaddr_in 型の変数にアドレスやポートを
設定して、ソケットとbind した後は、
その sockaddr_in 変数は廃棄してしまってよいのでしょうか?
同じようにconnect()の場合もそうでしょうか?
0521デフォルトの名無しさん
2006/03/08(水) 01:04:40>本だけ渡されて「ほら、やれ」って言われてる身にもなってみろ!
土方プログラマ乙。
0522デフォルトの名無しさん
2006/03/08(水) 01:09:03OK。 ローカル変数で十分。
0523デフォルトの名無しさん
2006/03/08(水) 03:13:450524デフォルトの名無しさん
2006/03/08(水) 11:58:16typedef struct
{
int option;
char msg[8];
int login;
} message;
message msgStruct;
msgStruct.option = htonl(option);
gets(msgStruct.msg);
msgStruct.login = htonl(login);
send(s, &msgStruct, sizeof(msgStruct), 0);
のようにして構造体で送った値を
サーバー側で抽出、というか表示してやるにはどうすればいいですか?
intのはntohl()で戻してやる必要がある、とは書かれてるんですが
実際にどうやるのかは書かれていません。
教えて下さい。
0525デフォルトの名無しさん
2006/03/08(水) 12:08:39・構造体メンバーのメモリ配置が双方のコンパイラでどうなっているか確認。
・C言語初心者スレで構造体へのポインタの学習。
0526デフォルトの名無しさん
2006/03/08(水) 12:12:40送る側のプログラムをコンパイルしたコンパイラが、当該のコードで
その構造体に用いたアライメントやパディングなどをちゃんと理解して、
受信側でも送られたバイト列をその通りに解釈すればよい。
そういう面倒なことをしたくないのならば、テキスト表現で送るか
適当な形式で byte[] に詰め込んで送る。
例えば
unsigned char buf[16];
memcpy(buf, msg, 8);
buf[8] = option >> 24; buf[9] = option >> 16; buf[10] = option >> 8; buf[11] = option;
buf[12] = login >> 24; buf[13] = login >> 16; buf[14] = login >> 8; buf[15] = login;
などとして、受け取った側では option = (buf[8]<<24)|(buf[9]<<16)|(buf[10]<<8)|(buf[11]);
などとする(ただしintは32ビットと仮定)。
0527デフォルトの名無しさん
2006/03/08(水) 12:12:53ありがとうございます!
質問した直後にちょうど勘が働いてサーバー側で
printf("option: %d\n"msgStruct.option);ってやってみたらちゃんと出ました!
なぁんだ、ちゃんと届いてたのか。
また分からないことがあったら聞きますね。
0528デフォルトの名無しさん
2006/03/08(水) 12:14:150529デフォルトの名無しさん
2006/03/08(水) 12:18:22一応同じタイプのマシンなので面倒なことはしなくてよさそうです。
>>ってC++のパイプですか?それともビットシフトか何か…そういう使い方したことがないので。
ありがとうございました。また聞きますね。
>>528
はい、気をつけます。
結構調べた(かれこれ五時間)んですけどね。(藁
0530デフォルトの名無しさん
2006/03/08(水) 12:26:40ntohl()してねーじゃん(w
予想レス「しなくても動いたから大丈夫です!」
0531デフォルトの名無しさん
2006/03/08(水) 12:35:01はっ、Σ( ̄□ ̄lll)!!
突っ込み、ありがとうございます。
てか、しなくても動くんですね。じゃ、しなくてもいいk(ry
0533デフォルトの名無しさん
2006/03/08(水) 16:09:28コンパイラが違うと構造体のメモリの割り当て方が違う
32bit処理系だとcharのような要素があった場合32bit確保する場合がある
コンパイラオプションで変えれるからあんまりプログラムは意識しなくてもいいけど
サーバとクライアントがコンパイラが違う時は注意が必要
0534デフォルトの名無しさん
2006/03/08(水) 16:19:09何ていうコンパイラ?
0535デフォルトの名無しさん
2006/03/08(水) 16:25:02横着しないでちゃんとプロトコル決めろ
option:4byte:なんかのオプションのフラグ
msg:8byte:'\0'ターミネートされた文字列
login:4byte:なんかのログイン情報
で、合計16バイトのunsigned charな配列に確保。
0536デフォルトの名無しさん
2006/03/08(水) 23:57:470537デフォルトの名無しさん
2006/03/09(木) 01:59:460538482
2006/03/09(木) 06:36:04なんとかUDPでデータやり取りするプログラムできたんですが
時々、計算が合わないことが合わないことがあります。
フラグ立てたりしてデバッグしてもどう考えても間違いはない。
で、やっと気付いたんですが、
これが「UDPではデータを失うことがある」っちゅーことなんですね。
>>486さんの言った「同期の必要性」というのが今頃理解できた…もう鬱だ…氏n(ry
0539デフォルトの名無しさん
2006/03/09(木) 07:51:37シュミレートできるようなオープンソースのツールはないでしょうか。
キャッシュサーバーのテスト用として利用したいのですが。
0540デフォルトの名無しさん
2006/03/09(木) 08:10:36ほんとTCPにした方がいいな。
0541デフォルトの名無しさん
2006/03/09(木) 09:07:35送るデータを逐一保存しておいて、連番を振って管理。
受け取り側では受信できた番号を逐一報告。
送り側では受け取り確認の取れないデータを適当な間隔で再送。
これでどうよ?TCP 使うほうが遥かに楽だがなw
0543デフォルトの名無しさん
2006/03/09(木) 11:59:49> シュミレートできるような
kwsk
0544^ω^ ◆8vOv.D2p4.
2006/03/09(木) 12:05:38×シュミレート
○シミュレート
○スクリプト
×スプリクト
○じゃがいも
×がじゃいも
○しんぶんし
×しぶぶしぶん
0545デフォルトの名無しさん
2006/03/09(木) 12:19:08Linuxでnetem
http://linux-net.osdl.org/index.php/Netem
0546デフォルトの名無しさん
2006/03/09(木) 12:55:05482さんも使ったほうがいいねぇ。
0548魚チョコ
2006/03/09(木) 16:07:50実はシミュレートでもシの発音が [∫] で合ってないので、スィミュレイトと書いた方がましだし間違いが少ないと思うんだが、そう書いても考えのあはさかな杓子定規のたこに直されちゃうんだよなあ ミ゚仝 ゚ ミ
0550デフォルトの名無しさん
2006/03/10(金) 00:56:430551デフォルトの名無しさん
2006/03/10(金) 21:10:32ioctlsocket関数でノンブロッキング
selectでノンブロッキング
どっちがいいのでしょうか?
自分はioctlsocket関数でノンノンしたいのですが。
0552デフォルトの名無しさん
2006/03/10(金) 23:42:170553デフォルトの名無しさん
2006/03/10(金) 23:54:030554デフォルトの名無しさん
2006/03/11(土) 01:18:000555デフォルトの名無しさん
2006/03/11(土) 04:28:43キャッシュサーバーとサーバーの間に中継サーバを配置して、
キャッシュサーバーの機能テストのために、キャッシュサーバーがサーバーから
ファイルをダウンロードできる時間を設定で変化させることができる機能を持ったものです。
0556デフォルトの名無しさん
2006/03/11(土) 14:53:19アンビリーバボー
0557デフォルトの名無しさん
2006/03/12(日) 20:27:01socket(AF_INET, SOCK_RAW, IPPROTO_IP)
ってな感じでパケットキャプチャを作りました。
パケットの中身をrecv()して、自己PC発のパケットで
TCPヘッダ以降の 特定のパターンだけrejectというか、
発信を無効にしちゃいたいのです。
色々調べてLSPとやらでNICに直接話すのが筋と理解した
のですが、私のスキルでは難しかったです。
TTLだけ0にしちゃうとかとにかくそのパターンのパケットだけ
発信を無効にする簡易的な火壁のようなことをしたいのですが、
何か簡単な方法はないでしょうか?
0558デフォルトの名無しさん
2006/03/12(日) 21:10:48win2000/XPで、ウィルスバスターなどのように、常駐させておいて怪しい
通信を遮断したいです。プロミスキャストで出入りするパケットの中身は
見ることができるのですがそのソケットをシャットダウンすることが出来ないです。
やっぱwinpcapを使わないとだめですか?
0559デフォルトの名無しさん
2006/03/12(日) 21:33:35回避策はなくもないけど、ウィルスにも使われるような技術なので
そう簡単には見つからないでしょう
0560557
2006/03/12(日) 22:00:19そうですか。。情報ありがとうございます!
回避策になりそうな手段をもうちょっと調べてみます。
何かヒントになるキーワードがあればまたお願いします!
0561デフォルトの名無しさん
2006/03/13(月) 01:41:17ipfltdrv.sysでも使うとか。
0562558
2006/03/13(月) 02:05:23「ipfltdrv.sys」で検索してみたらもの凄く参考になりそうなページを発見。
ttp://ruffnex.oc.to/kenji/text/fire_a/
ナイスパスTHXです。やってみます。
0563558
2006/03/13(月) 02:15:27なので良さそうですね。ていうかまんまです。
ttp://ruffnex.oc.to/kenji/windriver/packet/
どう見ても欲しかった資料です。ありがとうございました>>561
0564デフォルトの名無しさん
2006/03/14(火) 14:45:26そんなんどこにでも転がってるけどwww
0565デフォルトの名無しさん
2006/03/14(火) 23:14:06recv()で取得したバイト数が合いません。
recv()で取得したデータの改行コードがCRLRになっているようなんですが、
これを直してあげる必要があるのでしょうか?
初歩的な質問で申し訳ありませんがよろしくお願いいたします。
0566デフォルトの名無しさん
2006/03/14(火) 23:31:35RETR でメッセージを受け取るときは . のみの行が終了基準だけど。
サイズで読み出そうとしてんの?
0567デフォルトの名無しさん
2006/03/14(火) 23:41:07RFCを読むべきです。でもヒマなので一応説明します。
LIST が返すサイズは、完全に正しいメッセージのオクテット数(バイト数)です。
LIST が返すサイズと、RETR で得られるメッセージのオクテット数が異なっているなら、
それはサーバのバグです。
メッセージ中の改行はすべてCRLFで、そうでないならこれまたサーバ(か何か)のバグです。
RETR の返答を recv して得られるバイト数は
ターミネーション ( . + CRLF ) や、行頭に . が有る場合に余分に
付加される . などがあるため、メッセージのオクテット数とは異なります。
RETR の返答をどう解釈するかは RFC を読んでください。
0568デフォルトの名無しさん
2006/03/14(火) 23:54:54RFCをちゃんと読んでみる事にします。
それでわからないときはまた質問することにします。
ありがとうございました。
0569デフォルトの名無しさん
2006/03/15(水) 00:37:04VCで簡単にデータやりとりしてみたいんですが・・・
0570デフォルトの名無しさん
2006/03/15(水) 03:26:46勉強って言うのは自分で調べるところから始まるんだぞ
0571デフォルトの名無しさん
2006/03/15(水) 04:08:55569じゃないけど、まず2chや人に聞こうとしていた自分の心にずしんと響きました。
根性たたきなおして勉強します。
そしてどうしても分からなくなったときには、力を貸してください。
それでは。
0572デフォルトの名無しさん
2006/03/15(水) 04:44:140573デフォルトの名無しさん
2006/03/15(水) 11:20:25氏ね糞
0574デフォルトの名無しさん
2006/03/15(水) 11:21:070575デフォルトの名無しさん
2006/03/15(水) 11:40:15自分で調べる手段の一つが人に聞くことなわけだが
学生の間しか言えない名言だな
0576デフォルトの名無しさん
2006/03/15(水) 12:49:400577デフォルトの名無しさん
2006/03/15(水) 12:53:430578デフォルトの名無しさん
2006/03/15(水) 13:09:030580デフォルトの名無しさん
2006/03/15(水) 14:03:180581576
2006/03/15(水) 14:03:35それとも落ちこぼれ社会人かしら?
はたまた後は老けて行くだけのNEET君ですか?
0583576
2006/03/15(水) 14:09:09ままのおっぱいでもしゃぶってろよwwwwwwwwwwwwwwwwwwww
0584デフォルトの名無しさん
2006/03/15(水) 14:13:06小・中・高・大学生・社会人にやさしくしろ
無職にもな!
0585デフォルトの名無しさん
2006/03/15(水) 15:09:57いや、態々レス番書くほどの内容か?
0586デフォルトの名無しさん
2006/03/15(水) 15:11:47関係ない無職の俺が傷ついた
0587576
2006/03/15(水) 15:47:06wwwwww
0589デフォルトの名無しさん
2006/03/15(水) 23:09:17あるいは人が書いたものを読むとか。
それとも自分で引数をいろいろ与えてどんな動作をするか調査するのかい?
0590参加者募集中!
2006/03/15(水) 23:12:25★★★自動売買ソフトを作ろうぜ★★★ Part3
http://live19.2ch.net/test/read.cgi/stock/1141718486/l50
0591デフォルトの名無しさん
2006/03/15(水) 23:15:30kqueueとかOSに特化したサーバは、そういったシンプルなサーバよりどの程度優れてるの?
性能が5%改善しました!とかなら馬鹿らしくて、チューンしたいとも思わないところです
0592デフォルトの名無しさん
2006/03/15(水) 23:20:020594デフォルトの名無しさん
2006/03/16(木) 00:31:26libeventでも使っとけば? select/poll/kqueueのwrapperライブラリ。
0595デフォルトの名無しさん
2006/03/16(木) 00:42:56調べてみます、情報ありがと
0596デフォルトの名無しさん
2006/03/18(土) 09:44:22指定した割合でパケットをロスさせたり、
順番を入れ替えたりすることが可能な言語はあるのでしょうか?
下のスレで質問させていただいたのですが、
しばらくしてもご返答がいただけなかったので、
ここでたずねさせて頂きました。よろしくお願いします。
http://pc8.2ch.net/test/read.cgi/tech/1135634403/
0597デフォルトの名無しさん
2006/03/18(土) 10:33:030598デフォルトの名無しさん
2006/03/18(土) 10:48:270599デフォルトの名無しさん
2006/03/18(土) 10:59:53ところでもちろんUDPだよね? TCPではスタックレベルでパッケとロス等は吸収・復帰されるから
アプリケーションレベルでのロスはあり得ない。
ちなみに>>545という方法も検討したら?
0600デフォルトの名無しさん
2006/03/18(土) 11:56:52>>597
例えばどのような言語があるのでしょうか?
宜しければ教えていただきたいです。
>>559
下位層(2層や3層)レベルでのパケットのロスが生み出せれば良いと
考えているのですが、、
>>545のツールも参考にさせていただきます。
0601デフォルトの名無しさん
2006/03/18(土) 12:34:17パッケとロス
0603599
2006/03/18(土) 12:41:52> 下位層(2層や3層)レベルでのパケットのロスが生み出せれば良いと考えているのですが、、
Linuxならiptableのモジュールでパケットをある確率で落とすというというのがあるけどね。
ホスト単体で出来るから便利。 パケット入れ替えというのはたしか無いと思ったけど。
0604デフォルトの名無しさん
2006/03/18(土) 12:54:07イーサネット層とかをコードレベルで扱える言語ならできるのでは?
Javaとかじゃ無理なような。
0605デフォルトの名無しさん
2006/03/18(土) 13:06:280606デフォルトの名無しさん
2006/03/18(土) 13:42:58例えば何さ?
0607デフォルトの名無しさん
2006/03/18(土) 14:03:21質問の答えにはなってないけど聞いてみる
■ このスレッドは過去ログ倉庫に格納されています