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

このエントリーをはてなブックマークに追加
1echoちゃん
主にソケットに関しての質疑応答スレッドです。

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

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

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

関連スレ
Java ネットワークプログラミング 【教えて!】
http://pc11.2ch.net/test/read.cgi/tech/1086238859/
2echoちゃん:2008/02/29(金) 21:20:51
3echoちゃん:2008/02/29(金) 21:21:51
図書コーナー:
UNIXネットワークプログラミング〈Vol.1〉ネットワークAPI:ソケットとXTI
 http://www.amazon.co.jp/exec/obidos/ASIN/4894712059/
 そのソースコード
 http://www.unpbook.com/src.html
詳解TCP/IP〈Vol.1〉プロトコル
 http://www.amazon.co.jp/exec/obidos/ASIN/4894713209/
詳解TCP/IP〈Vol.2〉実装
 http://www.amazon.co.jp/exec/obidos/ASIN/4894714957/
詳解TCP/IP〈Vol.3〉トランザクションTCP, HTTP, NNTP, UNIXドメインプロトコル
 http://www.amazon.co.jp/exec/obidos/ASIN/4894716674/
TCP/IPによるネットワーク構築
 〈Vol.1〉原理・プロトコル・アーキテクチャ
  http://www.amazon.co.jp/exec/obidos/ASIN/432012054X/
 〈Vol.3〉クライアント‐サーバプログラミングとアプリケーション
  http://www.amazon.co.jp/exec/obidos/ASIN/4320028007/
  Linux/POSIXソケットバージョン
  http://www.amazon.co.jp/exec/obidos/ASIN/4320120841/
  Windowsソケットバージョン
  http://www.amazon.co.jp/exec/obidos/ASIN/4320029992/
4echoちゃん:2008/02/29(金) 21:22:15
マスタリングTCP/IP RTP編
 http://www.amazon.co.jp/exec/obidos/ASIN/4274065618/
Linuxソケットプログラミング?ネットワークプログラミングにおける実践技法
 http://www.amazon.co.jp/exec/obidos/ASIN/4894714671/
Webプロトコル詳解?HTTP/1.1、Webキャッシング、トラフィック特性分析
 http://www.amazon.co.jp/exec/obidos/ASIN/4894715414/
WinSock2.0プログラミング
 http://www.amazon.co.jp/exec/obidos/ASIN/4797306882/
猫でもわかるネットワークプログラミング
 http://www.amazon.co.jp/exec/obidos/ASIN/4797323604/
IPv6ネットワークプログラミング
 http://www.amazon.co.jp/exec/obidos/ASIN/4756142362/
Visual Basicではじめるネットワークプログラミング超入門
 http://www.amazon.co.jp/exec/obidos/ASIN/4839917523/
5echoちゃん:2008/02/29(金) 21:22:38
URL抜粋:
★規格
RFC 日本語版リスト
 http://www5d.biglobe.ne.jp/~stssk/rfcjlist.html
JPNIC RFC関連リンク集
 http://rfc-jp.nic.ad.jp/link/
RFC Editor
 http://www.rfc-editor.org/
HTMLなRFC (セクションを直に示すのに便利)
 http://www.freesoft.org/CIE/RFC/
RFC 2616 "Hypertext Transfer Protocol -- HTTP/1.1" 日本語訳
 http://www.studyinghttp.net/cgi-bin/rfc.cgi?2616
IANA Well known port numbers
 http://www.iana.org/assignments/port-numbers
6echoちゃん:2008/02/29(金) 21:23:41
★プログラミング
C10K ヘヴィーロードサーバ
 http://www.kegel.com/c10k.html
C10K ヘヴィーロードサーバ(日本語訳)
http://www.hyuki.com/yukiwiki/wiki.cgi?TheC10kProblem
MSDN
 http://msdn.microsoft.com/library/en-us/dnsitehelp/html/tochelp.asp
Raw IP Networking FAQ
 http://www.whitefang.com/rin/
Java で packet capture
 http://netresearch.ics.uci.edu/kfujii/jpcap/doc/
Randomness Recommendations for Security
 http://www.faqs.org/rfcs/rfc1750.html
BoostSocket
 http://www.crystalclearsoftware.com/cgi-bin/boost_wiki/wiki.pl?BoostSocket
The Code Project - Internet & Network programming
 http://www.codeproject.com/internet/
ネットワークプログラミングの基礎知識 (問題ありのサイト?)
 http://X68000.q-e-d.net/~68user/net/
7echoちゃん:2008/02/29(金) 21:27:33
8デフォルトの名無しさん:2008/02/29(金) 23:04:48
keep-aliveの使い方を教えてほしいです。
9デフォルトの名無しさん:2008/02/29(金) 23:08:42
         / ̄\
        |     |
         \_/
          |
       /  ̄  ̄ \
     /  \ /  \
    /   ⌒   ⌒   \      よくぞこのスレを立ててくれた
    |    (__人__)     |      褒美としてオプーナを買う権利をやる
    \    ` ⌒´    /   ☆
    /ヽ、--ー、__,-‐´ \─/
   / >   ヽ▼●▼<\  ||ー、.
  / ヽ、   \ i |。| |/  ヽ (ニ、`ヽ.
 .l   ヽ     l |。| | r-、y `ニ  ノ \
 l     |    |ー─ |  ̄ l   `~ヽ_ノ____
    / ̄ ̄ ̄ ̄ヽ-'ヽ--'  / オプーナ  /|
   .| ̄ ̄ ̄ ̄ ̄ ̄|/|    | ̄ ̄ ̄ ̄ ̄ ̄|/| ______
/ ̄オプーナ/|  ̄|__」/_オプーナ  /| ̄|__,」___    /|
| ̄ ̄ ̄ ̄ ̄|/オプーナ ̄/ ̄ ̄ ̄ ̄|/ オプーナ /|  / .|
| ̄ ̄ ̄ ̄ ̄| ̄ ̄ ̄ ̄ ̄|/l ̄ ̄ ̄ ̄| ̄ ̄ ̄ ̄ ̄|/| /
| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|
10デフォルトの名無しさん:2008/03/01(土) 14:29:19
age
11デフォルトの名無しさん:2008/03/04(火) 13:04:04
Windowsの質問です。

「Winsock Programmers FAQ 2.13 - ネットワークの異常切断はどのようにして検出できますか?」に
あるような状況で、プロトコルに「コマンド/応答」の仕組みがないやり取りをする場合があるときの話です。

クライアントアプリケーションを開発してるのですが、次のような場合どうすればいいのでしょうか?
1. クライアントアプリ(これを作っている)がサーバにconnectする
2. サーバからの要求を受け取り処理結果をsendする

このとき、ネットワークが異常切断していたら、disconnectして再connectすることを求められています。

異常切断しても、ローカルのソケットが生きている場合は、sendは失敗しません。
また、FAQにあるようにecho機能を追加することもできず、既存のプロトコルを変更することも
許されていません。

FAQにあるように、pingで生存確認するしかないんでしょうか?
12デフォルトの名無しさん:2008/03/05(水) 00:36:53
WinSockのconnectについて質問です。

POST https://aaa.bbb.jp/ccc/ddd/eee HTTP/1.1
したいのですが、connectすると
10060「接続済みの呼び出し先が一定の時間を過ぎても正しく応答しなかったため、接続できませんでした。または接続済みのホストが応答しなかったため、確立された接続は失敗しました。」
となってしまいます。

IEのアドレスにhttps://aaa.bbb.jp/ccc/ddd/eeeを入れてやると応答があります(ボディを送っていないのでエラーメッセージしか表示されませんが)。

どうしたらconnectしてPOSTできるようになるでしょうか?
httpsだから特別なことをしなければならんのでしょうか?(その辺がわかりやすいページや本を教えてもらえると助かります。どれもhttpのGETの例ばかりで、httpsやPOSTの例がなくって。)

よろしくお願いします!
13デフォルトの名無しさん:2008/03/05(水) 00:53:29
>>12
httpsなので特別なことをしなきゃならんです。どういうことをするかは
ここにはとても書き切れないぐらい複雑。

よく知らないけど、Windowsだったらwinsockじゃなくてwininetとかいう
ので簡単にできたりしないかな。
14デフォルトの名無しさん:2008/03/05(水) 01:38:35
ありがとう。とりあえずwininet調べてみます!
15デフォルトの名無しさん:2008/03/05(水) 02:07:08
>11
TCPならKeepAliveもあるし、
接続してから一定期間リクエストが来なければ切る手もあるし。
1611:2008/03/05(水) 10:38:10
>>15
やはり、KeepAliveしかないですか・・・。

リクエストのタイムアウトは、通信間隔が非常に長くなる(24時間を越える)場合もあるため、
なかなか厳しいです。

KeepAliveに関して詳しく調べてみます。
17デフォルトの名無しさん:2008/03/05(水) 18:31:23
18デフォルトの名無しさん:2008/03/06(木) 00:44:39
機能としてのサーバが、connectを発行するという時点で
かなりオhルかんね。
19デフォルトの名無しさん:2008/03/07(金) 02:09:24
Linux UDPでマルチキャストの勉強をしてるのですが、
recvfrom()中にifdownでネットワーク断が発生した場合、
どうやって検知すればよいでしょう?
tcpdumpではifdown直後にNetwork is down.と表示されるので
何からの方法で検知できるとは思うのですが、、
20デフォルトの名無しさん:2008/03/09(日) 02:31:43
sendで"0123456789"という文字列を送りrecvで受信した際に

"012456789"
  ↑3が抜けてる

というような事が起こりえますか?
21デフォルトの名無しさん:2008/03/09(日) 04:53:29
>>20
規格上は "012" "3" "456789" という IP パケットに分
割されて "3" のパケットが抜けることがあるかもしれ
ないが、一つのパケットに再構成出来ないので UDP で
はパケットロストでアプリケーションには届かないし、
TCP ならパケット再送で正しいパケットが届く。
22デフォルトの名無しさん:2008/03/09(日) 05:19:36
>>21
レスありがとうございます
勉強になります
23デフォルトの名無しさん:2008/03/09(日) 17:28:59
もし送信側の UDP ライブラリが何らかの理由で "012"
"3" "4567890" という具合いに三つのパケットに分割し
て、なおかつ "3" のパケットが抜ければそういう状態
になるかも知れない。

TCP 使ってればまず問題ない。
24デフォルトの名無しさん:2008/03/09(日) 22:29:59
UDPレベルで分割送出するならともかく、
それ以下のレイヤで分割されたなら、全部
届くか届かないかでないの。
25デフォルトの名無しさん:2008/03/09(日) 22:37:11
>>24
> UDPレベルで分割送出するならともかく、

これが > 23 で

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

これが > 21 のつもりだったんだけど、何か変?
26デフォルトの名無しさん:2008/03/09(日) 22:52:10
UDPはそういう分割をしないんじゃなかったっけ?
27デフォルトの名無しさん:2008/03/09(日) 23:53:28
>>26
あー、ユーザーランドインタフェイス内部でのつもりだった。
もちろん、それが特に書かれてるのが TCP の RFC
なのはわかってるけど >>20 に環境が書かれてないんだもん。
28デフォルトの名無しさん:2008/03/10(月) 22:47:33
>>27
お前、シッタカはタイガイニシル
29デフォルトの名無しさん:2008/03/11(火) 00:33:03
SMTPが到達を保証できない理由を
分かり易く解説したサイトってない?
30デフォルトの名無しさん:2008/03/11(火) 00:46:35
>>29
・SMTPを使ったメールはインターネット上のあらゆるサーバを経由して転送される
・あらゆるサーバとは、自分のあずかり知らないサーバを経由する可能性がある
・あずかり知らないサーバを経由するということは、そのあずかり知らないサーバの管理者
 がどうとでもすることができる

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

http://www.ecom.jp/qecom/seika/
32デフォルトの名無しさん:2008/03/11(火) 01:13:42
問題の文書はコレで、

第5章 通信基盤ガイドライン
http://www.ecom.jp/qecom/seika/naiyou/p2_tradewg/new5.pdf

>SMTP では、メールが相手に確実に届く保証がないこ
>とやデータの順次性を必ずしも保てないといったデータ
>送受信の確実性の問題がある。
33デフォルトの名無しさん:2008/03/11(火) 01:16:33
補足:

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

>なお、データの送受信の確実性の確保に関しては、
>通信レベルだけの対応では不十分であり、
>アプリケーションレベルでの対応が必要である。
34デフォルトの名無しさん:2008/03/11(火) 01:26:35
確実の定義次第じゃん・・・
35デフォルトの名無しさん:2008/03/11(火) 01:35:22
そういうミもフタもないハナシなのかなぁ
36デフォルトの名無しさん:2008/03/11(火) 01:38:38
>>32
当たり前のことしか書いてない。まぁメールなんて使うなってこった。
37デフォルトの名無しさん:2008/03/11(火) 01:46:10
ちなみにいまのインターネットだって、送信したデータが*確実に*相手に
届くことなんて保証してないぞ。TCPは可能な限りの努力をするが、
届かないときはどうしようもない。

*確実*だけのキーワードだと、ダウンタイムとか冗長性とか、
障害耐性とか、コアとなるハブの存在だとか、クラスター性だとか
・・・・。
38デフォルトの名無しさん:2008/03/12(水) 00:26:14
TCPは、届かないなら届かなかった事が判るでしょ
39デフォルトの名無しさん:2008/03/12(水) 00:35:07
企業や学校はメールゲートウェイとかあって
メールサーバー本体と直接通信してなかったりするから
TCPソケットでエラーが出なくても届いてない可能性があるかと。

直通のftpメールなら確実だと思うけど。
40デフォルトの名無しさん:2008/03/12(水) 12:36:31
つうかレイヤーを切り分けて考えろよ
41デフォルトの名無しさん:2008/03/12(水) 21:52:33
相手のメールサーバから「受信した」とackが来ても、
その直後にディスクがクラッシュするかもしれないからな
確実とはいえない
42デフォルトの名無しさん:2008/03/12(水) 22:06:50
なにいってんだこいつ
43デフォルトの名無しさん:2008/03/13(木) 04:49:20
>31が「エスパーキボンヌ」にしか見えないのは気のせい?

SMTPプロトコルの欠点だけ論うなら、
 bounceが存在する
  ->エラー通知が10年後に届いても文句言えない
   ->確実性✕
なんて部分があるな。
44デフォルトの名無しさん:2008/03/19(水) 23:41:34
サーバ側KEEP-ALIVEの一回の接続で処理出来るリクエスト数が30で
一つのページに使われているインラインコンテンツが30以上あった場合
これらをダウンロードするためには
もう一回接続する必要がありますか?
45デフォルトの名無しさん:2008/03/19(水) 23:54:54
そりゃそうだろう
46デフォルトの名無しさん:2008/03/22(土) 21:06:10
どんなネットワークプログラム作ったらいいかわかりません
どうしたらいいですか?
47デフォルトの名無しさん:2008/03/22(土) 21:24:16
>>46
特に何か作る必要がないのなら、別に何も作らなくていいのでは?
48デフォルトの名無しさん:2008/03/22(土) 22:16:48
>>46
文字列を入力したらもう一方の端末でその文字列を表示するというのをソケットを使って作成しましょう
49デフォルトの名無しさん:2008/03/26(水) 09:51:42
組み込みlinux機器向けにC言語ベースの簡易httpクライアントを作成しています。
ヘッダの読み取りに、1行ずつストリームから取得するという処理を
書いているのですが、1文字ずつrecvして、\r→\nのパターンが
来るまで繰り返す、という方法はありなんでしょうか?
他に何か良い方法はあるでしょうか。
50デフォルトの名無しさん:2008/03/26(水) 10:19:15
ありだと思うけど、\r\nを返さないサーバもあるから気を付けてね。
51デフォルトの名無しさん:2008/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デフォルトの名無しさん:2008/03/26(水) 10:33:06
>>50
ありがとうございます。
自分でバッファリングしてくこと考えたら
頭痛くなってきたので。
\rはオプション扱いに致します。
53デフォルトの名無しさん:2008/03/27(木) 12:31:48
初心者向けの本は何を買ったらいいんですか?
54デフォルトの名無しさん:2008/03/27(木) 16:03:57
NAT越えって、まだ個人がおいそれと実現できる領域じゃないのかな?
ゲーム作ってて、NAT越えできたらなぁとよく思うんだけど・・・
55デフォルトの名無しさん:2008/03/27(木) 21:09:58
>>54
TCPで接続張ってしまえば、自由に通信できるよ。最初の
接続元はNATの内側から出ないといけないけど。

ゲームなら別にそれでもいいでしょ。
56デフォルトの名無しさん:2008/03/27(木) 22:46:39
>>1
まだftpか。httpまであと何年かかるかな。
57デフォルトの名無しさん:2008/03/28(金) 08:56:49
>>55
>最初の接続元はNATの内側から出ないといけないけど。

意味ねーじゃんw
58デフォルトの名無しさん:2008/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デフォルトの名無しさん:2008/03/28(金) 10:53:25
UDP Hole Punching ってのもあったような
60デフォルトの名無しさん:2008/03/28(金) 11:05:36
UDP Hole Punchingは「あまりセキュリティーに力を入れていないルータ」しか乗り越えられないようなのと
具体的ソースを提示しているサイトが見当たらないことが
TCPをUDPに切り替える足かせになっているような気がします。

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

他にも何か情報があれば嬉しいです。
NAT越えは面白い分野ですが、ム板では盛り上がっていないようなので…
61デフォルトの名無しさん:2008/03/28(金) 11:16:39
初心者も簡単にNAPT設定ができれば、たいした問題にはならんのに
なんで用語とか各メーカーばらばらなんだか・・
62デフォルトの名無しさん:2008/03/28(金) 11:35:02
今となってはUPnPでよくね?
UPnP対応ルータじゃないルータって、いまどき売ってるかね?
63デフォルトの名無しさん:2008/03/28(金) 13:34:36
>>62
だね。きちんと整備されたライブラリ使えば、socketでlistenするのと、
UPnPでポート割り当てるの同感覚。特定のポート番号使えるのが、NAT内の1台だけだって制限があるけど。
64デフォルトの名無しさん:2008/03/28(金) 14:26:22
54です

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

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

余談ですが、今たまたまGoogleで色々調べていたら、ここの前スレで同じサイトを参考に組もうとしている人を発見しましたw
65デフォルトの名無しさん:2008/03/28(金) 15:30:45
UPnPもSTUNもルータに激しく依存するから結局繋がらない場合は繋がらないけどな。
UPnPも最近になってやっと危険性が認知されてデフォでoffになったりしてるし。
http://jvn.jp/cert/JVNVU%23347812/
http://internet.watch.impress.co.jp/ cda/news/2008/01/17/18149.html
66デフォルトの名無しさん:2008/03/28(金) 16:47:43
Flashの通信機能を遮断する方法がわからないんだよなー
67デフォルトの名無しさん:2008/03/28(金) 18:25:28
>>60
RFC3489の"5. NAT Variations"あたりを見てみたら?
UDP Hole PunchingできるのはFull Coneだけでしょう.
たしかI-Dのどれかに,どの機種がFull Coneかのリストが載っていたような

>>65
TURNを作れば? :-)
68デフォルトの名無しさん:2008/03/28(金) 22:28:43
NGN普及して、IPv6デフォルトになればNAPTなぞ過去の技術になる。
69デフォルトの名無しさん:2008/03/29(土) 07:01:44
>>68
NAPTは遺物となってもFWは残る
70デフォルトの名無しさん:2008/03/31(月) 04:51:24
かなり初歩的なことをお聞きしますが、プロキシサーバーというものは送られてきたメッセージを直接ホストに送信するだけでよいのでしょうか?
71デフォルトの名無しさん:2008/03/31(月) 10:23:37
駄目
72デフォルトの名無しさん:2008/03/31(月) 12:14:16
>>70
proxy serverといってもいろんな種類があるが何のプロトコルのproxy?
7370:2008/03/31(月) 13:11:11
>>72
HTTPプロトコルです
74デフォルトの名無しさん:2008/03/31(月) 13:22:48
>>73
代表的なのは、
・ メソッドに書かれてる URL から正しくホストに接続する
http://www.example.com/path1/path2.html みたいな URL をホスト接続時は /path1/path2.html に変換する
・ プロキシ特有の環境変数を付加する (必要な場合)
・ CONNECT メソッドを正しく解釈する (CONNECT 以降はそのままデータの送受信を行う)
辺りかな。 RFC などのドキュメントを見るのが一番手っ取り早いとは思うが。
75デフォルトの名無しさん:2008/03/31(月) 13:27:01
>>73
http proxyはちゃんと作るとかなり複雑だが、少くともリクエスト内容は書き換えなきゃいけないだろ。
あとは、HTTP/1.0/1.1の場合分けとかKeepAliveとかpipelineとかchunkとか100 Continueとか、
真面目にやりだすと結構大変。

とりあえずRFC2616嫁
7670:2008/03/31(月) 13:35:09
>>74-75
レスありがとうございます
RFCのドキュメントを読んでみることにします
77デフォルトの名無しさん:2008/03/31(月) 13:37:56
まぁ、読んでもわかんないと思うけどね・・・
78デフォルトの名無しさん:2008/03/31(月) 13:39:24
>>77
そないなことあらへんで。
79デフォルトの名無しさん:2008/03/31(月) 13:44:17
内容を理解できないということじゃなくて、proxy serverの構成要件とは何かがわかんないだろうって意味
80デフォルトの名無しさん:2008/03/31(月) 13:47:37
>>79
あ、なるほど。
81fxで裁判中。教えて:2008/04/03(木) 08:29:02
外国為替証拠金取引会社のアトランティックトレードと裁判になりました。

裁判の内容をここに記してみました
システム障害等でくわしいかた、是非とも情報をお待ちしております。
よろしくお願いします。
  http://members3.jcom.home.ne.jp/chaochu/
82デフォルトの名無しさん: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デフォルトの名無しさん:2008/04/12(土) 11:35:23
日本語でおk
86デフォルトの名無しさん: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デフォルトの名無しさん:2008/04/12(土) 17:07:23
投げてみて、その反応をさぐるしかない。
90デフォルトの名無しさん:2008/04/12(土) 18:39:30
>>89
投げてみました。
ApacheではKEEPALIVEがOffにされていた場合
Connectionがcloseとなっています。
closeであるかないかで判定しようと思うのですが、
どうでしょうか?
91デフォルトの名無しさん:2008/04/12(土) 18:41:43
HTTP かよ。
Connection: close ならエンティティボディ送信後に切断だよ。
RFC 嫁。persistent connection でググレ
92デフォルトの名無しさん:2008/04/12(土) 21:35:08
Connection(小文字)がCONNECTION(大文字)で返ってくるサーバはありますか?
93デフォルトの名無しさん:2008/04/12(土) 21:40:22
いいからRFC読めよ
94デフォルトの名無しさん:2008/04/12(土) 21:44:06
>>93
ウラル貼ってくれ
95デフォルトの名無しさん:2008/04/12(土) 21:54:17
>>93
URL貼って下さい
96デフォルトの名無しさん:2008/04/12(土) 21:56:35
97デフォルトの名無しさん:2008/04/12(土) 21:59:34
>>96
いや、
RFCの何番?
98デフォルトの名無しさん:2008/04/12(土) 22:03:28
だからみりゃわかるだろ低脳。
そもそも>>1に「関連リンク云々」書いてあること読めないか?
99デフォルトの名無しさん:2008/04/12(土) 22:16:56
>>98
いや、
だからHTTPヘッダが大文字で返ってくるサーバとかあるのか、
って聞いてんだよ
100デフォルトの名無しさん:2008/04/12(土) 22:21:10
あるだろうなぁ。
101デフォルトの名無しさん:2008/04/12(土) 22:26:46
>>100
ありがとうございます。
102デフォルトの名無しさん:2008/04/12(土) 22:57:12
規定してなきゃ存在するとみなすのが当然じゃん。
その規定が書いてあるのがRFCなんだけど。
103デフォルトの名無しさん:2008/04/12(土) 23:05:57
>>102
素で意味がわからん。
104デフォルトの名無しさん:2008/04/12(土) 23:30:50
>>102
規定してあるよ。おまいがよく読めw
105デフォルトの名無しさん:2008/04/13(日) 00:09:31
何もないと思うが。
106デフォルトの名無しさん: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デフォルトの名無しさん:2008/04/13(日) 01:00:51
変な流れになってるなぁ。
109デフォルトの名無しさん:2008/04/13(日) 09:39:25
どうみても同一人物だろ・・・
言い返されたからってムキになるなよ(;´Д`)
110デフォルトの名無しさん:2008/04/13(日) 10:10:40
迷子のキムチさん
出て行ってください
111デフォルトの名無しさん:2008/04/19(土) 21:15:07
Keep-alive使ったサンプルコードってあります?
Winsockで
112デフォルトの名無しさん:2008/04/19(土) 21:46:27
一週間ぶりですね
113デフォルトの名無しさん:2008/04/19(土) 22:11:14
Linux用に作成したソケット通信アプリのテストにtcpdumpを使いたいのですが
アプリが送受信しているデータの表示方法がなかなか分かりません。

tcpdump -s 1600 -X tcp port 1024

と打った上で、アプリに送受信させるとデータが含まれたパケットの中身が
バイナリで表示されますが、アプリが送受信しているデータだけ表示させる
方法はないでしょうか?
どなたか教えてください。よろしくおねがいいたします。
114デフォルトの名無しさん:2008/04/19(土) 23:17:37
>>113
つwireshark
115デフォルトの名無しさん:2008/04/19(土) 23:52:33
X環境入れてないのです(;_;)
116デフォルトの名無しさん:2008/04/20(日) 03:30:50
>>112
……(´・ω・`)
117デフォルトの名無しさん:2008/04/22(火) 14:58:59
最近ネットプログラミングはじめたのですが、
よくサーバはクライアントのパケットを信用してはいけないと書かれていて、
逆にクライアントはサーバのパケットを信用して良いのでしょうか?
118デフォルトの名無しさん:2008/04/22(火) 15:21:33
クライアントが、信用できないサーバ (不特定多数のサーバ) と通信する可能性があるなら、信用してはいけない。
信用できるサーバとしか通信しないなら信用してもいいかもしれないが、
信用できないという前提で組む方が、サーバに何かバグがあったり、
通信の改ざんを受けたり、なりすましサーバに当たったりしたときに、安全でいいと思うよ。
119デフォルトの名無しさん:2008/04/22(火) 17:24:53
>>118
なるほど、ありがとうございます
120デフォルトの名無しさん:2008/04/22(火) 17:28:58
送るときは厳格に、受ける時は寛容に、はネットワークプログラミングの基本。
121デフォルトの名無しさん:2008/04/22(火) 22:03:41
受けるときも厳格に、が基本だよ
122デフォルトの名無しさん:2008/04/22(火) 22:30:16
読解力が試されます
123デフォルトの名無しさん:2008/04/23(水) 06:22:28
プロセス間通信用にソケットを使う場合、
どういう取り決めにしてますか?
自分はhttpと同じで、行単位で空改行までを
送受信単位にして、必要ならオプションの
バイナリデータが続く、という感じにしてますが。
いきなりバイナリでやりとりするのは
データ構造決めるのが面倒なんで。
何か既成のモデルがあったらいいんですが。
124デフォルトの名無しさん:2008/04/23(水) 09:41:10
xml-rpcとか?
125デフォルトの名無しさん:2008/04/23(水) 10:24:29
シンプルなバイナリなら TLV
任意長バイナリは GIF っぽくサブブロック化
126デフォルトの名無しさん:2008/04/23(水) 15:46:48
>>121
受けるときは寛容に、が基本。

