ネットワークプログラ ..
[2ch|▼Menu]
21:デフォルトの名無しさん
08/03/09 04:53:29
>>20
規格上は "012" "3" "456789" という IP パケットに分
割されて "3" のパケットが抜けることがあるかもしれ
ないが、一つのパケットに再構成出来ないので UDP で
はパケットロストでアプリケーションには届かないし、
TCP ならパケット再送で正しいパケットが届く。


22:デフォルトの名無しさん
08/03/09 05:19:36
>>21
レスありがとうございます
勉強になります

23:デフォルトの名無しさん
08/03/09 17:28:59
もし送信側の UDP ライブラリが何らかの理由で "012"
"3" "4567890" という具合いに三つのパケットに分割し
て、なおかつ "3" のパケットが抜ければそういう状態
になるかも知れない。

TCP 使ってればまず問題ない。

24:デフォルトの名無しさん
08/03/09 22:29:59
UDPレベルで分割送出するならともかく、
それ以下のレイヤで分割されたなら、全部
届くか届かないかでないの。

25:デフォルトの名無しさん
08/03/09 22:37:11
>>24
> UDPレベルで分割送出するならともかく、

これが > 23 で

> それ以下のレイヤで分割されたなら、全部
> 届くか届かないかでないの。

これが > 21 のつもりだったんだけど、何か変?

26:デフォルトの名無しさん
08/03/09 22:52:10
UDPはそういう分割をしないんじゃなかったっけ?

27:デフォルトの名無しさん
08/03/09 23:53:28
>>26
あー、ユーザーランドインタフェイス内部でのつもりだった。
もちろん、それが特に書かれてるのが TCP の RFC
なのはわかってるけど >>20 に環境が書かれてないんだもん。

28:デフォルトの名無しさん
08/03/10 22:47:33
>>27
お前、シッタカはタイガイニシル

29:デフォルトの名無しさん
08/03/11 00:33:03
SMTPが到達を保証できない理由を
分かり易く解説したサイトってない?

30:デフォルトの名無しさん
08/03/11 00:46:35
>>29
・SMTPを使ったメールはインターネット上のあらゆるサーバを経由して転送される
・あらゆるサーバとは、自分のあずかり知らないサーバを経由する可能性がある
・あずかり知らないサーバを経由するということは、そのあずかり知らないサーバの管理者
 がどうとでもすることができる

他にもあるが、これだけでも分かったつもりにはなれるだろ。

31:デフォルトの名無しさん
08/03/11 01:08:18
いや、そういうハナシじゃなくて
電子商取引推進協議会(ECOM)のガイドラインで
プロトコル上の欠点を示唆してるようだが、詳しい理由を解説してないから、
そこを突っ込んでいる奴を。

URLリンク(www.ecom.jp)

32:デフォルトの名無しさん
08/03/11 01:13:42
問題の文書はコレで、

第5章 通信基盤ガイドライン
URLリンク(www.ecom.jp)

>SMTP では、メールが相手に確実に届く保証がないこ
>とやデータの順次性を必ずしも保てないといったデータ
>送受信の確実性の問題がある。

33:デフォルトの名無しさん
08/03/11 01:16:33
補足:

多分ここら辺りにポイントがあると予想する。

>なお、データの送受信の確実性の確保に関しては、
>通信レベルだけの対応では不十分であり、
>アプリケーションレベルでの対応が必要である。

34:デフォルトの名無しさん
08/03/11 01:26:35
確実の定義次第じゃん・・・

35:デフォルトの名無しさん
08/03/11 01:35:22
そういうミもフタもないハナシなのかなぁ

36:デフォルトの名無しさん
08/03/11 01:38:38
>>32
当たり前のことしか書いてない。まぁメールなんて使うなってこった。

37:デフォルトの名無しさん
08/03/11 01:46:10
ちなみにいまのインターネットだって、送信したデータが*確実に*相手に
届くことなんて保証してないぞ。TCPは可能な限りの努力をするが、
届かないときはどうしようもない。

*確実*だけのキーワードだと、ダウンタイムとか冗長性とか、
障害耐性とか、コアとなるハブの存在だとか、クラスター性だとか
・・・・。

38:デフォルトの名無しさん
08/03/12 00:26:14
TCPは、届かないなら届かなかった事が判るでしょ

39:デフォルトの名無しさん
08/03/12 00:35:07
企業や学校はメールゲートウェイとかあって
メールサーバー本体と直接通信してなかったりするから
TCPソケットでエラーが出なくても届いてない可能性があるかと。

直通のftpメールなら確実だと思うけど。

40:デフォルトの名無しさん
08/03/12 12:36:31
つうかレイヤーを切り分けて考えろよ

41:デフォルトの名無しさん
08/03/12 21:52:33
相手のメールサーバから「受信した」とackが来ても、
その直後にディスクがクラッシュするかもしれないからな
確実とはいえない

42:デフォルトの名無しさん
08/03/12 22:06:50
なにいってんだこいつ

43:デフォルトの名無しさん
08/03/13 04:49:20
>31が「エスパーキボンヌ」にしか見えないのは気のせい?

SMTPプロトコルの欠点だけ論うなら、
 bounceが存在する
  ->エラー通知が10年後に届いても文句言えない
   ->確実性✕
なんて部分があるな。

44:デフォルトの名無しさん
08/03/19 23:41:34
サーバ側KEEP-ALIVEの一回の接続で処理出来るリクエスト数が30で
一つのページに使われているインラインコンテンツが30以上あった場合
これらをダウンロードするためには
もう一回接続する必要がありますか?

45:デフォルトの名無しさん
08/03/19 23:54:54
そりゃそうだろう

46:デフォルトの名無しさん
08/03/22 21:06:10
どんなネットワークプログラム作ったらいいかわかりません
どうしたらいいですか?

47:デフォルトの名無しさん
08/03/22 21:24:16
>>46
特に何か作る必要がないのなら、別に何も作らなくていいのでは?

48:デフォルトの名無しさん
08/03/22 22:16:48
>>46
文字列を入力したらもう一方の端末でその文字列を表示するというのをソケットを使って作成しましょう

