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

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2005/12/31(土) 14:07:24
主にソケットに関しての質疑応答スレッドです。

Programming UNIX Socket FAQ (日本語訳)
  http://www.kt.rim.or.jp/~ksk/sock-faq/indexj.html
Winsock Programmer's FAQ (日本語訳)
  http://www.kt.rim.or.jp/~ksk/wskfaq-ja/

関連リンクは>>2-10辺り
足りなかったら適当に付け足してね

前スレ
ネットワークプログラミング相談室 Port15
http://pc8.2ch.net/test/read.cgi/tech/1128088448/
0508デフォルトの名無しさん2006/03/07(火) 00:59:41
英語が読める人は、英語のバイブルを読めばいいんでないの。
0509デフォルトの名無しさん2006/03/07(火) 01:05:00
>>507
ちゃんとdraft-*も読んだ方がいいですよ。
0510デフォルトの名無しさん2006/03/07(火) 09:48:04
winsockを使ってHTMLを取得するプログラムを書いてるんですが
リクエストを送るときに
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
GET /index.html HTTP/1.0\r\n
\r\n

インデント正確にするとこうだな
空行が終了判定だぞ
0513デフォルトの名無しさん2006/03/07(火) 12:22:16
>>511,512
ああ〜そうか(´A`)アホでした
すっきりしました!どうもありがとうございます
0514デフォルトの名無しさん2006/03/07(火) 12:26:51
>>513
HTTPリクエスト・ヘッダを勉強しろ
0515^ω^ ◆8vOv.D2p4. 2006/03/07(火) 13:59:55
>>513
かっ・・かわいい
0516482 = 2942006/03/07(火) 14:21:33
>>490
>>492
ありがとうございます。
上に指示を仰いだらUDPで一回送って一回受け取りで桶、ということでした。
「それならそうと書け、ヴォケが、はったおすぞ!」とは口が裂けても言えませんでした。

>>493
誰でも最初は初心者だろ、(#゜д゜)凸ゴルァー!
本だけ渡されて「ほら、やれ」って言われてる身にもなってみろ!…とキレてみるか。

なんでネットワーキングプログラミング関連の本や資料は全部ボトムアップアプローチなんだろ?
トップダウンアプローチで書かれた本でも売れば絶対に売れるのに。
0517^ω^ ◆8vOv.D2p4. 2006/03/07(火) 14:49:52
>>516
簡単なHTTPサーバーとかならボトアプの本でも載ってるじゃん
逆にそれより複雑だと買う人が絞られすぎちゃうんじゃね??

てか、プロトコル仕様とかで質問するなら
ボトアプの本も一個買ったらいいんじゃね?

なんか勘違いしてたらごめん
0518デフォルトの名無しさん2006/03/07(火) 15:15:36
>>515
表示するフォントを変えると可愛くなくなると思う。
0519^ω^ ◆8vOv.D2p4. 2006/03/07(火) 20:38:42
>>518
MS Pゴシックで快適AAライフ
0520デフォルトの名無しさん2006/03/08(水) 00:57:39
TCP の server 側の待ち受けポートを作る際
struct sockaddr_in 型の変数にアドレスやポートを
設定して、ソケットとbind した後は、

その sockaddr_in 変数は廃棄してしまってよいのでしょうか?
同じようにconnect()の場合もそうでしょうか?

0521デフォルトの名無しさん2006/03/08(水) 01:04:40
>>516
>本だけ渡されて「ほら、やれ」って言われてる身にもなってみろ!
土方プログラマ乙。
0522デフォルトの名無しさん2006/03/08(水) 01:09:03
>>520
OK。 ローカル変数で十分。 
0523デフォルトの名無しさん2006/03/08(水) 03:13:45
CAsyncSocket の Connectって無意味じゃね?
0524デフォルトの名無しさん2006/03/08(水) 11:58:16
TCPで
typedef 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
>>524
・構造体メンバーのメモリ配置が双方のコンパイラでどうなっているか確認。
・C言語初心者スレで構造体へのポインタの学習。
0526デフォルトの名無しさん2006/03/08(水) 12:12:40
>>524
送る側のプログラムをコンパイルしたコンパイラが、当該のコードで
その構造体に用いたアライメントやパディングなどをちゃんと理解して、
受信側でも送られたバイト列をその通りに解釈すればよい。

そういう面倒なことをしたくないのならば、テキスト表現で送るか
適当な形式で 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
>>525
ありがとうございます!
質問した直後にちょうど勘が働いてサーバー側で
printf("option: %d\n"msgStruct.option);ってやってみたらちゃんと出ました!
なぁんだ、ちゃんと届いてたのか。
また分からないことがあったら聞きますね。
0528デフォルトの名無しさん2006/03/08(水) 12:14:15
調べてから聞け
0529デフォルトの名無しさん2006/03/08(水) 12:18:22
>>526さんも詳しい説明してくれてたんですね。
一応同じタイプのマシンなので面倒なことはしなくてよさそうです。
>>ってC++のパイプですか?それともビットシフトか何か…そういう使い方したことがないので。
ありがとうございました。また聞きますね。

>>528
はい、気をつけます。
結構調べた(かれこれ五時間)んですけどね。(藁
0530デフォルトの名無しさん2006/03/08(水) 12:26:40
>>527
ntohl()してねーじゃん(w

予想レス「しなくても動いたから大丈夫です!」
0531デフォルトの名無しさん2006/03/08(水) 12:35:01
>>530
はっ、Σ( ̄□ ̄lll)!!

突っ込み、ありがとうございます。
てか、しなくても動くんですね。じゃ、しなくてもいいk(ry
0532^ω^ ◆8vOv.D2p4. 2006/03/08(水) 13:14:44
>>531
マックに移植するとき泣く

・・・あぁ、インテル入ったからもういいか
0533デフォルトの名無しさん2006/03/08(水) 16:09:28
>>527
コンパイラが違うと構造体のメモリの割り当て方が違う
32bit処理系だとcharのような要素があった場合32bit確保する場合がある
コンパイラオプションで変えれるからあんまりプログラムは意識しなくてもいいけど
サーバとクライアントがコンパイラが違う時は注意が必要
0534デフォルトの名無しさん2006/03/08(水) 16:19:09
> 32bit処理系だとcharのような要素があった場合32bit確保する場合がある
何ていうコンパイラ?
0535デフォルトの名無しさん2006/03/08(水) 16:25:02
>>524
横着しないでちゃんとプロトコル決めろ
option:4byte:なんかのオプションのフラグ
msg:8byte:'\0'ターミネートされた文字列
login:4byte:なんかのログイン情報

で、合計16バイトのunsigned charな配列に確保。
0536デフォルトの名無しさん2006/03/08(水) 23:57:47
んでもってエンディアンに引っかたりするんで、このさいXMLでデータを(ry
0537デフォルトの名無しさん2006/03/09(木) 01:59:46
まあ文字データにするのが一番楽
05384822006/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
>>538
送るデータを逐一保存しておいて、連番を振って管理。
受け取り側では受信できた番号を逐一報告。
送り側では受け取り確認の取れないデータを適当な間隔で再送。

これでどうよ?TCP 使うほうが遥かに楽だがなw
0542^ω^ ◆8vOv.D2p4. 2006/03/09(木) 10:53:43
>>541
それでもTCPの方がスライド窓機構(なんて言うんだっけ)付きだし少しハイテクだよね
0543デフォルトの名無しさん2006/03/09(木) 11:59:49
>>539
> シュミレートできるような

kwsk
0544^ω^ ◆8vOv.D2p4. 2006/03/09(木) 12:05:38
>>543
×シュミレート
○シミュレート

○スクリプト
×スプリクト

○じゃがいも
×がじゃいも

○しんぶんし
×しぶぶしぶん
0545デフォルトの名無しさん2006/03/09(木) 12:19:08
>>539
Linuxでnetem
http://linux-net.osdl.org/index.php/Netem
0546デフォルトの名無しさん2006/03/09(木) 12:55:05
>>545
482さんも使ったほうがいいねぇ。
05474822006/03/09(木) 15:00:59
>>546
本当によさげですね。でも環境がLinux…_| ̄|○
0548魚チョコ2006/03/09(木) 16:07:50
>>544
 実はシミュレートでもシの発音が [∫] で合ってないので、スィミュレイトと書いた方がましだし間違いが少ないと思うんだが、そう書いても考えのあはさかな杓子定規のたこに直されちゃうんだよなあ ミ゚仝 ゚ ミ
0549^ω^ ◆8vOv.D2p4. 2006/03/09(木) 16:55:45
>>548
そうなのかー・・・
まぁ辞書で「シミュレーション」で出てくるから、どっちでもいいや
0550デフォルトの名無しさん2006/03/10(金) 00:56:43
カタカナ読むのは日本人なんでシミュレートでおk
0551デフォルトの名無しさん2006/03/10(金) 21:10:32
winsoketで
ioctlsocket関数でノンブロッキング
selectでノンブロッキング

どっちがいいのでしょうか?
自分はioctlsocket関数でノンノンしたいのですが。
0552デフォルトの名無しさん2006/03/10(金) 23:42:17
ブロッキングのことなら梅原さんに聞くといいよ
0553デフォルトの名無しさん2006/03/10(金) 23:54:03
茹でてマヨネーズ付けて食うとうまいよね。
0554デフォルトの名無しさん2006/03/11(土) 01:18:00
ioctlsocketでノンブロッキングって、ポーリングってこと?
0555デフォルトの名無しさん2006/03/11(土) 04:28:43
>>543
キャッシュサーバーとサーバーの間に中継サーバを配置して、
キャッシュサーバーの機能テストのために、キャッシュサーバーがサーバーから
ファイルをダウンロードできる時間を設定で変化させることができる機能を持ったものです。

0556デフォルトの名無しさん2006/03/11(土) 14:53:19
>>552
アンビリーバボー
0557デフォルトの名無しさん2006/03/12(日) 20:27:01
Win2000で
socket(AF_INET, SOCK_RAW, IPPROTO_IP)
ってな感じでパケットキャプチャを作りました。

パケットの中身をrecv()して、自己PC発のパケットで
TCPヘッダ以降の 特定のパターンだけrejectというか、
発信を無効にしちゃいたいのです。

色々調べてLSPとやらでNICに直接話すのが筋と理解した
のですが、私のスキルでは難しかったです。

TTLだけ0にしちゃうとかとにかくそのパターンのパケットだけ
発信を無効にする簡易的な火壁のようなことをしたいのですが、
何か簡単な方法はないでしょうか?
0558デフォルトの名無しさん2006/03/12(日) 21:10:48
>>557に便乗させてください

win2000/XPで、ウィルスバスターなどのように、常駐させておいて怪しい
通信を遮断したいです。プロミスキャストで出入りするパケットの中身は
見ることができるのですがそのソケットをシャットダウンすることが出来ないです。
やっぱwinpcapを使わないとだめですか?
0559デフォルトの名無しさん2006/03/12(日) 21:33:35
winはセキュリティ上パケット操作はできないようにしてある
回避策はなくもないけど、ウィルスにも使われるような技術なので
そう簡単には見つからないでしょう
05605572006/03/12(日) 22:00:19
>>559
そうですか。。情報ありがとうございます!
回避策になりそうな手段をもうちょっと調べてみます。
何かヒントになるキーワードがあればまたお願いします!
0561デフォルトの名無しさん2006/03/13(月) 01:41:17
>>558
ipfltdrv.sysでも使うとか。
05625582006/03/13(月) 02:05:23
>>561
「ipfltdrv.sys」で検索してみたらもの凄く参考になりそうなページを発見。
ttp://ruffnex.oc.to/kenji/text/fire_a/
ナイスパスTHXです。やってみます。
05635582006/03/13(月) 02:15:27
間違えた。こっちの方が細かく中身を見ながら処理出来そう
なので良さそうですね。ていうかまんまです。
ttp://ruffnex.oc.to/kenji/windriver/packet/
どう見ても欲しかった資料です。ありがとうございました>>561
0564デフォルトの名無しさん2006/03/14(火) 14:45:26
>>559
そんなんどこにでも転がってるけどwww
0565デフォルトの名無しさん2006/03/14(火) 23:14:06
POP3でメールを取り込もうとしているのですが、LIST で取得できるサイズと
recv()で取得したバイト数が合いません。

recv()で取得したデータの改行コードがCRLRになっているようなんですが、
これを直してあげる必要があるのでしょうか?

初歩的な質問で申し訳ありませんがよろしくお願いいたします。
0566デフォルトの名無しさん2006/03/14(火) 23:31:35
>>565
RETR でメッセージを受け取るときは . のみの行が終了基準だけど。
サイズで読み出そうとしてんの?
0567デフォルトの名無しさん2006/03/14(火) 23:41:07
>>565
RFCを読むべきです。でもヒマなので一応説明します。

LIST が返すサイズは、完全に正しいメッセージのオクテット数(バイト数)です。
LIST が返すサイズと、RETR で得られるメッセージのオクテット数が異なっているなら、
それはサーバのバグです。

メッセージ中の改行はすべてCRLFで、そうでないならこれまたサーバ(か何か)のバグです。

RETR の返答を recv して得られるバイト数は
ターミネーション ( . + CRLF ) や、行頭に . が有る場合に余分に
付加される . などがあるため、メッセージのオクテット数とは異なります。

RETR の返答をどう解釈するかは RFC を読んでください。
0568デフォルトの名無しさん2006/03/14(火) 23:54:54
>>566,567
RFCをちゃんと読んでみる事にします。
それでわからないときはまた質問することにします。
ありがとうございました。
0569デフォルトの名無しさん2006/03/15(水) 00:37:04
チャレンジハンドシェイク認証プロトコル詳しい方いますか?
VCで簡単にデータやりとりしてみたいんですが・・・
0570デフォルトの名無しさん2006/03/15(水) 03:26:46
RFC1994(もしくはRFC1334)を読んでからまたおいで
勉強って言うのは自分で調べるところから始まるんだぞ
0571デフォルトの名無しさん2006/03/15(水) 04:08:55
>>勉強って言うのは自分で調べるところから始まるんだぞ

569じゃないけど、まず2chや人に聞こうとしていた自分の心にずしんと響きました。
根性たたきなおして勉強します。
そしてどうしても分からなくなったときには、力を貸してください。
それでは。
0572デフォルトの名無しさん2006/03/15(水) 04:44:14
自分で調べる手段の一つが人に聞くことなわけだが
0573デフォルトの名無しさん2006/03/15(水) 11:20:25
>>572
氏ね糞
0574デフォルトの名無しさん2006/03/15(水) 11:21:07
>572
0575デフォルトの名無しさん2006/03/15(水) 11:40:15
572 :デフォルトの名無しさん [sage] :2006/03/15(水) 04:44:14
自分で調べる手段の一つが人に聞くことなわけだが


学生の間しか言えない名言だな
0576デフォルトの名無しさん2006/03/15(水) 12:49:40
3匹も釣れてたw
0577デフォルトの名無しさん2006/03/15(水) 12:53:43
後釣り宣言か、真性だな
0578デフォルトの名無しさん2006/03/15(水) 13:09:03
もう一匹も釣れてたwwwwwwww
05795762006/03/15(水) 13:52:58
>>578は僕じゃありません
0580デフォルトの名無しさん2006/03/15(水) 14:03:18
エサ取りも釣れたwwwwwwww
05815762006/03/15(水) 14:03:35
暇な学生必死だな、と
それとも落ちこぼれ社会人かしら?
はたまた後は老けて行くだけのNEET君ですか?
05825762006/03/15(水) 14:07:55
>>581
はいはい、池沼乙
05835762006/03/15(水) 14:09:09
厨房多すぎw
ままのおっぱいでもしゃぶってろよwwwwwwwwwwwwwwwwwwww
0584デフォルトの名無しさん2006/03/15(水) 14:13:06
春休みなんだよ
小・中・高・大学生・社会人にやさしくしろ
無職にもな!
0585デフォルトの名無しさん2006/03/15(水) 15:09:57
>>581
いや、態々レス番書くほどの内容か?
0586デフォルトの名無しさん2006/03/15(水) 15:11:47
>>581
関係ない無職の俺が傷ついた
05875762006/03/15(水) 15:47:06
俺はガチムチ兄貴のチンポでもしゃぶりたい気分だがなwwwwwwっwww
wwwwww
05885802006/03/15(水) 16:23:08
>>585
俺天才釣り氏じゃねwwwwwwww
0589デフォルトの名無しさん2006/03/15(水) 23:09:17
でも究極的には人が作ったものの使い方を調べるってのは人に聞いてるわけだが。
あるいは人が書いたものを読むとか。
それとも自分で引数をいろいろ与えてどんな動作をするか調査するのかい?
0590参加者募集中!2006/03/15(水) 23:12:25
株式@2ch
★★★自動売買ソフトを作ろうぜ★★★ Part3
http://live19.2ch.net/test/read.cgi/stock/1141718486/l50
0591デフォルトの名無しさん2006/03/15(水) 23:15:30
thread(あるいはfork)とselectを併用したものとかはシンプルでどんなOSでも使い回しがきくよね
kqueueとかOSに特化したサーバは、そういったシンプルなサーバよりどの程度優れてるの?
性能が5%改善しました!とかなら馬鹿らしくて、チューンしたいとも思わないところです
0592デフォルトの名無しさん2006/03/15(水) 23:20:02
100接続以上とか捌くつもりがない限り、selectでいいんじゃないの。
05935692006/03/15(水) 23:20:46
>>570�dクス
調べてるみ
0594デフォルトの名無しさん2006/03/16(木) 00:31:26
>>591
libeventでも使っとけば? select/poll/kqueueのwrapperライブラリ。
0595デフォルトの名無しさん2006/03/16(木) 00:42:56
>>594
調べてみます、情報ありがと
0596デフォルトの名無しさん2006/03/18(土) 09:44:22
プログラミングコードのレベルで、
指定した割合でパケットをロスさせたり、
順番を入れ替えたりすることが可能な言語はあるのでしょうか?
下のスレで質問させていただいたのですが、
しばらくしてもご返答がいただけなかったので、
ここでたずねさせて頂きました。よろしくお願いします。
http://pc8.2ch.net/test/read.cgi/tech/1135634403/
0597デフォルトの名無しさん2006/03/18(土) 10:33:03
「可能な言語があるか?」と聞かれたら、「ある」としか答えられないが…。
0598デフォルトの名無しさん2006/03/18(土) 10:48:27
sendとかに好きなようにラップかませばいいだけだろ
0599デフォルトの名無しさん2006/03/18(土) 10:59:53
>>596
ところでもちろんUDPだよね? TCPではスタックレベルでパッケとロス等は吸収・復帰されるから
アプリケーションレベルでのロスはあり得ない。 

ちなみに>>545という方法も検討したら?
0600デフォルトの名無しさん2006/03/18(土) 11:56:52
皆様レスありがとうございます。

>>597
例えばどのような言語があるのでしょうか?
宜しければ教えていただきたいです。

>>559
下位層(2層や3層)レベルでのパケットのロスが生み出せれば良いと
考えているのですが、、
>>545のツールも参考にさせていただきます。

0601デフォルトの名無しさん2006/03/18(土) 12:34:17
>>599
パッケとロス
06025992006/03/18(土) 12:38:49
>>601
ポケっとロス orz
06035992006/03/18(土) 12:41:52
>>600
> 下位層(2層や3層)レベルでのパケットのロスが生み出せれば良いと考えているのですが、、

Linuxならiptableのモジュールでパケットをある確率で落とすというというのがあるけどね。
ホスト単体で出来るから便利。 パケット入れ替えというのはたしか無いと思ったけど。
0604デフォルトの名無しさん2006/03/18(土) 12:54:07
>>600
イーサネット層とかをコードレベルで扱える言語ならできるのでは?
Javaとかじゃ無理なような。
0605デフォルトの名無しさん2006/03/18(土) 13:06:28
kernel moduleなpacket filter作ればCでいくらでも書けるだろ。
0606デフォルトの名無しさん2006/03/18(土) 13:42:58
>>イーサネット層とかをコードレベルで扱える言語

例えば何さ?
0607デフォルトの名無しさん2006/03/18(土) 14:03:21
送信部分で、自分で送信をやめるんじゃ駄目なのか?
質問の答えにはなってないけど聞いてみる
■ このスレッドは過去ログ倉庫に格納されています