http://tools.ietf.org/html/rfc791
> In general, an implementation must be
> conservative in its sending behavior, and
> liberal in its receiving behavior.
127デフォルトの名無しさん:2008/04/23(水) 16:09:50
>>123
俺の長い組み込み経験からのアドバイス。

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

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

3.1や2を実現するために、たとえバイナリでもエス
 ケープ文字を用意する。俺が良く使うのは SLIP のエ
 スケープ(昔仕事で使ったから)。下位レイヤでデー
 タやコマンドの開始/終了などを用意する。読む側の
 下位レイヤで「開始」が来たら読んでる途中のものを
 全部破棄して例外を投げるように(初期状態 read で
 catch するように)すると、通信相手のバグその他で
 変な状態に陥っても元に戻ることが保証出来る。
128デフォルトの名無しさん:2008/04/23(水) 16:23:06
>>127
あんまり殺気たてんでくれ。
俺の20プロダクト中16回コロされてる事になる。
129デフォルトの名無しさん:2008/04/23(水) 18:21:40
俺はパート長は入れるね
130デフォルトの名無しさん:2008/04/23(水) 18:40:40
任意長のフィールドは 1 バイトのブロック長と続く最大 256 バイトのデータブロック。ブロック長 0 が終端。
GIF と PNG のフォーマットは通信用データ構造のお勉強に最適。
131デフォルトの名無しさん:2008/04/23(水) 20:35:39
>>127
>2.最初に「バイト長」とか入れない。

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

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

データそろえて送信したところで、ネットワーク上で何バイトずつ
受信側に届くかなんて何の保証もないわけで。そろえて送る
理由がまったくない。
132デフォルトの名無しさん:2008/04/23(水) 20:46:19
>>131
127 じゃないけど、何を言ってるか分からないのは君だけだと思うよ。
133デフォルトの名無しさん:2008/04/23(水) 22:27:05
俺もわからん。RAW SOCKETの話?
データ長は,送るものが先に決まるならプロトコルとしてはありかもしれないが、
エスケープ文字を入れて区切りの失敗を見つけるぐらいならソケット閉じてしまったほうが早いのでは?
むしろUDPで自分で順番を制御するとか。
134デフォルトの名無しさん:2008/04/23(水) 22:38:11
ヒント:組み込み屋さん
135デフォルトの名無しさん:2008/04/23(水) 22:53:03
組み込みでハードウェアがらみな制限付きで、バッファの制限もついてるからかな?
DLNAとかではHTTPベースでchunked encodingとかあったが、あれは、ストリーム送信用に送信開始時にデータ長が不定だったからだが。
ほかもそんなことが多いのかな?
136デフォルトの名無しさん:2008/04/23(水) 23:09:21
内容検証用の MD5 ハッシュも全体を走査してみないと決定できないし。そういう情報を先頭に
持ってこられると、XSL の処理結果や BLOB を垂れ流したい場合は一度ファイルか何かに
落とさなきゃいけないからかなり不便。
137デフォルトの名無しさん: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デフォルトの名無しさん:2008/04/24(木) 00:04:51
別に組み込みに限った話じゃないと思うが、システムの
時間ボトルネックが何処かを考えれば自明。

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

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

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

送信時は送信しながら計算して最後に付加すればいいん
だけど、受信は受信しながらオブジェクト作っても合致
しないときに破棄する必要があるんで面倒なんだよな。
140デフォルトの名無しさん:2008/04/24(木) 00:09:05
正常ではないな。
プロキシがサーバとの接続を維持する気がないなら Keep-Alive でリクエスト出したらいかん。
多分プロキシ実装が Persistent Connection に対応していないし、リクエストヘッダも何も考えず
素通りさせてるだけだと思うが。
141デフォルトの名無しさん:2008/04/24(木) 00:13:59
受信時は一定容量ごとのMD5でいいんだが、それよりファイル保存時にディスクアクセスを早くしようとして、
受信サイズの最後尾までファイルを拡張してから受信を開始すると途中で中断したときにある個所から後ろがごみデータが充填するんだが、
ファイルIOで一定サイズ移行のデータを削除してファイルサイズを小さくするって言う命令が無いために、ファイルを拡張すること自体が駄目何だよねぇ。
どこかに有効なファイルサイズを別に保存すればいいんだが、管理ファイルが散乱するので避けたいのだが、いい方法は無いものか。
142デフォルトの名無しさん:2008/04/24(木) 00:16:39
>>140ありがとうございます
ただ、PROXYは定番どころのSQUIDをデフォルトで
使用しています。 レスポンスヘッダーがおかしければ
クライアントにデーターが届かないはずなんですが・・・
困ってます。
143デフォルトの名無しさん:2008/04/24(木) 00:40:33
>>141
?
PC 程度以上の OS のファイルシステムなら (ANSI 標準じゃないにしても) 大抵用意されてるんじゃないか?
http://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デフォルトの名無しさん:2008/04/24(木) 00:44:52
146デフォルトの名無しさん:2008/04/24(木) 00:50:11
>>144
スレ違いだけど
君が参考にしてるものは信用しないほうがいい
147デフォルトの名無しさん:2008/04/24(木) 00:58:41
>>143
たしかにSquidが吐き出すヘッダーは 1.0になっています
調べてみます。
148デフォルトの名無しさん:2008/04/24(木) 02:08:49
非同期に双方向でイベント通信するためのプロトコルって何かある?
できれば 1:1 じゃなくて中継サーバかました n:n で使える奴。
149デフォルトの名無しさん:2008/04/24(木) 02:38:39
>>148
TCP
150デフォルトの名無しさん:2008/04/24(木) 03:12:13
>>149
もう一層上で。
151デフォルトの名無しさん:2008/04/24(木) 03:48:09
>>150
2ちゃん
152デフォルトの名無しさん:2008/04/24(木) 05:17:26
SIP
153142:2008/04/24(木) 05:33:32
自己レスです
公開PROXYでテストしたところうまくいきました
また、ぐぐったところ SQUIDはHTTP/1.1をHTTP1.0に
勝手に変換する事がわかりました
(ヘッダーは別としてかといってPROXY側から切断するので???ですが)
これ以降は板違いですので移動します m(。。)m
154デフォルトの名無しさん:2008/04/24(木) 07:10:52
>>143
ありがとう。知らなかったよorz
少しぐぐって、winだと_chsizeや下のサイトがあった。
http://www.void.in/wiki/PortableFtruncate

ANSIの関数全て読んだのは93年だったがそのころからあったのかな・・・・
155デフォルトの名無しさん:2008/04/24(木) 23:26:33
winsock2でパケットキャプチャモジュールを作成したのですが、
プロミスキャスモードにしないと何もパケットを受信しません。
自分宛のパケットだけキャプチャしたいのでプロミスキャスモードは使用したくないのですが
プロミスキャスにしなくてもパケットを受信する事は出来るのでしょうか?
156デフォルトの名無しさん:2008/04/25(金) 23:31:22
バイト長いれるなって話がまったくわからん。
カイヤでstartとか送って、endが届くまでバイナリが続くとかにすればいいの?
157デフォルトの名無しさん:2008/04/25(金) 23:32:45
s/カイヤ/下位レイヤー/;
158デフォルトの名無しさん:2008/04/25(金) 23:47:02
下位の部分を作るときに、アプリ(上位)側が全部を用意し終るまで出力を開始できないってことだろう。

例えばディスクへアクセスするドライバを書くときに、
ファイルのサイズが判明するまでHDDに書き込めない(領域を確保出来ない)ようだとやりにくくて仕方が無い、
というような話だと思う。たぶん。
159デフォルトの名無しさん:2008/04/25(金) 23:49:35
あ、例えが悪いな。
HDDのドライバじゃなくてファイルシステムの造りの方が適切だな。
160デフォルトの名無しさん:2008/04/26(土) 00:24:08
>>156-157
尻にしかれた某芸能人の事かとオモタ
161デフォルトの名無しさん:2008/04/26(土) 17:04:22
>>130
> GIF と PNG のフォーマットは通信用データ構造のお勉強に最適。

画像フォーマットはツールが知らない種類のチャンクを読み飛ばせるように
バイト長が入ってる。通信の為じゃない。
162デフォルトの名無しさん:2008/04/26(土) 17:07:24
>>161
インタレースも知らないのか?
163デフォルトの名無しさん:2008/04/26(土) 17:07:33
>>161
ま、確かにそうなんだけど、GIFはCompuServe由来だし、PNGはPortable Network Graphicsだから、通信用である事も意識していたと思うよ。
164デフォルトの名無しさん:2008/04/27(日) 14:03:53
>>161
思いっきり局部しか見てませんて感じのレスだな。
165デフォルトの名無しさん:2008/04/28(月) 10:45:56
OSPFにしろ、BGPにしろ、RSVPにしろ、そもそもIPからしてペイロード長先付けだろ。
データがそろわないと、長さが書けないから送信できず、バッファが要る、ってのは、
可変長データならチャンク化すれば済むこと。
固定長データなら、バイト列にエンコーディングするレイヤよりも上のレイヤが先にデータ長を宣言すれば済む。
166デフォルトの名無しさん:2008/04/28(月) 10:47:38
長い組み込み経験からのアドバイスなんだぜ?

素直に聞けよ。
167デフォルトの名無しさん:2008/04/28(月) 14:00:03
臨機応変
適材適所
一長一短
168デフォルトの名無しさん:2008/05/06(火) 07:23:41
IP のパケットサイズって最大 64kB だと思うんだけど、イーサなんかの
MTU の 1,500B とかっていうサイズは、IP パケットがさらにその下のレイヤーで
分割されているということですかね?
169デフォルトの名無しさん:2008/05/06(火) 09:36:31
IP fragmentation でヤフれ
170デフォルトの名無しさん:2008/05/06(火) 14:49:23
IPスタックが、下層から最大送出可能な
パケットサイズをもらってきておいて、
IPパケットを送出する際に分割するような
171デフォルトの名無しさん:2008/05/06(火) 15:32:52
>IP のパケットサイズって最大 64kB
これも実装依存だそうだ
172デフォルトの名無しさん:2008/05/06(火) 17:14:11
ヘッダの長さフィールドが16bitってだけでそ
173デフォルトの名無しさん:2008/05/07(水) 23:22:32
selectで
PULLHUP相当のエラーって感知できますか?
大人しくpull()った方がいい?
174デフォルトの名無しさん:2008/05/08(木) 04:11:09
pullじゃなくてpollでggr
175デフォルトの名無しさん:2008/05/08(木) 22:18:04
select失敗した場合ってFD_SETって
どうやって処理すればいいの?

単純にクリアするだけでおk?
176デフォルトの名無しさん:2008/05/09(金) 04:03:10
おれはそういうの気にしないために、
fdsetは呼ぶ前にコピーして、そっちをselectに掛けてる。
コピーに変更があったら手動でオリジナルを更新。
何かのサンプルの真似だけど。
177デフォルトの名無しさん:2008/05/09(金) 04:08:31
sshでログインしてるとき小さいファイルを向こう側へもっていきたいんだけど
わざわざFTPとか起動するの面倒なときっていい方法ありますか?
178デフォルトの名無しさん:2008/05/09(金) 04:20:04
ssh ファイル転送
でggr
179デフォルトの名無しさん:2008/05/09(金) 05:04:50
こっち側がwindowsの場合はどうすればよいでしょうか?
たとえばpoderosaを使ってる場合。
180デフォルトの名無しさん:2008/05/09(金) 11:39:53
scp
181782:2008/05/10(土) 21:29:28
linux版より誘導されてきました
よろしくオナガイシマス
linuxでの実装、通信関連の実装の経験の無い未熟ものです
http://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デフォルトの名無しさん:2008/05/10(土) 21:31:40

名前 782
スマン間違えてシマイマスタ
183デフォルトの名無しさん:2008/05/10(土) 22:55:30
プログラムに2バイト文字使ってる?
184デフォルトの名無しさん:2008/05/10(土) 23:04:14
>>183
コメント文で2バイト文字を使っていますが
ソースコードでは使っていません
185デフォルトの名無しさん:2008/05/10(土) 23:09:43
>>181
dstAddrSize が socklen_t ではないっていう型エラーでは? int で宣言してない?
186デフォルトの名無しさん: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デフォルトの名無しさん:2008/05/10(土) 23:55:06
-lsocket 不要
188デフォルトの名無しさん:2008/05/11(日) 00:01:30
>>187
どうも、そのようですね
HPが古いのでコンパイラのバージョンが違うから、こんなにエラーが出たのだと思います
g++ tcp_serv.c -o tcp_sev
でコンパイルに成功しましたが
Waiting for connection ...
のままなのですが、これで成功なのでしょうか?
クライアントと接続したらこのメッセージは消えるものなのかな・・・・?
189デフォルトの名無しさん:2008/05/11(日) 00:03:43
スマソ
gcc tcp_serv.c -o tcp_sev
でした
190デフォルトの名無しさん:2008/05/11(日) 00:23:28
クライアント側も作成して 127.0.0.1 で接続するのだ。
191デフォルトの名無しさん: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デフォルトの名無しさん:2008/05/11(日) 10:29:13
>>191
select() が使えませんか?
193デフォルトの名無しさん:2008/05/11(日) 10:43:50
>>192thx
>>191です
なるほど、キー入力の前に接続方法を、再考する必要がありますね
複数のclientが、ぶらさがるサーバの場合、acceptシステムコールや、recvシステムコールをコールして実行してして
一旦、接続行われるとsocketをcloseするまでは、他からのリクエストが受けれなくなりますね・・・・orz
そこでselect()システムコールの出番ですね、ちょいと調べてみます。
194デフォルトの名無しさん:2008/05/11(日) 10:48:30
ブロックするのがいやならソケットをノンブロックにしても良い。
MFCの糞ソケットクラス使ってるとこの辺の感覚が分からんかも。
195デフォルトの名無しさん: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になっています。
手順がどこか悪いのでしょうか?
196195: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デフォルトの名無しさん:2008/05/25(日) 10:19:33
IPv6のサーバーサイドのプログラムが見つかりやせん
200デフォルトの名無しさん:2008/05/25(日) 10:21:43
>>197
UDPにする
201デフォルトの名無しさん:2008/05/25(日) 10:49:35
>>197
ノンブロッキングにする
202デフォルトの名無しさん:2008/05/25(日) 13:25:46
その問題はノンブロックにして解決するの?
203デフォルトの名無しさん:2008/05/25(日) 13:28:48
マルチキャスト
204デフォルトの名無しさん:2008/05/25(日) 14:40:10
俺は2000クライアントにマルチキャストするプログラム書いたが
そんなに気になるラグはなかったぞ。多くても150msくらいの遅延しかない。
プログラム的に問題あるんじゃない?TCPでもsendにそんなに時間かかるって事はないと思うけど・・・
送信するデータのサイズにもよるけどね。
205デフォルトの名無しさん:2008/05/25(日) 14:51:07
単純な foreach (clients) { client->send(data); } のとき
一匹でも激遅クライアントがいると
そこでsendが糞詰まりを起こして全体が遅くなる
206デフォルトの名無しさん:2008/05/25(日) 15:06:04
え、send()って、相手に到着しないと抜けないの?
207デフォルトの名無しさん:2008/05/25(日) 15:56:12
tcp送信バッファが満杯になればblockする
208デフォルトの名無しさん:2008/05/25(日) 20:13:36
なんでn回ユニキャストする発想になるのか。
209デフォルトの名無しさん:2008/05/25(日) 20:29:59
そりゃmulticast/boardcastを知らないからだろjk
210デフォルトの名無しさん:2008/05/25(日) 23:18:00
boardcastは俺も知らない。
211デフォルトの名無しさん:2008/05/26(月) 00:33:39
TCPはmulticastできないみたいです。。。
for文じゃなくてマルチスレッドにするといいのかな?
どうも同じような気がするのですが、一応やってみます。
212デフォルトの名無しさん:2008/05/26(月) 02:11:21
くだんのスレがアフォなのはどうでもいいが、150ms遅延「しかない」
とかもう救いようがないな。
213デフォルトの名無しさん:2008/05/26(月) 03:31:04
キューを実装して非同期sendすればプログラムが重くなるのは解消される
214デフォルトの名無しさん:2008/05/26(月) 10:34:34
あれ、>>197には
>TCP/IP非同期
って書いてあるやん

150人に一斉同報するのってフツーに重いんじゃないの
215デフォルトの名無しさん:2008/05/26(月) 10:38:07
ircdってどんな実装になってるんだろ
216デフォルトの名無しさん:2008/05/27(火) 02:32:22
>>212
環境を書いてないからなんとも言えんがな。
217デフォルトの名無しさん:2008/05/27(火) 02:57:49
質問者が馬鹿だったのは、二チャンネルで質問したことだろな。
218デフォルトの名無しさん:2008/05/27(火) 09:04:41
197じゃないけど、似たようなプログラムでクライアントにダイヤルアップレベルの細い回線が混ざってて、
かつ数百キロバイトのデータが必要になる場合があるときは
・単一スレッドから非ブロッキングモードで送信
・接続毎にキューを持ったスレッドを作成してブロッキングモードで送信
どちらがいいいのでしょうか?
接続クライアント数は10程度です。
219デフォルトの名無しさん:2008/05/27(火) 09:33:28
10程度だったらコードの見易さからいってスレッド作るのはアリかな
そうだとしてもブロッキングにはしないなあ、中断しにくいから
220デフォルトの名無しさん:2008/05/28(水) 19:59:52
ネットワークとは直接関係ないのですが。。。
ネットゲームの延長の質問ということでご了承ください><
直接アプリのアイコンをダブルクリックで起動じゃなくって、
ハンゲームとかのHPみたいにゲームスタートみたいなボタン(リンク)を
クリックするとアプリが起動するのありますよね。
HPからユーザー側のアプリが起動できちゃうと悪さができちゃうからムリ
みたいな事も聞いたことあるんだけど。。。
ああいうのってどうやってるのでしょうか?
221デフォルトの名無しさん:2008/05/28(水) 21:26:27
>>220
ためしに登録してみたが・・・
ActiveXコントロールのインストールが必要ですって言われたぞ
222デフォルトの名無しさん:2008/05/28(水) 21:27:07
署名付きActiveXだとおもうが。

#厳密には署名がなくても不可能ではないけど、
#そのセキュリティを緩めるのは致命的な筈
223デフォルトの名無しさん:2008/05/28(水) 21:27:45
ActiveXコントロールってなんですか?
224デフォルトの名無しさん:2008/05/28(水) 21:28:47
>>223
ググレカス
225デフォルトの名無しさん:2008/05/28(水) 21:34:28
署名付きアプレットを認証局から証明書を発行してもらう必要があるみたいですね。
多分有料ですよね。
でも大体わかりました、ありがとうございます!
226デフォルトの名無しさん:2008/05/28(水) 21:36:59
ハウス ググレカスー
227デフォルトの名無しさん:2008/05/29(木) 20:55:00
おいしそうなおやつがあったので、置いておきますね


東京藝術大学音楽学部 羽目鳥祭り開催中
http://school7.2ch.net/test/read.cgi/musicology/1211727581/
228デフォルトの名無しさん:2008/05/30(金) 05:21:46
ActiveXコントロールは
ユーザーがインストールを許可する事でインストールされる。
インストールしなければ動かない。
実体はDLLかEXEなので起動されれば何でもできてしまう。
よくスパイウェアとして使われる。
よほどの馬鹿でなければ
信用あるサイト以外からはインストールしないので
作っても無駄
229デフォルトの名無しさん:2008/05/30(金) 05:27:24
ユーザは馬鹿だぜ?
230デフォルトの名無しさん:2008/05/30(金) 08:14:56
ほいほいインストールすると思う。

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

あれを見るにつけ、日本って終わってると思う。
231デフォルトの名無しさん:2008/05/30(金) 19:26:57
作り手もかなりあほだぜ
232デフォルトの名無しさん:2008/05/30(金) 21:11:41
Vistaでは署名無しAXは起動できないんじゃなかったっけ
233デフォルトの名無しさん:2008/05/31(土) 20:30:02
絶対ほいほいインストールする
234デフォルトの名無しさん:2008/05/31(土) 23:41:10
とあるサイトからデータを自作したプログラムでダウンロードしているのですが、
ダウンロードに成功したり失敗したり 2分の1の確率で動いているのですが、
ダウンロードに成功しないのは なにが原因でしょうか?
235デフォルトの名無しさん:2008/05/31(土) 23:49:58
自作したプログラムなら、原因を調べられるだろう?
どこで何のエラーが返ってきてるとか
236デフォルトの名無しさん:2008/05/31(土) 23:55:45
翻訳:エスパー募集中
237デフォルトの名無しさん: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デフォルトの名無しさん:2008/06/01(日) 00:20:46
値を表示してみるという思いつきができないのか
なんというゆとり
239デフォルトの名無しさん:2008/06/01(日) 00:24:56
defaultを使わないでもっと絞ればいいだろ
240デフォルトの名無しさん:2008/06/01(日) 00:31:06
>>238
戻り値は -2146697510 です
意味わかるんですか?
241デフォルトの名無しさん:2008/06/01(日) 00:32:33
>>239
リファレンスには
 S_OK
 E_OUTOFMEMORY
 INET_E_DOWNLOAD_FAILURE
の3つしか 特に戻り値として明記されていませんでしたので これ以外の戻り値は わかりません。
242デフォルトの名無しさん:2008/06/01(日) 00:40:10
仕様書か実装のバグだね
MSに抗議しないと
243デフォルトの名無しさん:2008/06/01(日) 00:40:42
リファレンス外の戻り値を返すとかどんだけ糞なライブラリorリファレンスだよ
244デフォルトの名無しさん:2008/06/01(日) 01:10:01
-2146697510 = S_OK + E_OUTOFMEMORY + INET_E_DOWNLOAD_FAILURE
245デフォルトの名無しさん:2008/06/01(日) 01:12:17
>>244
おまえすげえなwww

3つの戻り値の和を返すというのはいったいどういうことを言いたいんだろうかこの関数は
246デフォルトの名無しさん:2008/06/01(日) 01:20:04
>>244
1245206じゃハゲ
テキトーなこと抜かしてるんじゃねーよボケ
死ね工作員
247デフォルトの名無しさん:2008/06/01(日) 01:40:25
一体何の工作だ
248デフォルトの名無しさん:2008/06/01(日) 01:52:00
FACILITYの意味からして足すのはありえんと思うんだが
249デフォルトの名無しさん:2008/06/01(日) 01:54:15
-2146697510 = S_OK | E_OUTOFMEMORY | INET_E_DOWNLOAD_FAILURE
250デフォルトの名無しさん:2008/06/01(日) 01:55:03
>>248
ビット和だろ常考
251デフォルトの名無しさん:2008/06/01(日) 01:59:40
-2146697510を16進数に直すと0x800bfeda
8 は失敗をあらわす。
b は FACILITY_CERT で、電子証明書関連のエラーだとわかる。
feda は不明。

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

252デフォルトの名無しさん:2008/06/01(日) 02:09:45
winerror.hに詳しくなるスレはここですか
253デフォルトの名無しさん:2008/06/01(日) 04:57:28
スタック破壊してんじゃネーノ
254デフォルトの名無しさん:2008/06/01(日) 05:07:10
ネットワーク接続を切る、接続するAPIってあるんでしょうか?
言語は C/C++ Windowsでお願いします
255デフォルトの名無しさん:2008/06/01(日) 05:08:39
あるよ。
256デフォルトの名無しさん:2008/06/01(日) 05:19:49
>>255
何でしょうか?
257デフォルトの名無しさん:2008/06/01(日) 05:23:23
Winsock
258デフォルトの名無しさん:2008/06/01(日) 05:49:25
すいません 間違えました
ネットワークでなく インターネットの接続です
259デフォルトの名無しさん:2008/06/01(日) 05:50:53
どう違うんだ
260デフォルトの名無しさん:2008/06/01(日) 05:53:14
稀にIPじゃない場合もあるか否か
261デフォルトの名無しさん:2008/06/01(日) 05:56:17
IPじゃないってドメインのことか?
ドメインならgethostbynameでIPに変換可能
あとは一緒
262デフォルトの名無しさん:2008/06/01(日) 05:56:57
ネットワーク接続 WNetConnectionDialog関数を使ったら

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

のようなダイアログがでたのですが、これではないやつで
インターネット接続関連のダイアログがでてくると幸いです
263デフォルトの名無しさん:2008/06/01(日) 06:02:35
>>261
Internet Protocolを使ってないコンピュータネットワークもあるってこと。
264デフォルトの名無しさん:2008/06/01(日) 06:30:21
connect() 関数じゃないですよ?
265デフォルトの名無しさん:2008/06/01(日) 06:51:53
物理的にネットワークアダプタを抜いた状態と同じ環境にしたいってことです
266デフォルトの名無しさん:2008/06/01(日) 07:41:40
>>263
あるわけないだろ。
ばか?
267デフォルトの名無しさん:2008/06/01(日) 07:45:56
>>266
うせろキチガイ
268デフォルトの名無しさん:2008/06/01(日) 07:47:43
>>266 が無知なのは分かったw
269デフォルトの名無しさん:2008/06/01(日) 08:31:21
>>268が無知すぎる件
ある意味犯罪
270デフォルトの名無しさん:2008/06/01(日) 09:43:55
>>269
アナタを・・・
telnetです・・・
271デフォルトの名無しさん:2008/06/01(日) 15:34:01
>>266,269
AppleTalkとかIPXは?
272デフォルトの名無しさん:2008/06/01(日) 15:34:40
>>265
Win32APIでネットワークアダプタを無効にするとか

やり方知らんが多分できるとオモ
273デフォルトの名無しさん:2008/06/01(日) 15:48:13
WindowsでSockRAW取れないのですが
どうしてですか?XP SP2です
274デフォルトの名無しさん:2008/06/01(日) 16:05:42
覗くなということだ
275デフォルトの名無しさん:2008/06/01(日) 18:13:05
>273
ググればすぐわかる。
276デフォルトの名無しさん:2008/06/01(日) 19:20:30
MMORPGのサーバとクライアントの同期化について知りたいのですが、
何か参考になるものとかありますか?
277デフォルトの名無しさん:2008/06/01(日) 20:02:12
韓国語を覚えたほうがいいかもね
278デフォルトの名無しさん:2008/06/01(日) 23:23:04
>>277
理由は?
279デフォルトの名無しさん:2008/06/01(日) 23:37:34
市場の8割がチョン製クリゲ
280デフォルトの名無しさん:2008/06/02(月) 04:57:58
日本ってなんで情報なかったりするんだろう(・ω・)
281デフォルトの名無しさん:2008/06/02(月) 10:36:41
日本のゲーム業界特有の情報閉鎖性もあるけど
オンラインゲームが流行ったときに不況で
誰も手を出さなかったとういのもあるかも
そして>>279
282デフォルトの名無しさん:2008/06/02(月) 13:03:35
商売がヘタクソってのも多いと思うな>日本のメーカー
あからさまな出し惜しみとかして客に逃げられるパターンが多すぎる
283デフォルトの名無しさん:2008/06/02(月) 13:30:29
商売というか、小汚い金の稼ぎ方が日本人にあわないんだろうね
あっちの人たちは金が儲かれば形振りかまわないから成功はする
名声はないけど
284デフォルトの名無しさん:2008/06/02(月) 14:20:06
うん,高度成長期の日本そっくり
285デフォルトの名無しさん:2008/06/02(月) 14:23:01
パンヤもみんゴルのパクリといわれてるし、
その他もろもろパクリは多いよな。

そりゃ作るのは楽だよ