49:デフォルトの名無しさん
08/03/26 09:51:42
組み込みlinux機器向けにC言語ベースの簡易httpクライアントを作成しています。
ヘッダの読み取りに、1行ずつストリームから取得するという処理を
書いているのですが、1文字ずつrecvして、\r→\nのパターンが
来るまで繰り返す、という方法はありなんでしょうか?
他に何か良い方法はあるでしょうか。


50:デフォルトの名無しさん
08/03/26 10:19:15
ありだと思うけど、\r\nを返さないサーバもあるから気を付けてね。

51:デフォルトの名無しさん
08/03/26 10:23:39
一応ソースコードです。改行制限キツイですね。
// 1行読み取り,改行を含む長さを返す,バッファに入りきらない場合はnul終端文字列の長さ
int readline(int sd, char *buf, int bufsize) {
int rlen = 0, wlen = 0, cr = 0;
char ch;
for (;;) {
int r = recv( sd, &ch, 1, 0 ) ;
if (r < 0) {
fprintf(stderr,"readline:error r < 0\n");
return r;
} else if(!r) {
fprintf(stderr,"readline:warning !r\n");
break ;
}
if (ch == '\n') {
if (!cr)
fprintf(stderr,"readline:warning !cr\n");
if (rlen < bufsize) buf[wlen++] = ch;
rlen++;
break;
} else {
cr = (ch == '\r') ? 1 : 0;
if (rlen < bufsize) buf[wlen++] = ch;
rlen++;
}
}
if (wlen>=bufsize)
wlen--; // nul終端文字列になるように調節
buf[wlen] = 0;
return wlen;
}

52:デフォルトの名無しさん
08/03/26 10:33:06
>>50
ありがとうございます。
自分でバッファリングしてくこと考えたら
頭痛くなってきたので。
\rはオプション扱いに致します。

53:デフォルトの名無しさん
08/03/27 12:31:48
初心者向けの本は何を買ったらいいんですか?

54:デフォルトの名無しさん
08/03/27 16:03:57
NAT越えって、まだ個人がおいそれと実現できる領域じゃないのかな?
ゲーム作ってて、NAT越えできたらなぁとよく思うんだけど・・・

55:デフォルトの名無しさん
08/03/27 21:09:58
>>54
TCPで接続張ってしまえば、自由に通信できるよ。最初の
接続元はNATの内側から出ないといけないけど。

ゲームなら別にそれでもいいでしょ。

56:デフォルトの名無しさん
08/03/27 22:46:39
>>1
まだftpか。httpまであと何年かかるかな。

57:デフォルトの名無しさん
08/03/28 08:56:49
>>55
>最初の接続元はNATの内側から出ないといけないけど。

意味ねーじゃんw

58:デフォルトの名無しさん
08/03/28 10:30:09
>>55,57
質問者の54です。ちょっと意味がわからないのですが、NAT越えとは以下のことができる技術という認識であってるでしょうか?

AとBは、両方ともルータの中の人間。直接やりとりは普通は無理。
Cというサーバーに、AもBも通信を行なう
Cが、AとBをうまく結びつける
AとBが直接やりとりできるようになる(Cを経由しない!!) ←NAT越え!

これができると、マッチングサーバーCはほとんど負荷無く運営できて良いのですが。
NintendoDSのWIFI対戦も、この仕組みだと聞いております。

このCサーバーを構築する方法は、個人で気軽に手の届く技術でしょうか?
(どうやら、それをツールとして売り出している企業はあるようなのですが)

59:デフォルトの名無しさん
08/03/28 10:53:25
UDP Hole Punching ってのもあったような

60:デフォルトの名無しさん
08/03/28 11:05:36
UDP Hole Punchingは「あまりセキュリティーに力を入れていないルータ」しか乗り越えられないようなのと
具体的ソースを提示しているサイトが見当たらないことが
TCPをUDPに切り替える足かせになっているような気がします。

概念はわかりやすいものなので、実験環境があればテストは簡単そうです。
この土日にでもテストしてみたいと思います。

他にも何か情報があれば嬉しいです。
NAT越えは面白い分野ですが、ム板では盛り上がっていないようなので…

61:デフォルトの名無しさん
08/03/28 11:16:39
初心者も簡単にNAPT設定ができれば、たいした問題にはならんのに
なんで用語とか各メーカーばらばらなんだか・・

62:デフォルトの名無しさん
08/03/28 11:35:02
今となってはUPnPでよくね?
UPnP対応ルータじゃないルータって、いまどき売ってるかね?

63:デフォルトの名無しさん
08/03/28 13:34:36
>>62
だね。きちんと整備されたライブラリ使えば、socketでlistenするのと、
UPnPでポート割り当てるの同感覚。特定のポート番号使えるのが、NAT内の1台だけだって制限があるけど。

64:デフォルトの名無しさん
08/03/28 14:26:22
54です

恥ずかしながら、初めてUPnPというものを知りました。
これは素晴らしい技術ですね。
早速サンプルソースも手に入れましたので、実験してみたいと思います。
ありがとうございました。

>>63
もしよろしければ、きちんと整備されたライブラリ〜というものの例をいただけるとありがたいです。
とりあえず
URLリンク(www.bosuke.mine.nu)
ここを参考に組んでみようと思います。

余談ですが、今たまたまGoogleで色々調べていたら、ここの前スレで同じサイトを参考に組もうとしている人を発見しましたw

65:デフォルトの名無しさん
08/03/28 15:30:45
UPnPもSTUNもルータに激しく依存するから結局繋がらない場合は繋がらないけどな。
UPnPも最近になってやっと危険性が認知されてデフォでoffになったりしてるし。
URLリンク(jvn.jp)
URLリンク(internet.watch.impress.co.jp) cda/news/2008/01/17/18149.html

66:デフォルトの名無しさん
08/03/28 16:47:43
Flashの通信機能を遮断する方法がわからないんだよなー

67:デフォルトの名無しさん
08/03/28 18:25:28
>>60
RFC3489の"5. NAT Variations"あたりを見てみたら?
UDP Hole PunchingできるのはFull Coneだけでしょう.
たしかI-Dのどれかに,どの機種がFull Coneかのリストが載っていたような

>>65
TURNを作れば? :-)

68:デフォルトの名無しさん
08/03/28 22:28:43
NGN普及して、IPv6デフォルトになればNAPTなぞ過去の技術になる。

69:デフォルトの名無しさん
08/03/29 07:01:44
>>68
NAPTは遺物となってもFWは残る

