[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 03/27 11:55 / Filesize : 263 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


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

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



1 名前:ftp-data mailto:sage [2007/08/07(火) 01:47:35 ]
主にソケットに関しての質疑応答スレッドです。

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辺り
足りなかったら適当に付け足してね

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

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


488 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 01:19:32 ]
>>487
受け取る側の実装が、さ>めんどくさい

ところで一般的なデータの送受信を行う際に、
効率の良いやり方はどんな感じなんだろう?

TAP <--> NIC <------------> NIC <--> TAP
のようなtap間のやりとりをするプログラムを作っているんだが、
max = MAX(NIC,TAP);
while(1){
 FD_ZERO(&read);
 FD_ZERO(&write);
 if ( 出力バッファ > 0 ) FD_SET(NIC, &write);
 if ( 入力バッファ > 0 ) FD_SET(TAP, &write);
 FD_SET(NIC, &read);
 FD_SET(TAP, &read);
 select(max+1, &read, &write);
 if ( FD_ISSET(NIC,&read) ) NICから入力バッファへ
 if ( FD_ISSET(TAP,&read) ) TAPから出力バッファへ
 if ( FD_ISSET(NIC,&write) ) 出力バッファをNICへ
 if ( FD_ISSET(TAP,&write) ) 入力バッファをTAPへ
}
単純に考えたらこれなんだけど、他に何か工夫あるかな?

489 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 01:35:27 ]
>>受け取る側の実装が、さ>めんどくさい

そのレベルならWinInetでも使ってろ
Winならだが

490 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 09:13:18 ]
>>488
釣りですかね…

491 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 09:47:19 ]
無知なだけだろ。放置しる

492 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 11:27:48 ]
俺には>>488のどこが釣りなのかわからん・・・
誰か解説plz

493 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 14:28:52 ]
>>492
釣りではないよ


494 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 14:51:36 ]
selectの引数の数は合ってないし、返値もみてないのに、
律儀にmax取っていたり、釣りか間抜けとしか思えん。
効率とか言っちゃってんのワロス

495 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 15:40:06 ]
>>494
省略しただけだろ
エッセンスの方を見ろよ

496 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 16:10:53 ]
おいしい成分は何ひとつありませんでした

ちゃんちゃんw



497 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 17:55:11 ]
epollを使ってて、切断を検出したいんだけど、
EPOLLOUTが帰ってきたあと、recv(...) == 0だったらclose。
という流れを使ってるんだけど、
EPOLLHUPを使って切断って検出できない?

498 名前:デフォルトの名無しさん [2007/11/19(月) 10:16:40 ]
Linuxでプログラム書いてますが、
ソケットの状態を取得する関数はありますか?

getsockoptは状態ではなく設定を取得する関数なので要領を得ません
とりあえず、接続中か接続済みか未接続かを
ソケットディスクリプタから得るだけでもいいです

499 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 10:44:23 ]
>>498
getpeernameあたり。

500 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 11:09:21 ]
>>499
なるほどその手があるのか
ありがとう

501 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 15:44:17 ]
>>497
やりたいのはずばりEPOLLRDHUPでのedge triggerちゃいますの?

502 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 18:03:29 ]
>>501
エッジトリガっていうのかどうかわ解らないけど、
向こう側でソケットをcloseしても、こっちにHUPが飛んでこないんです
向こう側がcloseしてソケットを閉じたら、HUPが飛んできてほしい。
飛ばない仕様になってるならrecv==0を使うけど。
誰か詳しいひとおせーてください

503 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 18:13:15 ]
>>502
提供された情報に反応してください。

504 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 08:52:58 ]
>>503
HUPが来ないんじゃ仕方ない

505 名前:デフォルトの名無しさん mailto:age [2007/11/21(水) 10:20:39 ]
solarisで開発してるんだけど、
ノンブロッキングモード(?)でrecv()の戻り値が
-1なんだけどerrnoが0になるんだが・・・
これってどういう状態なんでしょう?
期待値としてはEAGAIN(?)だと思ってるんですが。