開発で使ってるソフトも平気で割れでやってそうw
286デフォルトの名無しさん:2008/06/02(月) 16:21:36
>>285
ネットランナー・・・
287デフォルトの名無しさん: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デフォルトの名無しさん:2008/06/03(火) 22:20:02
getpeernameで返してもらった連中を
getnameinfoにでも突っ込めば。
289デフォルトの名無しさん:2008/06/03(火) 22:35:15
sockaddr_in だと長さ足りなくないか
290デフォルトの名無しさん:2008/06/03(火) 22:54:40
【エアー調査会社】HG嫁 住谷杏奈61【ハッカー妊婦】
http://human7.2ch.net/test/read.cgi/ms/1212471581/
291デフォルトの名無しさん:2008/06/04(水) 01:37:08
ネットプログラム初心者です。
ネットゲームのプログラミングが目的なのですが、
コネクション数は1〜200あたりで、OSがwindowsXPとした場合、
http://www.kt.rim.or.jp/~ksk/wskfaq-ja/articles/io-strategies.html
を読む限り、WSAAsyncSelectかWSAEventSelectを使うのが良さそうですが
どうなのでしょうか。
292デフォルトの名無しさん:2008/06/04(水) 01:46:06
「Winsock標準に準拠」にこだわるのでなければ(もはや意味なし)
IOCPにしとけ
293デフォルトの名無しさん:2008/06/04(水) 01:48:59
期待した動作をしなくてもくじけないココロがあるならなんとでもなるZE!
294デフォルトの名無しさん:2008/06/04(水) 01:57:35
まったく使ったことがないのでよくわかりませんが、
select 毎回の引数の処理が無駄
WSAAsyncSelect,WSAEventSelect メッセージの通知が遅い
IOCP とにかく速い、プログラムは難しくなる
で良いでしょうか?

ROのエミュ鯖ではselectが使われてて、引数の処理が入ってたのは見たなぁ。
295デフォルトの名無しさん: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デフォルトの名無しさん:2008/06/04(水) 20:45:00
pthread_mutexって10万個作って使っても
問題ない?
298デフォルトの名無しさん:2008/06/04(水) 20:59:21
>>297氏とは違うのですが、ミューテクスとセマフォを分かりやすく説明できる方いないでしょうか?
ググッてみたけど、どこも似たような分かりにくい説明が多いです。。
299デフォルトの名無しさん:2008/06/04(水) 21:22:02
ミューテクスは複数のスレッドがあった場合、順番に処理するのに対して、
セマフォを複数のスレッドが同時にアクセス可と言う考え方でいいのでしょうか?
300デフォルトの名無しさん:2008/06/04(水) 22:06:23
セマフォは5個の資源を10人で使うというような考え方。
listenの引数みたいなというか
301デフォルトの名無しさん:2008/06/04(水) 22:14:35
>>300
係数1のセマフォならいっしょじゃねーか
嘘教えるな
302デフォルトの名無しさん:2008/06/04(水) 22:17:22
>>298
ミューテックスは、同時にひとつのスレッドしかアクセスできない。
1人用のイスみたいなもの。 早いもの勝ちで1人だけが獲得できる。
残念ながら座れなかった人は、イスが空くまで待つ。
イスが空いたら、待ってましたとばかりに奪い合って、勝った人1人だけがイスに座れる。
負けた人は、またイスが空くまで待つ。

セマフォは、同時にアクセスできるスレッドの数を好きに指定できる。
3人まで座れるソファーとか、そういうの。
4人目が来たら、誰かがどくまで待つ。
1にすれば、ミューテックスとほぼ同じ。
303デフォルトの名無しさん:2008/06/04(水) 22:25:50
>>301

だからそのものズバリだろw
教科書でミューテックス=二進セマフォという表記も使われる。
304デフォルトの名無しさん:2008/06/04(水) 22:50:39
WinやRecursiveにしたときのpthreadは、Mutexは同じスレッドならば何度でも取得できるところが一番違う。
スレッドごとの排他制御にMutex、複数の資源管理にセマフォ、単一の資源管理ならどっちでもいい。
305298:2008/06/04(水) 22:53:48
>>299-303
>>302さんの説明分かりやすかったです。ありがとうございました。
ググッても、どこも排他的とかいまいち理解しづらいですよね。。
306デフォルトの名無しさん:2008/06/04(水) 23:25:22
なんというスレ違い
307デフォルトの名無しさん:2008/06/08(日) 12:27:33
C++使いなのですが、socketの実装未経験です、
車輪の再発明はしたくないのでlinuxのsocketライブラリを探しています
CommonC++(commoncpp)というのを見つけたのですが
http://www.sunsite.ualberta.ca/Documentation/Gnu/CommonC++-1.0.2/html/index.html
ソースコードを見てると使いやすそうなんですが、他にもオマイラお勧めの、良いライブラリとか
あったら教えてホスイのですが
boostにもsocketのライブラリがあるっぽいんだけど・・・・こっちの方が有名なのかな?
308デフォルトの名無しさん:2008/06/08(日) 12:56:46
boostのがおすすめ
309デフォルトの名無しさん:2008/06/08(日) 14:23:14
オマイラだと?何だその態度は
310デフォルトの名無しさん:2008/06/08(日) 14:28:50
>>307
一度くらいは自分で実装するべきだ。その上で便利なライブラリを探すんだ。
車輪の再発明はしたくないって便利な言い訳だね。
311デフォルトの名無しさん:2008/06/08(日) 14:41:01
別に使えるものは使えばいいんじゃねえの
いちいちカーネルやコンパイラから自分で書き起こしたりはしないだろ
312デフォルトの名無しさん: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デフォルトの名無しさん:2008/06/08(日) 22:12:11
Makefile
314デフォルトの名無しさん:2008/06/08(日) 23:02:18
>>312
聞いてくれなくてもいいが
315デフォルトの名無しさん:2008/06/08(日) 23:13:36
boostの非同期ライブラリおすすめ>>307
316デフォルトの名無しさん:2008/06/09(月) 00:07:43
>>315
boost::asioも非同期ライブラリ持ってるんじゃないの?
317デフォルトの名無しさん:2008/06/09(月) 10:02:28
ACEだな、やっぱでかいし
318デフォルトの名無しさん:2008/06/09(月) 23:12:11
ごめん。
asioのことを言ったw>>315
319デフォルトの名無しさん:2008/06/10(火) 21:12:45
ネットワークプログラミングの利点って何?
320デフォルトの名無しさん:2008/06/10(火) 21:32:02
ネットワーク通信ができること。
321デフォルトの名無しさん:2008/06/11(水) 03:25:33
宿題スレに質問投げておくと勝手にだれかが作ってくれる
これがネットワークプログラ
322デフォルトの名無しさん:2008/06/11(水) 12:27:03
>>321
小人さんは間違いが多いのが欠点だ。
323デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん:2008/06/14(土) 06:51:37
オブジェクト試行ですか?
326デフォルトの名無しさん:2008/06/14(土) 07:58:40
sockの関数と1対1に対応するメソッドを作ってるうち恩恵を受けにくい。一連の決まった操作をひとつのメソッドにまとめてしまおう。
sockaddrはラップして、アドレスのクラスを作ってしまう。簡単にアドレスを設定できるようにするといい。

あと、言葉遣い直せ
327デフォルトの名無しさん:2008/06/14(土) 08:00:05
JavaとかRubyとかPythonとかの
ソケットクラスの構成をみれば〜?
328デフォルトの名無しさん:2008/06/14(土) 08:27:18
>>326
君はまずその変な日本語を直さないとな
他人の言葉遣いを指摘してる場合じゃないぞ

329デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん:2008/06/14(土) 09:34:50
しかしなんだね、g++ってVC8とは若干違うよね
accept()関数の第三引数の
accept(fd1, (struct sockaddr *)&caddr, &len))
lenだが、VC8ならintでも無問題なのだけど、g++はsize_tじゃないと嫌だと
怒ったりとかと少し戸惑う、>>330でした
332デフォルトの名無しさん: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デフォルトの名無しさん:2008/06/14(土) 10:05:46
>>332
Thx
物知りですね、勉強になります
gccの場合、accept()関数の第三引数は、int型でコンパイルに成功してたんだけど、g++でコンパイルした際にエラーが出たんで
なんでかなと思ってた、コンパイラに依存しないようにアサーションマクロを書いておくと、メモメモ
334デフォルトの名無しさん:2008/06/14(土) 14:25:52
Winsockで非ブロッキングモードにしたいときは
selectでウインドウハンドルとそのウインドウのプロシージャを設定するけど
最初はウインドウAでメッセージ受けてたけど
次はウインドウBでメッセージ受けるように変更
とかいうことはできますか?

本当はウインドウハンドル指定しなくてよければ通信メッセージ受けるところだけ独立させたいんだけど
335デフォルトの名無しさん:2008/06/14(土) 14:32:58
>>334
WSAEventSelectを使えばウインドウハンドルはいらない。
336デフォルトの名無しさん:2008/06/14(土) 14:35:32
>>335
お〜 ウインドウハンドルいらない版もありましたか
ありがとうございまつ
337デフォルトの名無しさん:2008/06/14(土) 16:12:06
winsockについてです
gethostbynameではwinsockが確保したメモリが返されてきますが
これはどうすると解放できるのでしょうか?
338デフォルトの名無しさん:2008/06/14(土) 16:17:39
>>337
gethostbynameでググルと一番上に解説が出てくるし
339デフォルトの名無しさん:2008/06/14(土) 20:59:48
>>329なんだけどさ
>>327
が書いてたんで、rubyのソケットのライブラリを見てたら、やっぱ個別に
sockの関数と1対1に対応するメソッドを持ってるよね
>>326
1対1に対応するメソッドを作ると、恩恵は受けにくいと言うし
ネットワークプログラミングとは直接関係ないけど、どっちがいいんだろうな?
この問題にはいつも悩まされる
永遠の命題なのか・・・・orz
340デフォルトの名無しさん:2008/06/14(土) 21:10:21
>>339
たとえば、自分向けのライブラリを作るなら、いきなりconnectで繋がって、closeで閉じるライブラリを作り置きしておくと、今後ずっと楽になる。
341デフォルトの名無しさん:2008/06/14(土) 21:19:02
>>340
わかりやすい説明、ありがとう
たしかに、それは言えるのだけど、ついつい、かまえてって言うか、型にはめようとして
再利用性だとか、拡張性だとか、考えてしまいクラスの設計には、いつも苦労するんだよね、俺の場合
もう少し気楽に考えた方がいいかもね
342デフォルトの名無しさん:2008/06/14(土) 21:26:20
>>341
共通の機能は基本クラスに、専用の機能は派生クラスに分散。一つのクラスで機能を欲張らないのが設計のコツ。
343デフォルトの名無しさん:2008/06/14(土) 21:27:55
>>341
C/C++で書いてるんなら、いつでも下に降りられるから、ある意味
どうでもいい気がする。

rubyみたいな奴だと、標準で抽象度の高いAPIしか用意されてないと
そこより下に降りたければCでextension書くしかないって話になる。
だからそういう設計になってるんだと思うよ。
344デフォルトの名無しさん:2008/06/14(土) 21:34:17
>>341です
皆さん、いい話ありがとう
345デフォルトの名無しさん:2008/06/14(土) 23:34:33
TCP/IPで、自ソケットが生きてる場合、一時的に通信経路に問題があってもsendは成功すると
思いますが、その後すぐにその問題が解決したら、相手側には届くのでしょうか?
346デフォルトの名無しさん:2008/06/14(土) 23:36:06
>>345
いつか届く。
347デフォルトの名無しさん:2008/06/15(日) 04:36:59
僕の想いも届いて!
348デフォルトの名無しさん:2008/06/15(日) 06:09:21
winsockを使っていますが

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

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

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

送信相手が1回送信するごとにFD_READが1回発生するように設定することはできますか?
できないとして1送信ごとに何らかの記号をつけて識別したりするのでしょうか?
349デフォルトの名無しさん:2008/06/15(日) 06:29:10
基本的にできない。「こんにちわ」と「こんばんわ」を別のものとして扱うなら、それぞれの頭に俺プロトコルのヘッダ(メッセージ長など)を付けて送り、受信側でそれを解釈する。

あと、どーでもいいけど「こんにちは」と「こんばんは」だと思う。
350デフォルトの名無しさん:2008/06/15(日) 10:57:00
そういうときこそ、
SCTP。
おまいら使ってる?
351デフォルトの名無しさん:2008/06/15(日) 14:04:34
>>348
そもそも
「こ」「ん」「に」「ち」「わ」と5回に分かれてFD_READが来ることだってありえるぞ。
TCPとはそういうもんだ。区別したけりゃストリームに自前で区切情報載せろ
352デフォルトの名無しさん:2008/06/15(日) 15:09:49
>>349 351
ありなとうございまつ

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

「こんに」「こんばんわ」「ちわ」という受信すらありえるような
それともTCPは受信順番も考慮するからそれはないと思っていいんでしょうか?
353デフォルトの名無しさん:2008/06/15(日) 15:32:35
つ[延滞]
必ずしも送った順に相手に届くとは限らない
この辺はUDPとTCPの違いを調べれば分かる
354デフォルトの名無しさん:2008/06/15(日) 15:58:37
>>352
TCPは順番は変わらないよ!。
355デフォルトの名無しさん:2008/06/16(月) 11:35:18
マルチスレッドなプログラムでsocketを使った場合に、
thread1(){ send("ABCDE"); }
thread2(){ send("abcde"); }
の2つのスレッドが同時にsendをコールした場合、
相手側でrecvした時に、
"ABCDE"と、"abcde"が混ざることってありますか?
例えば、"AaBbCcDdEe"みたいに。

シングルスレッドな場合だと、
send単位で送ったデータはそのまま出て来ますよね。
356デフォルトの名無しさん:2008/06/16(月) 11:50:15
せめて"ABabcdeCDE"くらいの例えならな
357デフォルトの名無しさん:2008/06/16(月) 11:52:11
1. netstat -a で見れる情報(プロトコルやアドレス/ポート ステータス)は
どこから持って来てるんでしょうか?
(同じ情報を自分のプログラムから取得するにはどうすればいいでしょうか?)

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

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

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

2このスレッドが、同時に100Mバイトとかのデータをsendしたら、
そうなりそうな気がしないわけじゃないけど。
360デフォルトの名無しさん:2008/06/16(月) 12:04:11
そもそも同期化もせずに 1 つのソケットに複数スレッドで書き込むな。
361デフォルトの名無しさん:2008/06/16(月) 12:09:29
232Cでやっちまったことはあるな
362デフォルトの名無しさん:2008/06/16(月) 12:50:47
>>360
確かにおっしゃる通りですね。
ってことは、やっぱりそうなる事もありうるってことですか。
363デフォルトの名無しさん:2008/06/16(月) 19:19:51
>>362
実装依存だろうし、起きるかどうか考えるだけ無駄
364デフォルトの名無しさん:2008/06/16(月) 21:45:50
ロックしろよ
365デフォルトの名無しさん:2008/06/16(月) 21:51:18
Unixで同期モードならおきない気がする
366デフォルトの名無しさん:2008/06/16(月) 22:11:13
>>365
どういった理由からですか?保障されているんですか?
367デフォルトの名無しさん:2008/06/16(月) 23:13:06
TCPだったら、sendした順に届くとは限らない。
スレッド関係なしに。
だから、逐次処理で
send( "ABCDE" );
send( "abcde" );

とかやっても、相手側で
abcdeABCDEと受信することも普通にある。
368デフォルトの名無しさん:2008/06/16(月) 23:19:20
おいおい。TCPでそれはないって。
369デフォルトの名無しさん:2008/06/16(月) 23:22:45
>367
え??
370デフォルトの名無しさん:2008/06/16(月) 23:30:04
次にお前は「ワーイ沢山釣れたー」と言う…
371デフォルトの名無しさん:2008/06/16(月) 23:37:42
winsockならhttp://www.kt.rim.or.jp/~ksk/wskfaq-ja/intermediate.html#threadsafety
まぁ、どの実装でも、自前でコントロールすべしって結論になると思う
372デフォルトの名無しさん:2008/06/16(月) 23:39:36
あれ?システムコール実行中にコンテキストスイッチて起るんだっけか?
373デフォルトの名無しさん:2008/06/16(月) 23:47:19
起こらないとするなら、誰かがsendを喚ぶと、戻ってくるまで
システムフリーズするだけだな。
374デフォルトの名無しさん:2008/06/17(火) 01:51:31
TCPは送信順番も送信内容も保障されるか破棄されるんじゃないの?
順番がかわるとか複製される可能性があるのはUDPじゃないの?

おれなんか間違ってること言ってる?
手元の参考書にそう書いてあるんだけど?
375デフォルトの名無しさん:2008/06/17(火) 01:56:01
釣れた釣れた(^^)

バーカ >>374
376デフォルトの名無しさん:2008/06/17(火) 02:01:15
>>375
スレ監視し続けてたんだね
お疲れ様
釣れて良かったね
おめでとう
377デフォルトの名無しさん:2008/06/17(火) 02:46:29
>>372
普通に起こるだろ。
シグナルだって入るし、場合によっちゃスレッドだってスイッチする。
378デフォルトの名無しさん:2008/06/17(火) 04:08:33
>>372
I/Oだったら普通にキューにぶっこんでコンテキストスイッチしないかな?
379デフォルトの名無しさん:2008/06/17(火) 04:28:02
Winsockでconnect、send、recvそれぞれに個別のタイムアウト値を持たせたいのですが、
connectのみ
WSAWaitForMultipleEventsでタイムアウトを判断して
send、recvはsetsockoptを使って指定、
これで大丈夫でしょうか?
380デフォルトの名無しさん:2008/06/17(火) 08:52:26
今の今までスレタイがtypoだと思ってた俺愕然。
381デフォルトの名無しさん:2008/06/17(火) 09:58:45
65535まで続くよ!
382355:2008/06/17(火) 10:05:16
>>367
シングルスレッドの場合でしょ、それは絶対にあり得ないと思うんだけど。
最近のカーネルは、カーネルプリエンプションだから、カーネル内部の処理
実行中にコンテキストスイッチすることもあるかも知れないけど、
ロジックの実行順序(逐次処理)が入れ替わることはないと思います。

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

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

なにか間違ってます? >> all
383デフォルトの名無しさん:2008/06/17(火) 16:49:35
384デフォルトの名無しさん:2008/06/17(火) 17:04:56
385デフォルトの名無しさん:2008/06/17(火) 17:14:26
386デフォルトの名無しさん:2008/06/17(火) 17:23:55
getaddrinfoはブロッキングを起こしますか?
387デフォルトの名無しさん:2008/06/17(火) 17:54:23
AI_NUMERIC を付けない場合は起こします
388デフォルトの名無しさん:2008/06/17(火) 18:07:41
LAN接続PC間で、低速、高ping回線の環境を再現するにはどのような方法があるでしょうか?
自作の俺プロトコルアプリが低速回線環境でどういった影響を受けるのか調べたいのですが。
環境はWindowsです(98orXP)
389デフォルトの名無しさん:2008/06/17(火) 19:19:43
そういうソフト使えばいいだろ。
390デフォルトの名無しさん:2008/06/17(火) 19:50:44
>>367
TCPでそれがあったら大変だろ
UDPでは十分ありうるだろうが
UDPは順序がかわるどころか
複製されたりもするらしいからな

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

391デフォルトの名無しさん:2008/06/17(火) 20:41:21
このスレに出入りする奴の発言とは思えんな。
392デフォルトの名無しさん:2008/06/17(火) 21:56:19
UDPは来るか来ないかだけで、「パケット」という構造自体は保証されるだろ。
2つ以上のパケットをもってきて、その関連をどうこういうと面倒だけど。
393デフォルトの名無しさん: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デフォルトの名無しさん:2008/06/18(水) 17:14:46
udp_send("ABCD");
とかが2回以上あったかのように
複数回届くことかと思われ

で、実際そういうことがある
パケットにインデックスとかつけて
2回目以降のやつは棄てればいいので問題ない
395デフォルトの名無しさん:2008/06/18(水) 17:22:56
>>394
それって UDP側じゃなくて MAC側の仕様じゃないの?
結果は同じだけど・・・
細かすぎるか?w
396デフォルトの名無しさん:2008/06/18(水) 17:48:55
UDPパケットがネットワーク上で消失するってのは判るんですが、
重複するってのはなぜ?
誰がパケットを複製するの?

マルチキャストであればルータがパケットを複製するってのは
判るんですが。
397デフォルトの名無しさん:2008/06/18(水) 17:59:51
論理的にはあり得ないけど、ハードやOS側が腐っている場合は、
勝手に複製されてしまうこともあるって事ですか。

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

     障害を受けたパケットは明らかに重大な警告です。多くの場合、ping パケットの
     経路のどこか (ネットワーク内かホスト内) のハードウェアの故障が考えられま
     す。
398デフォルトの名無しさん:2008/06/18(水) 18:03:13
よって、パケットの複製は、UDPだから発生するとかって話では
ないってことですね。

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

と、なっとくしました。
考え方が間違ってたら、指摘してもらえると嬉しいです。
399デフォルトの名無しさん:2008/06/20(金) 09:04:55
貧乏人は贅沢だ
不満を言う余裕はあるくせに
戦争する暇もある
400デフォルトの名無しさん:2008/06/20(金) 21:50:00
世の中の戦争の大部分は漫湖の取り合いが原因
401デフォルトの名無しさん:2008/06/21(土) 18:36:22
JSFで作ったページがローカルと見ると見えるのに外から見ると見えないのはなんで?
402デフォルトの名無しさん:2008/06/21(土) 19:43:20
TAPIの日本語版資料が見つからない・・・
403デフォルトの名無しさん:2008/06/22(日) 03:08:02
そんなもん探してる間に訳した方が早い
404デフォルトの名無しさん:2008/06/23(月) 01:42:10
ブラウザから送られたリクエストをそのまま使用ってどういうことですか?
405デフォルトの名無しさん:2008/06/23(月) 01:55:06
ggrks
406デフォルトの名無しさん:2008/06/23(月) 22:27:50
UPnPで多重ルーター通れるようにできる?
407デフォルトの名無しさん:2008/06/23(月) 22:43:10
cygwin環境(フルインストール済)で以下のページのUNIXネットワークプログラミングコードって
動かすことは可能でしょうか?
コンパイルは通ったのですが、実行するとうまく動きません。

http://www.geekpage.jp/programming/linux-network/tcp-2.php
どこか修正する点があるのでしょうか?
408デフォルトの名無しさん:2008/06/23(月) 23:02:12
>>406
間のルータがマルチキャストルータで、かつルータの先のルータが
別ネットワークからのマルチキャストに応答し、かつ、別ネットワークから
のUPnPのTCP接続に正しく応答するなら可能なんじゃね?
409デフォルトの名無しさん:2008/06/23(月) 23:45:55
>>408
ありがと

ちょっと作ってみる
410デフォルトの名無しさん:2008/06/24(火) 10:03:12
>>408
同じLAN内で動かなかったのなら何が問題があると思われ
411デフォルトの名無しさん:2008/06/24(火) 12:08:13
>>407
単に「うまく動かない」では状況がわからない
何かエラーメッセージが出るとか、こういう動作を期待したのに実際はこうだったとか、もっと詳しく
412デフォルトの名無しさん:2008/06/24(火) 14:11:03
>>407
うちの環境だと動いたよ。
firewallがブロックしてんじゃねーの?
413デフォルトの名無しさん:2008/06/29(日) 00:12:03
Windows(Vista限定?)のファイアーウォールって
アプリケーションがネットワークにアクセスしようとしたときに
とりあえずブロックしてから確認ダイアログ出すけど、
アプリケーション開始したときに確認ダイアログ出せない?
ひたすらリトライするしかない?

Visual Studio 2008
言語はC#かC++でplz
414デフォルトの名無しさん:2008/06/29(日) 00:18:32
お前は馬鹿か
415デフォルトの名無しさん:2008/06/29(日) 02:08:52
ファイヤーウォールソフトはイッパイアッテナ
416デフォルトの名無しさん:2008/06/29(日) 02:19:38
馬鹿はお前か
417デフォルトの名無しさん:2008/06/29(日) 02:51:47
アプリを開始したときにダミーでも通信すれば確認ダイアログくらい出るだろ
馬鹿か
418デフォルトの名無しさん:2008/06/29(日) 11:16:14
while(1){
num = recv(dst, buf, buf_size, 0);
if(numrcv == 0 || numrcv == -1){
status = close(dst);
break;
}
printf("received: %s\n", buf);
}

ネット上から拾ったプログラムです。
簡易tcpサーバーとしてAccept後、文字列受信をしているんだが、なぜ

受信→if判定でbreak→出力

という形なのか教えてください。
自分の中では

受信→出力→if判定でbreak

が普通だと思うのだが。
419デフォルトの名無しさん:2008/06/29(日) 11:46:07
recvの戻り値を確認するのはrecv後すぐでしょう。
Windowsなら、socket使わなければWSAGetLastErrorでとれる値は変わらないだろうけど、
UNIXだったらerrnoが変わっちゃうかも知れない。
(errno == EINTRだったらやり直すとか)

それに、毎回受信したデータを処理してしまうにしても、0はともかく-1は困らない?
numrcv = recv(s, buf, len, 0);
memcpy(dst, buf, numrcv);
みたいなのとか。
出力するにしても、どれだけ出力すればいいのか分かるの?
bufが全部'\0'で初期化されてるなら、文字列として出力する分には平気だと思うけど。
420デフォルトの名無しさん:2008/06/29(日) 12:01:11
>>418
>受信→出力→if判定でbreak

その場合、受信に失敗してたら、なにが出力されるんだ?
421418:2008/06/29(日) 12:03:36
>>419
言われてみればエラーチェックと考えられますね。
ありがとうございました。
422418:2008/06/29(日) 12:08:06
>>420
エラー処理ということをわすれてました。
bufferに何もない状態でif判定すると
そこで判定で真となりbreakで抜けてしまうのでは、
と勘違いしてました。
423デフォルトの名無しさん:2008/06/29(日) 14:46:39
UDPによる、リアルタイム動画通信の実験がしたくて、CCDカメラを
購入したいと思います、お勧めの商品があったら教えて欲しいのですが。
424デフォルトの名無しさん:2008/06/29(日) 14:48:06
激しく板違い
425デフォルトの名無しさん:2008/06/29(日) 15:50:40
ソケットの生成、bind listenをmain関数の外で(別関数を作って)
行った場合、別関数内で生成したソケット等はリターンしてきた時に
スコープ外れることにより消えてしまうんでしょうか?
426デフォルトの名無しさん:2008/06/29(日) 16:28:39
そーゆークラスにしたなら、そうなる。
生のSOCKET/int型にはそういう機能はない。
427デフォルトの名無しさん:2008/06/29(日) 16:28:41
消えない。
428デフォルトの名無しさん:2008/06/29(日) 16:29:01
なぁ、それソケットと何の関係があるんだよ
429デフォルトの名無しさん:2008/06/29(日) 21:02:13
Javaなら・・・
430デフォルトの名無しさん:2008/06/30(月) 12:16:49
ttp://www.kt.rim.or.jp/~ksk/wskfaq-ja/articles/lame-list.html


まずはこれを読みましょう。
431デフォルトの名無しさん:2008/06/30(月) 19:57:17
>>425
たしか、明示的にクローズしないと自動的にはガーベージコレクトしてくれなかったはず。
432デフォルトの名無しさん:2008/07/01(火) 00:14:19
>UNIXだったらerrnoが変わっちゃうかも知れない。

おまえは馬鹿か
433デフォルトの名無しさん:2008/07/01(火) 21:47:58
大きい順に数字を表示するプログラムがうまくできません
どこが違うのか指摘してもらえませんか?