70:デフォルトの名無しさん
08/03/31 04:51:24
かなり初歩的なことをお聞きしますが、プロキシサーバーというものは送られてきたメッセージを直接ホストに送信するだけでよいのでしょうか?

71:デフォルトの名無しさん
08/03/31 10:23:37
駄目

72:デフォルトの名無しさん
08/03/31 12:14:16
>>70
proxy serverといってもいろんな種類があるが何のプロトコルのproxy?

73:70
08/03/31 13:11:11
>>72
HTTPプロトコルです

74:デフォルトの名無しさん
08/03/31 13:22:48
>>73
代表的なのは、
・ メソッドに書かれてる URL から正しくホストに接続する
URLリンク(www.example.com) みたいな URL をホスト接続時は /path1/path2.html に変換する
・ プロキシ特有の環境変数を付加する (必要な場合)
・ CONNECT メソッドを正しく解釈する (CONNECT 以降はそのままデータの送受信を行う)
辺りかな。 RFC などのドキュメントを見るのが一番手っ取り早いとは思うが。

75:デフォルトの名無しさん
08/03/31 13:27:01
>>73
http proxyはちゃんと作るとかなり複雑だが、少くともリクエスト内容は書き換えなきゃいけないだろ。
あとは、HTTP/1.0/1.1の場合分けとかKeepAliveとかpipelineとかchunkとか100 Continueとか、
真面目にやりだすと結構大変。

とりあえずRFC2616嫁

76:70
08/03/31 13:35:09
>>74-75
レスありがとうございます
RFCのドキュメントを読んでみることにします

77:デフォルトの名無しさん
08/03/31 13:37:56
まぁ、読んでもわかんないと思うけどね・・・

78:デフォルトの名無しさん
08/03/31 13:39:24
>>77
そないなことあらへんで。

79:デフォルトの名無しさん
08/03/31 13:44:17
内容を理解できないということじゃなくて、proxy serverの構成要件とは何かがわかんないだろうって意味

80:デフォルトの名無しさん
08/03/31 13:47:37
>>79
あ、なるほど。

81:fxで裁判中。教えて
08/04/03 08:29:02
外国為替証拠金取引会社のアトランティックトレードと裁判になりました。

裁判の内容をここに記してみました
システム障害等でくわしいかた、是非とも情報をお待ちしております。
よろしくお願いします。
  URLリンク(members3.jcom.home.ne.jp)


82:デフォルトの名無しさん
08/04/04 00:49:43
>>68
そのNGNがv6マルチプレフィクス問題で、やっぱNAPT使うか?とも言われている件。

83:デフォルトの名無しさん
08/04/09 11:10:34
プロトコル定義するときに 「最初のグリーティングはクライアントから出させる事」 みたいな
一般論的なセキュリティ上の推奨をどこかで見たようながあったような気がするんだが、
これって単に攻撃のための情報を減らす目的でしたかね?

何かそういった鉄則集みたいなのを 10 年くらい前にどこかで見たような記憶があるんですが
どこかご存知ないですか?

84:デフォルトの名無しさん
08/04/12 11:31:55
簡単なオンラインゲーム(MMO)を作ろうと思うのですが、
無料のデータベースであるMySQLかSQLServer2005Expressを使おうと思ってますが
おすすめのものとその理由など教えていただきたいです。

85:デフォルトの名無しさん
08/04/12 11:35:23
日本語でおk

86:デフォルトの名無しさん
08/04/12 12:00:58
>>84
スレ違い以前に板違いだぞ、DB板かゲ製行ってくると良い

87:デフォルトの名無しさん
08/04/12 13:32:10
>>86
いってきます

88:デフォルトの名無しさん
08/04/12 17:05:47
Winsockを使って相手サーバがKEEP-ALIVEに対応しているか確かめる方法はありますか?

89:デフォルトの名無しさん
08/04/12 17:07:23
投げてみて、その反応をさぐるしかない。

90:デフォルトの名無しさん
08/04/12 18:39:30
>>89
投げてみました。
ApacheではKEEPALIVEがOffにされていた場合
Connectionがcloseとなっています。
closeであるかないかで判定しようと思うのですが、
どうでしょうか?

91:デフォルトの名無しさん
08/04/12 18:41:43
HTTP かよ。
Connection: close ならエンティティボディ送信後に切断だよ。
RFC 嫁。persistent connection でググレ

92:デフォルトの名無しさん
08/04/12 21:35:08
Connection(小文字)がCONNECTION(大文字)で返ってくるサーバはありますか?

93:デフォルトの名無しさん
08/04/12 21:40:22
いいからRFC読めよ

94:デフォルトの名無しさん
08/04/12 21:44:06
>>93
ウラル貼ってくれ

95:デフォルトの名無しさん
08/04/12 21:54:17
>>93
URL貼って下さい

96:デフォルトの名無しさん
08/04/12 21:56:35
URLリンク(www.google.co.jp)

97:デフォルトの名無しさん
08/04/12 21:59:34
>>96
いや、
RFCの何番?

98:デフォルトの名無しさん
08/04/12 22:03:28
だからみりゃわかるだろ低脳。
そもそも>>1に「関連リンク云々」書いてあること読めないか?

99:デフォルトの名無しさん
08/04/12 22:16:56
>>98
いや、
だからHTTPヘッダが大文字で返ってくるサーバとかあるのか、
って聞いてんだよ

100:デフォルトの名無しさん
08/04/12 22:21:10
あるだろうなぁ。

101:デフォルトの名無しさん
08/04/12 22:26:46
>>100
ありがとうございます。

102:デフォルトの名無しさん
08/04/12 22:57:12
規定してなきゃ存在するとみなすのが当然じゃん。
その規定が書いてあるのがRFCなんだけど。

103:デフォルトの名無しさん
08/04/12 23:05:57
>>102
素で意味がわからん。

104:デフォルトの名無しさん
08/04/12 23:30:50
>>102
規定してあるよ。おまいがよく読めw

105:デフォルトの名無しさん
08/04/13 00:09:31
何もないと思うが。