ソケットプログラミング素人にどなたか救いの手をorz。
ちょっと困ってるんでageで。


506 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 10:32:31 ]
errnoよりperror()が使いやすいよテスト



507 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 10:35:17 ]
>>506
EAGAINの度にエラー吐かれたらたまらんぞ。

508 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 10:38:56 ]
そもそもエラってるのにerrnoが0?

差し支えなければ前後のソースを少し晒してくれると

509 名前:506 mailto:sage [2007/11/21(水) 11:12:59 ]
>>508
ありがとうございます。えっとソースは抜粋&中略ですが、
大まかな動きはこんな感じです。
現象としては2kbyte程度のデータを流すと一度に取りきれないので、
selectで再ループして残りを取得する動作を期待しているのですが、
2回目以降のrecv()が-1となるのですが、errnoがEAGAINにならないので
エラーになって回線を切ってしまいます。
試しにEAGAINと0を対象として(コメント部)selectするようにしたら、
ちゃんと残りのデータを取る事が出来ました。

while( iLeftOver > 0 )
{
/* 指定バイト数を受信、または通信の遮断まで受信データを取得 */
errno = 0;
if( ( iRcvRet = recv( stSocket, pcBuff, iLeftOver, iFlag ) ) == DCC_SOCKET_ERROR )
{
printf("iRcvRet[%d]/recv()直後errno[%d]\n", iRcvRet, errno);
iErrCode = dwp_getErrNo();

if( EAGAIN == iErrCode )
//if (( EAGAIN == iErrCode ) || ( 0 == iErrCode ))
{
/* 受信準備ができていない場合、selectで受信するまで待つ */
FD_ZERO( &stFdSet );
FD_SET( stSocket, &stFdSet );

dcc_setTimeval( 1000, &stTmVal ); /* 待ち時間は1秒 */



510 名前:506 mailto:sage [2007/11/21(水) 11:14:48 ]
(一回で送れませんでした。続きです・・・)
iSelectRet = select( FD_SETSIZE, &stFdSet, NULL, NULL, &stTmVal );
if( iSelectRet == DCC_SOCKET_ERROR )
{
/* selectのエラー */
(中略)
return DCC_SOCKET_ERROR;
}
if( iSelectRet == 0 )
{
/* タイムアウト */
          (中略)
return DCC_SOCKET_ERROR;
}
/* 受信を検知 */
continue;
}
/* 受信エラー */
      (中略)
return DCC_SOCKET_ERROR;
}
else if( iRcvRet == 0 )
{
/* 通信の終了 */
      (中略)
return 0; /* 通信の切断 */
}
/* 一度のrecvで受信し切れなかった場合、受信サイズ、バッファの位置を書き換えて
再度recvを行う*/
iLeftOver = iLeftOver - iRcvRet;
pcBuff += iRcvRet;
}

511 名前:506 mailto:sage [2007/11/21(水) 11:17:40 ]
あまり意味ないけどコンソール上には

>iRcvRet[-1]/recv()直後errno[0]

表示されてしまいまふ。

512 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 13:52:59 ]
#include <errno.h>はインクルードしてますか?
(必要なOSの場合に; 今時pthread絡みで必ず必要だけど)
自分でextern int errnoしてたら殺しますよ。

513 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 14:36:48 ]
errno=0をerrno=100にしたら100のままだったりしてねw

514 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 14:38:18 ]
Linux&(C or C++)でhttps通信を利用したプログラムを作りたいのですが、
httpsを利用できるライブラリは無いでしょうか。

ghttpがあったのですが、httpsには対応していないようで困っています。

515 名前:506 mailto:age [2007/11/21(水) 15:25:02 ]
>>512
errno.hはインクルードはしてあります。
その直後にextern int errnoもしてました。
これは不味いんですか?
恥ずかしながらUNIXはホントわからないんです・・・。

>>513
まさにその通りです。
recv()の前後でerrnoの値が全く更新されません。