#include <stdio.h>
void swap(int *nx,int *ny,int *nz)
{ int temp = *nx; *nx = *ny; *ny = *nz; *nz = temp; }
void sort3(int *n1,int *n2,int *n3)
{ if (*n1 > *n2 && *n2> *n3) swap(n1, n2, n3);
else if (*n2 > *n1 && *n1> *n3) swap(n2, n1, n3);
else if (*n1 > *n3 && *n3> *n2) swap(n1, n3, n2);
else if (*n2 > *n3 && *n3> *n1) swap(n2, n3, n1);
else if (*n3 > *n2 && *n2> *n1) swap(n3, n2, n1);
else if(*n3 > *n1 && *n1> *n2) swap(n3, n1, n2); }
int main(void) { int na, nb, nc;
puts("3つの整数を入力してください。");
printf("整数A"); scanf("%d", &na); printf("整数B"); scanf("%d", &nb); printf("整数C"); scanf("%d", &nc);
sort3(&na, &nb, &nc);
puts("これらの降順に並べました。");
printf("整数Cは%dです。\n ", nc); printf("整数Bは%dです。\n ", nb); printf("整数Aは%dです。\n ", na);
return(0); }
434デフォルトの名無しさん:2008/07/01(火) 21:51:50


  お断りだ

435デフォルトの名無しさん:2008/07/01(火) 21:54:51
>>433
3回の比較で並べ替えできるよ!
436433:2008/07/01(火) 21:56:51
ありがとうございます!
その3回の比較とはどんな計算をすればいいんでしょうか?
437デフォルトの名無しさん:2008/07/01(火) 22:05:20
>>435
氏ねや
438デフォルトの名無しさん:2008/07/01(火) 22:18:37
>>437
httpで通報しました
439デフォルトの名無しさん:2008/07/01(火) 22:21:48
例えば数値が2,3,5なら、各数値を3台のサーバにsendする。
この時、2なら2時間後に返事を返してもらうように作っておく。
440デフォルトの名無しさん:2008/07/01(火) 22:25:14
ネットを通して3台の端末から1つの数値を入れてもらう。
すると、数値が一つ帰ってくる。この数値から自分が何番目か予測する。
ネットゲームの作り方でつか?
441デフォルトの名無しさん:2008/07/01(火) 23:33:42
a>b?a>c?b>c?swap(a,b,c):swap(a,c,b):swap(c,a,b):b>c?a>c?swap(b,a,c):swap(b,c,a):swap(c,b,a)
442デフォルトの名無しさん:2008/07/02(水) 08:29:27
>>423
ロジテックが手に入り安いし関連製品が同じドライバーだから便利

>>398 UDPについて

最近上司からもUDPの早いからUDPにしろという
変なUDP=早いという間違った神話があるんだが・・・・
TV電話とかボイチャみたいな再送信されて遅延が発生するぐらいなら
捨ててくれよっていうアプリなら有効なんだが

ここでよく質問にくるゲーム系だとUDPは考えものだぞ
少なくとも再送信の実装するよりも、届かなくても動くように
実装した方がよいよ。
ただ、UDPだと1バイトのデーターでも即座に送られるのが魅力か
443デフォルトの名無しさん:2008/07/02(水) 08:58:20
TCPでもNaggle切れば。
444デフォルトの名無しさん:2008/07/02(水) 10:16:48
>>433 これでいいじゃん(・ε・)
#include <stdio.h>
#include <vector>
#include <algorithm>
#include <functional>

int main() {
int a, b, c;
a = 10;
b = 7;
c = 12;
std::vector<int> array;
array.push_back(a);
array.push_back(b);
array.push_back(c);
std::sort(array.begin(), array.end(), std::greater<int>());
printf("大きい順に");
for(std::vector<int>::iterator it = array.begin(); it < array.end(); it++) {
printf("%d,", *it);
}
printf("です。\n");
return 0;
}
445デフォルトの名無しさん:2008/07/02(水) 19:18:41
>>443
そだね、一時期そうしてた
ただ、この手のデーターは大量に送ることが多いから
ルーター吹っ飛ばしてからはプロトコル見直すようにした

最近、NAT越えは厳しくなっていて
UDP HOLE PUNCHINGとかもやったけど、セキュリティソフト
で邪魔される事多いし、サーバーソケット作るだけで警告出るし
特に安易にルーターに無線ルーター付けられるとUPnPも使えん
やはり素直にリレーサーバー方式が一番
446デフォルトの名無しさん:2008/07/03(木) 00:36:04
ネットワークのセキュリティについて質問があります。

アプリケーション層レベルでメールをバケツリレーさせているのですが、
セキュリティのために暗号化しようかと思っています。

公開鍵暗号を利用しようかと考えているのですが、
メジャーなオープンソースソフトウェアは何がありますか?
アーキテクチャ、OSに依存性がないほうが望ましいです。

アドバイス頂けると助かります。
447デフォルトの名無しさん:2008/07/03(木) 00:47:24
A:誰も見ねーから適当にやっとけ
448デフォルトの名無しさん:2008/07/03(木) 00:54:32
GnuPG
449デフォルトの名無しさん:2008/07/03(木) 06:40:42
OpenSSLとか?
450デフォルトの名無しさん:2008/07/03(木) 09:32:10
>>446
AES
とりあえずAESといっとけば皆が納得する
どんなに強固でも素人にわかる肩書きが無いと屑
451デフォルトの名無しさん:2008/07/03(木) 13:37:17
>>446
見たい価値のあるデータには、強固な暗号が要る。
価値の無いものは、乱数でXORしただけでも誰も見ないし、目の端に止まっても
何かの暗号だろうと思い、誰も解析しない。
>>447が、大正解。
452デフォルトの名無しさん:2008/07/03(木) 14:22:57
まぁ世の中にはスカートをめくってでもパンツを見たい奴もいるからなぁ
453デフォルトの名無しさん:2008/07/03(木) 15:48:30
>>452
アフォか、最初から丸見えだったら見る価値ねーだろ。
454デフォルトの名無しさん:2008/07/03(木) 16:03:19
>>452
スカートの中身と比較されてもね〜(もれスカートならめくりたいし
簡単な暗号がいかに解析しずらいか身をもって体験する?
乱数でさくっと簡単暗号を作るから、解析して見るかい?
最近の解析ソフトはまず使えないぞ。(昔のはしらん)
455デフォルトの名無しさん:2008/07/03(木) 22:13:48
イラネ。
456デフォルトの名無しさん:2008/07/04(金) 00:25:37
>>454
でもギャルゲやエロゲの絵を抜く為にスクランブル済みデータの解析とかする人と同じじゃないのかな?
457デフォルトの名無しさん:2008/07/04(金) 16:05:30
JpcapのPacketクラスで取得できるlen(パケットの長さ)から
データのバイト数を計算したいのですが、どのようにすればよいのかわかりません。
わかる方いましたら、教えてください。よろしくお願いします。

前パートで既出でしたらすみません。
458デフォルトの名無しさん:2008/07/04(金) 16:09:21
>>456
大抵はヘッダいじったBMPでしかないのが現実
459デフォルトの名無しさん:2008/07/04(金) 16:44:54
>>456
ここにも、通信における暗号の意味がわかったいない人がいるとは…
何のためにこのスレにいるのか?
460デフォルトの名無しさん:2008/07/04(金) 16:56:21
日本語でおk
461デフォルトの名無しさん:2008/07/05(土) 14:13:35
英語版: http://support.microsoft.com/kb/318911/en-us/
機械翻訳: http://support.microsoft.com/kb/318911/ja

ここに書いてある
SocketOptionName.MulticastInterface
の使い方って間違ってね?

IP渡すんじゃないのか。
ためしにインデックス値渡してみたけどSocketException出る。
462デフォルトの名無しさん:2008/07/06(日) 19:43:15
UPnPの質問なのですが
ルーターにポートマッピングして、ローカルのIPアドレスで鯖を立てました
外部から接続はできるのですが、LAN内部の別のクライアントからだと接続できません
これは仕様でしょうか・・・
463デフォルトの名無しさん:2008/07/06(日) 20:33:54
ルータの実装次第としか
ウチのルータはグローバルIP:ポートを内部から叩きにいっても、
ちゃんとリダイレクトしてくれるよ
464462:2008/07/06(日) 20:56:10
>>463
ありがとうございます。
ルータの設定でなんとかできないかもう少し考えてみます
465デフォルトの名無しさん:2008/07/06(日) 23:38:14
つーかルータのマニュアルくらい読めよ
その手の注意事項くらい書いてないか?
466462:2008/07/06(日) 23:43:27
>>465
ルータのパスは父親が掌握しております・・・
これ以上は将来独立してからじゃないと無理そうなんで諦めます
467デフォルトの名無しさん:2008/07/07(月) 00:15:07
いや,パスワードの問題じゃなくてマニュアルは読んだのか?と訊いてる
内側からあたかも外側からアクセスした様にしてくれるかどうかを調べろ
マニュアルも大抵メーカのウェブサイトに置いてある
468462:2008/07/07(月) 01:11:18
ttp://www.acca.ne.jp/support/adsl/modem/fujitsu/flashwave2040_m1_auto/pdf/FW2040M1_usermanual-5.0.pdf
オンラインマニュアル読んでみましたが
出来るとも出来ないとも書いてないようです

ただUPnPの設定の項で
MSNメッセンジャーを例に説明してるのですが
「LAN 上のPC 間のチャット(ビデオ・音声)はできません。」
とあるので、出来ない気がしてきました・・・
469デフォルトの名無しさん:2008/07/07(月) 01:30:08
hostsでも書けばいいのに
470デフォルトの名無しさん:2008/07/07(月) 01:42:08
hostsじゃ無理じゃね?
471デフォルトの名無しさん:2008/07/07(月) 01:58:42
やりたい事はできるだろ?
まあIP書いてもいけるけどさ
472デフォルトの名無しさん:2008/07/07(月) 06:01:41
>>468
UPnP関係ないからな。
>>462冒頭でも書いてるし、勘違いしているかもしれないので一応。
473デフォルトの名無しさん:2008/07/07(月) 07:39:43
家庭用ルータだとループバック機能ついてないのが普通。
hosts書くしかないね。
474デフォルトの名無しさん:2008/07/07(月) 10:32:23
プログラムで、自分のPCのプライベートIPアドレス(192.168.0.xx)を知りたいです
winsockでプライベートアドレスを取得できる関数ありませんか?
よろしくお願いします
475474:2008/07/07(月) 10:51:26
すみません。自己解決しました。参照する引数間違ってました。。
476デフォルトの名無しさん:2008/07/07(月) 16:41:58
日本語でおk
477462:2008/07/07(月) 17:50:31
>>472-473
そのループバック機能ってのがないのが問題なんですね、
>>469−471,473
hostsで解決できるかやってみます

どうもありがとうございました
478デフォルトの名無しさん:2008/07/07(月) 20:14:29
ADSLなんだけど、プログラムからグローバルIP取得するにはどうすればいいですか?
ローカルIPは取得できました。WAN側から見るグローバルIP取得したいです。よろしくおねがいします。
VC + winsock2 使ってます。
479デフォルトの名無しさん:2008/07/07(月) 20:19:36
>>478
それは無理だと思うんだが
RFC の何番だっけ、NAT って >識者
480デフォルトの名無しさん:2008/07/07(月) 20:29:45
ルータがUPnP対応なら、喋ってみれば。
481デフォルトの名無しさん:2008/07/07(月) 21:05:53
DiCEなどが何をしているか、見てみるといい
482デフォルトの名無しさん:2008/07/08(火) 05:15:52
>>478
残念ながら汎用的は方法は無い。
NATしてるルータにwebアクセスして情報取得するとか、
NATしてるルータにSNMPできいてみるとか。
80番で外に出れるなら、外部でサービスしている適当なcgiでREMOTE_ADDRを見るとか。
483デフォルトの名無しさん:2008/07/08(火) 07:45:32
集合住宅やホテルで自室からは部屋番号しかわからないのに似てる
そこの住所は管理人やフロントに問い合わせるか
外からきた郵便物に書いてある住所を見るしかない

問い合わせ方法は住んでいる場所によって違うし
484デフォルトの名無しさん:2008/07/08(火) 09:33:03
部屋番号がドアにしか書いてなければ
一旦外に出ない限り分からないわけだ
確かに似てる
485478:2008/07/08(火) 10:56:35
レスありがとうございます。
考えたのですが、たとえば、サーバーのグローバルIPが[ 220.222.15.xx ]でポート1200にアクセスがあると
[192.168.0.13]に転送するとルータに設定。
クライアントのグローバルIPが[ 220.222.15.xx ](サーバと同じIP)でポート1201だと
[192.168.0.14]に転送するとルータに設定。
この場合、転送はうまくいくでしょうか?グローバルIPが同じでもポートが違う場合、他のPC
にデータを転送するのでうまく通信できると考えたのですが。。
アドバイスお願いします
486デフォルトの名無しさん:2008/07/08(火) 10:59:30
ルータ使ってるならルータの仕様による。
まあできないルータなんてほとんど無いだろうが。
487デフォルトの名無しさん:2008/07/08(火) 11:12:59
同一のグローバルIPでも通信可能なのか?
488デフォルトの名無しさん:2008/07/08(火) 11:31:49
同一鯖でweb鯖やらメール鯖立てられるのはポートが違うから。
489デフォルトの名無しさん:2008/07/08(火) 17:07:28
ネトゲ作ってて、ローカルのLAN同士では繋がったのだけど、
ルータに割り当てられているグローバルIPを使って、
クライアントPCでbindすると失敗する。
ということは、bindはルータから割り当てられたローカルIPでやると思うのだけど、
ポート番号が80とかじゃ、他のクライアントと重複するんだけど、重複しても大丈夫?
それと、ルータを使わないYahooBBとかのモデム直のパソコンだと、グローバルIPでbindできるの?
490デフォルトの名無しさん:2008/07/08(火) 17:12:52
何言ってんの?
重複とは何が重複?
モデム直はグローバルアドレスが直接PCに設定されるでしょ。
491デフォルトの名無しさん:2008/07/08(火) 17:19:14
>>490
だからルータの中にある2台のパソコンが、
同一のポート番号でbindしたら、LAN内では、ローカルIPが異なるから大丈夫だけど、
ルータの外から、グローバルIPで来た同じポート番号宛ての情報(connect)は、どうなるのかなって。
2台が同時にacceptしてしまいそうじゃん
492デフォルトの名無しさん:2008/07/08(火) 17:26:49
>>491
ルーターから同一のアドレス、ポートに来たものを2ヶ所にフォワードできないから
そういう心配は要らないと思うのだけど。
493デフォルトの名無しさん:2008/07/08(火) 22:03:54
>>492
じゃ、どっちに送るの?
494デフォルトの名無しさん:2008/07/08(火) 22:31:23
たとえば80番をUPnPで設定するような香具師は居ない。
ルータで逆NATとか、DMZとかで設定したほうに届く。
その設定がなければ、そもそも届かない。
495デフォルトの名無しさん:2008/07/08(火) 23:19:38
いろはも理解してない奴らがルーターに穴あけてwinnyとか使ってるから恐ろしい。
496デフォルトの名無しさん:2008/07/08(火) 23:45:13
>>493
>じゃ、どっちに送るの?
これが答え、人間様でもわからんのに・・・
語弊があるが、こんな時に識別するための役割がポート
httpサーバーには80番、FTPサーバーには23番
同一ドメイン(グローバルIP)にアクセスしても所定のサーバーに
届いて処理を行うようになっている
ただ、>>494にもあるように同一ポートでも届く先を換えるやり方は
もちろんあるけど
497496:2008/07/08(火) 23:51:38
すまん 質問と答えがループしていた
ちょっと小一時間,説教されてくるOrz
498デフォルトの名無しさん:2008/07/09(水) 03:10:22
>>493
アンタがルータで設定した方のPCに送る
499デフォルトの名無しさん:2008/07/09(水) 07:55:28
ちょっと上に多分別の人がループバックができないとうまく行かない
ケースの質問してたでしょ。hosts書くほかない、で立ち消えになってるけど。
Globalのアドレスをlocalに割り当てとけばよいという意味だとおもうけど。

192.168.0.13 my.domain.com

と言う風に。これWebサーバは 192.168.0.13 Ftpサーバは 192.9.168.10 というような
場合はどうするの?
500デフォルトの名無しさん:2008/07/09(水) 09:08:03
192.168.0.13 www.my.domain.com
192.168.0.10 ftp.my.domain.com
とか
192.168.0.13 my.domain.com
だけで13にftpのproxy立てるとか色々あるんじゃない?
501デフォルトの名無しさん:2008/07/09(水) 09:28:52
>>500
わかりました。
外部に公開しているサイトの中で、ドメインにきっちりサービス名を付加しておけばよいのですね。
502デフォルトの名無しさん:2008/07/09(水) 09:43:52
hostsを見るやつだけがわかってりゃいいんだよ。
整合性も要らん
503デフォルトの名無しさん:2008/07/09(水) 09:53:38
>>502
こういう問題が意識されるのは、外部に公開しているhtmlファイルを
内部ネットワークから参照したいからではないのですか。
<a href="http://my.domain.com/...../xxx.html"> ... </a>
と混在して、
<a href="ftp://my.domain.com/.../yyy.csv"> .. </a>
のようなアンカが打ってある場合とか。
504デフォルトの名無しさん:2008/07/09(水) 10:02:59
>>503
そのケースだと、どちらにしても無理だと思うんだが。
505デフォルトの名無しさん:2008/07/09(水) 10:22:43
>>504
ですから、>>500 にならい、外部に公開しているHtmlファイルのドメインにサービス名をつけて
<a href="http://www.my.domain.com/...../xxx.html> ... </a>
<a href="ftp://ftp.my.domain.com/.../yyy.csv"> .. </a>
のようにすべて書き換え、内部ネットワークのすべてのPCの/etc/hostsに
192.168.0.13 www.my.domain.com
192.168.0.10 ftp.my.domain.com
を付け加える。
506デフォルトの名無しさん:2008/07/09(水) 10:38:21
ルーター替えるのが手っ取り早いけどな。
俺はこれが使えないルーターは買ったことないからわからんが。
ずっとYAMAHAだったしなー
507デフォルトの名無しさん:2008/07/09(水) 10:39:26
13にftpのproxy立てるのも有効だけど、13自身のftpが使いにくくなるなw
508デフォルトの名無しさん:2008/07/09(水) 10:55:14
じゃー間をとって11を創造して両方のproxyだー(なげやり)
509デフォルトの名無しさん:2008/07/09(水) 10:59:25
ああ、しまった、忘れてた
色々小細工しなくても外部のproxy経由で見ればブラウザの設定をするだけで問題なかったんだっけ
510デフォルトの名無しさん:2008/07/09(水) 11:13:37
>>506
マイクロ綜合研究所だと、トラフィックルーターって名打ってる機種だけかな。
あ、最近ソフトのバージョンアップすればできるようになったのかもしれない。
511デフォルトの名無しさん:2008/07/09(水) 13:02:19
もうめんどいからローカル用のDNS鯖立てる。
512デフォルトの名無しさん:2008/07/11(金) 17:58:11
え・・と ネットワークプログラミングスレだよな・・・
こんなノウハウ系の話題は歓迎だが
513デフォルトの名無しさん:2008/07/11(金) 18:12:32
そもそも どんな想定なんだろ?
公開サーバーを内部でデバッグするためならhotsで十分だし

たとえば、管理サーバーを内外でアクセスするなら
グローバルアドレス調べてサーバーと一致すれば内部と認識して
設定ファイルにかかれたローカルIPでアクセスするとか?
514デフォルトの名無しさん:2008/07/12(土) 06:50:02
通信対戦を行う3Dアクションゲームを製作しているのですが
頻繁に通信の同期ズレが発生します。
リプレイデータ等を見る限り、キー情報等の情報は完全に同期がとれているのですが・・・

双方のデータの初期化不良の可能性が高いのですがなかなか原因がつかめずにいます。

そこで3Dデータ計算で頻繁に用いられる浮動小数点型等はPCや状況によって
演算結果が変わる可能性があるという風にどこかで聞いた事がある事を思い出しました。
実際そのような事が本当にあるのでしょうか?
515デフォルトの名無しさん:2008/07/12(土) 08:57:59
同じOSで同じ開発環境ならそんなことはないだろ
ちゃんと受信したデータが正しいか確認してるか?
516デフォルトの名無しさん:2008/07/12(土) 11:56:57
Set8087CWのこと?
517デフォルトの名無しさん:2008/07/13(日) 09:28:12
>>514
昔のPentiumは浮動小数点の割り算を間違えるというバグがあってな…


…は関係ないけどな。CPUアーキテクチャが違うと誤差が出る可能性もあるが、
intel同士ならまず演算結果は同じになると思われ。
他の原因じゃね? ↓でも読んどけ。
ttp://bbx.hp.infoseek.co.jp/cgi-bin/bbx.cgi?log=49&vew=432
518デフォルトの名無しさん:2008/07/13(日) 09:39:15
>>514
中間結果をダンプして比較すれば原因をが解るんじゃないか
519デフォルトの名無しさん:2008/07/13(日) 09:43:19
>>514
浮動小数点演算にはCPUやライブラリ固有の誤差があるが、毎回結果が違うというようなものではない。CPUやライブラリが同一であれば同じ入力には同じ出力が得られる。
誤差の大きさはCPUのデータシートに明記してある。
520デフォルトの名無しさん:2008/07/13(日) 11:02:56
考えにくいけど、送受するデータをバイナリで送っていないとか
521デフォルトの名無しさん:2008/07/13(日) 11:50:23
意味不明
522デフォルトの名無しさん:2008/07/13(日) 11:57:30
馬鹿ですね
523デフォルトの名無しさん:2008/07/13(日) 22:12:10
struct とかを binary で送るのに endian と alignment の問題を意識して
きちんと処理してる? 基本だけど...
浮動小数点数ならフォーマットの違いも
524デフォルトの名無しさん:2008/07/13(日) 23:34:17
>struct とかを binary で送るのに endian と alignment の問題を意識して
>きちんと処理してる? 基本だけど...

してる

>浮動小数点数ならフォーマットの違いも

そっちはしてない
あるいは、そもそも実数を送らない
525デフォルトの名無しさん:2008/07/13(日) 23:39:58
計算式を送るのか
526デフォルトの名無しさん:2008/07/14(月) 01:25:21
なんかのクイズ?

同期ズレってあるけど
タイミングがズレる? 座標がズレる?
送信する前の座標を取る段階でズレてない?
キーを取った瞬間の座標とかクォータニオンそのまま
送ってるなら多分ずれるわな

キーがズレしないのならばおそらく、このスレとは関係ない
527デフォルトの名無しさん:2008/07/14(月) 01:34:48
あっそうか、物体の座標等々送っているわけでは無いだろ

キーデーター送って相手側でオブジェクト再現しようと
うまく再現されないんだ。それでキーデーターが同じで
それを元に計算してるのに計算結果が違うのは?って事だろ?

クォータニオンは使ってる?
そもそもキー取得→送信→再現って同期とるの
難しいけどどうやって取ってるの?
ちゃんとジッタバッファ使って同期取ってる?
528デフォルトの名無しさん:2008/07/14(月) 09:15:30
届いた瞬間に適用しているとか
529デフォルトの名無しさん:2008/07/14(月) 15:00:01
x86 シリーズの浮動小数点数はレジスタ表記で 80bit
だから、同じ計算でもずっとレジスタだけで計算するか
途中で時々メモリに書いて 64bit に丸めながら計算す
るかで結果の値が違うことがある。
530デフォルトの名無しさん:2008/07/15(火) 01:19:22
キーデータって入力したキーボードのキーのデータなの?
入力した時刻とか送ってる?

送るデータをもしキーボードのキーと時刻のデータだけだったら、
逆になぜ同期が取れるのかが俺には理解できない。
ちょっと相手を押したりダメージを与えて倒しただけでも
思いっきり同期がずれるでしょ。

ある程度はキャラクターの位置データとかも送らないと行けないと思うけど。
531デフォルトの名無しさん:2008/07/15(火) 10:05:53
それは仕様によるでしょ。
入力したデータが両者まったく同一であれば結果もまったく同じになる
532デフォルトの名無しさん:2008/07/15(火) 13:43:29
>>531
そのとおり仕様による

スレ違いだから誤解されるの承知で書くけど(現役でもないし)
例えば車ゲーみたいに絶えず動いているオブジェクトにおいて
キー入力の再現がmmSecでも変われば車の動きに誤差が出るしょ?
また、PC相手だとフレーム数も違うから、そのままキーを反映できないし
当然 V-SYNCのタイミングで更新掛けたり
同期バッファ(ジッタバッファ)で調整するわけだけど
>>514はそこまでやってるのかな?って
ちょっと調べたらDirectPlayは遅延を最小に抑える機能があるみたいだけど
あくまでも最小だし

そもそも私が質問を歪曲している可能性あるけど
まあ 本人居ないみたいだしスレ違いだけど
533デフォルトの名無しさん:2008/07/15(火) 14:13:50
そういや、乱数のSEEDを別々にあたえていてずれた、というのも聞いたことあるなw
534デフォルトの名無しさん:2008/07/15(火) 22:27:17
猫でもわかるネットワークプログラミング読んでみたんだけど、
非ブロックにしたかったらWIN32でメッセージ駆動にしなくちゃ
いけないものなの?メッセージ処理とネットワーク処理を
分離したいんだけど。
535デフォルトの名無しさん:2008/07/15(火) 22:27:18
514 は3Dアクションゲームって書いてあるんだから、
キーだけだと誤差が出ると思うけど。
ダイレクトプレイは UDP だからこっちの取りこぼしかも知れないし。
536デフォルトの名無しさん:2008/07/15(火) 22:34:53
>>534
俺はつい最近、ネットワーク周りをダイレクトプレイから WinSock に書き換えたんだけど、
イベントオブジェクトとマルチスレッドでメッセージからは完全に切り離せる。
ただ、実装してみてわかったけど、結局メッセージングの処理に近いようなコードを
自分で書くことになった。正直プログラムとしての複雑さはあんまり変わらないような気がするから、
メッセージングでも良かったかなと思ってる。

資料は「猫でも〜」と「Winsock2 プログラミング」っていう本。

これ以外もいろいろと見たけど、結局は「猫でも〜」を読んで感じをつかんで、
「Winsock2〜」 の方を読んで仕様を作って組むって事になった。
Winsock2 は多分今売ってる日本語の本ではベストだと思う。
537デフォルトの名無しさん:2008/07/16(水) 03:17:40
>>220
亀レスだけど
プロトコルヘッダーを書き換える方法もある(関連付け)
事前にインストール必要だけどね
SKYPEタイプとかでやっている方法
538デフォルトの名無しさん:2008/07/17(木) 01:00:33
>>534
猫でもシリーズは鵜呑みにしない方が良いよ
コーティングの一例として理解するなら良いけど
たまに酷いこと書いてるから
539デフォルトの名無しさん:2008/07/17(木) 03:06:45
PC内部で、パケットフィルタリング等の処理をしているプログラムが存在する場合
それを検出する事は可能ですか?
540デフォルトの名無しさん:2008/07/17(木) 12:25:42
>>539
検出する必要はないだろう
541デフォルトの名無しさん:2008/07/17(木) 16:41:25
P2Pの協力型アクションゲーム、例えばモンスターハンターの
竜のような敵へのダメージの通信方法なのですが、
我流でやってるもので、どうもイレギュラーなやり方でやってそうでちょっと心配に。
現在は、竜の同期をとりたいので、ホストが竜の動きをすべて受け持って計算、
クライアントは、竜にダメージを与えた場合、ホストに与えたダメージを通信してやって
ホストが、竜のHPを算出するみたいな感じで。

ホスト側の送信
ホストキャラの位置、HP、行動
竜の位置、HP、行動

クライアント側の送信
クライアントキャラの位置、HP、行動、竜に与えたダメージ

ほんと我流なので、ここはおかしいとか、こうしたほうが、同期がとりやすいとか
ありましたらご指摘ください。

542デフォルトの名無しさん:2008/07/17(木) 17:03:08
>>541
仲間内だけで遊ぶゲームだったらそれでもOKだと思う。
543デフォルトの名無しさん:2008/07/17(木) 18:19:39
>>514みたいなゲームで同期取ろうとすると毎秒60回送受信してるんだよな
同期できるのか?
544デフォルトの名無しさん:2008/07/17(木) 20:20:30
>>534
イベント方式もあるけどそれだと説明してるところがホントにすくない
めんどくさいけど同期型を通信相手ごとにスレッドでまわすのを作ってるよ
545デフォルトの名無しさん:2008/07/17(木) 20:30:15
>>541
それだと、クライアント改造されたり
パケットいじられたりしてすごいダメージ申告されたらおしまいだよな?
キャラクタの位置も自己申告?
ワープチートとかできそうじゃね?
CS型はLANとか高速な環境だけ想定した実装は楽だけど
それ以外の遅いノードが入っても大丈夫にするとか
データに欺瞞工作するやつをどうするのかとか考えると結構面倒だよな
操作と乱数表だけ同期するほうが楽だと思うけどなんで自己申告制?

あとボス以外の同期はまったく考えてない?
モンハンみたいにボス以外の同期を最初からあきらめてるゴミゲーは消えてほしい
シリーズ重ねてるのにいまだに直ってないとか信じられない
546デフォルトの名無しさん:2008/07/17(木) 22:36:39
>>545
クライアントが改造されない(信頼が置ける)場合には、
541 のスタイルは実は意外と良い選択。当たり判定とか厳密に取れるし、
遅れも出ないし。
547デフォルトの名無しさん:2008/07/18(金) 02:29:08
信頼のおけるクライアントなんぞ、無い。
548デフォルトの名無しさん:2008/07/18(金) 03:14:30
だからこそ>>542が仲間内で、って言ってるんだろ
RMTが成立するような廃人御用達MOなら、いろいろ改造対策の必要があるが、
単にオンプレイ楽しみたいだけなら、やる意味ない
549デフォルトの名無しさん:2008/07/18(金) 03:56:58
仲間内という前程が根拠も無い話なんだが、どうしてそれを持ち出すのか
550514:2008/07/18(金) 08:43:17
同人レベルですので、とりあえず仲間内や狭い範囲です。
チート対策等は、次のステップとして、
いまの課題はいかに、同期をとるかを考えていまして。
551デフォルトの名無しさん:2008/07/18(金) 13:12:07
日本人の多くってゲームを楽しむってことを知らないよなぁ
552デフォルトの名無しさん:2008/07/18(金) 16:25:39
よぉ韓国人
ゲームやりすぎて死ぬとか、ほんと人生楽しんでるよなー
553デフォルトの名無しさん:2008/07/18(金) 18:01:58
仲間内の狭い範囲だとしても
その仕様だとプレイヤーとか敵が増えるに比例して
通信量も増えるから出来ることが限られる
どのくらいのパケット圧縮やら遅延をするのかにもよるが
データそのものを自己申告制にするのはできるだけやめるべき

LAN内限定とか言うんであれば話は別だが
554デフォルトの名無しさん:2008/07/18(金) 19:45:33
当たり判定やダメージ計算をサーバーに処理させると、
どうしてもアクション性が落ちて、気持ちよくないゲームになってしまう。
本当にこういう話は、ケースバイケース。

>>553
実際、ネットワークゲームでパケット圧縮って効果あるの?
555デフォルトの名無しさん:2008/07/18(金) 19:48:10
>>554
サーバーからクライアントに送るデータの方は結構効果あるよ。
逆は殆ど無い。気休め程度。
556デフォルトの名無しさん:2008/07/19(土) 21:36:22
>>540
PCのネットワーク帯域に影響を与えている可能性のあるフィルタを列挙したいのです。
557デフォルトの名無しさん:2008/07/20(日) 00:58:42
ワクチンのように特定の動作を行うソフトを列挙すればいい、それだけ
ネットワークの範囲外だけどな
558デフォルトの名無しさん:2008/07/20(日) 01:17:44
>>556
OSをインストールした直後よりも性能が落ちてるか明白なのか?だったら一個ずつソフトを止めてみればいいじゃん。
559514:2008/07/20(日) 18:30:06
>>553
現在、ホストキャラの座標XYZのfloatで12バイト、行動に2バイトで14バイト
ホストボスの位置も同じく14バイト
でホストは28バイトの送信
クライアントは座標XYZ、行動2バイトで14バイト
ボスに、ダメージいくらあたえたかの2バイトで16バイトの送信です。
自己申告制に変わる方法としてよいのがあれば教えてください。

560541:2008/07/20(日) 18:30:56
514でなかったです
541です。
561デフォルトの名無しさん:2008/07/20(日) 20:17:30
>>559
ネトゲ作ったこと無いから適当なんだけど・・・・

ホストでボスキャラと全キャラ位置やダメージを計算して、クライアントにブロードキャストさせたほうが委員でない?
クライアントはホストから落ちてくる情報を補間して表示する。
攻撃コマンドはホストに送ると同時にモーションを開始、ホストからダメージ情報を受け取るとか
562デフォルトの名無しさん:2008/07/20(日) 21:32:10
完全なP2Pでフレームレートに等しいアクション性が必要でないならホストとゲストに分けてホスト側で全部処理する方が楽だよ、
ゲスト側はキー操作のトリガー条件だけホストに送って、ホスト側で全プレイヤーの位置情報とモーション、衝突判定をする。
FPS系のゲームで個別処理しているのはとりあえず見たこと無い。

ただ多人数でやる場合ホストが落ちたあとに継続させる必要があるといろいろ面倒かもしれないけど。


563デフォルトの名無しさん:2008/07/20(日) 23:55:41
>>562
遅い攻撃はサーバーで
速い攻撃はクライアントで
っていうのをどこかで見たな。

MMO なんか戦闘自体が単調でつまらないのは、
全部サーバで処理してるからだろうな。
564デフォルトの名無しさん:2008/07/21(月) 00:00:58
格闘ゲームみたいに完全に近い同期が必要な場合はどうするんだろ
格闘ゲームくらいなら何とかなりそうだが、
東方花映塚にオブジェクト数が増えると、同期とれんだろ
565デフォルトの名無しさん:2008/07/21(月) 00:02:37
違った、東方緋想天だ
東方花映塚ならボタンとおじゃまぷよさえ同期できりゃいい
566デフォルトの名無しさん:2008/07/21(月) 19:55:02
FPSなんかじゃ入力予測や補完もしてる位だからなぁ
格ゲーでもEMU方面でそんなの有るしね。

リアルタイム性が求められる物は、
完全同期よりもラグをいかに誤魔化すかの方がいいのかもしれない。
567デフォルトの名無しさん:2008/07/22(火) 17:10:46
不特定多数相手ならそれしかないだろjk
568デフォルトの名無しさん:2008/07/23(水) 21:17:02
http://wiki.game-develop.com/index.php?%A5%D7%A5%ED%A5%B0%A5%E9%A5%DF%A5%F3%A5%B0%2FMMORPG
ここに書かれている WEBサーバ経由で間接的に告知 についてなのですが、
サーバ起動時に自分のグローバルIPアドレスを調べて、ホームページに出力し、
クライアントがそのホームページを開くと、自動的にサーバのアドレスに飛ぶ
ようにするってことですか?
569デフォルトの名無しさん:2008/07/23(水) 21:27:02
>>568
板違い
570デフォルトの名無しさん:2008/07/23(水) 22:30:26
>>568
するってことですか?って聞かれても・・・
最近このスレ自由だけど さすがに相談という
形をとろうな
571デフォルトの名無しさん:2008/07/24(木) 00:26:35
少しスレ違いだとは思いますが、教えていただきたいことが。
猫でもわかるネットワークプログラミングって、スレッドを使った、サーバ、クライアントのサンプルプログラムとかってありますか?。
572デフォルトの名無しさん:2008/07/24(木) 00:34:47
>>571
目次みたらスレッドを使ってるのはなさそうだった
573デフォルトの名無しさん:2008/07/24(木) 01:26:45
>>568
そのホームページへのアクセスはどうやってするの?
もし、DDNS とか使ってるんだったら、クライアントはそっちから IP を引けばいい。
ホームページにIPを出力する技術があるんだったら、
ホームページの方から MMO のサーバの IP を拾わせればいい。

DDNS みたいなことをやって、ネームサーバに登録したいって事か?
全くやりたいことが見えない。
574デフォルトの名無しさん:2008/07/24(木) 07:32:52
>>569
すいません、プログラミングではありませんね。
>>573
なるほど、意味がわかりました。
ありがとうございます。
575デフォルトの名無しさん:2008/07/24(木) 19:53:38
>>571
ウインドウメッセージをつかった非同期のやつがメイン
イベントのはまったく紹介されてない
ウインドウメッセージつかわない同期型を最初に紹介してるので
それを自前でスレッド型にかえることになるかな


8人くらいまでで遊べるネットゲームを作りたくて
P2P型のネットワークを想定して作り出したんだけど
最初にホスト役をやる奴にゲスト1が接続にいくのはいいんだが
ゲスト2がホストに接続したときゲスト1とゲスト2をどう接続するか迷う
ホストからいま誰がつないでるのかきいてリストを送ってもらって
それを見て参加中のメンバー全員につないでく方法とってるんだけど
もっとエレガントな方法があるんだろうか
DirectPlayとかそこらへんキニシナイでつかってたけど
いざ自分が実装するとけっこうめんどいもんでつね
576デフォルトの名無しさん:2008/07/24(木) 21:52:14
>>575
ホストがデーター交換する形では?
577デフォルトの名無しさん:2008/07/24(木) 21:53:59
この板で「データー」にお目にかかれるとは。
578デフォルトの名無しさん:2008/07/25(金) 09:36:37
出〜た〜
579デフォルトの名無しさん:2008/07/25(金) 16:56:07
スレ違いかもしれませんが、すみません。質問させてください。

Linux(RedHat Enterprise ES R3)のUDPソケットを利用してプログラムを
作ってるんですが、高トラヒック下の場合に、"sendto()"は成功しているが、
同サーバで動作させているtcpdump等のパケットパケットモニタ上では、
該当送信データが無い (対向装置側でtcpdump等で見張っていても、届いていない)
といった状況が発生しており、困っています。

この場合、ドコを調査すれば原因の究明が出来るでしょうか?
580デフォルトの名無しさん:2008/07/25(金) 17:07:34
質問になりますが、クライアントがサーバにうまく接続できない場合
いろいろな原因が考えられると思うのですが、どういった順序、
どんなツールで調べるものなのでしょうか?
すいませんがよろしくおねがいします。
581デフォルトの名無しさん:2008/07/25(金) 17:16:43
>>579
そもそもUDPは信頼性が保証されないプロトコル
バッファが一杯だとか適当な理由で黙って捨てられることもある
届かなくても大丈夫なようにプログラムを作るべし
582デフォルトの名無しさん:2008/07/25(金) 17:30:19
>>580
・サーバ上で netstat -an を実行して問題のポートが LISTEN になってるか調べる
・サーバ上で telnet localhost port で接続できるか調べる
・クライアントから telnet serveraddr port で接続できるか調べる
・クライアントがどの関数で失敗してるか調べる
・失敗した関数のエラーコードを調べる
・Windowsファイアウォールとかインターネットセキュリティ的なものをすべて切ってみる
583デフォルトの名無しさん:2008/07/25(金) 18:00:09
>>582
丁寧にありがとうございます。
試してみます。
584デフォルトの名無しさん:2008/07/25(金) 21:05:38
httpとhttpsが同じにあつかえるライブラリは無いですか?
585デフォルトの名無しさん:2008/07/25(金) 21:06:57
あるよ
586デフォルトの名無しさん:2008/07/25(金) 21:25:21
うpきぼんぬ
587デフォルトの名無しさん:2008/07/26(土) 21:04:09
ggrks
588デフォルトの名無しさん:2008/07/30(水) 08:37:00
格闘ゲームのような完全に挙動が一致するリアルタイムのネットゲームを作っています

現在winsockのTCPブロックしながらデータ転送を行ってるのですが
1回の転送が4バイト、光回線同士で1秒間に10回程度の送受信できているのですが
速度はこんなものしかでないのでしょうか?
589デフォルトの名無しさん:2008/07/30(水) 08:42:42
一回の転送が少なすぎる 一度に8Kバイトとか遅れるだろ
590デフォルトの名無しさん:2008/07/30(水) 09:02:00
UDPとは
UDPはデータが宛先に届いたかどうかをUDPは関知しないため、TCPと異なりデータの到着を保障しません。
そのため、UDPを使った通信を行うプログラムを書く場合には、パケットがネットワークの途中で消えてしまうことも想定しなくてはなりません。このような制約がUDPにはあるため、確実にデータを届けたいアプリケーションではTCPを使うのが一般的です。

このように書くとUDPは使いにくいだけに思えますが、利点もあります。

複数の相手に同時にデータを送信できる(ブロードキャスト、マルチキャスト)
TCPよりもリアルタイム性が高い

http://www.geekpage.jp/programming/ruby-network/udp.php
591デフォルトの名無しさん:2008/07/30(水) 09:15:48
>>589
入力されたキー情報をやりとりしてるだけなので一回の転送量は大きくならないのですが
格闘ゲームでキー情報をやりとりするって状態がそもそも間違ってるのでしょうか?
592デフォルトの名無しさん:2008/07/30(水) 09:43:44
4バイトを連続して送るなら纏めた方がいいってこと
それで足りているんだったら4でいい
593デフォルトの名無しさん:2008/07/31(木) 11:18:14
UNIXのソケットプログラミングと、
Win32のソケットと、
別々に書かないといけないんですか?

それとも、なんかライブラリ導入したら、ソース共有できたりします?
594デフォルトの名無しさん:2008/07/31(木) 11:19:31
boost asio
595593:2008/07/31(木) 11:24:20
サンクス
boostですか、ちょっと尻ごみ。C++ Builderにboostが添付されるまで待つかな。
596デフォルトの名無しさん:2008/07/31(木) 12:22:44
>>595
Asioって 「Header only」だから、ダウンロードして、ヘッダファイルをインクルードするだけで使えるはず。
http://www.boost.org/doc/libs/1_35_0
597593:2008/07/31(木) 12:35:09
ラジャ。binary見つけマスタ。
598デフォルトの名無しさん:2008/07/31(木) 16:47:02
TCPで

sendで100byte投げたら
recvで50byteしか飛んでこないとかありますか?
recvのバッファサイズは100です
599デフォルトの名無しさん:2008/07/31(木) 16:50:19
うん
もういっかいrecvしたら残りが飛んでくると思う
それでも足りなかったらもういっかいrecv
というか全部来るまでrecv繰り返せ
600デフォルトの名無しさん:2008/07/31(木) 17:18:11
>>596
でもVCだとインストールに超時間掛かるよね
601デフォルトの名無しさん:2008/07/31(木) 17:28:10
やっぱ、boostつらいね。
時代というかコンパイラが追い付いてない。
602デフォルトの名無しさん:2008/08/02(土) 00:24:33
>>598
普通にアル ↑のほうでも論議されていたが
100がまるごとくることもあるし
25:25:25:25でくることもあるし
50:50でくることもあるし
30:20:10:40でくることもある

だから、データ送信の区切りとなる目安みたいなのを搭載する必然性が生まれる
普通はデータの頭にあと何バイトで終わるか情報をつける
もしくはデータの終端に終端文字をつける
あるいは両方を使う
603デフォルトの名無しさん:2008/08/02(土) 00:26:46
よくゲームとかで相手との通信速度を知る目安としてPingって出てくるけど
あれって、相手にパケットを送信して、それを相手が受信して、
受信しましたメッセージを返してきて、それを受け取るまでにかかった時間という認識でOK?
604デフォルトの名無しさん:2008/08/02(土) 00:33:30
そのゲーム作った奴に聞け
実装なんて適当なんだよ
605デフォルトの名無しさん:2008/08/02(土) 01:42:17
>>604
で?
606デフォルトの名無しさん:2008/08/02(土) 01:57:32
どう見ても、604は603質問の意味をわかってない。
まさかpingを知らないとも思えないが
日本語の方が若干不自由なのかもしれない。
607デフォルトの名無しさん:2008/08/02(土) 02:19:37
このスレを見ててping知らないとか無いだろ
608デフォルトの名無しさん:2008/08/02(土) 02:55:33
>>603
OK
609デフォルトの名無しさん:2008/08/02(土) 07:46:21
pingコマンドの出力は確かに >>603 の時間だけど、
pingっていっても ICMP ECHOとは限らないんじゃない?
IRCみたいにPINGとPONGというプロトコルが定義されてるかもしれないし
610デフォルトの名無しさん:2008/08/02(土) 07:57:52
>よくゲームとかで相手との通信速度を知る目安としてPing
は、つまり俗に言う「ping値」とは、pingコマンドを実行して表示される値のことですけど。
611デフォルトの名無しさん:2008/08/02(土) 10:31:53
>>610
ゲーム自体が用意しているping機能(自動的に相手とのレイテンシを表示してそれをping値として画面に表示してくれる)と、
C:\WINDOWS\system32\ping.exe の両方の意味がある、ってことだろ。

>>603はどっちを言っているのかわからない
>>604が言ってるのは前者
>>606-607は後者しか知らない
どちらにせよ答えは>>608で正解
612デフォルトの名無しさん:2008/08/02(土) 10:46:23
へー、そんなゲームあるのか。知らなかったよ。
613デフォルトの名無しさん:2008/08/02(土) 10:53:37
つーか、レイテンシを表示する機能があるのはともかく、
それにpingなんて単語を使うのかよ。
614デフォルトの名無しさん:2008/08/02(土) 11:06:35
>>613
使うんだよ。それが。
615デフォルトの名無しさん:2008/08/02(土) 13:33:28
セキュリティソフトを入れられてたらPINGできないからゲームなどは自力で計るんだよ
616デフォルトの名無しさん:2008/08/02(土) 14:39:16
ping値って初めて聞いた
ラウンドトリップタイム(RTT)って言えよ
617デフォルトの名無しさん:2008/08/02(土) 14:51:18
618デフォルトの名無しさん:2008/08/02(土) 14:59:23
619デフォルトの名無しさん:2008/08/03(日) 01:52:29
ホームページ然り、ブックマーク然り
正しくない意味でも普及させてしまった物勝ちってか
620デフォルトの名無しさん:2008/08/03(日) 02:01:53
ほとんどは無知なマスゴミでそ?
ハッカーなんていい例だよね。
621デフォルトの名無しさん:2008/08/03(日) 04:43:45
でも実際のアプリだとUDPのechoでもpingのより時間掛かるんだよね
622デフォルトの名無しさん:2008/08/03(日) 11:42:52
実際の通信でやっている処理のほうがより正しい時間の計り方だろ
623デフォルトの名無しさん:2008/08/03(日) 12:30:54
       |
   \  __  /
   _ (m) _ピコーン
      |ミ|
    /  `´  \
     ('A`)    ならicmpで通信すればいいのか…
     ノヽノヽ
       くく