106:デフォルトの名無しさん
08/04/13 00:49:58
>>105
URLリンク(www.studyinghttp.net)
4.2 メッセージヘッダ
一般ヘッダ (section 4.5)、リクエストヘッダ (section 5.3)、レスポンスヘッダ (section 6.2)、エンティティヘッダ (section 7.1)
各フィールドを含む HTTP ヘッダフィールドは、RFC 822 [9] の Section 3.1 で与えられているものと同じである共通のフォーマットに従う。
それぞれのヘッダフィールドは、名前、その後にコロン(":")、そしてフィールド値から成る。
フィールド名は、大文字・小文字を区別しない。

「大文字と小文字を区別しない」

107:デフォルトの名無しさん
08/04/13 00:54:11
>>106
そりゃRFCだろ。

108:デフォルトの名無しさん
08/04/13 01:00:51
変な流れになってるなぁ。

109:デフォルトの名無しさん
08/04/13 09:39:25
どうみても同一人物だろ・・・
言い返されたからってムキになるなよ(;´Д`)

110:デフォルトの名無しさん
08/04/13 10:10:40
迷子のキムチさん
出て行ってください

111:デフォルトの名無しさん
08/04/19 21:15:07
Keep-alive使ったサンプルコードってあります?
Winsockで

112:デフォルトの名無しさん
08/04/19 21:46:27
一週間ぶりですね

113:デフォルトの名無しさん
08/04/19 22:11:14
Linux用に作成したソケット通信アプリのテストにtcpdumpを使いたいのですが
アプリが送受信しているデータの表示方法がなかなか分かりません。

tcpdump -s 1600 -X tcp port 1024

と打った上で、アプリに送受信させるとデータが含まれたパケットの中身が
バイナリで表示されますが、アプリが送受信しているデータだけ表示させる
方法はないでしょうか?
どなたか教えてください。よろしくおねがいいたします。

114:デフォルトの名無しさん
08/04/19 23:17:37
>>113
つwireshark

115:デフォルトの名無しさん
08/04/19 23:52:33
X環境入れてないのです(;_;)

116:デフォルトの名無しさん
08/04/20 03:30:50
>>112
……(´・ω・`)

117:デフォルトの名無しさん
08/04/22 14:58:59
最近ネットプログラミングはじめたのですが、
よくサーバはクライアントのパケットを信用してはいけないと書かれていて、
逆にクライアントはサーバのパケットを信用して良いのでしょうか?


118:デフォルトの名無しさん
08/04/22 15:21:33
クライアントが、信用できないサーバ (不特定多数のサーバ) と通信する可能性があるなら、信用してはいけない。
信用できるサーバとしか通信しないなら信用してもいいかもしれないが、
信用できないという前提で組む方が、サーバに何かバグがあったり、
通信の改ざんを受けたり、なりすましサーバに当たったりしたときに、安全でいいと思うよ。

119:デフォルトの名無しさん
08/04/22 17:24:53
>>118
なるほど、ありがとうございます

120:デフォルトの名無しさん
08/04/22 17:28:58
送るときは厳格に、受ける時は寛容に、はネットワークプログラミングの基本。

121:デフォルトの名無しさん
08/04/22 22:03:41
受けるときも厳格に、が基本だよ

122:デフォルトの名無しさん
08/04/22 22:30:16
読解力が試されます

123:デフォルトの名無しさん
08/04/23 06:22:28
プロセス間通信用にソケットを使う場合、
どういう取り決めにしてますか?
自分はhttpと同じで、行単位で空改行までを
送受信単位にして、必要ならオプションの
バイナリデータが続く、という感じにしてますが。
いきなりバイナリでやりとりするのは
データ構造決めるのが面倒なんで。
何か既成のモデルがあったらいいんですが。

124:デフォルトの名無しさん
08/04/23 09:41:10
xml-rpcとか?

125:デフォルトの名無しさん
08/04/23 10:24:29
シンプルなバイナリなら TLV
任意長バイナリは GIF っぽくサブブロック化

126:デフォルトの名無しさん
08/04/23 15:46:48
>>121
受けるときは寛容に、が基本。

URLリンク(tools.ietf.org)
> In general, an implementation must be
> conservative in its sending behavior, and
> liberal in its receiving behavior.


127:デフォルトの名無しさん
08/04/23 16:09:50
>>123
俺の長い組み込み経験からのアドバイス。

1.レイヤを定める。下位レイヤは上位レイヤのデータ
 構造を知らなくてもやり取り出来るようにする。バイ
 ナリ←→プログラムデータの変換部分との間にユーティ
 リティ的なレイヤがあると便利。

2.最初に「バイト長」とか入れない。これをやられる
 と送信側でデータが揃わないと送出開始出来なくなる。
 仕事でこういうプロトコル決めてる奴を見ると殺意が
 芽生える。

3.1や2を実現するために、たとえバイナリでもエス
 ケープ文字を用意する。俺が良く使うのは SLIP のエ
 スケープ(昔仕事で使ったから)。下位レイヤでデー
 タやコマンドの開始/終了などを用意する。読む側の
 下位レイヤで「開始」が来たら読んでる途中のものを
 全部破棄して例外を投げるように(初期状態 read で
 catch するように)すると、通信相手のバグその他で
 変な状態に陥っても元に戻ることが保証出来る。


128:デフォルトの名無しさん
08/04/23 16:23:06
>>127
あんまり殺気たてんでくれ。
俺の20プロダクト中16回コロされてる事になる。

129:デフォルトの名無しさん
08/04/23 18:21:40
俺はパート長は入れるね

130:デフォルトの名無しさん
08/04/23 18:40:40
任意長のフィールドは 1 バイトのブロック長と続く最大 256 バイトのデータブロック。ブロック長 0 が終端。
GIF と PNG のフォーマットは通信用データ構造のお勉強に最適。

131:デフォルトの名無しさん
08/04/23 20:35:39
>>127
>2.最初に「バイト長」とか入れない。

が、なぜ以下のようになるのかまったく意味不明。

>これをやられると送信側でデータが揃わないと送出開始出来なくなる。

データそろえて送信したところで、ネットワーク上で何バイトずつ
受信側に届くかなんて何の保証もないわけで。そろえて送る
理由がまったくない。

132:デフォルトの名無しさん
08/04/23 20:46:19
>>131
127 じゃないけど、何を言ってるか分からないのは君だけだと思うよ。

133:デフォルトの名無しさん
08/04/23 22:27:05
俺もわからん。RAW SOCKETの話?
データ長は,送るものが先に決まるならプロトコルとしてはありかもしれないが、
エスケープ文字を入れて区切りの失敗を見つけるぐらいならソケット閉じてしまったほうが早いのでは?
むしろUDPで自分で順番を制御するとか。

134:デフォルトの名無しさん
08/04/23 22:38:11
ヒント:組み込み屋さん


135:デフォルトの名無しさん
08/04/23 22:53:03
組み込みでハードウェアがらみな制限付きで、バッファの制限もついてるからかな?
DLNAとかではHTTPベースでchunked encodingとかあったが、あれは、ストリーム送信用に送信開始時にデータ長が不定だったからだが。
ほかもそんなことが多いのかな?

136:デフォルトの名無しさん
08/04/23 23:09:21
内容検証用の MD5 ハッシュも全体を走査してみないと決定できないし。そういう情報を先頭に
持ってこられると、XSL の処理結果や BLOB を垂れ流したい場合は一度ファイルか何かに
落とさなきゃいけないからかなり不便。

137:デフォルトの名無しさん
08/04/23 23:13:02
時代は組み込みだからな。

データ全体を収めるバッファを用意するなんてありえない。

数KBさえ無駄にできない。

お前らはこういう基本すらわかってないんだな。

138:デフォルトの名無しさん
08/04/23 23:59:50
すみません教えていWINSOCKでPROXY対応なんですが
リクエストヘッダーへ
Proxy-Connection: keep-aliveも
Connection: Keep-Aliveも指定しているのですが
PROXYがサーバー間の接続を勝手に切ってしまいます
クライアントー>PROXYの接続は維持しています
サーバー側のエラーコードは10054を示しています

サーバーからのレスポンスはしっかり帰ってくるのですが
直後に切られます。 なんで?

リクエストはPOSTなんですが これって正常動作?

139:デフォルトの名無しさん
08/04/24 00:04:51
別に組み込みに限った話じゃないと思うが、システムの
時間ボトルネックが何処かを考えれば自明。

どうがんばっても通信速度以上のスピードでは送れない
んだから、なるべく早く送信開始して、バッファアンダー
ラン(タイムアウトによる PUSH とか)にならないよう
にバッファに詰めていければ一番効率が良い。

とはいえ最近は下手するとディスクの方が遅かったりす
るからなー。

>>136
> 内容検証用の MD5 ハッシュも全体を走査してみないと決定できない

送信時は送信しながら計算して最後に付加すればいいん
だけど、受信は受信しながらオブジェクト作っても合致
しないときに破棄する必要があるんで面倒なんだよな。


140:デフォルトの名無しさん
08/04/24 00:09:05
正常ではないな。
プロキシがサーバとの接続を維持する気がないなら Keep-Alive でリクエスト出したらいかん。
多分プロキシ実装が Persistent Connection に対応していないし、リクエストヘッダも何も考えず
素通りさせてるだけだと思うが。

141:デフォルトの名無しさん
08/04/24 00:13:59
受信時は一定容量ごとのMD5でいいんだが、それよりファイル保存時にディスクアクセスを早くしようとして、
受信サイズの最後尾までファイルを拡張してから受信を開始すると途中で中断したときにある個所から後ろがごみデータが充填するんだが、
ファイルIOで一定サイズ移行のデータを削除してファイルサイズを小さくするって言う命令が無いために、ファイルを拡張すること自体が駄目何だよねぇ。
どこかに有効なファイルサイズを別に保存すればいいんだが、管理ファイルが散乱するので避けたいのだが、いい方法は無いものか。

142:デフォルトの名無しさん
08/04/24 00:16:39
>>140ありがとうございます
ただ、PROXYは定番どころのSQUIDをデフォルトで
使用しています。 レスポンスヘッダーがおかしければ
クライアントにデーターが届かないはずなんですが・・・
困ってます。

143:デフォルトの名無しさん
08/04/24 00:40:33
>>141
?
PC 程度以上の OS のファイルシステムなら (ANSI 標準じゃないにしても) 大抵用意されてるんじゃないか?
URLリンク(www.linux.or.jp)

>>142
よく知らんけど Squid が HTTP/1.0 互換モードで動いてるとか。

144:デフォルトの名無しさん
08/04/24 00:41:55
#include<stdio.h>
void main(void)
{
int a,b,c;
printf("数字を入力してください\n");
scanf("%d",&a);
printf("数字をまた入力してください\n");
rewind(stdin);
scanf("%d",&b);
printf("数字をまたまた入力してください\n");
scanf("%d",&c);

if(a == b == c)
printf("等しいです,\n");
else
printf("等しくないです,\n");
}


これでa==b==cだったら"等しい"と表示させるように組んでるのに 1、1、1以外の数字は入力してもは全部"等しくないです"になるのは
なんででしょうか?

145:デフォルトの名無しさん
08/04/24 00:44:52
>>144
スレリンク(tech板)
でどうぞ。

146:デフォルトの名無しさん
08/04/24 00:50:11
>>144
スレ違いだけど
君が参考にしてるものは信用しないほうがいい

147:デフォルトの名無しさん
08/04/24 00:58:41
>>143
たしかにSquidが吐き出すヘッダーは 1.0になっています
調べてみます。

148:デフォルトの名無しさん
08/04/24 02:08:49
非同期に双方向でイベント通信するためのプロトコルって何かある?
できれば 1:1 じゃなくて中継サーバかました n:n で使える奴。

149:デフォルトの名無しさん
08/04/24 02:38:39
>>148
TCP


150:デフォルトの名無しさん
08/04/24 03:12:13
>>149
もう一層上で。

151:デフォルトの名無しさん
08/04/24 03:48:09
>>150
2ちゃん

152:デフォルトの名無しさん
08/04/24 05:17:26
SIP

153:142
08/04/24 05:33:32
自己レスです
公開PROXYでテストしたところうまくいきました
また、ぐぐったところ SQUIDはHTTP/1.1をHTTP1.0に
勝手に変換する事がわかりました
(ヘッダーは別としてかといってPROXY側から切断するので???ですが)
これ以降は板違いですので移動します m(。。)m

154:デフォルトの名無しさん
08/04/24 07:10:52
>>143
ありがとう。知らなかったよorz
少しぐぐって、winだと_chsizeや下のサイトがあった。
URLリンク(www.void.in)

ANSIの関数全て読んだのは93年だったがそのころからあったのかな・・・・

155:デフォルトの名無しさん
08/04/24 23:26:33
winsock2でパケットキャプチャモジュールを作成したのですが、
プロミスキャスモードにしないと何もパケットを受信しません。
自分宛のパケットだけキャプチャしたいのでプロミスキャスモードは使用したくないのですが
プロミスキャスにしなくてもパケットを受信する事は出来るのでしょうか?

156:デフォルトの名無しさん
08/04/25 23:31:22
バイト長いれるなって話がまったくわからん。
カイヤでstartとか送って、endが届くまでバイナリが続くとかにすればいいの?

157:デフォルトの名無しさん
08/04/25 23:32:45
s/カイヤ/下位レイヤー/;

158:デフォルトの名無しさん
08/04/25 23:47:02
下位の部分を作るときに、アプリ(上位)側が全部を用意し終るまで出力を開始できないってことだろう。

例えばディスクへアクセスするドライバを書くときに、
ファイルのサイズが判明するまでHDDに書き込めない(領域を確保出来ない)ようだとやりにくくて仕方が無い、
というような話だと思う。たぶん。

159:デフォルトの名無しさん
08/04/25 23:49:35
あ、例えが悪いな。
HDDのドライバじゃなくてファイルシステムの造りの方が適切だな。

160:デフォルトの名無しさん
08/04/26 00:24:08
>>156-157
尻にしかれた某芸能人の事かとオモタ


161:デフォルトの名無しさん
08/04/26 17:04:22
>>130
> GIF と PNG のフォーマットは通信用データ構造のお勉強に最適。

画像フォーマットはツールが知らない種類のチャンクを読み飛ばせるように
バイト長が入ってる。通信の為じゃない。


162:デフォルトの名無しさん
08/04/26 17:07:24
>>161
インタレースも知らないのか?

163:デフォルトの名無しさん
08/04/26 17:07:33
>>161
ま、確かにそうなんだけど、GIFはCompuServe由来だし、PNGはPortable Network Graphicsだから、通信用である事も意識していたと思うよ。

164:デフォルトの名無しさん
08/04/27 14:03:53
>>161
思いっきり局部しか見てませんて感じのレスだな。

165:デフォルトの名無しさん
08/04/28 10:45:56
OSPFにしろ、BGPにしろ、RSVPにしろ、そもそもIPからしてペイロード長先付けだろ。
データがそろわないと、長さが書けないから送信できず、バッファが要る、ってのは、
可変長データならチャンク化すれば済むこと。
固定長データなら、バイト列にエンコーディングするレイヤよりも上のレイヤが先にデータ長を宣言すれば済む。


166:デフォルトの名無しさん
08/04/28 10:47:38
長い組み込み経験からのアドバイスなんだぜ?

素直に聞けよ。

167:デフォルトの名無しさん
08/04/28 14:00:03
臨機応変
適材適所
一長一短

168:デフォルトの名無しさん
08/05/06 07:23:41
IP のパケットサイズって最大 64kB だと思うんだけど、イーサなんかの
MTU の 1,500B とかっていうサイズは、IP パケットがさらにその下のレイヤーで
分割されているということですかね?

169:デフォルトの名無しさん
08/05/06 09:36:31
IP fragmentation でヤフれ

170:デフォルトの名無しさん
08/05/06 14:49:23
IPスタックが、下層から最大送出可能な
パケットサイズをもらってきておいて、
IPパケットを送出する際に分割するような

171:デフォルトの名無しさん
08/05/06 15:32:52
>IP のパケットサイズって最大 64kB
これも実装依存だそうだ

172:デフォルトの名無しさん
08/05/06 17:14:11
ヘッダの長さフィールドが16bitってだけでそ

173:デフォルトの名無しさん
08/05/07 23:22:32
selectで
PULLHUP相当のエラーって感知できますか?
大人しくpull()った方がいい?

174:デフォルトの名無しさん
08/05/08 04:11:09
pullじゃなくてpollでggr

175:デフォルトの名無しさん
08/05/08 22:18:04
select失敗した場合ってFD_SETって
どうやって処理すればいいの?

単純にクリアするだけでおk?

176:デフォルトの名無しさん
08/05/09 04:03:10
おれはそういうの気にしないために、
fdsetは呼ぶ前にコピーして、そっちをselectに掛けてる。
コピーに変更があったら手動でオリジナルを更新。
何かのサンプルの真似だけど。

177:デフォルトの名無しさん
08/05/09 04:08:31
sshでログインしてるとき小さいファイルを向こう側へもっていきたいんだけど
わざわざFTPとか起動するの面倒なときっていい方法ありますか?

178:デフォルトの名無しさん
08/05/09 04:20:04
ssh ファイル転送
でggr

179:デフォルトの名無しさん
08/05/09 05:04:50
こっち側がwindowsの場合はどうすればよいでしょうか?
たとえばpoderosaを使ってる場合。

180:デフォルトの名無しさん
08/05/09 11:39:53
scp

181:782
08/05/10 21:29:28
linux版より誘導されてきました
よろしくオナガイシマス
linuxでの実装、通信関連の実装の経験の無い未熟ものです
URLリンク(www.katto.comm.waseda.ac.jp)
linux TCPサーバー側
という部分のコードをコンパイルしているのですが、
accept()システムコールのこの部分で
dstSocket = accept(srcSocket, (struct sockaddr *) &dstAddr, &dstAddrSize);
error: invalid conversion from \342\200\230int*\342\200\231 to \342\200\231 socklen_t\342\200\231
と怒られています
どうしたら怒られなくなりますか

コンパイラは gcc-4.1.2-33です

182:デフォルトの名無しさん
08/05/10 21:31:40

名前 782
スマン間違えてシマイマスタ

183:デフォルトの名無しさん
08/05/10 22:55:30
プログラムに2バイト文字使ってる?

184:デフォルトの名無しさん
08/05/10 23:04:14
>>183
コメント文で2バイト文字を使っていますが
ソースコードでは使っていません


185:デフォルトの名無しさん
08/05/10 23:09:43
>>181
dstAddrSize が socklen_t ではないっていう型エラーでは? int で宣言してない?