と、言うことで「extern int errno」の行を削除して
みたのですが現象は変わりません。
その書き込みから見ると非常に基本的な部分で間違いが
あると思いますがなんとも分かりません。
他に考えられる原因はありますでしょうか?
その他のソース部分には、errno.hのインクルード等は
されていません。

ちなみに動作環境はsolaris8、開発環境はeclipse+CDTで、
コンパイラはgccのVer2.8.1を使ってます。
厨な質問で申し訳ないです。m(__)m

516 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 15:42:46 ]
>>515
errnoが通常の変数の場合、マルチスレッド環境だと、errnoを取得する前に別スレッドが書き換えてしまう
ケースがあり、正常に動作しないので、
最近のOS/ライブラリでは、#defineで「errno」をスレッドごとに確保された記憶領域へアクセスする関数に
置き換えてる。




517 名前:506 mailto:sage [2007/11/21(水) 15:58:11 ]
>>515
お付き合いありがとうございます。
要は「#include <errno.h>」のみやれば良いとの認識で
良いでしょうか?

manpageによると
------------------------------------------------------------
errno は、ISO C standard で int 型の変更可能な左辺値として
定義されており、明示的に宣言を行ってはならない;
errno はマクロの場合もありえる。 errno はスレッド毎に値を持つ。
つまりあるスレッドで errno が設定されても、他のスレッドの errno には
影響しない。
------------------------------------------------------------
とありました。

しかし、#include <errno.h>をしているのは、
私がUPしたソースのあるファイルのみでしか宣言してなく、
マルチスレッド環境ではありますがこのソースは、
単一のスレッド上でのみ動きます。
(上の説明からだと複数で動いててもそれぞれ独立してerrnoを
持っていると言う事になると思いますが。)
にも関わらず>>513のような挙動になるのは何故なんでしょうか?
どこか別のヘッダ等でexternとかしてるんでしょうか・・・


だから俺には短期間じゃ無理な作業だと言ったのに(T。T)>>会社
と、愚痴をこぼしてみる。スイマセン。

518 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 16:23:23 ]
とりあえずな、>>506の言う通り、
perror()をprintf("iRcvRet〜の前に付け加えてみな。
後ろじゃダメだぞ。

519 名前:506 mailto:sage [2007/11/21(水) 16:48:59 ]
>>518
ありがとうございます。perror()を使用したところ

>>recv(): 資源が一時的に使用できません。

と返ってきて、EAGAINである事が確認出来ました。
と、なると後はなんでerrnoが変更されないのかですね。
一歩前進(?)しましたありがとうございます。
絞る知恵もなくなったので、ネットで検索しまくってます。


520 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 17:11:11 ]
環境のせいかもね
1. errno.h にバグがある
2. インクルードしている errno.h のパスがおかしい
3. ライブラリとコンパイラが不整合


521 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 17:25:47 ]
ネットワーク関係なくなってきてるが、

#include <errno.h>
int geterrno(void) { return errno; }

これだけのファイルをgcc -Eしてみな。

int geterrno(void) { return (*__アドレス返す関数名()); }

にならないとまずい。
なってるならソースコードのerronoをgeterrno()に変えて終了。
左辺値参照はどうせまともな意味のあるコードないだろうし。


522 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 18:20:38 ]
gcc 2.8.1ってなんだよ…
2.95.4とかなら分かるけど。
窓から捨てろ

523 名前:506 mailto:sage [2007/11/21(水) 22:35:07 ]
>>520-522
お返事遅くなってしまいました。
すみません&ありがとうございます。

>>521
明日試してみます。

>>522
用意されたサーバのを使ってるだけなので
私はどうにも出来ませんorz。
察するに「古くて使い物にならねー。」って事で
良いでしょうか?このあたりも原因あるのでしょうか・・・
ソケットなんて昔からあるので大丈夫な気もしますけど。

スレ違いにもなりかけてるので、以上を踏まえて精進します。
皆さん長々とお付き合い下さってありがとうございました。
感謝します(-人-)

524 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 07:17:32 ]
サーバ上のCGIに文字列を渡して、その文字列を保存しようとしてるのですが
日本語等の2バイト文字を渡すと正常に受け取ってくれません。

char *mozi = "test.cgi?,testあ"
hRequest = HttpOpenRequest(
hHttpSession,
"GET",
mozi,//■CGIへ渡す文字列です
NULL,NULL,NULL,0,0);

上記では「testあ」という文字列をCGIに送信していますが、CGI側では
「test0x000000000008p-10224」
という風に2バイト文字のみエラー認識されてしまいます。
どうすればCGIに2バイト文字を送信できるのでしょうか?

525 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 07:44:54 ]
%82%A0%82%D9

526 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 07:49:32 ]
char *mozi = "test.cgi?,test%94%C2%88%E1%82%A2"
hRequest = HttpOpenRequest(
hHttpSession,
"GET",
mozi,//■CGIへ渡す文字列です
NULL,NULL,NULL,0,0);




527 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 08:32:44 ]
>>524
CGI エンコード

528 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 08:38:54 ]
>>525
>>526
>>527
検索してみた所、それらしい参考文献が見つかりました。
早速実装して試してみたいと思います。ありがとうございました。

529 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 08:52:58 ]
%82%A8%82%DC%82%A6%82%E7%90e%90%D8%82%BE%82%C8%82%97

530 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 09:25:37 ]
%8E%C0%91%95%8A%AE%97%B9%81%41%8A%B4%8E%D3

531 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 09:45:50 ]
エンコード状態で会話すんなwwwwwwwwwwww

532 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 10:14:24 ]
socket通信しているときに、相手方が shutdown(s, SHUT_WR) した時、
こちら側ではselect()から抜けて、read() で検知することができますが、
その後、相手が close() または shutdown(s, SHUT_RD) したことを
検知することはできないでしょうか?

533 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 11:16:35 ]
CGI円コード程度ならgoogleに食わせれば翻訳してくれる

www.google.co.jp/search?hl=ja&q=%8E%C0%91%95%8A%AE%97%B9%81%41%8A%B4%8E%D3
www.google.co.jp/search?hl=ja&q=%82%A8%82%DC%82%A6%82%E7%90e%90%D8%82%BE%82%C8%82%97
www.google.co.jp/search?hl=ja&q=%94%C2%88%E1%82%A2
www.google.co.jp/search?hl=ja&q=%82%A0%82%D9


534 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 14:43:38 ]
ttp://%90%C0%82%C1%82%C4%82%E6%82%B5

535 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 19:35:15 ]
>532
writeが-1を返すとか。
selectのexceptfdsが反応するとか。

536 名前:532 mailto:sage [2007/11/29(木) 02:22:04 ]
>>535

exceptfds は、相手方がMSG_OOBでデータを送ってくれないと
反応しないですね。

write は確かに-1 (EPIPE) を返してくれるのですが、こちらから
送信するときに分かるけれども、相手がcloseしたタイミングで
検知できるわけではないので、

難しそうですね。ありがとうございます。





537 名前:デフォルトの名無しさん mailto:sage [2007/11/29(木) 22:36:41 ]
というか、先に向こうがSHUT_WRしているんだから、
こっちはwriteしかできないわけだし。気にくわなければ
すきなだけwriteして、むこうがSHUT_RD(残りclose)を発行する
前に、こっちからcloseしてやれば?

538 名前:デフォルトの名無しさん mailto:sage [2007/11/29(木) 22:58:19 ]
なんか失恋とか離婚とかそんな勢いだなw

539 名前:デフォルトの名無しさん mailto:sega [2007/12/01(土) 19:43:02 ]
Linuxでサーバプログラム書いてるんだけど
acceptする前に相手のIPとポートを知る方法ってある?

540 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 19:49:23 ]
特定のアドレスからの接続は拒否りたいとか?
acceptを呼ぶ前に接続は完了してるらしいから、無意味じゃない?
www.kt.rim.or.jp/~ksk/sock-faq/unix-socket-faq-ja-3.html#ss3.3

541 名前:539 mailto:sage [2007/12/01(土) 19:52:23 ]
>>540
アリガトウ
そういえばそうだったね 忘れてた

542 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 20:46:07 ]
送られてきたパケットのIPヘッダー部分を生ソケットでパースすればいけそうだけどね
俺はヘッダー処理を書いたことはあるが、パース処理までやる気はまだない

543 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 21:00:40 ]
ヘッダー処理って何んだろう
パース処理ってのがIPヘッダの解析なら
別に何にも難しいことないだろ

544 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 21:10:03 ]
バカには難しいんだよw

545 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 21:43:26 ]
どこにも難しいとは書いてない件について

546 名前:デフォルトの名無しさん mailto:sage [2007/12/02(日) 00:11:13 ]
>>539
何のために?



547 名前:デフォルトの名無しさん mailto:sage [2007/12/02(日) 11:08:10 ]
エラーがでるのですが、なぜでるのか私にはわかりません。
一体なぜエラーが出るのかを教えていただけませんか?
tool-6.net/?cnum

548 名前:デフォルトの名無しさん mailto:sage [2007/12/02(日) 11:15:55 ]
ちょtぅwwwwwwwww
何そのやる気0の他力本願寺は

549 名前:デフォルトの名無しさん mailto:sage [2007/12/02(日) 11:20:17 ]
バグを発見したときは、
・発生時刻
・バグの詳細
・(できるなら)一次解析結果
を調べるのは常識だぞな

550 名前:デフォルトの名無しさん mailto:sage [2007/12/02(日) 12:02:14 ]
Debug Assertion Failed!
File:c:\program files\microsoft visualstudio 8\vc\atlmfc\include\atlcomcli.h
Line 154
と出ます。

551 名前:デフォルトの名無しさん mailto:sage [2007/12/02(日) 12:04:08 ]
>>550
おk 原因はわかった

552 名前:デフォルトの名無しさん mailto:sage [2007/12/02(日) 12:40:58 ]
マジレスして良いのか分からないが

取っ掛かりぐらい自分でつかんでから人に聞かないと頭には入らない

553 名前:デフォルトの名無しさん mailto:sage [2007/12/02(日) 13:20:04 ]
質問があります。
accept で得たソケットをOVERLAPPED 対応にさせるにはどうしてます??


554 名前:デフォルトの名無しさん mailto:sage [2007/12/02(日) 15:27:36 ]
acceptで得るのはlistenに渡す奴のコピー(同じ性質)みたいなもんじゃなかったか

555 名前:デフォルトの名無しさん mailto:sage [2007/12/02(日) 17:18:14 ]
pMyBr->GoHome();を消したら、ウィンドウだけは表示出来ました。
…原因が、わかりません。

556 名前:デフォルトの名無しさん mailto:sage [2007/12/02(日) 19:17:38 ]
>>554
返信ありがとうございます。
listen ソケットに WSA_FLAG_OVERLAPPED が設定されていれば、accept で得られるソケットにも同フラグが設定された状態になるんですね。
助かりました。ありがとうございます。





557 名前:デフォルトの名無しさん mailto:sage [2007/12/02(日) 19:18:16 ]
解決方法はありますか?

558 名前:デフォルトの名無しさん mailto:sage [2007/12/02(日) 19:41:02 ]
atlcomcli.h中の154行目
ATLASSERT(p!=NULL);
に何かしらの原因があるんですかね?

559 名前:デフォルトの名無しさん mailto:age [2007/12/02(日) 20:35:19 ]
age

560 名前:デフォルトの名無しさん mailto:sage [2007/12/02(日) 21:24:22 ]
man 2 send を読むと、MSG_DONTWAIT について、

「fcntlのF_SETFLでO_NONBLOCKを指定することによっても有効にできる」

と書いてあって、これって、O_NONBLOCK にしてなくても、sendするときの
オプションで MSG_DONTWAIT を使えば非ブロックモードにできる、という意味だと
思うけど、

逆にO_NONBLOCKになってるソケットでブロックモードでsendしたいときに
send時のオプションで何とかならない?

fcntlでO_NONBLOCKをクリアしないとダメ?


561 名前:デフォルトの名無しさん mailto:sage [2007/12/02(日) 21:34:42 ]
全然関係なくてあれなのですがboost::asioがIOCP使ってるぅー

562 名前:デフォルトの名無しさん mailto:sage [2007/12/02(日) 21:36:00 ]
本当にどうでもいいwww

563 名前:デフォルトの名無しさん mailto:sage [2007/12/02(日) 21:44:25 ]
私は>>547ですが、
ヒントだけでもいただけないでしょうか?

564 名前:デフォルトの名無しさん mailto:sage [2007/12/02(日) 21:52:15 ]
少なくともエラーメッセージから何でエラーが出るのかくらい考察しろ


565 名前:デフォルトの名無しさん mailto:sage [2007/12/03(月) 02:59:11 ]
>>558
翻訳:
pがヌルポでどうしろっていうんだよ、バーカ。



566 名前:デフォルトの名無しさん mailto:sage [2007/12/03(月) 07:54:14 ]
俺バカなんで教えていただけませんか?



567 名前:デフォルトの名無しさん mailto:sage [2007/12/03(月) 08:40:22 ]
>>555
ヌルポなんて渡すんじゃねえ、"Go home!"ってことなんじゃないか?

いったん家に帰って、必要な初期化を見直せ。

568 名前:デフォルトの名無しさん mailto:sage [2007/12/03(月) 09:13:03 ]
というか技量にあってないんだと思うが
スレ違いかどうかすら判断できてないだろ

569 名前:デフォルトの名無しさん mailto:sage [2007/12/04(火) 11:29:40 ]
訳若芽

570 名前:デフォルトの名無しさん mailto:sage [2007/12/04(火) 15:46:48 ]
通信対戦ゲームのマッチングプログラムをperl/cgiで作っています。
cgiの中身は、掲示板のサンプルリストに毛の生えたような単純なもので、
何も無い部屋に登録すると、登録した人のIP、開放しているport番号を記録し、
そのクライアントはサーバー状態で接続を待ちます。
次に、他の人が登録してある部屋に入ると、登録してあったIPとport番号を
受け取り、サーバー状態で接続を待っている相手に、接続を試みるというものです。

実際作って、ちゃんと動いているのですが、そこでどうしても気になるのは、
登録しているIPとport番号を相手に受け渡す時で、やっぱり、
IPとport番号は暗号化して渡したほうがいいのでしょうか?
初心者向けのperlのCGIの本を読んでても、掲示板の作り方ぐらいで、
マッチングサーバの作り方については書かれていませんし、
同人ゲームのひぐらしデイブレイクの通信対戦では、堂々と掲示板に
自分のIPとport番号をさらしているので、それに比べれば、
目に見えない形でやり取りしているから、気にする必要は無いでしょうか?

ものすごい初歩的な質問かもしれませんが、よろしくお願いします。

571 名前:デフォルトの名無しさん mailto:sage [2007/12/04(火) 16:15:24 ]
>>570
途中の盗聴を気にしているのならsslとかを使った方が良いかも。
サーバやクライアント自身に相手のIPやPort番号を知られたくないわけじゃないよね。

572 名前:デフォルトの名無しさん mailto:sage [2007/12/04(火) 16:28:02 ]
鯖--倉A
 |
倉B
接続状態が鯖経由なら、暗号化うんぬんの前に、
相手のIP,Portを教える必要はない。

鯖  倉A
 /
倉B
接続状態が直結なら、
何をしようと相手のIP,Portが分かる。


573 名前:デフォルトの名無しさん mailto:sage [2007/12/04(火) 17:25:15 ]
>>570
Radiusで払い出せバーカw

574 名前:デフォルトの名無しさん mailto:sage [2007/12/04(火) 18:27:48 ]
マジ訳若布
ググりまくったけど訳若芽

初期化方法わかんね

575 名前:デフォルトの名無しさん [2007/12/04(火) 23:01:27 ]
>>570
変なポートでなければたいした問題ではないだろ

openSSlとか使い切れなかったら
IEコンポ経由でアクセスすると楽だよ

576 名前:デフォルトの名無しさん [2007/12/04(火) 23:07:44 ]
ごめん,質問
PROXYの情報取りたいんだけど最適な方法は?
レジストリに書かれている方でなく
PACファイル等のスクリプトの方
IEコンポかMFC?(.NET)
できたら WIN APIが助かる



577 名前:デフォルトの名無しさん mailto:sage [2007/12/05(水) 09:06:14 ]
IEだったら↓に自動構成スクリプトのアドレスが入ってる
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\AutoConfigURL

後は普通に読めばいいんでないの

578 名前:デフォルトの名無しさん mailto:sage [2007/12/05(水) 16:42:41 ]
ProxyServerは?

579 名前:570 mailto:sage [2007/12/05(水) 21:43:43 ]
返答遅くなってすみません。
また、いろいろアドバイスしていただきありがとうございます。

SSlですが、自分のCGI参考書ではグラフィックカウンターを作る説明しかなく、
これでどう暗号化するか分かりません。
RadiusもWikipediaで調べましたが、自分の頭ではチンプンカンプンでした。

ゲーム自体は、クライアント同士をP2P通信でつなげて遊ぶもので、
ipとport番号のやり取りのマッチング部分だけ、webサーバ上の
cgiで、C/Sで行います。
p2p通信で、しかも、マッチングにCGIを使うので、クライアントにも、
webサーバにもIPやport番号は知られるのは当然なんですが、
よく「iPとport番号は知られるとまずい」とか、
「ネットゲームの通信は暗号化しとけ」みたいなことが書かれるので、
webサーバから相手のIPとport番号の受け渡しのさい、暗号化する必要が
あるんじゃないかと思ったのです。

開放するport番号はプライベートport番号の間でなら各クライアントが
好きな番号を開放するようになっているので、49151番以前のportは
開くことはありません。>>575さんがいうように、
IPとport番号をそのまま受け渡しても、心配する必要は無いんでしょうか?

なんか文章が変ですみません。

580 名前:デフォルトの名無しさん mailto:age [2007/12/05(水) 22:21:21 ]
なんでNULLが返されるんだぁああぁぁ!!!!
ひぇぇぇぇうぇぇええ!!!!
すみませんでした。
もういくら考えてもわかりません。
お願いします。この通りです!!!

581 名前:デフォルトの名無しさん mailto:sage [2007/12/05(水) 22:38:20 ]
SSI と SSL は違うよっ

582 名前:デフォルトの名無しさん mailto:sage [2007/12/05(水) 23:18:57 ]
暗号化する価値はほとんど無いな。

その手の奴がパケットの中身を見るまでもなく、
セキュリティソフト(ファイアウォール)が警告を出したりするから
一般人にだってIPとPortが分かるぞ。


583 名前:デフォルトの名無しさん mailto:sage [2007/12/06(木) 00:06:44 ]
というか、誰でもそのCGIを叩いたらIP:PORTがわかるわけで、
通信路を暗号化する価値がないような。

584 名前:デフォルトの名無しさん mailto:sage [2007/12/06(木) 09:21:22 ]
プロクシーサーバを作るとしたら、RFCの何番読めばいいんだっけ?

585 名前:デフォルトの名無しさん mailto:sage [2007/12/06(木) 09:40:04 ]
つ HTTP 1.1

586 名前:デフォルトの名無しさん mailto:sage [2007/12/06(木) 14:27:33 ]
>>584
rfc2616



587 名前:デフォルトの名無しさん mailto:sage [2007/12/07(金) 05:05:39 ]
Cで分割ダウンロードってどう実装すればおk?

わざわざパケット操作まで階層下らなきゃいけないのだろうか…。

588 名前:デフォルトの名無しさん mailto:sage [2007/12/07(金) 05:45:37 ]
WinならwinmmのHttpQueryReauestでも使ってろタコ
それ以外の環境ならsocket一手






[ 続きを読む ] / [ 携帯版 ]

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

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