624デフォルトの名無しさん:2008/08/03(日) 13:57:19
だから、ルータやセキュリティで切られてたらダメだろ?いちいちユーザに設定変更しろと言うのか?
625デフォルトの名無しさん:2008/08/03(日) 14:19:54
>>624
ゲームするために使ってポートつついて UDP echo でええんちゃう?
ポートあかなきゃ、ゲームすら出来ないって話なのでは?
626デフォルトの名無しさん:2008/08/03(日) 14:21:39
>>624
そうだよ。ネトゲなんて勝手にWell-knownじゃないポート開くのが一般的なんだから、使うポートあけるのは当然。
627デフォルトの名無しさん:2008/08/03(日) 21:00:48
winsockでUDPを使う場合で質問があります
データ受信時で喪失する場合があるとのことですが、
それはまるっきりデータが届かないのでしょうか?それともデータの一部分だけ届くとかってことでしょうか?

例えば
sendでABCDEFと一回で転送して、受信の方でABCとかCDEとかだけ届く場合がある
それとも届くときはABCDEF全部届く、届かないときは1つも届かないとかでしょうか?
628デフォルトの名無しさん:2008/08/03(日) 21:07:09
なんでもあり
629デフォルトの名無しさん:2008/08/03(日) 21:10:02
それでは
ABCDEFって何度も転送して、6バイトデータを受信できた場合に
それの中身がABCDEFじゃない場合はあるのでしょうか?
630デフォルトの名無しさん:2008/08/03(日) 21:17:57
届く時も届かない時も基本はパケット単位だからABCだけ届くことはない

チェックサムが合ってなければ捨てるからデータが化けてる確率はかなり低い
普通は無視して大丈夫だと思われ
631デフォルトの名無しさん:2008/08/03(日) 21:23:52
ありがとうございます
632デフォルトの名無しさん:2008/08/03(日) 21:51:05
UDP自体のチェックサムは、「オプションである」という罠があるけどね。
まー、大抵はレイヤ1でそれなりのチェックがかかってるからそんなに
問題ないけどネ
633デフォルトの名無しさん:2008/08/03(日) 23:05:48
届かない可能性があるっていう心配だけしてればいいの?
634デフォルトの名無しさん:2008/08/03(日) 23:47:28
届く順番や一度に送ったバイト数などなんでもあり
635デフォルトの名無しさん:2008/08/04(月) 01:42:52
>届く順番
これは正しいが
>一度に送ったバイト数などなんでもあり
UDPはパケット単位でしか扱われない
下位レイヤで切られて一部消失したら全部なかったことになる
636デフォルトの名無しさん:2008/08/04(月) 01:49:14
100M送ったら0か100なのか?
637デフォルトの名無しさん:2008/08/04(月) 01:54:10
100M送ったら100M全部届かない限り消失しちゃうんだろう
1Mの受信確率が99%あるとしたら、100M全部成功するのは100回に一回か

とかそんな風に解釈したが
638デフォルトの名無しさん:2008/08/04(月) 01:57:58
誰か黄色い救急車でも呼んでやれ
639デフォルトの名無しさん:2008/08/04(月) 02:13:46
時にはTCPのことも思い出してあげてください
640デフォルトの名無しさん:2008/08/04(月) 02:17:29
>>635
パケット単位って128バイトってことでしょうか?
それ未満のデータなら届くか届かないかのどちらかになるってこと?
641デフォルトの名無しさん:2008/08/04(月) 02:18:11
UDPの話をしているんだ
空気読め
642デフォルトの名無しさん:2008/08/04(月) 02:19:28
空気の前に>>1のリンク先読め
643デフォルトの名無しさん:2008/08/04(月) 02:26:09
上で議論されてましたね。。。
もう3ヶ月romります 失敬(-3-)ノシ
644デフォルトの名無しさん:2008/08/04(月) 02:39:19
学校の宿題か。
645デフォルトの名無しさん:2008/08/05(火) 19:07:52
ねこわか読んだけど、文字列送信する方法は載ってるけど
数値を送信する方法載ってないので、itoaとかatoi使って
数値を文字列に変換して送信して受信側で数値に戻すとかめんどことやってるんだけど
一般的に数値を送るにはどういう手法をとればよいでしょうか?
646デフォルトの名無しさん:2008/08/05(火) 19:11:38
ファイルと変わらんよ、自分の決めたやり方でやればよい。
バイナリのままやるなら、これもファイルと同じようにエンディアンに気をつけて。
647デフォルトの名無しさん:2008/08/05(火) 21:49:26
一般的にネットワークバイトオーダ(ビッグエンディアン)で送ります。
まあ自分で作ったアプリ同士なら何でもありなんだけど。
648デフォルトの名無しさん:2008/08/06(水) 13:23:35
htons, htonl, ntohs 辺りでググれ
649デフォルトの名無しさん:2008/08/06(水) 15:47:55
アプリベースならトルエンディアンで送っても大差ないような。
bigendianってsparc位しか生き残ってないんじゃなかろうか?(MIPSも組み込みベースじゃLittleばっかりだし)
650デフォルトの名無しさん:2008/08/06(水) 16:31:49
双方合意してりゃどっちでもいいよ。
いわゆるTCP/IPはbig endianで合意が取れてるってだけ。
651デフォルトの名無しさん:2008/08/07(木) 00:27:59
big endianのほうが素直だとか美しいとか
わけわからん主張する人ってすっかり居なくなったな
652デフォルトの名無しさん:2008/08/07(木) 00:34:48
今やMACもインテルだもんな
653デフォルトの名無しさん:2008/08/07(木) 00:56:11
little endianの方が素直な気がする・・・
654デフォルトの名無しさん:2008/08/07(木) 02:29:40
PCに限って言えばね
655デフォルトの名無しさん:2008/08/07(木) 05:14:29
ビッグエンディアンの取り得ってダンプリスト見るときに見やすい、ぐらいのものかなって思う。
656デフォルトの名無しさん:2008/08/07(木) 06:32:13
UDPでデータを受信した際に、相手のIPアドレスを取得するにはどうすればよいでしょうか?
657デフォルトの名無しさん:2008/08/07(木) 10:12:15
>>649
PowerPCが基本ビッグエンディアンだから、いまどきのゲーム機はぜんぶ
ビッグだと思われる。

658デフォルトの名無しさん:2008/08/07(木) 10:14:03
>>657
PSPはリトルエンディアンww
659デフォルトの名無しさん:2008/08/07(木) 11:53:46
>>656
recvfromで受信すれば、第5〜6引数に返ってくる
660デフォルトの名無しさん:2008/08/07(木) 11:54:28
>>656
recvfromの説明を良く読めば解るよ
661デフォルトの名無しさん:2008/08/07(木) 22:44:29
>>659-660
ありがとうございます
662デフォルトの名無しさん:2008/08/08(金) 23:24:54
>>633
UDPは届かないこと前提だけど今時は素直に届く確立高いから
全部破棄で最初からとかって非効率な実装でも良いよ
もちろんケースバイケースね
663デフォルトの名無しさん:2008/08/08(金) 23:31:16
それと上にもあるけどUDPの方がTCPより
早いというのは偏った迷信だから気をつけて
664デフォルトの名無しさん:2008/08/09(土) 09:02:07
「偏った迷信」って何だよ
日本語で頼む
665デフォルトの名無しさん:2008/08/09(土) 10:12:59
ごめん 迷信じゃなくて信仰
少し前 上司からTCPよりUDPの方が早いからUDP使えと言われた

最近 UDPの質問増えてるけど
TCPとUDPの向き不向き考えて選択してるのかな?っと

UDPのデータが保証されないって欠点ではなくて
利点なんだけど
666デフォルトの名無しさん:2008/08/09(土) 12:15:13
>>665
君、このスレ向いてないよ。消えてね。
667デフォルトの名無しさん:2008/08/09(土) 12:19:30
なんだその僻みのようなレスは
668デフォルトの名無しさん:2008/08/09(土) 14:15:16
向き不向きを知らずにUDPを選ぶ奴はいないんじゃない?
少なくとも巷の参考書は基本的にTCPだし
UDPを知らなくてもTCP(/IP)は聞いたことがあるってのが普通だろうし
669デフォルトの名無しさん:2008/08/09(土) 14:17:42
TCPのが速いの?
670デフォルトの名無しさん:2008/08/09(土) 14:38:43
>>669
おおざっぱに言うと
1. 信頼性が必要な、大量のデータを流す場合、TCPの方が速い
2. 小さなパケットで反応速度を求める場合、UDPの方が速い
3. 再送してる余裕がなくてデータの破棄が許される場合、UDPの方が速い
671デフォルトの名無しさん:2008/08/09(土) 14:46:54
4.UDPで信頼性を確保する為に上位プロトコルを作ると、大抵TCPの方が速い。

4.をやる奴はバカ。
672デフォルトの名無しさん:2008/08/09(土) 14:58:10
TFTPはバカってことで
673デフォルトの名無しさん:2008/08/09(土) 15:08:28
>>672
ある意味TCP実装するだけの資源がないところでしか使われてないのは現実だろ?

下手なものつかまされると、イーサネットフレームレベルからブートストラップ
するんだが、それは別の話だろ?
674デフォルトの名無しさん:2008/08/09(土) 15:10:24
急にスレのレベルが下がった
675デフォルトの名無しさん:2008/08/09(土) 22:08:09
skypeだってUDP使ってんだろバカ
676デフォルトの名無しさん:2008/08/09(土) 22:31:13
>>675
マジで馬鹿だなお前
677デフォルトの名無しさん:2008/08/11(月) 02:19:40
>>668
>向き不向きを知らずにUDPを選ぶ奴はいないんじゃない?

基本そうだけど最近 夏休みのせいか
>>669のようなのが多い

>>675
音声はUDPの方が向いてる。TCPで再送されると
遅延した音声がたまってく
別にホールパンチング用にUDP使ってるわけではない

678デフォルトの名無しさん:2008/08/11(月) 02:27:56
>>677
向き不向きを知らずにUDPを選んでる人なんて居ないのに
>それと上にもあるけどUDPの方がTCPより
>早いというのは偏った迷信だから気をつけて
みたいなこと言い出す奴がいるから
>TCPのが速いの?
みたいなレスが付く
679デフォルトの名無しさん:2008/08/11(月) 04:12:31
ふ〜ん
680デフォルトの名無しさん:2008/08/11(月) 11:39:02
NFSも昔UDPだったけど、いまはなにも言わなければTCPだし。
681デフォルトの名無しさん:2008/08/12(火) 21:40:43
最近はネットワーク格ゲーですら、TCP/IPでやりとりするぜ
高速回線なら50ms程度の遅れで済む

まぁ3〜4フレ遅れるからローカルで動いていたゲームと同じ感触ってわけにはいかないが、
もともとそういう遅れのあるゲームとして実装しておけば(ローカルプレイの時もわざと遅延させる)
たいして気にならない

そもそも、本当に「UDPにしなきゃスピードが足りなくてどうしてもだめだ!」ってなってから手を出すべきで
最初は安定性が高いTCP/IPで組んでみるべきだと思うよ
682デフォルトの名無しさん:2008/08/12(火) 21:58:10
他のゲームをやって愕然とするわけだな。
683デフォルトの名無しさん:2008/08/13(水) 12:27:56
なにその光回線同士以外お断りゲー

たしかにそういうのが出てきてるから困る
ADSLで満足してるわけだが
684デフォルトの名無しさん:2008/08/13(水) 16:23:18
もはや、光回線以外を視野にいれた設計をするコストがもったいない
アクションゲームをネット対戦したいという段階で、光以外の回線を使っているのが悪いと思う
685デフォルトの名無しさん:2008/08/13(水) 18:22:06
コストがもったいないとかどんだけ傲慢なんだよとは思うが
せめてそういうゲームは光回線以外では遊ぶなと明記してほしい
686デフォルトの名無しさん:2008/08/13(水) 18:28:34
>>685
いや、あくまで個人制作での話ですよ

結局「遅れてないように見せかける」のはできても、実際に遅らせないようにするのは不可能なわけで
通信タイム差が0.5秒もあるような環境でまともな通信対戦格ゲーができるわけもなく・・・

レースゲームとかならぎりぎりまでがんばるかもしれないけど
687デフォルトの名無しさん:2008/08/13(水) 18:53:43
外国向けにリリースしないのならいいんじゃね?
688デフォルトの名無しさん:2008/08/14(木) 01:15:48
バンド幅とレイテンシーがごっちゃになってる時点で無駄な議論だ。
689デフォルトの名無しさん:2008/08/14(木) 03:00:31
レイテンシで困ることは多々あるが
バンド幅で困ることってある?
どんなゲーム作ったら困るのか例があったら教えてほしいわ

操作同期系しか作ったことないんでバンド幅で困ることはないな
690デフォルトの名無しさん:2008/08/14(木) 14:06:30
そもそも
>>681は初心者用の話だよな・・・
いつのまにはネットワークゲーム論になってるな
とりあえず初心者はTCPの方が良いだろ
環境に左右されるUDPだと繋がらない時の問題把握が難しい
まあ ゲームだと繋がらなくてもムリの一言ですむけど
691デフォルトの名無しさん:2008/08/15(金) 00:17:50
質問です。
接続している2つのクライアントに、まったく同じデータを流し続けるサーバープログラムを組みました。
クライアントには受信したデータを出力する機能をつけているのですが、
ごくごくまれに、データに「抜け」が発生するようなのです。

どれくらいまれかというと、
サーバーは::sendで8バイトのデータを、毎秒60回2つのクライアントに流し続けて一時間。
それで送ったはずの8バイトが1個抜けてしまうか、抜けないか程度です。

winsockのTCP/IPで通信を行っているのですが、このようなことは、この程度の頻度であることなのでしょうか?
正確さをきすならば、TCP/IP通信であってもデータのCRCチェックなどを行うべきなのでしょうか?
692デフォルトの名無しさん:2008/08/15(金) 00:25:37
ねえよ
693デフォルトの名無しさん:2008/08/15(金) 00:29:11
>>691
TCP/IPにそんなことがあってたまるか。回線を疑えよ。
694デフォルトの名無しさん:2008/08/15(金) 00:38:54
どう考えても回線よりバグの方が農耕だろ
695デフォルトの名無しさん:2008/08/15(金) 01:07:31
非ブロッキングだったら、sendが渡されたデータ全部を送れない場合がある
戻り値を確認しる
696デフォルトの名無しさん:2008/08/15(金) 02:17:41
>>691
本当にごくごく稀にそういうウンコ回線なプロバイダがないわけではないが
よほどひどいのでない限りはエラーで切断されるのが普通
>>695じゃないが普通に処理がブロックされるタイプのも作ってみて
同じ症状がでるか確認してみるといいかもな
697デフォルトの名無しさん:2008/08/15(金) 07:51:16
送ったデータとの差異なのか
2つのクライアント間での差異なのかもわからん
698デフォルトの名無しさん:2008/08/15(金) 08:05:49
>>691
他にも書いてる人がいるけど、send, recvの戻り値チェック

再現する最小限のソースを晒せば、おそらくすぐ解決するよ
699デフォルトの名無しさん:2008/08/15(金) 08:07:58
そんだけじゃ状況がわからなすぎる
例えばマルチスレッドでうんこな組み方してたらどんなことが起きてもおかしくない
700デフォルトの名無しさん:2008/08/15(金) 08:39:30
>>692-699
ありがとうございます。
やっぱりTCP/IPの信頼性>>>>越えられない壁>>>私のプログラム
ですよね。
アドバイスに従っていろいろやってみます。

char buffer[8];
for(int i = 0; i < 2; ++i)
{
::send(ryaku); // ノンブロッキングモード
}
なので、同じデータを送っているのは確実です。
受け取る側はrecvのブロッキングモードなので、これもまぁ漏れはないかと。

>>695が一番怪しそうなので、チェックをかけてみます。
何分再現が少ないので、報告は遅くなるかと思います。
701デフォルトの名無しさん:2008/08/15(金) 09:44:17
うは やっぱりSENDの戻値とってね〜
オワットル
702デフォルトの名無しさん:2008/08/15(金) 10:06:36
技術スレでわざわざ煽る必要はない。オワットルね>>701
703デフォルトの名無しさん:2008/08/15(金) 10:09:10
毎秒60回*8バイトってことは、480バイト/sか
それでsendのバッファがあふれるなんて、ありえるかなぁ・・?
704デフォルトの名無しさん:2008/08/15(金) 11:28:21
>>703
ループバックでやってもあふれるときはあふれる。
バイト数が問題ではない。
705デフォルトの名無しさん:2008/08/15(金) 11:31:37
>>702
メモリが確保できたかどうか調べるのとは訳が違う。
706デフォルトの名無しさん:2008/08/15(金) 11:33:22
>>704
そうなんだ。俺も結構送信に関しては油断してたかも
sendバッファが64KBだっけ?デフォだと。確保されるはずだから、大丈夫だろうって感じで
707デフォルトの名無しさん:2008/08/15(金) 11:35:48
>>706
send バッファがどれぐらい開いてるかわかるの?
708デフォルトの名無しさん:2008/08/15(金) 11:42:05
>>707
64KBの送信バッファをあふれたということは、64KB分遅延が発生してるってことじゃん?
ファイル送信系のツール作る時は当然簡単にあふれるから、sendの返り値を気にして作ってたけど

細かいデータをちびっとだけ同期するような、なんつーんだ?同期サーバー?ではあふれないと決め打ちしてた(油断)わーと
>>703の計算でいうと、64KBの遅延=136秒の遅延だろ?
10秒データが届かないとタイムアウトクローズするように作ってたから、そんな遅延が発生するほどのバッファあふれは気にしたことなかったなー

何にしろ700のバグが治るといいな
709デフォルトの名無しさん:2008/08/15(金) 11:49:08
>>700
sendの戻り値見てない理由は?
710デフォルトの名無しさん:2008/08/15(金) 11:53:19
>>708
まず、64kb 決め打ちじゃない。
それに、OS側のTCP/IP レイヤの処理が追いついていない可能性とかは無視?

とにかくそういう不確定な要素が多い物なのに、
なぜ、do while をつけるのを嫌がるのかが俺には理解できない。
そこまで条件判断を入れないことにこだわる理由がわからない。
711デフォルトの名無しさん:2008/08/15(金) 11:57:30
>>710
いや、別にsendの帰り値をしっかり見るべきなのは100%正しいって
そんな責めるように言うなよ

今ぐぐってみたが、TCP/IPの送信バッファのデフォルトサイズは32KBだそうだ

俺の認識だと、送信バッファがあふれる=送信できてないデータが32KBたまってる=相手に32KB届いていない
って認識なんだけど、これってあってる?
32KBの遅延=68秒の遅延で、1分程度相手にデータがまったく届いていない(相手はrecvでデータが受け取れてない)って認識なんだけど
712デフォルトの名無しさん:2008/08/15(金) 11:59:39
>>711
どのタイミングでデータがクリアされるか標準的な仕様ってあったっけ?
713デフォルトの名無しさん:2008/08/15(金) 12:00:39
>>712
ああ、送信バッファっててっきり「ちゃんと相手に送れたら、その送れた分クリアされる」と思い込んでたけど
もしかしたら不定期にいっきに消してたりするかもしれないのか!?
714デフォルトの名無しさん:2008/08/15(金) 12:03:54
>>713
俺が言いたいのは、つまりそういう詳しい仕様とかが良くわからないもの、
デバイスドライバがおかしいかも知れない、ネットワークカードがおかしいかも知れないし、
OSがらみかもしれない、ルータがおかしいかも知れない、中継サーバが原因かも知れない、
というような物は、こうだからこう、と決めつけるのは危険だってこと。

メモリが確保できない、ファイルの保存で書き込みに失敗した、なんて状況だったらOSがガタガタだろうけど、
データが遅れないなんて事は頻繁にあることだから。
715デフォルトの名無しさん:2008/08/15(金) 12:44:54
>>714
なるほどねー。
いいアドバイスありがとう
716デフォルトの名無しさん:2008/08/15(金) 15:42:27
epoll( size );
のsizeより多くのfdがEPOLL_CTL_ADDされたら、アウト?
717デフォルトの名無しさん:2008/08/16(土) 01:22:38
>>711
しったか知識で推測しようとするから、混乱するんだと思うよ。

TCP/IPの送信バッファデフォルトサイズとか、実装依存の
ことまで持ち出してきてしまってるし。

スロースタートとか、ウィンドウスケールとか、それに応じて
送信バッファを広げる可能性もあるし、組み込みなんかだと
8KB固定とかもあるし、そんな議論は無意味なのだよ。
718デフォルトの名無しさん:2008/08/16(土) 07:05:08
>>717
>実装依存

本来はそうなんだが、それを言っちゃうと、極端な奴だと
「じゃぁ、CPUのエンディアンをチェックする部分からソースを書くのか」
とか、そういう話になりかねない。

実装依存であっていい部分も多少はあるんだけど、
そのさじ加減としてでも send での戻り値をチェックするのは常識、
っていう話なんだよな。

この辺りの加減は経験積むしかないし。
719デフォルトの名無しさん:2008/08/16(土) 12:56:27
質問です。
UDPとTCPのソケットハンドルを混在して
selectに渡しても大丈夫でしょうか?
720デフォルトの名無しさん:2008/08/16(土) 13:34:24
>>719
大丈夫だったら、いいね〜。
721デフォルトの名無しさん:2008/08/16(土) 14:24:45
Unix系のselectはOK
RTOS系は自分でポートするスタックならOKとなるように実装する
Windowsはしらん
その他は 実装依存
722デフォルトの名無しさん:2008/08/16(土) 21:22:01
>>718
sendの戻り値をチェックするのが常識、という部分は誰も否定していないでしょ。
そんなん当たり前。

なのに、送信バッファのサイズがどうたらとか言い出すから、混乱するって
言ってるのであって。

どうでもいいけど、CPUのエンディアンはどっちでもいいように設定可能に
するのが常識だよね。ネットワーク関連のプログラムは。
723デフォルトの名無しさん:2008/08/16(土) 21:25:16
やだよそんなのめんどくさい
724デフォルトの名無しさん:2008/08/16(土) 22:06:44
ネットワークバイトオーダでいいじゃないか
725デフォルトの名無しさん:2008/08/16(土) 22:54:08
実体はビッグエンディアン
726デフォルトの名無しさん:2008/08/16(土) 22:55:41
それを蛇足と言うんだ
727デフォルトの名無しさん:2008/08/16(土) 23:01:11
どう考えてもリトルエンディアンが優れている。
USBも採用している業界のデファクトスタンダード。
ネットワークバイトオーダーを決めた奴は素人。
728デフォルトの名無しさん:2008/08/16(土) 23:05:38
バカが出たぞー
729デフォルトの名無しさん:2008/08/16(土) 23:26:17
ビッグエンディアンのほうがMPUにとって素直なんだよね
730デフォルトの名無しさん:2008/08/16(土) 23:30:15

ビックインディアンはコンピュータからみたら
10進数をコンピュータで扱うぐらい非論理的。
少し考えたら馬鹿でも判る事。
マックもインテルに変えた今、ビッグインディアン信奉者は完全に消滅した。
731デフォルトの名無しさん:2008/08/16(土) 23:36:00
USB?あのCPUばっかり食う駄目規格か。
732デフォルトの名無しさん:2008/08/16(土) 23:37:51
>>731
それは制御の仕組みだろ。
データの流し方とは分けたほうが話しがスムーズそうだけど
733デフォルトの名無しさん:2008/08/16(土) 23:43:52
なんかこのリトルエンディアン信者君て USB とかマックとか、
PC 向けでしかプログラムしか組んだことないみたいね。
734デフォルトの名無しさん:2008/08/16(土) 23:44:12
ネットワークバイトオーダーは老害だから必要なとこ以外は無視していい
735デフォルトの名無しさん:2008/08/17(日) 01:25:40
通信する両側で合意が取れてればなんでもいいよ
736デフォルトの名無しさん:2008/08/17(日) 02:04:39
LSI作ってる身にしてみればビッグエンディアンは勘弁して欲しい。
リトルエンディアンか
ARMのAMBAみたいなバイト不変エンディアンが自然だと感じる。

IBMのCoreConnectとPowerPCなんか
最上位ビットがb0で始まって、(32ビット系なら)最下位ビットがb31
なんだぞ。