186:デフォルトの名無しさん
08/05/10 23:50:33
>>185thx
>>tAddrSize が socklen_t ではないっていう型エラーでは? int で宣言してない?
ビンゴでした、socken_t型で宣言したら、エラーが消えました
後、
#include <string.h>
#include <unistd.h>
を追加し
int status;
も追加し
gcc tcp_serv.c -lsocket
とコンパイルすると

/usr/bin/ld: cannot find -lsocket
collect2: ld はステータス 1 で終了しました
となっ てしまいました・・・・・

187:デフォルトの名無しさん
08/05/10 23:55:06
-lsocket 不要

188:デフォルトの名無しさん
08/05/11 00:01:30
>>187
どうも、そのようですね
HPが古いのでコンパイラのバージョンが違うから、こんなにエラーが出たのだと思います
g++ tcp_serv.c -o tcp_sev
でコンパイルに成功しましたが
Waiting for connection ...
のままなのですが、これで成功なのでしょうか?
クライアントと接続したらこのメッセージは消えるものなのかな・・・・?

189:デフォルトの名無しさん
08/05/11 00:03:43
スマソ
gcc tcp_serv.c -o tcp_sev
でした

190:デフォルトの名無しさん
08/05/11 00:23:28
クライアント側も作成して 127.0.0.1 で接続するのだ。

191:デフォルトの名無しさん
08/05/11 10:05:45
>>190
>>181です
thx
HPのコードを修正して、今しがたserverとclientの、実行ファイルを、同一PC内ですが起動して
Wiresharkでパケットが流れているのを確認シマスタ
今書いているPCの他に後2台Windows XPとFedora Core 8が繋がっているので
このサーバーで対戦型のオセロゲームでも実装してみようと思います^^
一応C++使い(MFC)なのでWindows側の実装は難しく無いんだけど
linuxのシステムコールやAPIの使い方を知らないのが痛い・・・・orz
とりあえずMFCでいう処の、GetKeystate()関数のような、linuxでのキーボード入力のAPIが知りたい

192:デフォルトの名無しさん
08/05/11 10:29:13
>>191
select() が使えませんか?

193:デフォルトの名無しさん
08/05/11 10:43:50
>>192thx
>>191です
なるほど、キー入力の前に接続方法を、再考する必要がありますね
複数のclientが、ぶらさがるサーバの場合、acceptシステムコールや、recvシステムコールをコールして実行してして
一旦、接続行われるとsocketをcloseするまでは、他からのリクエストが受けれなくなりますね・・・・orz
そこでselect()システムコールの出番ですね、ちょいと調べてみます。


194:デフォルトの名無しさん
08/05/11 10:48:30
ブロックするのがいやならソケットをノンブロックにしても良い。
MFCの糞ソケットクラス使ってるとこの辺の感覚が分からんかも。

195:デフォルトの名無しさん
08/05/16 00:09:14
WinSock2を使用して特定用途のTCP/IPサーバをCで作ろうとしていますが、ポート番号の自動割り振りでハマっています。
抜粋したコードは以下のとおりです。

WSADATA wsaData;
int len;
static SOCKET serverSocket;
static struct sockaddr_in addr;
if (WSAStartup(MAKEWORD(2, 2), &wsaData)) return -1;
serverSocket = socket(AF_INET, SOCK_STREAM, 0);
if (serverSocket == INVALID_SOCKET) return -1;
memset(&addr, 0, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_addr.S_un.S_addr = INADDR_LOOPBACK; // ★ループバックアドレスを設定
addr.sin_port = htons(0); // ★ポート番号の自動割り振り
bind(serverSocket, (struct sockaddr *)&addr, sizeof(addr));
len = sizeof(addr);
getsockname(serverSocket, (struct sockaddr *)&addr, &len); // 自動的に割り振られたポート番号を取得
printf("%s\n", addr.sin_port); // 0が出力される
listen(serverSocket, 1);

getsocknameを行った後でaddr.sin_portに割り振られたポート番号が入っていることを期待するのですが、WinXP+VC7.1では0になっています。
手順がどこか悪いのでしょうか?

196:195
08/05/16 01:04:52
>>195
自己レスです。

addr.sin_addr.S_un.S_addr = INADDR_LOOPBACK; // ★ループバックアドレスを設定

addr.sin_addr.S_un.S_addr = htonl(INADDR_LOOPBACK);
↓もしくは
addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");

でした。
また、addr.sin_portは使うときにはntols(addr.sin_port)としてやる必要がありました。

197:デフォルトの名無しさん
08/05/25 08:38:08
こんにちは。
winsock、TCP/IP非同期の、ゲーム用のチャットを作ってます。
クライアントからサーバーにチャット文が届いたらfor文で回して
各クライアントのソケットにsendしているのですが、
(for(i=0,i<MAXCLIENT,i++) send(socket[i])みたいな感じです)
この方法だとユーザーが少ないうちはいいのですが、
ユーザー全体数が150人くらいになると重くなります。
少しタイムラグがあって届くみたいな感じです。
どうすれば解決するでしょうか?
よろしくお願いします。

198:デフォルトの名無しさん
08/05/25 09:03:57
サーバーのCPUがマルチコアなら、マルチスレッド使うと早くなるよ

199:デフォルトの名無しさん
08/05/25 10:19:33
IPv6のサーバーサイドのプログラムが見つかりやせん

200:デフォルトの名無しさん
08/05/25 10:21:43
>>197
UDPにする

201:デフォルトの名無しさん
08/05/25 10:49:35
>>197
ノンブロッキングにする

202:デフォルトの名無しさん
08/05/25 13:25:46
その問題はノンブロックにして解決するの?

203:デフォルトの名無しさん
08/05/25 13:28:48
マルチキャスト

204:デフォルトの名無しさん
08/05/25 14:40:10
俺は2000クライアントにマルチキャストするプログラム書いたが
そんなに気になるラグはなかったぞ。多くても150msくらいの遅延しかない。
プログラム的に問題あるんじゃない?TCPでもsendにそんなに時間かかるって事はないと思うけど・・・
送信するデータのサイズにもよるけどね。

205:デフォルトの名無しさん
08/05/25 14:51:07
単純な foreach (clients) { client->send(data); } のとき
一匹でも激遅クライアントがいると
そこでsendが糞詰まりを起こして全体が遅くなる

206:デフォルトの名無しさん
08/05/25 15:06:04
え、send()って、相手に到着しないと抜けないの?

207:デフォルトの名無しさん
08/05/25 15:56:12
tcp送信バッファが満杯になればblockする

208:デフォルトの名無しさん
08/05/25 20:13:36
なんでn回ユニキャストする発想になるのか。

209:デフォルトの名無しさん
08/05/25 20:29:59
そりゃmulticast/boardcastを知らないからだろjk

210:デフォルトの名無しさん
08/05/25 23:18:00
boardcastは俺も知らない。

211:デフォルトの名無しさん
08/05/26 00:33:39
TCPはmulticastできないみたいです。。。
for文じゃなくてマルチスレッドにするといいのかな?
どうも同じような気がするのですが、一応やってみます。

212:デフォルトの名無しさん
08/05/26 02:11:21
くだんのスレがアフォなのはどうでもいいが、150ms遅延「しかない」
とかもう救いようがないな。

213:デフォルトの名無しさん
08/05/26 03:31:04
キューを実装して非同期sendすればプログラムが重くなるのは解消される

214:デフォルトの名無しさん
08/05/26 10:34:34
あれ、>>197には
>TCP/IP非同期
って書いてあるやん

150人に一斉同報するのってフツーに重いんじゃないの

215:デフォルトの名無しさん
08/05/26 10:38:07
ircdってどんな実装になってるんだろ

216:デフォルトの名無しさん
08/05/27 02:32:22
>>212
環境を書いてないからなんとも言えんがな。

217:デフォルトの名無しさん
08/05/27 02:57:49
質問者が馬鹿だったのは、二チャンネルで質問したことだろな。

218:デフォルトの名無しさん
08/05/27 09:04:41
197じゃないけど、似たようなプログラムでクライアントにダイヤルアップレベルの細い回線が混ざってて、
かつ数百キロバイトのデータが必要になる場合があるときは
・単一スレッドから非ブロッキングモードで送信
・接続毎にキューを持ったスレッドを作成してブロッキングモードで送信
どちらがいいいのでしょうか?
接続クライアント数は10程度です。

219:デフォルトの名無しさん
08/05/27 09:33:28
10程度だったらコードの見易さからいってスレッド作るのはアリかな
そうだとしてもブロッキングにはしないなあ、中断しにくいから

220:デフォルトの名無しさん
08/05/28 19:59:52
ネットワークとは直接関係ないのですが。。。
ネットゲームの延長の質問ということでご了承ください><
直接アプリのアイコンをダブルクリックで起動じゃなくって、
ハンゲームとかのHPみたいにゲームスタートみたいなボタン(リンク)を
クリックするとアプリが起動するのありますよね。
HPからユーザー側のアプリが起動できちゃうと悪さができちゃうからムリ
みたいな事も聞いたことあるんだけど。。。
ああいうのってどうやってるのでしょうか?

221:デフォルトの名無しさん
08/05/28 21:26:27
>>220
ためしに登録してみたが・・・
ActiveXコントロールのインストールが必要ですって言われたぞ

222:デフォルトの名無しさん
08/05/28 21:27:07
署名付きActiveXだとおもうが。

#厳密には署名がなくても不可能ではないけど、
#そのセキュリティを緩めるのは致命的な筈

223:デフォルトの名無しさん
08/05/28 21:27:45
ActiveXコントロールってなんですか?

224:デフォルトの名無しさん
08/05/28 21:28:47
>>223
ググレカス

225:デフォルトの名無しさん
08/05/28 21:34:28
署名付きアプレットを認証局から証明書を発行してもらう必要があるみたいですね。
多分有料ですよね。
でも大体わかりました、ありがとうございます!

226:デフォルトの名無しさん
08/05/28 21:36:59
ハウス ググレカスー

227:デフォルトの名無しさん
08/05/29 20:55:00
おいしそうなおやつがあったので、置いておきますね


東京藝術大学音楽学部 羽目鳥祭り開催中
スレリンク(musicology板)

228:デフォルトの名無しさん
08/05/30 05:21:46
ActiveXコントロールは
ユーザーがインストールを許可する事でインストールされる。
インストールしなければ動かない。
実体はDLLかEXEなので起動されれば何でもできてしまう。
よくスパイウェアとして使われる。
よほどの馬鹿でなければ
信用あるサイト以外からはインストールしないので
作っても無駄

229:デフォルトの名無しさん
08/05/30 05:27:24
ユーザは馬鹿だぜ?

230:デフォルトの名無しさん
08/05/30 08:14:56
ほいほいインストールすると思う。

署名のないActiveXを使ってる企業などのサイトで「警告が表示されますがOKを押してください」なんてわざわざ解説してたりするし。
「インストール手順を増やすうざいダイアログ」ぐらいにしか思ってないんじゃない。

あれを見るにつけ、日本って終わってると思う。

231:デフォルトの名無しさん
08/05/30 19:26:57
作り手もかなりあほだぜ

232:デフォルトの名無しさん
08/05/30 21:11:41
Vistaでは署名無しAXは起動できないんじゃなかったっけ

233:デフォルトの名無しさん
08/05/31 20:30:02
絶対ほいほいインストールする

234:デフォルトの名無しさん
08/05/31 23:41:10
とあるサイトからデータを自作したプログラムでダウンロードしているのですが、
ダウンロードに成功したり失敗したり 2分の1の確率で動いているのですが、
ダウンロードに成功しないのは なにが原因でしょうか?

235:デフォルトの名無しさん
08/05/31 23:49:58
自作したプログラムなら、原因を調べられるだろう?
どこで何のエラーが返ってきてるとか

236:デフォルトの名無しさん
08/05/31 23:55:45
翻訳:エスパー募集中

237:デフォルトの名無しさん
08/06/01 00:14:20
HRESULT h;
h = URLDownloadToFile( 0, http, file, 0, 0 );
switch(h){
case S_OK:
    printf( "   success.\n" );
    break;
case E_OUTOFMEMORY:
    printf( "   E_OUTOFMEMORY\n" );
    break;
case INET_E_DOWNLOAD_FAILURE:
    printf( "   INET_E_DOWNLOAD_FAILURE\n" );
    break;
default:
    printf( "   error?\n" );
    break;
}
上のようにしてやっているのですが、 h が default の値しか返さなくて何が原因なのかがわからないのです。


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4703日前に更新/99 KB
担当:undef