[表示 : 全て 最新50 1-99 101- 201- 301- 2chのread.cgiへ]
Update time : 03/16 02:36 / Filesize : 99 KB / Number-of Response : 399
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



1 名前:echoちゃん [2008/02/29(金) 21:19:37 ]
主にソケットに関しての質疑応答スレッドです。

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

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

前スレ
ネットワークプログラミング相談室 Port20
pc11.2ch.net/test/read.cgi/tech/1186418855/

関連スレ
Java ネットワークプログラミング 【教えて!】
pc11.2ch.net/test/read.cgi/tech/1086238859/

77 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 13:37:56 ]
まぁ、読んでもわかんないと思うけどね・・・

78 名前:デフォルトの名無しさん [2008/03/31(月) 13:39:24 ]
>>77
そないなことあらへんで。

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

80 名前:デフォルトの名無しさん [2008/03/31(月) 13:47:37 ]
>>79
あ、なるほど。

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

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


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

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

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

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

85 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 11:35:23 ]
日本語でおk



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

87 名前:デフォルトの名無しさん [2008/04/12(土) 13:32:10 ]
>>86
いってきます

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

89 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 17:07:23 ]
投げてみて、その反応をさぐるしかない。

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

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

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

93 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 21:40:22 ]
いいからRFC読めよ

94 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 21:44:06 ]
>>93
ウラル貼ってくれ

95 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 21:54:17 ]
>>93
URL貼って下さい



96 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 21:56:35 ]
www.google.co.jp/search?q=RFC+http

97 名前:デフォルトの名無しさん [2008/04/12(土) 21:59:34 ]
>>96
いや、
RFCの何番?

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

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

100 名前:デフォルトの名無しさん [2008/04/12(土) 22:21:10 ]
あるだろうなぁ。

101 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 22:26:46 ]
>>100
ありがとうございます。

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

103 名前:デフォルトの名無しさん [2008/04/12(土) 23:05:57 ]
>>102
素で意味がわからん。

104 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 23:30:50 ]
>>102
規定してあるよ。おまいがよく読めw

105 名前:デフォルトの名無しさん [2008/04/13(日) 00:09:31 ]
何もないと思うが。



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

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

107 名前:デフォルトの名無しさん [2008/04/13(日) 00:54:11 ]
>>106
そりゃRFCだろ。

108 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 01:00:51 ]
変な流れになってるなぁ。

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

110 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 10:10:40 ]
迷子のキムチさん
出て行ってください

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

112 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 21:46:27 ]
一週間ぶりですね

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

tcpdump -s 1600 -X tcp port 1024

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

114 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 23:17:37 ]
>>113
つwireshark

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



