ネットワークプログラ ..
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 の値しか返さなくて何が原因なのかがわからないのです。
238:デフォルトの名無しさん
08/06/01 00:20:46
値を表示してみるという思いつきができないのか
なんというゆとり
239:デフォルトの名無しさん
08/06/01 00:24:56
defaultを使わないでもっと絞ればいいだろ
240:デフォルトの名無しさん
08/06/01 00:31:06
>>238
戻り値は -2146697510 です
意味わかるんですか?
241:デフォルトの名無しさん
08/06/01 00:32:33
>>239
リファレンスには
S_OK
E_OUTOFMEMORY
INET_E_DOWNLOAD_FAILURE
の3つしか 特に戻り値として明記されていませんでしたので これ以外の戻り値は わかりません。
242:デフォルトの名無しさん
08/06/01 00:40:10
仕様書か実装のバグだね
MSに抗議しないと
243:デフォルトの名無しさん
08/06/01 00:40:42
リファレンス外の戻り値を返すとかどんだけ糞なライブラリorリファレンスだよ
244:デフォルトの名無しさん
08/06/01 01:10:01
-2146697510 = S_OK + E_OUTOFMEMORY + INET_E_DOWNLOAD_FAILURE
245:デフォルトの名無しさん
08/06/01 01:12:17
>>244
おまえすげえなwww
3つの戻り値の和を返すというのはいったいどういうことを言いたいんだろうかこの関数は
246:デフォルトの名無しさん
08/06/01 01:20:04
>>244
1245206じゃハゲ
テキトーなこと抜かしてるんじゃねーよボケ
死ね工作員
247:デフォルトの名無しさん
08/06/01 01:40:25
一体何の工作だ
248:デフォルトの名無しさん
08/06/01 01:52:00
FACILITYの意味からして足すのはありえんと思うんだが
249:デフォルトの名無しさん
08/06/01 01:54:15
-2146697510 = S_OK | E_OUTOFMEMORY | INET_E_DOWNLOAD_FAILURE
250:デフォルトの名無しさん
08/06/01 01:55:03
>>248
ビット和だろ常考
251:デフォルトの名無しさん
08/06/01 01:59:40
-2146697510を16進数に直すと0x800bfeda
8 は失敗をあらわす。
b は FACILITY_CERT で、電子証明書関連のエラーだとわかる。
feda は不明。
httpsで繋ごうとして何かがまずかったんだなとはわかるね。
252:デフォルトの名無しさん
08/06/01 02:09:45
winerror.hに詳しくなるスレはここですか
253:デフォルトの名無しさん
08/06/01 04:57:28
スタック破壊してんじゃネーノ
254:デフォルトの名無しさん
08/06/01 05:07:10
ネットワーク接続を切る、接続するAPIってあるんでしょうか?
言語は C/C++ Windowsでお願いします
255:デフォルトの名無しさん
08/06/01 05:08:39
あるよ。
256:デフォルトの名無しさん
08/06/01 05:19:49
>>255
何でしょうか?
257:デフォルトの名無しさん
08/06/01 05:23:23
Winsock
258:デフォルトの名無しさん
08/06/01 05:49:25
すいません 間違えました
ネットワークでなく インターネットの接続です
259:デフォルトの名無しさん
08/06/01 05:50:53
どう違うんだ
260:デフォルトの名無しさん
08/06/01 05:53:14
稀にIPじゃない場合もあるか否か
261:デフォルトの名無しさん
08/06/01 05:56:17
IPじゃないってドメインのことか?
ドメインならgethostbynameでIPに変換可能
あとは一緒
262:デフォルトの名無しさん
08/06/01 05:56:57
ネットワーク接続 WNetConnectionDialog関数を使ったら
URLリンク(sakuratan.ddo.jp)
のようなダイアログがでたのですが、これではないやつで
インターネット接続関連のダイアログがでてくると幸いです
263:デフォルトの名無しさん
08/06/01 06:02:35
>>261
Internet Protocolを使ってないコンピュータネットワークもあるってこと。
264:デフォルトの名無しさん
08/06/01 06:30:21
connect() 関数じゃないですよ?
265:デフォルトの名無しさん
08/06/01 06:51:53
物理的にネットワークアダプタを抜いた状態と同じ環境にしたいってことです
266:デフォルトの名無しさん
08/06/01 07:41:40
>>263
あるわけないだろ。
ばか?
267:デフォルトの名無しさん
08/06/01 07:45:56
>>266
うせろキチガイ
268:デフォルトの名無しさん
08/06/01 07:47:43
>>266 が無知なのは分かったw
269:デフォルトの名無しさん
08/06/01 08:31:21
>>268が無知すぎる件
ある意味犯罪
270:デフォルトの名無しさん
08/06/01 09:43:55
>>269
アナタを・・・
telnetです・・・
271:デフォルトの名無しさん
08/06/01 15:34:01
>>266,269
AppleTalkとかIPXは?
272:デフォルトの名無しさん
08/06/01 15:34:40
>>265
Win32APIでネットワークアダプタを無効にするとか
やり方知らんが多分できるとオモ
273:デフォルトの名無しさん
08/06/01 15:48:13
WindowsでSockRAW取れないのですが
どうしてですか?XP SP2です
274:デフォルトの名無しさん
08/06/01 16:05:42
覗くなということだ
275:デフォルトの名無しさん
08/06/01 18:13:05
>273
ググればすぐわかる。
276:デフォルトの名無しさん
08/06/01 19:20:30
MMORPGのサーバとクライアントの同期化について知りたいのですが、
何か参考になるものとかありますか?
277:デフォルトの名無しさん
08/06/01 20:02:12
韓国語を覚えたほうがいいかもね
278:デフォルトの名無しさん
08/06/01 23:23:04
>>277
理由は?
279:デフォルトの名無しさん
08/06/01 23:37:34
市場の8割がチョン製クリゲ
280:デフォルトの名無しさん
08/06/02 04:57:58
日本ってなんで情報なかったりするんだろう(・ω・)
281:デフォルトの名無しさん
08/06/02 10:36:41
日本のゲーム業界特有の情報閉鎖性もあるけど
オンラインゲームが流行ったときに不況で
誰も手を出さなかったとういのもあるかも
そして>>279
282:デフォルトの名無しさん
08/06/02 13:03:35
商売がヘタクソってのも多いと思うな>日本のメーカー
あからさまな出し惜しみとかして客に逃げられるパターンが多すぎる
283:デフォルトの名無しさん
08/06/02 13:30:29
商売というか、小汚い金の稼ぎ方が日本人にあわないんだろうね
あっちの人たちは金が儲かれば形振りかまわないから成功はする
名声はないけど
284:デフォルトの名無しさん
08/06/02 14:20:06
うん,高度成長期の日本そっくり
285:デフォルトの名無しさん
08/06/02 14:23:01
パンヤもみんゴルのパクリといわれてるし、
その他もろもろパクリは多いよな。
そりゃ作るのは楽だよ
開発で使ってるソフトも平気で割れでやってそうw
286:デフォルトの名無しさん
08/06/02 16:21:36
>>285
ネットランナー・・・
287:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/06/03 22:20:02
getpeernameで返してもらった連中を
getnameinfoにでも突っ込めば。
289:デフォルトの名無しさん
08/06/03 22:35:15
sockaddr_in だと長さ足りなくないか
290:デフォルトの名無しさん
08/06/03 22:54:40
【エアー調査会社】HG嫁 住谷杏奈61【ハッカー妊婦】
スレリンク(ms板)
291:デフォルトの名無しさん
08/06/04 01:37:08
ネットプログラム初心者です。
ネットゲームのプログラミングが目的なのですが、
コネクション数は1〜200あたりで、OSがwindowsXPとした場合、
URLリンク(www.kt.rim.or.jp)
を読む限り、WSAAsyncSelectかWSAEventSelectを使うのが良さそうですが
どうなのでしょうか。
292:デフォルトの名無しさん
08/06/04 01:46:06
「Winsock標準に準拠」にこだわるのでなければ(もはや意味なし)
IOCPにしとけ
293:デフォルトの名無しさん
08/06/04 01:48:59
期待した動作をしなくてもくじけないココロがあるならなんとでもなるZE!
294:デフォルトの名無しさん
08/06/04 01:57:35
まったく使ったことがないのでよくわかりませんが、
select 毎回の引数の処理が無駄
WSAAsyncSelect,WSAEventSelect メッセージの通知が遅い
IOCP とにかく速い、プログラムは難しくなる
で良いでしょうか?
ROのエミュ鯖ではselectが使われてて、引数の処理が入ってたのは見たなぁ。
295:デフォルトの名無しさん
08/06/04 02:18:41
selectの64制限は確か#defineで回避出来たと記憶してるが
WSAEventSelectの64制限(WaitForの制限)は
複数のスレッドに64以下ずつわけるしかないんじゃなかったかな。
296:デフォルトの名無しさん
08/06/04 02:29:14
複数のスレッドになると難しそうですね。
マルチスレッドもネットプログラミングの経験もない自分的には
ひとまずselectが良さそうな気がしてきました。
オープンソースのmmoが2つともselect使用しているみたいなので、実装例見れますし。
297:デフォルトの名無しさん
08/06/04 20:45:00
pthread_mutexって10万個作って使っても
問題ない?
298:デフォルトの名無しさん
08/06/04 20:59:21
>>297氏とは違うのですが、ミューテクスとセマフォを分かりやすく説明できる方いないでしょうか?
ググッてみたけど、どこも似たような分かりにくい説明が多いです。。
299:デフォルトの名無しさん
08/06/04 21:22:02
ミューテクスは複数のスレッドがあった場合、順番に処理するのに対して、
セマフォを複数のスレッドが同時にアクセス可と言う考え方でいいのでしょうか?
300:デフォルトの名無しさん
08/06/04 22:06:23
セマフォは5個の資源を10人で使うというような考え方。
listenの引数みたいなというか
301:デフォルトの名無しさん
08/06/04 22:14:35
>>300
係数1のセマフォならいっしょじゃねーか
嘘教えるな
302:デフォルトの名無しさん
08/06/04 22:17:22
>>298
ミューテックスは、同時にひとつのスレッドしかアクセスできない。
1人用のイスみたいなもの。 早いもの勝ちで1人だけが獲得できる。
残念ながら座れなかった人は、イスが空くまで待つ。
イスが空いたら、待ってましたとばかりに奪い合って、勝った人1人だけがイスに座れる。
負けた人は、またイスが空くまで待つ。
セマフォは、同時にアクセスできるスレッドの数を好きに指定できる。
3人まで座れるソファーとか、そういうの。
4人目が来たら、誰かがどくまで待つ。
1にすれば、ミューテックスとほぼ同じ。
303:デフォルトの名無しさん
08/06/04 22:25:50
>>301
だからそのものズバリだろw
教科書でミューテックス=二進セマフォという表記も使われる。
304:デフォルトの名無しさん
08/06/04 22:50:39
WinやRecursiveにしたときのpthreadは、Mutexは同じスレッドならば何度でも取得できるところが一番違う。
スレッドごとの排他制御にMutex、複数の資源管理にセマフォ、単一の資源管理ならどっちでもいい。
305:298
08/06/04 22:53:48
>>299-303
>>302さんの説明分かりやすかったです。ありがとうございました。
ググッても、どこも排他的とかいまいち理解しづらいですよね。。
306:デフォルトの名無しさん
08/06/04 23:25:22
なんというスレ違い
307:デフォルトの名無しさん
08/06/08 12:27:33
C++使いなのですが、socketの実装未経験です、
車輪の再発明はしたくないのでlinuxのsocketライブラリを探しています
CommonC++(commoncpp)というのを見つけたのですが
URLリンク(www.sunsite.ualberta.ca)
ソースコードを見てると使いやすそうなんですが、他にもオマイラお勧めの、良いライブラリとか
あったら教えてホスイのですが
boostにもsocketのライブラリがあるっぽいんだけど・・・・こっちの方が有名なのかな?
308:デフォルトの名無しさん
08/06/08 12:56:46
boostのがおすすめ
309:デフォルトの名無しさん
08/06/08 14:23:14
オマイラだと?何だその態度は
310:デフォルトの名無しさん
08/06/08 14:28:50
>>307
一度くらいは自分で実装するべきだ。その上で便利なライブラリを探すんだ。
車輪の再発明はしたくないって便利な言い訳だね。
311:デフォルトの名無しさん
08/06/08 14:41:01
別に使えるものは使えばいいんじゃねえの
いちいちカーネルやコンパイラから自分で書き起こしたりはしないだろ
312:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/06/08 22:12:11
Makefile
314:デフォルトの名無しさん
08/06/08 23:02:18
>>312
聞いてくれなくてもいいが
315:デフォルトの名無しさん
08/06/08 23:13:36
boostの非同期ライブラリおすすめ>>307
316:デフォルトの名無しさん
08/06/09 00:07:43
>>315
boost::asioも非同期ライブラリ持ってるんじゃないの?
317:デフォルトの名無しさん
08/06/09 10:02:28
ACEだな、やっぱでかいし
318:デフォルトの名無しさん
08/06/09 23:12:11
ごめん。
asioのことを言ったw>>315
319:デフォルトの名無しさん
08/06/10 21:12:45
ネットワークプログラミングの利点って何?
320:デフォルトの名無しさん
08/06/10 21:32:02
ネットワーク通信ができること。
321:デフォルトの名無しさん
08/06/11 03:25:33
宿題スレに質問投げておくと勝手にだれかが作ってくれる
これがネットワークプログラ
322:デフォルトの名無しさん
08/06/11 12:27:03
>>321
小人さんは間違いが多いのが欠点だ。
323:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/06/14 06:51:37
オブジェクト試行ですか?
326:デフォルトの名無しさん
08/06/14 07:58:40
sockの関数と1対1に対応するメソッドを作ってるうち恩恵を受けにくい。一連の決まった操作をひとつのメソッドにまとめてしまおう。
sockaddrはラップして、アドレスのクラスを作ってしまう。簡単にアドレスを設定できるようにするといい。
あと、言葉遣い直せ
327:デフォルトの名無しさん
08/06/14 08:00:05
JavaとかRubyとかPythonとかの
ソケットクラスの構成をみれば〜?
328:デフォルトの名無しさん
08/06/14 08:27:18
>>326
君はまずその変な日本語を直さないとな
他人の言葉遣いを指摘してる場合じゃないぞ
329:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/06/14 09:34:50
しかしなんだね、g++ってVC8とは若干違うよね
accept()関数の第三引数の
accept(fd1, (struct sockaddr *)&caddr, &len))
lenだが、VC8ならintでも無問題なのだけど、g++はsize_tじゃないと嫌だと
怒ったりとかと少し戸惑う、>>330でした
332:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/06/14 10:05:46
>>332
Thx
物知りですね、勉強になります
gccの場合、accept()関数の第三引数は、int型でコンパイルに成功してたんだけど、g++でコンパイルした際にエラーが出たんで
なんでかなと思ってた、コンパイラに依存しないようにアサーションマクロを書いておくと、メモメモ
334:デフォルトの名無しさん
08/06/14 14:25:52
Winsockで非ブロッキングモードにしたいときは
selectでウインドウハンドルとそのウインドウのプロシージャを設定するけど
最初はウインドウAでメッセージ受けてたけど
次はウインドウBでメッセージ受けるように変更
とかいうことはできますか?
本当はウインドウハンドル指定しなくてよければ通信メッセージ受けるところだけ独立させたいんだけど
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4702日前に更新/99 KB
担当:undef