今は、1個のチップでも内部バス幅の種類は8〜512ビット程度の範囲で
たくさん使われてたりするから
ビッグエンディアンが入り込むとこんな顔になりがち→(#^ω^)
737デフォルトの名無しさん:2008/08/17(日) 02:28:19
ソフト屋「CPUのエンディアンどっちでもいいように組むのが常識だよね」
ハード屋「いや、ビッグエンディアンは勘弁^^;」

なに、このかみ合わない議論。

しったかハード屋は遠慮してほしいと思うのだが、どうなのだろう。
738デフォルトの名無しさん:2008/08/17(日) 02:33:55
かみ合わないのがおかしいと思うおまいがしったかだと思うのだが、どうなのだろう。
739デフォルトの名無しさん:2008/08/17(日) 02:37:25
まーソフト屋はなんとでも書けるけどハード屋は都合のいい
エンディアンはあるかもね・・・・
740デフォルトの名無しさん:2008/08/17(日) 11:16:37
>>736
> 最上位ビットがb0で始まって、(32ビット系なら)最下位ビットがb31
> なんだぞ。

修行がたらん!!! こんなもん頭抱え込んでるようじゃwW
741デフォルトの名無しさん:2008/08/17(日) 13:04:29
なんで相談室なのに、>>717みたいな相談者をびびらせるような上から目線なレスつけるのかねー
742デフォルトの名無しさん:2008/08/17(日) 14:52:41
で、selectはTCPとUDPのハンドル混在で動くんですか?
743デフォルトの名無しさん:2008/08/17(日) 18:25:05
>>741
いや、別に相談者をびびらせてはないだろ。
744デフォルトの名無しさん:2008/08/17(日) 18:48:50
>>742
残念ながら動かない(笑
745デフォルトの名無しさん:2008/08/17(日) 18:55:03
>>743
(これからくるであろう)相談者って意味で俺はとったが・・
しったかだの、バカだの、オワットルだのレスは委縮させるだけだと思うがねー・・
746デフォルトの名無しさん:2008/08/17(日) 19:07:42
711自嘲しろ
747デフォルトの名無しさん:2008/08/17(日) 19:22:48
別に初心者に相談に来てもらったって、俺らが得るものなくね?
748デフォルトの名無しさん:2008/08/17(日) 19:30:49
得るものないならスレ見なきゃいいだろ
749デフォルトの名無しさん:2008/08/17(日) 20:29:12
まあ、質問スレだからな
ただし、初心者向けとかそういう言葉が入ってないのも事実だな

つーかソケット自体が素(ry
750デフォルトの名無しさん:2008/08/17(日) 21:27:34
初心者が質問するのは全くかまわないが(そうしないとスレが死ぬおそれがある)、
知ったかは勘弁。
751デフォルトの名無しさん:2008/08/17(日) 22:00:42
5知って10知ったつもりになる事があるのはしょうがない事。
それを指摘されたらまた一歩前進するだけのこと。
知ったかだと貶す方が勘弁。
752デフォルトの名無しさん:2008/08/17(日) 22:03:02
ネット上で知識の上下のランク付けたい人がいるだけだから。
753デフォルトの名無しさん:2008/08/17(日) 22:06:51
>>711いい加減にしろ。
754デフォルトの名無しさん:2008/08/17(日) 22:09:50
>>717 必死すぎる
755デフォルトの名無しさん:2008/08/17(日) 22:51:24
>>754
お前もいい加減にしろw
756デフォルトの名無しさん:2008/08/17(日) 23:22:26
>>717のどこが問題なのかさっぱりわからん。
むしろ穏当なほうだろ。
757デフォルトの名無しさん:2008/08/17(日) 23:29:10
自演乙
758デフォルトの名無しさん:2008/08/18(月) 00:00:11
>>752
なんだこいつ
チョーむかつくんだけど
759デフォルトの名無しさん:2008/08/18(月) 00:09:38
RDPのプロトコルの仕組みを学びたいんですが参考になる日本のページってありますでしょうか?
760デフォルトの名無しさん:2008/08/18(月) 01:11:48
まぁ717は「winsock」の話をしてるのに「実装依存」とか言い出しちゃう、
質問内容も把握してないしったかだからな
問題ありすぎだろ
761デフォルトの名無しさん:2008/08/18(月) 08:33:57
winsockだったら実装依存もありえなくはないけど・・・まあふつうないけど・・・
762デフォルトの名無しさん:2008/08/18(月) 08:58:00
>>761
717てめえいい加減にしろ
763デフォルトの名無しさん:2008/08/18(月) 09:07:21
いつまで続けるんだよ、これ
764デフォルトの名無しさん:2008/08/18(月) 14:47:00
夏休みが終わるまで
765デフォルトの名無しさん:2008/08/18(月) 18:53:11
このスレッドでこんな流れって過去にあった?
初めての気がする

もともとネットワーク相談室って膨大な範囲だしね
ベテランが新しい案件で初心者として質問する事もあるだろうし

ピンポイントで質問してくるだけ まだマシなんじゃない?
ネットワークゲームってどうやって作るんですか等が無いだけ
766デフォルトの名無しさん:2008/08/18(月) 21:54:37
2ちゃんに何期待してんだか・・・

気に入らないんなら自分で掲示板作れば?

これがゆとりかね
767デフォルトの名無しさん:2008/08/18(月) 21:58:01
うぜーよ、お前
768デフォルトの名無しさん:2008/08/18(月) 21:59:08
まったくだわ
しったかだの初心者くんなだの、誰でも来ていいという2chのルール無視すんなよ
他人馬鹿にして悦に浸りたいなら、誰も来ないローカル掲示板でも作ればいいのにな
769デフォルトの名無しさん:2008/08/18(月) 22:14:19
2ch初心者かよwww
770デフォルトの名無しさん:2008/08/18(月) 22:23:02
2chは相手を罵倒しても何してもいい。とか思ってる、2chのルールすら読まないゆとりが発生か・・・
ここ技術板だから、夏はあまり関係ないはずなんだけどな
771デフォルトの名無しさん:2008/08/18(月) 22:33:21
嫌になったら出て行くだけの話だからねえ
わざわざ「嫌になった」と書き込むアホはあまり見ないけど
772デフォルトの名無しさん:2008/08/18(月) 22:39:06
2chにはローカルルールにもちゃんと書いてあるが、「煽り耐性」が
かなり必要だ。煽られて前後不覚になるほど怒ってしまうような
馬鹿は来るな。
773デフォルトの名無しさん:2008/08/18(月) 22:52:58
そう、おまえは出てゆくべき。
774デフォルトの名無しさん:2008/08/18(月) 23:41:54
お前もな
775デフォルトの名無しさん:2008/08/18(月) 23:57:50
オマエモナー
776デフォルトの名無しさん:2008/08/19(火) 00:33:04
ところで、
RDPのプロトコルの仕組みを学びたいんですが参考になる日本のページってありますでしょうか?!
777デフォルトの名無しさん:2008/08/19(火) 06:52:37
RDPって何?
778デフォルトの名無しさん:2008/08/19(火) 10:39:28
Linux 2.6.15 で、setsockopt(2) で TCP_NODELAY を有効にしても、
実際の動作は、相手からの ACK (遅延 ACK) を待ってからパケットを
投げてしまいます。Linux で他 OS のように Nagle を無効にするには
TCP_NODELAY だけでは足りないのでしょうか?
779デフォルトの名無しさん:2008/08/19(火) 12:21:50
>>777
リモートデスクトッププロトコル

windowsを遠隔ログイン・操作するための専用プロトコル
SSL経由でできるらしい
780デフォルトの名無しさん:2008/08/19(火) 21:17:40
>>778
1.Nagleアルゴリズムは、送信側が複数の小さいデータを1つにまとめて
  送信する機能。
2.遅延ACKは受信側が、複数のパケットにたいしてまとめて応答するた
  めの機能。
3.TCPって、通常はACKを待たずに相手の受信ウィンドウがあいてりゃパケット
  を投げる。

整理して考えてみよう。

ヒント:輻輳制御
781デフォルトの名無しさん:2008/08/20(水) 07:12:44
現在、任意のマシン上で開いている任意のポートからファイル転送を実現し、
ファイルを共有できるソフトウェアを開発しております。
また、ファイルを共有する機能だけでなく、リモートでマシンのデバイスを制御できます。
実現できれば、世界中のPC上のファイルが共有され、いつでも好きなデータを入手でき、
世界中どこからでも、端末を問わず自宅PCへアクセスし、コントロールする事が出来るようになります。
たとえば、携帯電話に自宅PCのコントロール用アプリケーションをインストールし、リモートコントロール
できるようになります。
782デフォルトの名無しさん:2008/08/20(水) 07:22:29
>>781
ワッフルワッフル
783778:2008/08/20(水) 10:38:36
>>780
遅延 ACK と Nagle の関係は理解しています。

が、通常、Nagle を無効にすれば、ACK を待たずにデータ送信するはずですが、
Linux の場合、TCP_NODELAY を有効にしても、ACK を待ち合わせるような動作
をするので。

あと、3. は、単純にそうとは言えませんよね。
通常 TCP は Nagle を実装しているので、MSS 未満のデータなら、その前の
データに対する ACK が返ってくるのを待ち合わせてから送信します。

MSS 1460 byte のコネクションで、アプリケーションが 10byte ずつデータ
を書き込めば、最初の 10byte は 10byte が 1 パケットで出ていきますが、
その次は、先行する 10byte に対する ACK が来るまで TCP が送信を待ち合わせ
ますよね。

TCP_NODELAY を有効にすれば、相手からの ACK に関係なく、10byte ずつ
データを投げ続けてくれるのですが、Linux の場合、2 〜 3 パケット程
投げた所で、先行するデータに対する ACK が来るのを待ち合わせる動作を
しているのです。その間に、アプリケーションからのデータ送信要求が
TCP の送信バッファに溜まるので、先行するデータに対する ACK を受け取った
後は、MSS サイズでまとめてデータ送信することになります。

もちろん、アプリケーションは、小さいサイズでデータを書き込まないのが
鉄則ですけど、TCP_NODELAY で回避できない理由を知りたいのです。

784デフォルトの名無しさん:2008/08/20(水) 22:24:14
再送タイマに引っかかってるって話ではないの?
785719:2008/08/21(木) 01:38:22
Windows XPでも大丈夫でした。
ありがとうございました。
786デフォルトの名無しさん:2008/08/21(木) 12:31:45
>>783
windowsでもTCP_NODELAY且つバッファー長を0にしても遅延はあるね。
TCPはそういう用途じゃないから、UDPを使えば即時に送信される。
787デフォルトの名無しさん:2008/08/22(金) 15:10:31
>>783
スロースタートの制御じゃないの?

その辺のカーネルパラメータいじってみて振舞いの違いを見てみるとか。

>>1のFAQも目を通しておいた方が良い。要は
・TCPではwrite()したものを強制的に送信させる方法は(一般的には)ない
・送信を遅延する理由はいろいろある。Nagleはあくまでその一つ、というだけ
・他の典型的な理由はウィンドウ制御
ってことらしい(スロースタートもウィンドウサイズを制御する)。

あと
> 通常、Nagle を無効にすれば、ACK を待たずにデータ送信するはずですが、
この説明は間違ってない?
788787:2008/08/22(金) 15:23:27
って、よく見たらすでに >>780 でヒントが出てるな。
>>787はそれと同じことを言ってるつもりだよ。
789デフォルトの名無しさん:2008/08/22(金) 20:56:35
790デフォルトの名無しさん:2008/08/24(日) 13:24:07
横からすまん。
>>789
の19番は今の話に関係ないと思うが・・・
791デフォルトの名無しさん:2008/08/24(日) 13:25:39
>>780

服装制御がどう影響してくるのかわからん。
教えてくれ
792デフォルトの名無しさん:2008/08/24(日) 14:05:37
>>791
TCP で PUSH フラグ立てても ACK が PUSH したセグメントに
同期するわけではないことを言ってるのではあるまいか?
今はしらんが, 昔の Winsock は,
「PUSH したセグメントのACK を期待するような振る舞いをしていた」
記憶がある
793デフォルトの名無しさん:2008/08/24(日) 15:13:58
質問です。
勉強で簡単なクライアントプログラムを作りました。
ところが、hp-uxとmac os xで動きが違って困っています。
#include <stdlib.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netdb.h>
#include <string.h>

static int open_connect(char *host);

int main(){

FILE *out;
int socketfd, nbyte = 0;
char buf[5000];

socketfd = open_connect("menu.2ch.net");

out = fdopen(socketfd, "r+");

if(out == NULL){
perror("fdopen(3)");
exit(EXIT_FAILURE);
}

fprintf(out, "GET /bbsmenu.html HTTP/1.0¥r¥n");
fprintf(out, "Host: menu.2ch.net¥r¥n");
fprintf(out, "User-Agent: Monazilla/1.00¥r¥n");
fprintf(out, "Connection: close¥r¥n");
fprintf(out, "¥r¥n");
794デフォルトの名無しさん:2008/08/24(日) 15:15:08
/*続き*/
if((nbyte = fread(buf, sizeof(char), 5000, out)) == EOF){
perror("fread");
exit(EXIT_FAILURE);
}

fclose(out);
printf("client got: %s¥n", buf);
exit(EXIT_SUCCESS);
}

static int open_connect(char *host){

struct addrinfo hints, *res, *ai;
int socketfd;
int err;

memset(&hints, 0, sizeof(hints));
hints.ai_family = AF_INET;
hints.ai_socktype = SOCK_STREAM;

if((err = getaddrinfo(host, "http", &hints, &res)) != 0){
fprintf(stderr, "getaddinfo(3):%s¥n", gai_strerror(err));
exit(EXIT_FAILURE);
}
795デフォルトの名無しさん:2008/08/24(日) 15:16:26
/*続き*/
for(ai = res; ai; ai = ai->ai_next){
socketfd = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
if(socketfd < 0){
continue;
}
if(connect(socketfd, res->ai_addr, res->ai_addrlen) < 0){
close(socketfd);
continue;
}

freeaddrinfo(res);
return socketfd;
}

fprintf(stderr, "socket/connetct failed¥n");
freeaddrinfo(res);

exit(EXIT_FAILURE);
}
796デフォルトの名無しさん:2008/08/24(日) 15:18:03
FILE*に変換するのは合法なのか
797デフォルトの名無しさん:2008/08/24(日) 15:20:03
どこからつっこめばいいんだこれ・・・
798デフォルトの名無しさん:2008/08/24(日) 15:22:27
結果はmac os xではちゃんと出力されるのですが、
hp-uxでは、
client got: tes official service names and aliases with
# the port number and protocol the services use. #
# Some of the services represented below are not supported on HP-UX.
# They are provided solely as a reference.#
# The form for each entry is.
# <official service name> <port number/protocol name> <aliases>

#
# See the services(4) manual page for more information.
# Note: The entries cannot be preceded by a blank space.
#
tcpmux 1/tcp # TCP port multiplexer (RFC 1078)
echo 7/tcp # Echo
echo 7/udp #
discard 9/tcp sink null # Discard
discard 9/udp sink null #
systat 11/tcp users # Active Users
daytime 13/tcp # Daytime
daytime 13/udp #
/*長いので略*/

どのへんをなおすと、同じように動いてくれるのでしょうか?
ネットワークバイトオーダーの問題ではないと思います。
getaddrinfoの実装の違いでしょうか?
799デフォルトの名無しさん:2008/08/24(日) 15:27:19
>>797
>どこからつっこめばいいんだこれ・・・
ぜんぶつっこんでください、アッー
800デフォルトの名無しさん:2008/08/24(日) 15:30:09
nbyteの値を確認してみるとか
一番突っ込みたいのはfdopenやめれってことだが
801デフォルトの名無しさん:2008/08/24(日) 16:16:26
>>800
おお、凄い。
read,write使ったら出来ました。
ありがとうございます。
いやぁ、ふつうのLinuxプログラミングという本にfdopen使っていたので、そのまま使ってしまいました。
でも、なんでmacやFreeBSDだと問題なく動いて、hp-uxだと動かなかったんですかね?
#include <stdlib.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netdb.h>
#include <string.h>
#include <stdio.h>
#define MESSAGE "GET /bbsmenu.html HTTP/1.0¥r¥nHost: menu.2ch.net¥r¥nUser-Agent: Monazilla/1.00¥r¥nConnection: close¥r¥n¥r¥n"
static int open_connect(char *host);

int main(){

int socketfd, nbyte = 0;
char buf[5000];

socketfd = open_connect("menu.2ch.net");

if((nbyte = write(socketfd, MESSAGE, strlen(MESSAGE))) == -1){
perror("write");
exit(EXIT_FAILURE);
}

if((nbyte = read(socketfd, buf, sizeof(buf))) == -1){
perror("read");
exit(EXIT_FAILURE);
}
802デフォルトの名無しさん:2008/08/24(日) 16:17:15
またsendの戻り値無視か
803デフォルトの名無しさん:2008/08/24(日) 17:03:30
>>802
>またsendの戻り値無視か
すいません。
nbyte = write(socketfd, MESSAGE, strlen(MESSAGE)
のnbyteがstrlen(MESSAGE)と等しければ良いんですよね?
804デフォルトの名無しさん:2008/08/24(日) 17:16:00
ん?
writeとreadの他に
専用のsendとrecvがあるのか...
どっちを使った方が良いのかな?
当然、sendとrecvですよね...
でも、どうして自分の持っている本(新the unix super text下, Linuxプログラミング改訂第二版, ふつうのlinuxプログラミング)
では使ってないんだろう...
一般的ではないのかな?
805デフォルトの名無しさん:2008/08/24(日) 17:17:07
>>803
いやちがう。すべて送られるとは限らないのがソケットらしさ。
806デフォルトの名無しさん:2008/08/24(日) 19:11:44
sendの値がstrlen未満の場合は多々ありますよ。
だから普通は全部送り切れるまでループさせるんだよ。
807デフォルトの名無しさん:2008/08/24(日) 19:17:07
>>804
Unix 系の OS は write/read は flags 決めうちで send/recv を呼ぶ.
特に, flags 指定する必要がない場合, write/read で無問題
808デフォルトの名無しさん:2008/08/24(日) 22:41:57
>>805,806,807
すいません。
いろいろアドバイスいただいたのですが、良くわかりませんでした。
ループさせるとか...具体的なコードが無いと...
とりあえず、今日初めてネットワークプログラミングという物をして
返事が返ってきたので、今日はコレで満足です。
ビッグカメラのポイントが1万円分有るので、こんど、
UNIXネットワークプログラミング〈Vol.1〉ネットワークAPI:ソケットとXTIを買ってこようと思います。
有り難うございました。
809デフォルトの名無しさん:2008/08/24(日) 23:26:54
それを読むのは>>1からのリンクを見てからにしてくれ
810デフォルトの名無しさん:2008/08/25(月) 17:05:39
こんなか?

void
recv(socket s, vector<char>& buf) {
    int rsize = 0;
    do {
        int size = recv(s, &buf[rsize], buf.size() - rsize);
        if (size <= 0) {
            // エラー返すなり例外投げるなり。
            // ==0 の時は別処理かも。マニュアル参照。
        }
        rsize += size;
    } whlie (buf.size() != rsize);
}
811デフォルトの名無しさん:2008/08/25(月) 21:29:20
EINTERのときにリトライくらいは入れてあげてね
812デフォルトの名無しさん:2008/08/26(火) 00:22:47
C10Kが流行った頃、負荷試験っぽいことをやったら
acceptやselectやpollがEINTRを返してきだして笑った
813デフォルトの名無しさん:2008/08/26(火) 02:02:20
>>800
fdopen は何がまずいの?
テキスト指向をお手軽に済ませたいときは便利だと思うけど。

まあ、バッファリングとかテキストモードとかは気にしなきゃいけないけどさ。
814デフォルトの名無しさん:2008/08/26(火) 05:08:08
fdopenを使うと内部でread,writeを使うことになる
オープン系ならreadもrecvも大差ないがOS依存といえる
(Winsockとかだとどうなるか知らん)
glibcだと読み込みにmmapを使うバージョンがあるからさらに厄介
もともと、ファイルストリームと片方向ストリーム用の機能だから過信は禁物
readとwriteの間にキャッシュの同期処理が入るなど見た目より複雑になる
何となく問題が起きそうな事書いているが
動作を理解してない初心者にとって逆に意図した動作になる事が多い
でも、実害が起きたら勉強になるから、その時に理解すればいいと思う
815デフォルトの名無しさん:2008/08/26(火) 17:12:45
リアルタイム性の高いネトゲで、現在はTCPを使って動作をやりとりしています。
ですが回線の遅い環境を考慮し、UDPで行うべきだと指摘されたことがあります。

やりとりするデータはキーデータのため、ストリームとして扱えるTCPは非常に親和性が高かったです。
UDPでやるとしても同じ形式のままで行うつもりのため、自力で「再送処理」や「データの並び替え」を行う必要があります。
そうなるとTCPの再開発に近いものがあり、なんだか無駄に思えます。

そもそもそこまでやって、速度の向上は見込めるのでしょうか?
TCPの「確認応答」を待たずに送り続けられるだけ速いのでしょうか?
816デフォルトの名無しさん:2008/08/26(火) 17:24:24
>>815
UDPはパケット届かなくても良いやって感覚だからね。
>>815自身が設計上、TCPが良いと判断するなら、TCPを使うべき。
もしプレイヤーの内、誰かが回線ケーブルを引っこ抜いた時にゲーム全体がストップするようなら、
それは設計の問題。
817デフォルトの名無しさん:2008/08/26(火) 17:34:04
.>>816
お返事ありがとうございます。

サーバーが時間管理をしているため、誰かがケーブル引っこ抜いても「そのプレイヤーだけ無視して」進めます。
なのでそういう意味での心配はありません。(全員に被害が出るのは、サーバーが動いてるPCが動作不良になったときくらいです)

TCPの仕組みを「3 Minutes Networking」というHPで勉強したところ、
TCPであっても相手のバッファをオーバーしない範囲では、確認応答を待たずにガンガン送信を行うように理解しました。

となると、「バッファの限界値に達しない」「送信ミスが起きない」という前提ならば、TCPはUDPと同等の速さと考えてよいのでしょうか?

「そんな前提ありえねー」というのはありますが、ストリーミング的に使いたい以上「送信ミスが起きた」らUDPでも再送処理が必須になり、スピードは生かせません。


UDPがTCPより優れるためには、やはり「途中でパケットが紛失しても、無視して進める」タイプ限定なのでしょうかね?
818デフォルトの名無しさん:2008/08/26(火) 17:56:40
CS型で接続された1つのリンクに不具合が出ても
それを切断して何事もなかったかのように継続できるんだろ?
むりしてUDPに最適化する必要ないと思うけどね

ぶっちゃけ気分の問題くらいの変化しかないと思う
サーバーの回線が太いなら

データロスト時の再送信とか
多重送信されたときの破棄とか
受信順の考慮とかがめんどくさいなら
無理してやる必要ない 低速で低能なノードお断りでいいんじゃねーの?
819デフォルトの名無しさん:2008/08/26(火) 18:03:07
なるほど。
一応アクションゲームなので、技術的に可能ならばなるべく速いものをリリースしたいなと思ったのですが
ストリーミング的な使い方をする限りはほっとんど差はでないようですね。

さすがに今からUDPに最適化したシステムに作り替えるのはつらいですし、TCPでいってみます。
どうもありがとうございました。

このスレにはたびたびお世話になっています。いつもありがとうございます。<ALL
820デフォルトの名無しさん:2008/08/26(火) 19:32:55
>>818
実際思うんだけど、そんなに低速低能なノードでネットゲーできるのかねぇ?
UDP TCP 以前の問題のような気がする。
821デフォルトの名無しさん:2008/08/26(火) 19:45:36
>>820
古いカウンターストライクは電話回線対応(動作CPUもMHz世代)だったぜ?
822デフォルトの名無しさん:2008/08/26(火) 21:22:06
ネットワークゲームを作ってるんだけど、UDPが一秒間で60個送られてくる状況で
pcap_next_ex使ってこれをキャプチャーしてるんだ。
しかしどうやっても(pcap_next_ex以外を全てコメントアウトしても)
秒間50個くらいまでしかキャプチャーできなくて、
結局どんどん残りがバッファに溜まって相手の動きが遅延再生されてしまう。
高速化についてお知恵を貸して頂けませんか。
823デフォルトの名無しさん:2008/08/26(火) 21:55:12
30個に減らせばいいじゃない
824デフォルトの名無しさん:2008/08/26(火) 23:15:40
カウンターストライクとかFPSってどうやってるんだろうね

現在の自分の向いている方向、座標、HP、アニメーション番号、アニメーション再生フレーム数。
まぁ32バイトもあれば「自分の情報」は送れそうだ。

問題は「弾を発射した」情報。
これを相手が受信ミスすると、弾が発射されてないことになってしまう。
一瞬で着弾するから、受信ミスで当たらなかったとしても「あれ?まぁ当たらなかったのか」で攻撃側が納得しちゃうのかな?

くらう側の自己申告式だよね?ヒット処理って。
チートで無敵モードとか簡単に作れそうだな・・・。
825デフォルトの名無しさん:2008/08/26(火) 23:17:24
何度目だよこの話題
826デフォルトの名無しさん:2008/08/26(火) 23:23:18
何度目なの?
あと過去ログどこ見ればその話題が乗ってるの?
825のレスに何の意味があるの?
827デフォルトの名無しさん:2008/08/26(火) 23:30:30
何度目だよ
828デフォルトの名無しさん:2008/08/26(火) 23:32:01
826のレスに何の意味があるの?
829デフォルトの名無しさん:2008/08/26(火) 23:39:29
過去ログのどこ見ればいいの?って質問なんだから、意味あるだろう
830デフォルトの名無しさん:2008/08/26(火) 23:40:31
で、何度目なの?
831デフォルトの名無しさん:2008/08/26(火) 23:42:22
このスレか前だかでやったよね
何度目か数えてる奴いる?
832デフォルトの名無しさん:2008/08/26(火) 23:43:08
>>823
減らせないから困っていたんだ・・・
なんとか頑張ってみるよ
833デフォルトの名無しさん:2008/08/26(火) 23:43:16
>>824
むしろ、クライアントはサーバ機にキー入力情報を送るだけで良い希ガス。
弾の発射や当たり判定はサーバ側でやるといいんじゃね。
834デフォルトの名無しさん:2008/08/26(火) 23:43:42
この手のスレは質問厨と教え厨だけいればいいよ
質問がループしたって違う人が参加してれば何かかわるかもしれんし
何度だろうと全然かまわんだろう
835デフォルトの名無しさん:2008/08/26(火) 23:50:16
>>833
キー入力だと、少なくともサーバー→クライアントへは正確性が保障される必要があるでしょ
そうなると再送処理や並べ替え処理が必要になり、なんのためにUDP使ってるのって話になる
836デフォルトの名無しさん:2008/08/26(火) 23:53:39
今確認したが、少なくとも、前スレ、前前スレに>>824のような話題は無かった
もちろん毎スレUDPの話題自体はちょびちょびあったが
837デフォルトの名無しさん:2008/08/27(水) 01:07:03
>>835
>キー入力だと、少なくともサーバー→クライアントへは正確性が保障される必要があるでしょ

なんで?
ユーザからのキー入力をすべてサーバ側で解決する。
通信方式をTCPにするかUDPにするかは要件次第。
クライアントには結果を送りつけて表示させる。
ここの実装はコマ落ちしてもいいならUDP。

ネットゲームの種類がわからないから一概には言えないけど、これで問題あるの?
838デフォルトの名無しさん:2008/08/27(水) 02:02:28
printf( "connect == 0x%x\n", connect( fd, (const sockaddr*)&skad_in, sizeof( skad_in ) ) );
getsockopt( fd, SOL_SOCKET, SO_SNDBUF, &i, sizeof( i ) );
printf( "SO_SNDBUF == 0x%x\n", i );
で、常に0x0が帰ってくるんだけど、何か間違ってる?
839デフォルトの名無しさん:2008/08/27(水) 08:36:12
getsockoptの戻り値はチェックしてる?
840デフォルトの名無しさん:2008/08/27(水) 09:08:52
>>837
ああ、833はクラ>サバだけキー入力で済まそうって言ってるのか
読み違えた。すまん

でも結局サバからクラへは、UDPで「状況」を逐一送る必要があるのかー・・・
・抜けの間の補完処理(ワープとか起きにくいように)
・キャラ以外の「状態」を持つオブジェクトの変化についても逐一送るのか?
ってのが気になるな。

FPSでドラム缶を撃って吹っ飛ばすことができるが「ドラム缶が吹っ飛ばされた」というデータをクラが受信ミスった場合、ドラム缶の状態が矛盾しちゃうよね?
だからといって逐一ドラム缶(たくさんあるだろうし、窓ガラスとか、机とかたくさんあるよね)の状態をサバがクラに送信するのは変だし
841デフォルトの名無しさん:2008/08/27(水) 10:03:59
ゲーム中NICのケーブル引っこ抜いたりすると動いてる物が
あさっての方向に飛んでいくようなオンラインゲームでは、
移動ベクトルの予測である程度動かしてるから、パケットが
こなかったら予測地点の方向に移動し続ける。
パケットが届いて位置が間違っていたらまき戻ったり修正が入る。
プレイヤーは気にせずそのオブジェクトの移動予測地点を
狙って撃てば実際は違っていても当たり判定が通る可能性がある。
842デフォルトの名無しさん:2008/08/27(水) 11:20:28
>>841
ドラム缶が吹っ飛ぶとき「こういう速度で、こっち方向に吹っ飛んだ」という情報が1度だけくるのか(これを受信しそこねると矛盾がひどい)

ドラム缶が吹っ飛んでいく過程で「今こういう速度で、こっち方向に飛んでいる」という情報が何度もくるのか(いちいち全オブジェクト、何度も飛ばしてたら情報多すぎない?)

841が例にあげたゲームだと、後者っぽいねー
うまく
・変化しているオブジェクトだけ情報を送る
・UDPの1パケの容量制限(MTU)にひっかからないように、たくさんのオブジェクトが変化している場合は、かわりばんこに一部のオブジェクトの情報だけ飛ばすなどして負荷分散
してるかな。

キー情報を送りあうTCPネトゲしか作ったことがない身としては、すげーと思うわ
843デフォルトの名無しさん:2008/08/27(水) 11:46:05
>>832
pcap_setbuffを使うとお手軽に遅延は無くなる。
でもロストは増える。
844デフォルトの名無しさん:2008/08/27(水) 12:59:05
>>832
ごめん、色々勘違いしてた
mintocopyでWinpcapマニュアル内を探してみて
845デフォルトの名無しさん:2008/08/27(水) 15:43:26
>>842
移動予測でデータ間引いてるわけだから量は多くないはず。
オブジェクトの衝突判定のような優先度の高い情報だけは
ハンドシェイクでやってるんじゃないかと。
多分2PCで観察するとドラム缶の軌跡なんかは
かなりいい加減に見えるんじゃないかな。
846デフォルトの名無しさん:2008/08/27(水) 15:55:55
>>845
なるほどねー。
こんな感じかな。
弾とかがビュンビュン飛び交うゲームだと、下記でいう「アクティブなオブジェクト」が多くなりすぎてきついかも?

あと、キー情報と違ってサーバーにゲームの進行(当たり判定など)をまかせるので、サーバー重そうだね。
その代りクライアントが「ビュアーに徹する」ことができれば、サーバープログラムだけ更新すればゲームバランスとか調整できていいかも?

■毎フレーム飛ばす
キャラの位置情報、アニメーション情報、HPなど

■ドラム缶など、重要度の低いもの(非アクティブなオブジェクト)
仮にドラム缶が120個フィールド上にあるとする。
1フレームに1つのドラム缶の「位置、動き」情報を送る。
通信状況が悪くても、最悪でも2秒に1回「そのドラム缶の状態を更新する」チャンスがある。

■すっとばされたドラム缶など(アクティブなオブジェクト)
アクティブな状態(動いている状態)のドラム缶は120個未満であろう。
120フレに一回よりは短い頻度で、状態更新情報を送ってやる。
本当にたくさんのドラム缶が一斉に吹っ飛んだ場合などは、うまく動的に更新頻度を減らし、UDPパケの送信上限にひっかからないようにする
847デフォルトの名無しさん:2008/08/27(水) 16:47:41
アクティブなオブジェクトだろうがなんだろうが
操作同期するだけならまったく問題ないんだが
FPSだと 途中から参加 できるんだよな
あれの同期ってどうやってんだろう
めんどくさそう
848デフォルトの名無しさん:2008/08/27(水) 16:57:00
>>847
操作同期ってのが「キー入力情報を送りあう」という意味なら、それじゃUDPの強みがないねって話になったでしょ
849デフォルトの名無しさん:2008/08/27(水) 17:01:56
>>846
キャラの情報にしたって、クライアントが別のクライアントの情報を受け取るのは毎フレームである必要はないよな。
参考になるなー。
850デフォルトの名無しさん:2008/08/28(木) 09:01:38
話が膨らまないな
何度もこの話題を繰り返してるという、自称スレ古参さんとかがもっと意見を出してくれるのを期待してたんだが
ほんとに>>846こんなつくりであってるのかね?
851デフォルトの名無しさん:2008/08/28(木) 11:07:54
そんなことをいちいち人に聞くなよ・・・
試せば判るだろ
あーいらつく
852デフォルトの名無しさん:2008/08/28(木) 12:31:36
uIP 1.0 使おうと思ってソース眺めてるんですが、
デバイスドライバの実装をどこに書けばいいのかわかりません。
「実際のデバイスへのアクセスはここに書け」みたいなところ見当たらないし。
知っている方いませんか。
853デフォルトの名無しさん:2008/08/28(木) 13:48:19
そんなことをいちいち人に聞くなよ・・・
試せば判るだろ
あーいらつく
854デフォルトの名無しさん:2008/08/28(木) 14:24:42
牛乳〜に相談だ〜♪
855デフォルトの名無しさん:2008/08/29(金) 01:29:20
…完全に病んでる
856デフォルトの名無しさん:2008/08/29(金) 22:44:47
どんなping値のときも絶対あきらめない
857デフォルトの名無しさん:2008/08/29(金) 22:51:04
>>850
膨らまない原因に気づかないのか?
858デフォルトの名無しさん:2008/08/29(金) 22:52:47
そーよ、それが、可憐な乙女の(セキュリティ)ポリシー
859デフォルトの名無しさん:2008/09/01(月) 02:44:33
サーバ、クライアントともに linux で動いているシステムで
普段は一瞬で connect が終わるシステムで、あるとき
connect がいつまでたっても(50分以上)返ってこないことがありました。

Linux の場合、長くても4分程度でエラーが返ってくると思ってたんですが、
connect が50分も返ってこない状況って何が考えられるでしょうか
860デフォルトの名無しさん:2008/09/01(月) 06:53:13
途中で経路が切れた

例えばLANケーブルが抜けたり、PPPが切れたり
861デフォルトの名無しさん:2008/09/01(月) 08:53:02
ファイヤウォールとかNATルータとかが間にあったりする?
862デフォルトの名無しさん:2008/09/01(月) 09:20:31
connect出来ないことと、connectのタイムアウトが遅すぎることのどっちを問題視しているのかが分からん。
863デフォルトの名無しさん:2008/09/01(月) 10:30:18
>>860
LANケーブルが抜けたときは 4分程度で ETIMEDOUT が返ってきました

>>861
あったりします
connect 側では SYN を送って ACKSYN が返ってこないのを監視していると
思ってましたが、状況は中継装置で変わるもんでしょうか

>>862
タイムアウトが遅すぎるのを問題視してます
数分で返ってこない場合があるのなら自前でタイムアウト処理する必要があるので
864デフォルトの名無しさん:2008/09/01(月) 19:58:26
cat /proc/sys/net/ipv4/tcp_keepalive_time
cat /proc/sys/net/ipv4/tcp_keepalive_intvl
cat /proc/sys/net/ipv4/tcp_syn_retries
cat /proc/sys/net/ipv4/tcp_retries1
cat /proc/sys/net/ipv4/tcp_retries2
865デフォルトの名無しさん:2008/09/01(月) 22:10:07
>>864
サーバ・クライアントとも以下の値ですた
tcp_keepalive_time 7200
tcp_keepalive_intvl 75
tcp_syn_retries 5
tcp_retries1 3
tcp_retries2 15

socket 生成時、SO_KEEPALIVE は有効にしてません
connect が返る前の段階では establish になってないので keepalive は
関係ないと思ってたんですが違うんでしょうか

syn_retries が 5 なので大体長くて4分程度でタイムアウトになることを見込んでました
connect(2) によると syn_cookies で応答が遅くなる場合があるって書いてありましたが、
理屈がよくわかってないのと、当該時刻にサーバーで syn flood を検出した形跡はありません。
866デフォルトの名無しさん:2008/09/01(月) 22:27:43
* netstat
* packet capture
867デフォルトの名無しさん:2008/09/01(月) 22:56:57
>>865
通常, 4分程度でタイムアウトになるのは ARP が帰ってこない場合
NAT box が syn/ack 返せば話が変わる
868デフォルトの名無しさん:2008/09/01(月) 23:09:42
>>859
connectが成功してるのに成功してないと勘違いしてるだけじゃねーの。
TCPの再送タイムアウトなんて数分なんだから。

いったんconnectが成功し、パケットのやりとりが皆無ならTCPの
接続は無限にタイムアウトしない。
869デフォルトの名無しさん:2008/09/01(月) 23:25:45
みなさんありがとうございます
>>866
2年以上連続稼動してきたシステムで一度だけ発生した現象であり
今のところ症状が再現してないので、その方法だと追求は難しそうです。

>>867
なるほど、しかし SYN/ACK 返ってきても connect が返らないケースって
あるんでしょうか?申し遅れましたが linux のカーネルは 2.4.31-0vl1.8smp です。

>>868
少なくとも connect の次の行にあるログ出力の形跡が残ってないことは確かで、
ログの機能はその前後行き続けていることから connect が返っていないと断定しています。
おっしゃるとおり、一度 ESTABLISHされた接続は keep_alive とか設定しなければ
勝手にタイムアウトすることはないですよね
870デフォルトの名無しさん:2008/09/02(火) 00:41:27
>>869
ログ出力がバグっている可能性も忘れないように。
ログは、絶対出力される!と、断定できるならいいが。

絶対というのは、プログラム上他のスレッドが同時に
ログ出力しても論理的に大丈夫なはず、と言い切れるか
どうかということね。
871デフォルトの名無しさん:2008/09/02(火) 08:16:54
>>870
その部分は非常に高い確率で信用しています
論理的にはログ出力は mutex で排他処理してますし、
それが2年以上問題なく動き続けてきた実績があるので
872デフォルトの名無しさん:2008/09/02(火) 09:10:23
どれくらいの頻度で再現すんの?
873デフォルトの名無しさん:2008/09/02(火) 10:21:21
最終的に、connect(2)は50分後にエラーで帰って来たんだよね?
その時のエラー番号は?
874デフォルトの名無しさん:2008/09/02(火) 10:52:48
>>873
50分経っても返ってきてないんです
運用上の問題があって kill されてしまってます
875デフォルトの名無しさん:2008/09/02(火) 11:17:18
>>874
connectに渡してる相手側のIPアドレスやポート番号は絶対に間違ってない。
tcp_syn_retries 5
connect(2)から戻らない、50分後にプロセスをkill

カーネルバグってんじゃない?
876デフォルトの名無しさん:2008/09/02(火) 11:26:46
>>875
ありがとうございます。
やはりおかしいですね。カーネルソースを追って確認してみます。
877デフォルトの名無しさん:2008/09/02(火) 11:35:48
カーネルの中は読んでませんが、

connectをコールするとSYNフラグがついたIPパケットが送信される。
SYN/ACKフラグのついたIPパケットが受信出来なければ、最大5回まで
リトライ。リトライオーバーでタイムアウトしエラーリターン。

SYNパケットがドライバや、途中の回線状態(含むHW)でロストしたとしても、
上記処理は正常にエラーリターンしそう。

戻りのSYN/ACKパケットがドライバや、途中の回線状態(含むHW)でロストしたとしても、
やっぱり上記処理は正常にエラーリターンしそう。

最後のACKパケットがドライバや、途中の回線状態(含むHW)でロストしたとしても、
相手側が困るだけで、自分のコールしているconnect(2)からはリターンしそう。

smpカーネル使ってるみたいなので、connect(2)そのもののロジックよりも、
smp周りのデッドロックを想定した方が良いかも。
878デフォルトの名無しさん:2008/09/02(火) 11:43:31
>>876
netstat で見るとどうなってるよ, コネクションの状態?
# つか, 現象起きないのか?
879デフォルトの名無しさん:2008/09/02(火) 11:49:26
>>878
2年稼動してきて1度きり、再現してません
880デフォルトの名無しさん:2008/09/02(火) 20:33:01
>>877
smp のデッドロックですか

kill する際、統括スレッドがシグナルを受け取ってから各スレッドに対して
pthread_cancel を実行するんですが、connect のところで詰まっていたスレッドは
正常にキャンセルできています。pthread_cancel(3) によると connect は
キャンセルポイントになっているようなのでこれ自体は正常な挙動だと思うのですが、
デッドロックがあったとして、cancel point となるもんでしょうか。
881デフォルトの名無しさん:2008/09/02(火) 22:25:36
というか、カーネルのバージョンはどないやの?
882デフォルトの名無しさん:2008/09/02(火) 22:54:00
>>881
というかちゃんとスレ読めよ>>869
883デフォルトの名無しさん:2008/09/04(木) 01:03:43
javaで簡単なソケットプログラム(サーバー)を書いてみたんですが、
クライアントからの入力を全部読み込んでから結果を返却するのはどうすればいいですか?

while ((inputLine = in.readLine()) != null) {
※inはBufferedReader
これだと全部読み込んだ後フリーズします。
クライアントでcloseすれば抜けますが、それだとoutまでcloseしちゃうんで。。。

884デフォルトの名無しさん:2008/09/04(木) 01:39:13
自分でプロトコル作れ。最初の行で送信データサイズ送るとか。
256 バイトごとにぶった切って最初の 1 バイトにブロックサイズ、
残りの 0〜255 バイトでデータ部、0 バイトのデータ部が来たら
終了とか。EOF にならなくても終わりを検知できる方法を考えれ。
885デフォルトの名無しさん:2008/09/04(木) 06:37:39
クライアントでshutdown(send)すればいいんじゃね?
886デフォルトの名無しさん:2008/09/04(木) 06:58:36
shutdown てそれ以上のパケット送出を行わなくするものだから相手側で
切断つうか EOF 検知できないんじゃないの? 大昔にピア無応答時の緊急
処置でしか使った事ねぇけど。
887デフォルトの名無しさん:2008/09/04(木) 07:24:11
ハーフクローズで、発行した側の送信FINが行くでしょ
相手はrecvが0を返す事で判る
888883:2008/09/04(木) 23:47:38
>>884
とりあえずそうしてあります。
ちょっと納得いかないところもありますが。。。

>>885〜887
ハーフクローズなんて初めて聞いたのでしらべました。
終了時のルールがあるんですね。
これがベストなんでしょうが、
JAVA-VB(Winsockコントロール)間でどう実装するのか分かりませんでした。

とりあえず何が問題なのか分かった気がするので、もうちょっと調べてみます。
ありがとうございました。
889デフォルトの名無しさん:2008/09/05(金) 00:14:18
このヤロウ、プロトコル作るのがベストにきまってるだろ
なぜほとんどの通信ソフトがプロトコル作ってるのか考えろ
890883:2008/09/05(金) 00:23:11
クライアントがJAVAならシャットダウンありますね。
Socket#shutdownOutput
これで試したらうまくいきました!
でもクライアントはVB6なんです。。。orz
891デフォルトの名無しさん:2008/09/05(金) 00:29:23
無視か!クソ!氏ねボケが!
892デフォルトの名無しさん:2008/09/05(金) 00:32:49
883みたいな奴がいると教えるだけ無駄だと痛感するよね。
893デフォルトの名無しさん:2008/09/05(金) 00:49:19
>883はHTTPやFTPがどうやってデータのやりとりをしてるのか知らない子
そもそもプロトコルの意味を理解していないのかもね
894883:2008/09/05(金) 01:06:58
>>889
無視じゃなくてリロードしてなかったんですよ。
出来ればアプリ層にプロトコル実装したくなくて、
readLineをオーバーライドして対応させようかと思ったけど、
それもパフォーマンスの面で不安だったりして。。。

>>892
いや、自分にとっては有益です。
少なくともフリーズしてる理由が分かりました。
無駄に思われる必要はないと思いますよ。

>>893
ヤバイぐらいわからないから勉強してるんですよ。
あんまいじめないでください。
895デフォルトの名無しさん:2008/09/05(金) 01:10:54

怒られてるのに上から目線
896デフォルトの名無しさん:2008/09/05(金) 01:12:18
叱られている理由もわかってないんでしょう。
897デフォルトの名無しさん:2008/09/05(金) 04:23:07
ていうかおまいらが低脳すぎ
898デフォルトの名無しさん:2008/09/05(金) 04:37:55
君の意見を聞こうか
話したまえ
899デフォルトの名無しさん:2008/09/05(金) 04:46:52
聞いてるほうが上から目線
900デフォルトの名無しさん:2008/09/05(金) 04:55:07
目線は後から判断する
まずは意見を聞こうか
話せ
901デフォルトの名無しさん:2008/09/05(金) 05:05:39
都合の悪いことは後回し、と。
902デフォルトの名無しさん:2008/09/05(金) 05:06:59
判断がつかないことは後回しだ
君の意見を出してもらおう
903デフォルトの名無しさん:2008/09/05(金) 05:15:22
厨臭い奴にいつまでも食いついてたりこんなヌルい引っ張りに一々付いてくる奴は莫迦ってことだ。
2ch は初めてか? 力抜けよ。
904デフォルトの名無しさん:2008/09/05(金) 05:18:17
自己否定か
よく考えてから書き込みしろよ
905デフォルトの名無しさん:2008/09/05(金) 21:06:45
自分が厨臭いという自覚はあったのか。
そのまま社会に出て迷惑かけないでねw
906デフォルトの名無しさん:2008/09/06(土) 12:37:35
マイクロソフト共有ネットワークを使って
プログラム上からネットワーク上のファイルを読むことは可能でしょうか。
fopen使ってのファイル読み込みは失敗したので(使い方が違う?)。
907デフォルトの名無しさん:2008/09/06(土) 12:40:54
>>906
C言語でも使って直にアドレス書いてるのでは?どう書いてる?
908906:2008/09/06(土) 13:03:11
>>907
fopen("192.168.0.1\\test\\aa.txt" ,. "r");←共有されているフォルダ。
今は環境がないので試せません。
もしかすると↓にしないといけなかったのかもと今思いました。
fopen("\\\\192.168.0.01\\test\\aa.txt" , "r" );
アクセス権限とかも問題なのかも??
909デフォルトの名無しさん:2008/09/06(土) 13:44:17
サンプルコードが適当な奴にろくな奴はいない。
910デフォルトの名無しさん:2008/09/08(月) 10:36:27
>>908
>もしかすると↓にしないといけなかったのかもと今思いました。
>fopen("\\\\192.168.0.01\\test\\aa.txt" , "r" );
是。
>アクセス権限とかも問題なのかも??
是。
911デフォルトの名無しさん:2008/09/08(月) 11:38:22
CとBASICではどちらが簡単ですか?初心者ですいません。
912デフォルトの名無しさん:2008/09/08(月) 11:39:05
C
913デフォルトの名無しさん:2008/09/08(月) 12:00:23
C言語じゃないかな
ネットワーク系のプログラムぐぐった時に出てくるのがC言語だし
914デフォルトの名無しさん:2008/09/09(火) 13:39:37
open "com:n81xn" as #1
915デフォルトの名無しさん:2008/09/09(火) 13:45:28
>>914
なつかしすww
現役で使ってる会社あるんだろうなーw
916デフォルトの名無しさん:2008/09/11(木) 23:46:48
質問です

linuxでは、recv関数の第四引数のflagに
0を指定することが多いと思いますが、
0を指定したときと、フラグ(MSG_WAITALL)を
指定した時とで、なにが違うんでしょうか?
ていうか0の指定ってのは何を意味するんでしょうか?

0を指定した場合、指定サイズまで取得できないけれど
MSG_WAITALLを指定したら指定サイズまで取れたって事があったので、

manとか調べたんですが載ってなかったので
ご存知の方は教えてください
917デフォルトの名無しさん:2008/09/12(金) 00:18:23
受信オプション
recvの動作を指定できる


ググればそれなりに出てくるけどな
918デフォルトの名無しさん:2008/09/12(金) 01:23:45
>>916
間違いなくmanに載ってるので調べなおせ
919916:2008/09/12(金) 05:42:34
>>917
flagが受信オプションなのは判ってるんですが
0を指定したらどうなるのかって事が知りたかったんです


>>918
「0」「ゼロ」で検索したけれどそれっぽいのは無かったです
ttp://www.linux.or.jp/JM/html/LDP_man-pages/man2/recv.2.html

「recv() コールの flags 引き数には、以下の値を 1つ以上、
ビット単位の OR (論理和) を取ったものを指定する: 」
とは書いてあったんですが
これは0を指定した場合の事ではないですよね?
920デフォルトの名無しさん:2008/09/12(金) 07:25:05
何も指定しないのだから、すべてのオプションがオフ
921デフォルトの名無しさん:2008/09/13(土) 08:17:40
922デフォルトの名無しさん:2008/09/14(日) 01:00:00
>>919
ヒント1:10進数で1,2,4,8を2進数にしてみると?
ヒント2:ビットと判定
923デフォルトの名無しさん:2008/09/14(日) 14:51:01
↑はただの馬鹿
924変な質問:2008/09/16(火) 16:26:53
winsock2.hについてなんですが、

#if !defined(WIN32) && !defined(_WIN64)
#include <pshpack4.h>
#endif
// (略
#if !defined(WIN32) && !defined(_WIN64)
#include <poppack.h>
#endif

となっていて、WIN32が未定義でwinsock2.hを読み込むと、最初のpshpack4.hは
読み込まれますが、途中のOle2.hでWIN32が定義されてしまい、最後のpoppack.hが
読み込まれません。

ということは、winsock2.hを読み込む前にWIN32が定義されてなければならない
という認識でよいのでしょうか?
925924:2008/09/16(火) 16:36:46
新しめのSDKでは_NEED_POPPACKを定義して、ちゃんとpoppack.hが読み込まれるようになってますね
926デフォルトの名無しさん:2008/09/27(土) 10:04:20
xpでDeviceIoControlを使ってデフォルトゲートウェイ
を取得する方法を教えてください。
ipconfigを実行するとIO_CTL_TCP_QUERYINFORMATION_EXが
投げられているのがTDImonで確認できたのですが、
具体的な引数の指定等を教えてください。
927デフォルトの名無しさん:2008/09/27(土) 18:40:16
関数の使い方を1から10まで教えろってか?
928デフォルトの名無しさん:2008/09/27(土) 23:50:27
サンプルコード探しています
VBまたはC#希望ですがなければ他の言語でも構いません

@httpリクエストのヘッダ、メッセージを送信する前に確認して
保存したり、リファラやクッキーなど訂正箇所があれば書換えたりしたいです

Ahttpからhttpsのページへリダイレクトするときに自動でリダイレクトするか
ヘッダ、メッセージを確認してからリダイレクトするかオプションがあれば嬉しいです

httpレスポンスはヘッダ、メッセージともに確認保存するサンプルは山のようにあるのですが
httpリクエストヘッダ、メッセージを確認、訂正、保存するサンプルは見当たりません
自分がどのようなリクエストを送信しているのか確認しながら勉強したいです
どなたか詳しい方お願いいたします
929デフォルトの名無しさん:2008/09/27(土) 23:55:21
山のようにあるサンプルに訂正する機能を追加すればいいんじゃないの?
930デフォルトの名無しさん:2008/09/28(日) 00:20:35
どなたか>>928お願いいたします
931デフォルトの名無しさん:2008/09/28(日) 00:47:59
tcpdumpとかでIEが吐き出してるリクエストを解析しなさい
ただの文字列処理
932デフォルトの名無しさん:2008/09/28(日) 01:13:53
>>931さん
ヒントありがとうございます
tcpdump調べてみました
当方OSがWindowsなのでWinDumpというツールがWindows環境でTCPDumpできるようです
参考になりましたありがとうございます
933デフォルトの名無しさん:2008/09/28(日) 01:31:59
数時間も待てないなんて、どれだけゆとり(ry
934デフォルトの名無しさん:2008/09/28(日) 01:33:47
WireSharkとか
935デフォルトの名無しさん:2008/09/28(日) 01:43:41
>>934
あれって出てきた文字列をコピ&ペーストできるんですか?
936デフォルトの名無しさん:2008/09/28(日) 10:50:26
その位やってみろよw
937デフォルトの名無しさん:2008/09/28(日) 12:00:11
>>936
できない
何で解答にできないこと答えてるの
938デフォルトの名無しさん:2008/09/28(日) 14:05:05
やってみれば分かるんだから聞くな、という回答だろ。アホか?
939デフォルトの名無しさん:2008/09/28(日) 14:40:16
最初からそう書けボケ
くだらん解答しか出来ないなら消えろカス
940デフォルトの名無しさん:2008/09/28(日) 14:49:27
逆切れはよくない
お前は素直に愚かさを恥じろ
941デフォルトの名無しさん:2008/09/28(日) 14:53:59
ごめんなさい
httpリクエストを確認(保存、加工)しながら送信できるサンプルコード教えてください
お願いします><
942934:2008/09/28(日) 14:59:39
できるよ。キャプったHTTPリクエスト→右クリック→Follow TCP StreamでStream Contentを
表示して必要に応じて選択→右クリック→Copyとすればいい。
943934:2008/09/28(日) 15:00:30
ごめん、リロードしてなかったわ。必要なのはプロキシじゃね?
944デフォルトの名無しさん:2008/09/28(日) 15:06:50
すいません
後出しジャンケンのようで申し訳ないですが
プロクシでは駄目なんです
一応httpリクエスト書き換えツール持ってるんですけど
諸事情で自分にあったツール作成を目指すことになりました
どなたかhttpリクエストを確認、保存、加工、送信(その後レスポンス受信)
サンプルコードお願いします
ちょっと難しすぎて困ってます><
945デフォルトの名無しさん:2008/09/28(日) 15:09:58
まだ情報を隠してるな
こんな奴につきあってたら時間の無駄になる
946デフォルトの名無しさん:2008/09/28(日) 15:12:19
その持ってるツールはソース手に入らんの?
947デフォルトの名無しさん:2008/09/28(日) 15:12:57
わからないなら黙っててください><
948デフォルトの名無しさん:2008/09/28(日) 15:13:02
何度もすいませんIEエンジンを利用するのも駄目なんです
自分の送信しようとしているhttpリクエストのヘッダ及びメッセージを確認、加工、保存、送信したいです
できればショートカットキーを使ってマクロ組めるようにしたいです
ちょっと難しいですか?
どなたか詳しい方サンプルコードお願いします
949デフォルトの名無しさん:2008/09/28(日) 15:14:51
>>946
海外ツールなのですが探したところ公開していませんでした

>>947
こらっ
偽者出現
>>947は私じゃないです
950デフォルトの名無しさん:2008/09/28(日) 15:15:13
うるせえ消えろ
951デフォルトの名無しさん:2008/09/28(日) 15:16:16
確認、加工、保存、送信全部やり方わからないって事?
952httpリクエストヘッダ確認:2008/09/28(日) 15:16:39
所要がありどうしてもすぐに出かけなければいけません
また夜に来ます
よろしくお願いします
953httpリクエスト確認:2008/09/28(日) 15:17:47
>>951
そうです
ソースまるごとください^^;
それでは行ってきます
954デフォルトの名無しさん:2008/09/28(日) 15:18:23
こりゃまた強烈なのが来たな
955デフォルトの名無しさん:2008/09/28(日) 15:19:11
>>950
ソケットに関するスレだろ
こんなんことくらいで何???
あなたこそ消えたほうがいいよ
956デフォルトの名無しさん:2008/09/28(日) 15:20:08
あなたには無理。できない。そういってもらえればあきらめもつくでしょ?
957デフォルトの名無しさん:2008/09/28(日) 15:21:18
>>955
そんな事よりちゃんと答えてやれよ
958デフォルトの名無しさん:2008/09/28(日) 15:21:46
早い話が作ってくれって事じゃないの?
959デフォルトの名無しさん:2008/09/28(日) 15:27:58
>>953
wwww
960デフォルトの名無しさん:2008/09/28(日) 15:31:02
作っても難癖つけられて却下されるんだろ?わかります
961デフォルトの名無しさん:2008/09/28(日) 16:33:39
出先からです
>>960
完全にこちらの要件を満たしてるものを希望します
それ以外はいりません
確認、加工、保存、送信です
たったこれだけです
やれる人だけ返事ください><
962デフォルトの名無しさん:2008/09/28(日) 16:44:39
すいません、このスレの住人の実力では解決不能です。
963デフォルトの名無しさん:2008/09/28(日) 17:02:17
>>961
つtelnet
964デフォルトの名無しさん:2008/09/28(日) 17:45:15
>>961
金だすならやるよ?
最低500万からだけど
965httpリクエスト確認:2008/09/28(日) 19:25:57
うわっ
また偽者出没!
>>961は私じゃないです
>>963
以前テラネットというツール試してみたんだけど
IPで接続する仕様なのかな
接続したいサーバは分散型なのでIPでの接続は拒否されました
>>964
私の言ったとおりの物であれば2年前ならキャッシュで購入してたな
今は貧乏どん底
明日にでも首くくろうかって状態^^;
今も某大手本屋さんで見てきたんだけど
リクエストの確認自体殆ど情報が無い
なぜかレスポンスヘッダの参考画面はどの本にも
もういいよってくらい載せてあるのにね
ましてや変更や多重起動で
クライアント@で通信
クライアントAで続き
クライアントBで完了
これを自動でやるほうほうなんて全く無い
唯一クライアントヘッダの参考画面を掲載していた
ハッキング全なんとかって本は2冊とも既に所有しているけど
肝心なところができない
しかもソースはC言語orz
どなたか
クライアントヘッダメッセージを確認、加工、保存のサンプルお願いします
サーバのことばかりでクライアントのことは詳しい解説ってないですね
以前、他スレでメチャクチャでかい口叩いて人のこと糞ボロに言う人は
サーバを理解してない奴はカスみたいなこと言ってたけど
サーバを理解してクライアントの操作は簡単ならなぜサンプルがないんだ?
サーバ作っただけでエライのか?
966httpリクエスト確認:2008/09/28(日) 19:30:26
>>961は私じゃないけど
その通りです
ノーガキはいりません
解答できる方だけ解答よろしく
967デフォルトの名無しさん:2008/09/28(日) 19:33:01
>>965

テラネットなんてしらねぇよ

telnetでもつかえって言ってんだよクズ
968デフォルトの名無しさん:2008/09/28(日) 19:46:10
>>967
だからお前みたいな役にも立たないアドバイスには
期待もしてないので解答者やめろ
答えるなカス
969デフォルトの名無しさん:2008/09/28(日) 19:47:04
>>967みたいなのは頭おかしいのか?
出来もしないのにしゃしゃり出てくるのは病気か?
病院池
970デフォルトの名無しさん:2008/09/28(日) 19:54:01
>>965
簡単に言うと、デバッグ用の確認の機能は開発初期段階に手早く作って破棄されるものだから、
わざわざサンプルとして公開する人も少ないだろうにjk
971デフォルトの名無しさん:2008/09/28(日) 20:13:22
>>970
自分が不思議なのは「完璧」「パーフェクト」「完全」「超」
とんでもない良本のようなタイトルがいっぱいあるのに
リクエストヘッダ、メッセージの確認サンプルは金床さんの本以外にない
完全とか完璧とかという言葉使わないで欲しいよ
全然完璧じゃないのに
「この1冊ですべてわかる」ってどの本にも書いてある
それなのにレスポンスヘッダの参考画面は掲載していても
リクエストヘッダの確認方法さえも書いていない
日本の解説者は嘘つきばかりで見てて情けない
嘘つくくらいなら本だすな
出す以上はタイトルどおりに全てを羅網してほしいもんだ
とにかく嘘つき解説本ばかり
「クライアントは簡単!」って書いてある本もあった
んじゃリクエストヘッダの確認や加工くらい書けよ
嘘つきのビッグマウスばかりだ
できないなら解説者やめろ
メールだしても返事来たのは2人だけ
1人はヘンテコなメールよこすな
もう1人は古旗先生だ
古旗先生以外はみんな嘘つき
972デフォルトの名無しさん:2008/09/28(日) 20:26:13
このスレのテンプレに記載されている本も殆ど持ってるか立ち読みしたね
サーバ作る人から見れば良本なのだろうけど
目的があってクライアントツール作りたい人間からすれば
何の役にも立たないウンコ本値段だけは高いが全然役に立たない
サーバの解説すれば売れるだろうからって計算だけで作成された
中身の無いうすっぺらい内容ばかり
クライアント、リクエストヘッダの確認は
解説本を読む以前の問題なのか?
その割にはどこのスレやどこの言語サイトで聞いても誰も答えれない
サーバ作ってる連中がアホみたいな能書きたれて終わり
リクエストヘッダ確認加工のサンプルお願いします
973デフォルトの名無しさん:2008/09/28(日) 20:35:37
ここに書き込む暇あるなら自分で書けよ
974デフォルトの名無しさん:2008/09/28(日) 20:40:25
自分が送信しようとしているリクエストを取得できれば後は簡単だろ
975デフォルトの名無しさん:2008/09/28(日) 20:41:31
>>973
それが出来ればこんなところで解答者を求めたりしません><
役にも立たないアドバイスはいりません
解答者やめろカス
976デフォルトの名無しさん:2008/09/28(日) 20:43:12
>>974
そのサンプルお願いします
みんなそこまでは言うんですけど
湯ばかりでサンプルないんですよ

>>973
あなたと違って書けないから相談してるんだよ
んであんたは書けるの???
また口先だけなら解答やめてください
はっきし言ってじゃまです
977デフォルトの名無しさん:2008/09/28(日) 20:43:50
ホントこのスレは難癖つけるのクズだけで
役に立つ回答する人はほとんどいないんですね。
期待して損しました。
二度ときません。
978デフォルトの名無しさん:2008/09/28(日) 20:44:19
なんかよくわからんけど
自分の考え方がわかっているような偽者さん出現してるwww
979デフォルトの名無しさん:2008/09/28(日) 20:45:13
この感じチャイナだな
980デフォルトの名無しさん:2008/09/28(日) 20:46:29
解説本を読んで、自分で工夫して目的を達成しようと努力している人の助力にしかなれない。
981デフォルトの名無しさん:2008/09/28(日) 20:48:44
くだらないことでばっかりスレが伸びるな
982デフォルトの名無しさん:2008/09/28(日) 20:48:57
次スレでも続けるつもりならトリつけてね。
983デフォルトの名無しさん:2008/09/28(日) 20:48:58
>>980
その解説本なんだけど
はじめの1歩がわかんない
どーやったらリクエストヘッダを確認できるのか?
全くわかんないので工夫のしようもないってのが現状
あなたリクエストヘッダの確認できますか?
理屈ではなくサンプルください
984デフォルトの名無しさん:2008/09/28(日) 20:50:40
>>983
まずできてるとこまでのソースを晒してくれ
985デフォルトの名無しさん:2008/09/28(日) 20:50:49
>>981
くだらなくはないですよ
日本にプログラムの解説本が何千冊とあるでしょうが
リクエストヘッダの確認は解説されていません
986デフォルトの名無しさん:2008/09/28(日) 20:51:17
サンプルの域を超えていることに気づきましょう。
なにやりたいのか正直わかんないけど
987デフォルトの名無しさん:2008/09/28(日) 20:51:22
>>984
その手にはのりませんよ
あなた解答しなくていいです
988デフォルトの名無しさん:2008/09/28(日) 20:51:44
>>976
取得した後はネットワークプログラミングとは関係ないだろ。送信以外。
989デフォルトの名無しさん:2008/09/28(日) 20:52:03
ワロタ
990デフォルトの名無しさん:2008/09/28(日) 20:53:06
どなたかhttpリクエストのヘッダとメッセージの確認と加工をするサンプルコードお願いします
理屈はいいです
「こうすればできる」とか屁理屈の解答はいりませんのでよろしく
991デフォルトの名無しさん:2008/09/28(日) 20:54:22
>>988
えっ
>>988さまはヘッダ確認できるんですか
是非サンプルおねがいします
解説本に騙され続けてフラフラですー
992デフォルトの名無しさん:2008/09/28(日) 20:57:47
リクエストヘッダを確認、加工を解説している本またはサイトの紹介でもいいです
いくら探してもみあたりません
よろしくお願いします
993デフォルトの名無しさん:2008/09/28(日) 20:57:49
なんで屁理屈しか言えないカスばっかりなんですか
マトモな人はいないの?

994デフォルトの名無しさん:2008/09/28(日) 20:58:20
>>981
自分の送信するリクエストを取得する方なんか法知らなんからヘッダ確認なんてできん
取得さえできればあとは多分できるけど
995デフォルトの名無しさん:2008/09/28(日) 20:58:57
サンプルってのはAPIの解説の補助でしかない。それ以上は自分で考えて作るしかない。
996デフォルトの名無しさん:2008/09/28(日) 21:00:47
もう一度 >>962 を読んで、諦めてお帰りください
997デフォルトの名無しさん:2008/09/28(日) 21:01:23
次スレよろしく
998デフォルトの名無しさん:2008/09/28(日) 21:01:59
屁理屈だけの奴は出てくるなって言っただろうが
999デフォルトの名無しさん:2008/09/28(日) 21:02:13
リクエストヘッダ確認ができる人以外は書きこまないでください
ウザいです
1000デフォルトの名無しさん:2008/09/28(日) 21:02:22
>>994
>>995
なにそれ
リクエストヘッダは確認できないんですか?
自分がどのようなリファラやクッキー、その他を送信しているのか確認して
訂正したり保存したりしたいです
取得ってわかんないです
どこから取得するの?
Windows???
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。