116 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 03:30:50 ]
>>112
……(´・ω・`)

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


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

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

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

121 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 22:03:41 ]
受けるときも厳格に、が基本だよ

122 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 22:30:16 ]
読解力が試されます

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

124 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 09:41:10 ]
xml-rpcとか?

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



126 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 15:46:48 ]
>>121
受けるときは寛容に、が基本。

tools.ietf.org/html/rfc791
> In general, an implementation must be
> conservative in its sending behavior, and
> liberal in its receiving behavior.


127 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 16:09:50 ]
>>123
俺の長い組み込み経験からのアドバイス。

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

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

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


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

129 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 18:21:40 ]
俺はパート長は入れるね

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

131 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 20:35:39 ]
>>127
>2.最初に「バイト長」とか入れない。

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

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

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

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

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

134 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 22:38:11 ]
ヒント:組み込み屋さん


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



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

137 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 23:13:02 ]
時代は組み込みだからな。

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

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

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

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

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

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

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

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

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

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

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


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

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

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

143 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 00:40:33 ]
>>141
?
PC 程度以上の OS のファイルシステムなら (ANSI 標準じゃないにしても) 大抵用意されてるんじゃないか?
www.linux.or.jp/JM/html/LDP_man-pages/man2/ftruncate.2.html

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

144 名前:デフォルトの名無しさん [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 00:44:52 ]
>>144
pc11.2ch.net/test/read.cgi/tech/1206809426/
でどうぞ。



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

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

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

149 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 02:38:39 ]
>>148
TCP


150 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 03:12:13 ]
>>149
もう一層上で。

151 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 03:48:09 ]
>>150
2ちゃん

152 名前:デフォルトの名無しさん [2008/04/24(木) 05:17:26 ]
SIP

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

154 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 07:10:52 ]
>>143
ありがとう。知らなかったよorz
少しぐぐって、winだと_chsizeや下のサイトがあった。
www.void.in/wiki/PortableFtruncate

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

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



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

157 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 23:32:45 ]
s/カイヤ/下位レイヤー/;

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

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

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

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


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

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


162 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 17:07:24 ]
>>161
インタレースも知らないのか?

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

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

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




166 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 10:47:38 ]
長い組み込み経験からのアドバイスなんだぜ?

素直に聞けよ。

167 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 14:00:03 ]
臨機応変
適材適所
一長一短

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

169 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 09:36:31 ]
IP fragmentation でヤフれ

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

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

172 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 17:14:11 ]
ヘッダの長さフィールドが16bitってだけでそ

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

174 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 04:11:09 ]
pullじゃなくてpollでggr

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

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



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

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

178 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 04:20:04 ]
ssh ファイル転送
でggr

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

180 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 11:39:53 ]
scp

181 名前:782 mailto:sage [2008/05/10(土) 21:29:28 ]
linux版より誘導されてきました
よろしくオナガイシマス
linuxでの実装、通信関連の実装の経験の無い未熟ものです
www.katto.comm.waseda.ac.jp/~katto/Class/GazoTokuron/code/socket.html
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 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 21:31:40 ]

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

183 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 22:55:30 ]
プログラムに2バイト文字使ってる?

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


185 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 23:09:43 ]
>>181
dstAddrSize が socklen_t ではないっていう型エラーでは? int で宣言してない?



186 名前:デフォルトの名無しさん mailto:sage [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 23:55:06 ]
-lsocket 不要

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

189 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 00:03:43 ]
スマソ
gcc tcp_serv.c -o tcp_sev
でした

190 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 00:23:28 ]
クライアント側も作成して 127.0.0.1 で接続するのだ。

191 名前:デフォルトの名無しさん mailto:sage [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 10:29:13 ]
>>191
select() が使えませんか?

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


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

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

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

199 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 10:19:33 ]
IPv6のサーバーサイドのプログラムが見つかりやせん

200 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 10:21:43 ]
>>197
UDPにする

201 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 10:49:35 ]
>>197
ノンブロッキングにする

202 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 13:25:46 ]
その問題はノンブロックにして解決するの?

203 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 13:28:48 ]
マルチキャスト

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

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



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

207 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 15:56:12 ]
tcp送信バッファが満杯になればblockする

208 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 20:13:36 ]
なんでn回ユニキャストする発想になるのか。

209 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 20:29:59 ]
そりゃmulticast/boardcastを知らないからだろjk

210 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 23:18:00 ]
boardcastは俺も知らない。

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

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

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

214 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 10:34:34 ]
あれ、>>197には
>TCP/IP非同期
って書いてあるやん

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

215 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 10:38:07 ]
ircdってどんな実装になってるんだろ



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

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

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

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

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

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

222 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 21:27:07 ]
署名付きActiveXだとおもうが。

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

223 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 21:27:45 ]
ActiveXコントロールってなんですか?

224 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 21:28:47 ]
>>223
ググレカス

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



226 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 21:36:59 ]
ハウス ググレカスー

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


東京藝術大学音楽学部 羽目鳥祭り開催中
school7.2ch.net/test/read.cgi/musicology/1211727581/

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

229 名前:デフォルトの名無しさん [2008/05/30(金) 05:27:24 ]
ユーザは馬鹿だぜ?

230 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 08:14:56 ]
ほいほいインストールすると思う。

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

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

231 名前:デフォルトの名無しさん [2008/05/30(金) 19:26:57 ]
作り手もかなりあほだぜ

232 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 21:11:41 ]
Vistaでは署名無しAXは起動できないんじゃなかったっけ

233 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 20:30:02 ]
絶対ほいほいインストールする

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

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



236 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 23:55:45 ]
翻訳:エスパー募集中

237 名前:デフォルトの名無しさん mailto:sage [2008/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 の値しか返さなくて何が原因なのかがわからないのです。

238 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 00:20:46 ]
値を表示してみるという思いつきができないのか
なんというゆとり

239 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 00:24:56 ]
defaultを使わないでもっと絞ればいいだろ

240 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 00:31:06 ]
>>238
戻り値は -2146697510 です
意味わかるんですか?

241 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 00:32:33 ]
>>239
リファレンスには
 S_OK
 E_OUTOFMEMORY
 INET_E_DOWNLOAD_FAILURE
の3つしか 特に戻り値として明記されていませんでしたので これ以外の戻り値は わかりません。

242 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 00:40:10 ]
仕様書か実装のバグだね
MSに抗議しないと

243 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 00:40:42 ]
リファレンス外の戻り値を返すとかどんだけ糞なライブラリorリファレンスだよ

244 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 01:10:01 ]
-2146697510 = S_OK + E_OUTOFMEMORY + INET_E_DOWNLOAD_FAILURE


245 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 01:12:17 ]
>>244
おまえすげえなwww

3つの戻り値の和を返すというのはいったいどういうことを言いたいんだろうかこの関数は



246 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 01:20:04 ]
>>244
1245206じゃハゲ
テキトーなこと抜かしてるんじゃねーよボケ
死ね工作員

247 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 01:40:25 ]
一体何の工作だ

248 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 01:52:00 ]
FACILITYの意味からして足すのはありえんと思うんだが

249 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 01:54:15 ]
-2146697510 = S_OK | E_OUTOFMEMORY | INET_E_DOWNLOAD_FAILURE

250 名前:デフォルトの名無しさん [2008/06/01(日) 01:55:03 ]
>>248
ビット和だろ常考

251 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 01:59:40 ]
-2146697510を16進数に直すと0x800bfeda
8 は失敗をあらわす。
b は FACILITY_CERT で、電子証明書関連のエラーだとわかる。
feda は不明。

httpsで繋ごうとして何かがまずかったんだなとはわかるね。



252 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 02:09:45 ]
winerror.hに詳しくなるスレはここですか

253 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 04:57:28 ]
スタック破壊してんじゃネーノ

254 名前:デフォルトの名無しさん [2008/06/01(日) 05:07:10 ]
ネットワーク接続を切る、接続するAPIってあるんでしょうか?
言語は C/C++ Windowsでお願いします

255 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 05:08:39 ]
あるよ。



256 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 05:19:49 ]
>>255
何でしょうか?

257 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 05:23:23 ]
Winsock

258 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 05:49:25 ]
すいません 間違えました
ネットワークでなく インターネットの接続です

259 名前:デフォルトの名無しさん [2008/06/01(日) 05:50:53 ]
どう違うんだ

260 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 05:53:14 ]
稀にIPじゃない場合もあるか否か

261 名前:デフォルトの名無しさん [2008/06/01(日) 05:56:17 ]
IPじゃないってドメインのことか?
ドメインならgethostbynameでIPに変換可能
あとは一緒

262 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 05:56:57 ]
ネットワーク接続 WNetConnectionDialog関数を使ったら

ttp://sakuratan.ddo.jp/imgboard/img-box/img20080601055455.jpg

のようなダイアログがでたのですが、これではないやつで
インターネット接続関連のダイアログがでてくると幸いです

263 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 06:02:35 ]
>>261
Internet Protocolを使ってないコンピュータネットワークもあるってこと。

264 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 06:30:21 ]
connect() 関数じゃないですよ?

265 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 06:51:53 ]
物理的にネットワークアダプタを抜いた状態と同じ環境にしたいってことです



266 名前:デフォルトの名無しさん [2008/06/01(日) 07:41:40 ]
>>263
あるわけないだろ。
ばか?

267 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 07:45:56 ]
>>266
うせろキチガイ

268 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 07:47:43 ]
>>266 が無知なのは分かったw

269 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 08:31:21 ]
>>268が無知すぎる件
ある意味犯罪

270 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 09:43:55 ]
>>269
アナタを・・・
telnetです・・・

271 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 15:34:01 ]
>>266,269
AppleTalkとかIPXは?

272 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 15:34:40 ]
>>265
Win32APIでネットワークアダプタを無効にするとか

やり方知らんが多分できるとオモ

273 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 15:48:13 ]
WindowsでSockRAW取れないのですが
どうしてですか?XP SP2です

274 名前:デフォルトの名無しさん [2008/06/01(日) 16:05:42 ]
覗くなということだ

275 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 18:13:05 ]
>273
ググればすぐわかる。



276 名前:デフォルトの名無しさん [2008/06/01(日) 19:20:30 ]
MMORPGのサーバとクライアントの同期化について知りたいのですが、
何か参考になるものとかありますか?

277 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 20:02:12 ]
韓国語を覚えたほうがいいかもね

278 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 23:23:04 ]
>>277
理由は?

279 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 23:37:34 ]
市場の8割がチョン製クリゲ

280 名前:デフォルトの名無しさん [2008/06/02(月) 04:57:58 ]
日本ってなんで情報なかったりするんだろう(・ω・)

281 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 10:36:41 ]
日本のゲーム業界特有の情報閉鎖性もあるけど
オンラインゲームが流行ったときに不況で
誰も手を出さなかったとういのもあるかも
そして>>279

282 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 13:03:35 ]
商売がヘタクソってのも多いと思うな>日本のメーカー
あからさまな出し惜しみとかして客に逃げられるパターンが多すぎる

283 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 13:30:29 ]
商売というか、小汚い金の稼ぎ方が日本人にあわないんだろうね
あっちの人たちは金が儲かれば形振りかまわないから成功はする
名声はないけど

284 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 14:20:06 ]
うん,高度成長期の日本そっくり

285 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 14:23:01 ]
パンヤもみんゴルのパクリといわれてるし、
その他もろもろパクリは多いよな。

そりゃ作るのは楽だよ

開発で使ってるソフトも平気で割れでやってそうw



286 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 16:21:36 ]
>>285
ネットランナー・・・

287 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 21:38:57 ]
WinSockでソケットのポート番号を

sockaddr_in add;
int addlen =(int)sizeof(add);
getpeername(Sock, (struct sockaddr *) &add, &addlen);

char buf[50];
_itoa_s(add.sin_port,buf,(int)sizeof(buf),10);

といった感じで取得はできましたが
IPアドレスを取得するにはどうすればよいでしょうか?


288 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 22:20:02 ]
getpeernameで返してもらった連中を
getnameinfoにでも突っ込めば。

289 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 22:35:15 ]
sockaddr_in だと長さ足りなくないか

290 名前:デフォルトの名無しさん [2008/06/03(火) 22:54:40 ]
【エアー調査会社】HG嫁 住谷杏奈61【ハッカー妊婦】
human7.2ch.net/test/read.cgi/ms/1212471581/


291 名前:デフォルトの名無しさん [2008/06/04(水) 01:37:08 ]
ネットプログラム初心者です。
ネットゲームのプログラミングが目的なのですが、
コネクション数は1〜200あたりで、OSがwindowsXPとした場合、
www.kt.rim.or.jp/~ksk/wskfaq-ja/articles/io-strategies.html
を読む限り、WSAAsyncSelectかWSAEventSelectを使うのが良さそうですが
どうなのでしょうか。

292 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 01:46:06 ]
「Winsock標準に準拠」にこだわるのでなければ(もはや意味なし)
IOCPにしとけ

293 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 01:48:59 ]
期待した動作をしなくてもくじけないココロがあるならなんとでもなるZE!

294 名前:デフォルトの名無しさん [2008/06/04(水) 01:57:35 ]
まったく使ったことがないのでよくわかりませんが、
select 毎回の引数の処理が無駄
WSAAsyncSelect,WSAEventSelect メッセージの通知が遅い
IOCP とにかく速い、プログラムは難しくなる
で良いでしょうか?

ROのエミュ鯖ではselectが使われてて、引数の処理が入ってたのは見たなぁ。

295 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 02:18:41 ]
selectの64制限は確か#defineで回避出来たと記憶してるが
WSAEventSelectの64制限(WaitForの制限)は
複数のスレッドに64以下ずつわけるしかないんじゃなかったかな。



296 名前:デフォルトの名無しさん [2008/06/04(水) 02:29:14 ]
複数のスレッドになると難しそうですね。
マルチスレッドもネットプログラミングの経験もない自分的には
ひとまずselectが良さそうな気がしてきました。
オープンソースのmmoが2つともselect使用しているみたいなので、実装例見れますし。


297 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 20:45:00 ]
pthread_mutexって10万個作って使っても
問題ない?

298 名前:デフォルトの名無しさん [2008/06/04(水) 20:59:21 ]
>>297氏とは違うのですが、ミューテクスとセマフォを分かりやすく説明できる方いないでしょうか?
ググッてみたけど、どこも似たような分かりにくい説明が多いです。。

299 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 21:22:02 ]
ミューテクスは複数のスレッドがあった場合、順番に処理するのに対して、
セマフォを複数のスレッドが同時にアクセス可と言う考え方でいいのでしょうか?

300 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 22:06:23 ]
セマフォは5個の資源を10人で使うというような考え方。
listenの引数みたいなというか

301 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 22:14:35 ]
>>300
係数1のセマフォならいっしょじゃねーか
嘘教えるな

302 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 22:17:22 ]
>>298
ミューテックスは、同時にひとつのスレッドしかアクセスできない。
1人用のイスみたいなもの。 早いもの勝ちで1人だけが獲得できる。
残念ながら座れなかった人は、イスが空くまで待つ。
イスが空いたら、待ってましたとばかりに奪い合って、勝った人1人だけがイスに座れる。
負けた人は、またイスが空くまで待つ。

セマフォは、同時にアクセスできるスレッドの数を好きに指定できる。
3人まで座れるソファーとか、そういうの。
4人目が来たら、誰かがどくまで待つ。
1にすれば、ミューテックスとほぼ同じ。

303 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 22:25:50 ]
>>301

だからそのものズバリだろw
教科書でミューテックス=二進セマフォという表記も使われる。

304 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 22:50:39 ]
WinやRecursiveにしたときのpthreadは、Mutexは同じスレッドならば何度でも取得できるところが一番違う。
スレッドごとの排他制御にMutex、複数の資源管理にセマフォ、単一の資源管理ならどっちでもいい。

305 名前:298 mailto:sage [2008/06/04(水) 22:53:48 ]
>>299-303
>>302さんの説明分かりやすかったです。ありがとうございました。
ググッても、どこも排他的とかいまいち理解しづらいですよね。。



306 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 23:25:22 ]
なんというスレ違い

307 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 12:27:33 ]
C++使いなのですが、socketの実装未経験です、
車輪の再発明はしたくないのでlinuxのsocketライブラリを探しています
CommonC++(commoncpp)というのを見つけたのですが
www.sunsite.ualberta.ca/Documentation/Gnu/CommonC++-1.0.2/html/index.html
ソースコードを見てると使いやすそうなんですが、他にもオマイラお勧めの、良いライブラリとか
あったら教えてホスイのですが
boostにもsocketのライブラリがあるっぽいんだけど・・・・こっちの方が有名なのかな?

308 名前:デフォルトの名無しさん [2008/06/08(日) 12:56:46 ]
boostのがおすすめ

309 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 14:23:14 ]
オマイラだと?何だその態度は

310 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 14:28:50 ]
>>307
一度くらいは自分で実装するべきだ。その上で便利なライブラリを探すんだ。
車輪の再発明はしたくないって便利な言い訳だね。


311 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 14:41:01 ]
別に使えるものは使えばいいんじゃねえの
いちいちカーネルやコンパイラから自分で書き起こしたりはしないだろ

312 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 21:49:25 ]
>>307どえす
VS2005とgcc-4.1.2-33に、boost-1_35をスコーンとインスコして
asioをやりまくっているんだが
VS2005は、無問題、gccでコンパイルする場合
いちいちコンパイル毎、変数を設定するのがマンドクサイので
.bash_profileに
CPLUS_INCLUDE_PATH=/usr/local/include/boost-1_35; export CPLUS_INCLUDE_PATH
LD_LIBRARY_PATH=/usr/local/lib; export LD_LIBRARY_PATH
追加設定して
$ g++ -pthread -lboost_system-gcc41-mt sample.cpp
こんな感じでコンパイルしてて、今んとこ無問題なんだが、どうよモマイラ、
他にいい方法があったら聞いてやるが

313 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 22:12:11 ]
Makefile

314 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 23:02:18 ]
>>312
聞いてくれなくてもいいが


315 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 23:13:36 ]
boostの非同期ライブラリおすすめ>>307



316 名前:デフォルトの名無しさん [2008/06/09(月) 00:07:43 ]
>>315
boost::asioも非同期ライブラリ持ってるんじゃないの?


317 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 10:02:28 ]
ACEだな、やっぱでかいし

318 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 23:12:11 ]
ごめん。
asioのことを言ったw>>315

319 名前:デフォルトの名無しさん [2008/06/10(火) 21:12:45 ]
ネットワークプログラミングの利点って何?

320 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 21:32:02 ]
ネットワーク通信ができること。

321 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 03:25:33 ]
宿題スレに質問投げておくと勝手にだれかが作ってくれる
これがネットワークプログラ

322 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 12:27:03 ]
>>321
小人さんは間違いが多いのが欠点だ。

323 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 22:24:38 ]
>>312どえす、おいモマイラ一週間ぶりに俺様が来ましたよっと>>310の言う通り、漏れはソケット初心者なので、動作を理解するうえで、薄いラッパークラス作っている
近い将来、サーバー側、クライアント側で行う動作を基底クラスで実装して、それぞれのクラスを派生させようと思うが、サーバー側とクライアント側で
何が共通手順なのか、今はまだよく分からないので、とりあえず前に進めるためおこなっていおる
どうよこんな感じで
class Socket {
int fd1, fd2;
struct sockaddr_in saddr;
struct sockaddr_in caddr;
int len;
public:
Socket() : fd1(0), fd2(0), len(0) {} // コンストラクタ
~Socket(){} // デスクトラクタ
void MakeSocket(); // ソケット生成
void InitSocket( sockaddr_in saddr) ; // ソケット初期化
void NameOfTheSocket( sockaddr_in saddr );// ソケットに名前を代入
void BindSocket( sockaddr_in saddr ); // ネームバインド
void ListenSock( int fd1 ); // リッスン
void AcceptSocket(); // アスペクト
void CloseSocket(); // ソケットクローズ
};


324 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 22:24:59 ]
続き
void Socket::MakeSocket()
{
if ((fd1 = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
perror("socket");
exit(1);
}
}
void Socket::InitSocket( sockaddr_in saddr )
{
memset((char *)&saddr, 0, sizeof(saddr));
}
void Socket::NameOfTheSocket( sockaddr_in saddr )
{
saddr.sin_family = AF_INET;
saddr.sin_addr.s_addr = INADDR_ANY;
saddr.sin_port = htons(PORT);
}
void Socket::BindSocket( sockaddr_in saddr )
{
if (bind(fd1, (struct sockaddr *)&saddr, sizeof(saddr)) < 0){
perror("bind");
exit(1);
}
}
void Socket::ListenSock( int fd1 )
{
if ( listen(fd1, 1) < 0) {
perror("listen");
exit(1);
}
}

325 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 06:51:37 ]
オブジェクト試行ですか?



326 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 07:58:40 ]
sockの関数と1対1に対応するメソッドを作ってるうち恩恵を受けにくい。一連の決まった操作をひとつのメソッドにまとめてしまおう。
sockaddrはラップして、アドレスのクラスを作ってしまう。簡単にアドレスを設定できるようにするといい。

あと、言葉遣い直せ


327 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 08:00:05 ]
JavaとかRubyとかPythonとかの
ソケットクラスの構成をみれば〜?

328 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 08:27:18 ]
>>326
君はまずその変な日本語を直さないとな
他人の言葉遣いを指摘してる場合じゃないぞ



329 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 09:27:20 ]
さて、些細な顰蹙をかっているようだが、2ちゃんねるクオリティーということで、まぁ許してちょんまげ
こんな感じで、完成形に徐々に近づきつつあると思うが、どうよ
class Socket {
struct sockaddr_in saddr;
struct sockaddr_in caddr;
public:
Socket(){} // コンストラクタ
~Socket(){} // デスクトラクタ
void SetAddresSocket( sockaddr_in saddr, unsigned short sock_family, unsigned short sock_port, int sock_addr ); // sockaddrラッパークラス
int DescriptSocket(); // ソケットを作り、成功したらソケットディスクリプタを返す
};


330 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 09:27:56 ]
void Socket::SetAddresSocket( sockaddr_in saddr, unsigned short sock_family, unsigned short sock_port, int sock_addr )
{
saddr.sin_family = sock_family;
saddr.sin_addr.s_addr = sock_port;
saddr.sin_port = htons( sock_addr );
}
int Socket::DescriptSocket()
{
int fd1, fd2;
size_t len;
if ((fd1 = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
perror("socket");
exit(1);
}
memset((char *)&saddr, 0, sizeof(saddr)); // 初期化
// バインド
if (bind(fd1, (struct sockaddr *)&saddr, sizeof(saddr)) < 0){
perror("bind");
exit(1);
}
if ( listen(fd1, 1) < 0) {
perror("listen");
exit(1);
}
len = sizeof(caddr);
if ((fd2 = accept(fd1, (struct sockaddr *)&caddr, &len)) < 0) {
perror("accept");
exit(1);
}
close(fd1);
return fd2;
}

331 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 09:34:50 ]
しかしなんだね、g++ってVC8とは若干違うよね
accept()関数の第三引数の
accept(fd1, (struct sockaddr *)&caddr, &len))
lenだが、VC8ならintでも無問題なのだけど、g++はsize_tじゃないと嫌だと
怒ったりとかと少し戸惑う、>>330でした

332 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 09:54:59 ]
POSIXではsocklen_tだけど、intで実害はない。
size_tとしてしまうのは誤り。
socklen_tとint(やsize_t)が同じサイズか判定をどこかに入れておくと安全。

// 偽なら負の添え字になりコンパイルエラー
#define STATIC_ASSERT(cond) extern int static_assert_array[ (cond) ? 1 : -1 ];
STATIC_ASSERT(sizeof(int) == sizeof(socklen_t))


333 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 10:05:46 ]
>>332
Thx
物知りですね、勉強になります
gccの場合、accept()関数の第三引数は、int型でコンパイルに成功してたんだけど、g++でコンパイルした際にエラーが出たんで
なんでかなと思ってた、コンパイラに依存しないようにアサーションマクロを書いておくと、メモメモ

334 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 14:25:52 ]
Winsockで非ブロッキングモードにしたいときは
selectでウインドウハンドルとそのウインドウのプロシージャを設定するけど
最初はウインドウAでメッセージ受けてたけど
次はウインドウBでメッセージ受けるように変更
とかいうことはできますか?

本当はウインドウハンドル指定しなくてよければ通信メッセージ受けるところだけ独立させたいんだけど

335 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 14:32:58 ]
>>334
WSAEventSelectを使えばウインドウハンドルはいらない。



336 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 14:35:32 ]
>>335
お〜 ウインドウハンドルいらない版もありましたか
ありがとうございまつ

337 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 16:12:06 ]
winsockについてです
gethostbynameではwinsockが確保したメモリが返されてきますが
これはどうすると解放できるのでしょうか?

338 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 16:17:39 ]
>>337
gethostbynameでググルと一番上に解説が出てくるし

339 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 20:59:48 ]
>>329なんだけどさ
>>327
が書いてたんで、rubyのソケットのライブラリを見てたら、やっぱ個別に
sockの関数と1対1に対応するメソッドを持ってるよね
>>326
1対1に対応するメソッドを作ると、恩恵は受けにくいと言うし
ネットワークプログラミングとは直接関係ないけど、どっちがいいんだろうな?
この問題にはいつも悩まされる
永遠の命題なのか・・・・orz

340 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 21:10:21 ]
>>339
たとえば、自分向けのライブラリを作るなら、いきなりconnectで繋がって、closeで閉じるライブラリを作り置きしておくと、今後ずっと楽になる。

341 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 21:19:02 ]
>>340
わかりやすい説明、ありがとう
たしかに、それは言えるのだけど、ついつい、かまえてって言うか、型にはめようとして
再利用性だとか、拡張性だとか、考えてしまいクラスの設計には、いつも苦労するんだよね、俺の場合
もう少し気楽に考えた方がいいかもね

342 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 21:26:20 ]
>>341
共通の機能は基本クラスに、専用の機能は派生クラスに分散。一つのクラスで機能を欲張らないのが設計のコツ。


343 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 21:27:55 ]
>>341
C/C++で書いてるんなら、いつでも下に降りられるから、ある意味
どうでもいい気がする。

rubyみたいな奴だと、標準で抽象度の高いAPIしか用意されてないと
そこより下に降りたければCでextension書くしかないって話になる。
だからそういう設計になってるんだと思うよ。


344 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 21:34:17 ]
>>341です
皆さん、いい話ありがとう

345 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 23:34:33 ]
TCP/IPで、自ソケットが生きてる場合、一時的に通信経路に問題があってもsendは成功すると
思いますが、その後すぐにその問題が解決したら、相手側には届くのでしょうか?



346 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 23:36:06 ]
>>345
いつか届く。


347 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 04:36:59 ]
僕の想いも届いて!

348 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 06:09:21 ]
winsockを使っていますが

”こんにちわ” ”こんばんわ”
を相手が送信したときに
2つのメッセージに対して
FD_READが2回発生するときと
1回しか発生しないときがあります

2回発生するときは
”こんにちわ” と ”こんばんわ” を別々に取得できて問題ないのですが

1回しか発生しないときは
”こんにちわこんばんわ”という1つの文字になってしまいます

送信相手が1回送信するごとにFD_READが1回発生するように設定することはできますか?
できないとして1送信ごとに何らかの記号をつけて識別したりするのでしょうか?


349 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 06:29:10 ]
基本的にできない。「こんにちわ」と「こんばんわ」を別のものとして扱うなら、それぞれの頭に俺プロトコルのヘッダ(メッセージ長など)を付けて送り、受信側でそれを解釈する。

あと、どーでもいいけど「こんにちは」と「こんばんは」だと思う。

350 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 10:57:00 ]
そういうときこそ、
SCTP。
おまいら使ってる?

351 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 14:04:34 ]
>>348
そもそも
「こ」「ん」「に」「ち」「わ」と5回に分かれてFD_READが来ることだってありえるぞ。
TCPとはそういうもんだ。区別したけりゃストリームに自前で区切情報載せろ

352 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 15:09:49 ]
>>349 351
ありなとうございまつ

Sendの末尾に区切り文字入れれば
1回で複数受信してもOKじゃね?
とか思ったけど1送信あたりでも分離することあるのですかorz
しかしそうなると

「こんに」「こんばんわ」「ちわ」という受信すらありえるような
それともTCPは受信順番も考慮するからそれはないと思っていいんでしょうか?


353 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 15:32:35 ]
つ[延滞]
必ずしも送った順に相手に届くとは限らない
この辺はUDPとTCPの違いを調べれば分かる

354 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 15:58:37 ]
>>352
TCPは順番は変わらないよ!。


355 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 11:35:18 ]
マルチスレッドなプログラムでsocketを使った場合に、
thread1(){ send("ABCDE"); }
thread2(){ send("abcde"); }
の2つのスレッドが同時にsendをコールした場合、
相手側でrecvした時に、
"ABCDE"と、"abcde"が混ざることってありますか?
例えば、"AaBbCcDdEe"みたいに。

シングルスレッドな場合だと、
send単位で送ったデータはそのまま出て来ますよね。




356 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 11:50:15 ]
せめて"ABabcdeCDE"くらいの例えならな

357 名前:デフォルトの名無しさん [2008/06/16(月) 11:52:11 ]
1. netstat -a で見れる情報(プロトコルやアドレス/ポート ステータス)は
どこから持って来てるんでしょうか?
(同じ情報を自分のプログラムから取得するにはどうすればいいでしょうか?)

2. TDImonか同等のプログラムのソースコードはどこかにないでしょうか?



358 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 11:53:48 ]
netstatのソース見ればいいんでねぇの?


359 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 11:59:56 ]
>>356
>"ABabcdeCDE"
これもありうる?
カーネルの中のソケット毎の送信バッファってのは、1つだよね。
複数のスレッドがsendをコールすると、その送信バッファに、
送信データが詰め込まれて行くんだと思うんだけど、
それがsend単位に区切られて詰められない可能性もあるってこと?

こういう動きって、OS依存?
send実行中に、スレッドがコンテキストスイッチしたらこうなるってこと?

2このスレッドが、同時に100Mバイトとかのデータをsendしたら、
そうなりそうな気がしないわけじゃないけど。

360 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 12:04:11 ]
そもそも同期化もせずに 1 つのソケットに複数スレッドで書き込むな。

361 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 12:09:29 ]
232Cでやっちまったことはあるな

362 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 12:50:47 ]
>>360
確かにおっしゃる通りですね。
ってことは、やっぱりそうなる事もありうるってことですか。


363 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 19:19:51 ]
>>362
実装依存だろうし、起きるかどうか考えるだけ無駄

364 名前:デフォルトの名無しさん [2008/06/16(月) 21:45:50 ]
ロックしろよ


365 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 21:51:18 ]
Unixで同期モードならおきない気がする



366 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 22:11:13 ]
>>365
どういった理由からですか?保障されているんですか?

367 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 23:13:06 ]
TCPだったら、sendした順に届くとは限らない。
スレッド関係なしに。
だから、逐次処理で
send( "ABCDE" );
send( "abcde" );

とかやっても、相手側で
abcdeABCDEと受信することも普通にある。


368 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 23:19:20 ]
おいおい。TCPでそれはないって。


369 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 23:22:45 ]
>367
え??

370 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 23:30:04 ]
次にお前は「ワーイ沢山釣れたー」と言う…

371 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 23:37:42 ]
winsockならwww.kt.rim.or.jp/~ksk/wskfaq-ja/intermediate.html#threadsafety
まぁ、どの実装でも、自前でコントロールすべしって結論になると思う

372 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 23:39:36 ]
あれ?システムコール実行中にコンテキストスイッチて起るんだっけか?

373 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 23:47:19 ]
起こらないとするなら、誰かがsendを喚ぶと、戻ってくるまで
システムフリーズするだけだな。

374 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 01:51:31 ]
TCPは送信順番も送信内容も保障されるか破棄されるんじゃないの?
順番がかわるとか複製される可能性があるのはUDPじゃないの?

おれなんか間違ってること言ってる?
手元の参考書にそう書いてあるんだけど?

375 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 01:56:01 ]
釣れた釣れた(^^)

バーカ >>374



376 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 02:01:15 ]
>>375
スレ監視し続けてたんだね
お疲れ様
釣れて良かったね
おめでとう

377 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 02:46:29 ]
>>372
普通に起こるだろ。
シグナルだって入るし、場合によっちゃスレッドだってスイッチする。

378 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 04:08:33 ]
>>372
I/Oだったら普通にキューにぶっこんでコンテキストスイッチしないかな?


379 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 04:28:02 ]
Winsockでconnect、send、recvそれぞれに個別のタイムアウト値を持たせたいのですが、
connectのみ
WSAWaitForMultipleEventsでタイムアウトを判断して
send、recvはsetsockoptを使って指定、
これで大丈夫でしょうか?

380 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 08:52:26 ]
今の今までスレタイがtypoだと思ってた俺愕然。

381 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 09:58:45 ]
65535まで続くよ!

382 名前:355 mailto:sage [2008/06/17(火) 10:05:16 ]
>>367
シングルスレッドの場合でしょ、それは絶対にあり得ないと思うんだけど。
最近のカーネルは、カーネルプリエンプションだから、カーネル内部の処理
実行中にコンテキストスイッチすることもあるかも知れないけど、
ロジックの実行順序(逐次処理)が入れ替わることはないと思います。

>>373
それとはまた別の話ではないでしょうか。
sendを呼んだひとはブロックされるでしょうが、他のプロセスは
普通にシステムコールを実行することも、ユーザーランドのロジックも
実行できると思います。

>>374
私もそういう認識です。
TCPで1つのスレッドが送信した場合であれば、sendした順に相手側では
recv出来ると思ってます。(何回recvすれば良いかは判らんけど。)
途中でパケロスしたり、物理的に線が切れたりした場合は、受信側に届いた
部分まで(これも、相手がsendした順)が受信出来る。

なにか間違ってます? >> all


383 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 16:49:35 ]
>>479

384 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 17:04:56 ]
>>379

385 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 17:14:26 ]
>>579



386 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 17:23:55 ]
getaddrinfoはブロッキングを起こしますか?

387 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 17:54:23 ]
AI_NUMERIC を付けない場合は起こします

388 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 18:07:41 ]
LAN接続PC間で、低速、高ping回線の環境を再現するにはどのような方法があるでしょうか?
自作の俺プロトコルアプリが低速回線環境でどういった影響を受けるのか調べたいのですが。
環境はWindowsです(98orXP)

389 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 19:19:43 ]
そういうソフト使えばいいだろ。

390 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 19:50:44 ]
>>367
TCPでそれがあったら大変だろ
UDPでは十分ありうるだろうが
UDPは順序がかわるどころか
複製されたりもするらしいからな

しかしUDPって順序も保障されてないとなると
1パケットあたりの情報をどうやって認識するんだろうか
区切り文字やらパケットサイズ送っても
順序がかわったりしたらアウトだよな?



391 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 20:41:21 ]
このスレに出入りする奴の発言とは思えんな。

392 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 21:56:19 ]
UDPは来るか来ないかだけで、「パケット」という構造自体は保証されるだろ。
2つ以上のパケットをもってきて、その関連をどうこういうと面倒だけど。

393 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 09:28:59 ]
UDPで順序が変わるってのはわかります。
例えば、
(1)udp_send("ABCD");
(2)udp_send("abcd");
とした場合、(1)で作成されたUDPパケットが相手HOSTに到達
するルートと、(2)で作成されたUDPパケットが相手HOSTに到達
するルートが同じだとは限らないですよね。
たまたま、(2)のUDPパケットが相手HOSTに到達するルートの方が
速い回線だったりした場合、受信側のHOSTでは、(2)(1)の順に
UDPパケットを受信する事もあり得ます。
UDPパケット毎の順序は不定ですが、複数のUDPパケットが混ざる
事はありません。(シングルスレッドの場合)

で、複製されるってのはどういう意味?

394 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 17:14:46 ]
udp_send("ABCD");
とかが2回以上あったかのように
複数回届くことかと思われ

で、実際そういうことがある
パケットにインデックスとかつけて
2回目以降のやつは棄てればいいので問題ない

395 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 17:22:56 ]
>>394
それって UDP側じゃなくて MAC側の仕様じゃないの?
結果は同じだけど・・・
細かすぎるか?w



396 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 17:48:55 ]
UDPパケットがネットワーク上で消失するってのは判るんですが、
重複するってのはなぜ?
誰がパケットを複製するの?

マルチキャストであればルータがパケットを複製するってのは
判るんですが。


397 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 17:59:51 ]
論理的にはあり得ないけど、ハードやOS側が腐っている場合は、
勝手に複製されてしまうこともあるって事ですか。

man ping より
重複パケットと障害パケット
     ping ユーティリティは重複パケットと障害パケットを報告します。重複パケット
     はユニキャストアドレスに対しては起こるはずのないものですが、リンク層での
     不適切な再送信によって引き起こされるようです。重複は様々な状況で起こる可
     能性があります。低いレベルの重複の存在は必ずしも警告にならないかもしれま
     せんが、よい兆候ではありません。ブロードキャストもしくはマルチキャストア
     ドレスに ping する時には、重複が起こることが期待されます。実際に重複する
     のではなく、異ったホストから同じ要求に対して応答が行われからです。

     障害を受けたパケットは明らかに重大な警告です。多くの場合、ping パケットの
     経路のどこか (ネットワーク内かホスト内) のハードウェアの故障が考えられま
     す。


398 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 18:03:13 ]
よって、パケットの複製は、UDPだから発生するとかって話では
ないってことですね。

ただ、TCPだと、勝手に捨ててくれるけど、UDPだとそのまま
複数回受信しますということね。

と、なっとくしました。
考え方が間違ってたら、指摘してもらえると嬉しいです。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](*・∀・)<99KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef