ネットワークプログラミング相談室 Port29
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2012/10/31(水) 17:05:08.29Programming 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辺り
足りなかったら適当に付け足してね
前スレ
ネットワークプログラミング相談室 Port28
http://toro.2ch.net/test/read.cgi/tech/1334736934/
関連スレ
ネットワークプログラミング雑談
http://toro.2ch.net/test/read.cgi/tech/1235800707/
0110デフォルトの名無しさん
2013/01/20(日) 18:38:02.670111デフォルトの名無しさん
2013/01/20(日) 19:05:20.00UAみたいだことかなら、ncで適当なポートにサーバ立てて受け付ける。やりとりが見たい時はwiresharkかtcpdump。ncがteeみたいに使えたら便利だし、既存なのかな。
0112デフォルトの名無しさん
2013/01/20(日) 19:08:50.93ありがとうございます試してみます
まだはじめたばかりなんですがネットワークはデバッグが大変ですね
0113デフォルトの名無しさん
2013/01/20(日) 19:45:29.72キャプチャで簡単に全部見えるのだから、標準的なデバッガのない内部バスなんかより良いと思うのだが。
0114デフォルトの名無しさん
2013/01/21(月) 08:29:05.870115デフォルトの名無しさん
2013/03/08(金) 00:14:52.55しているんだが、"tcp.port"のDissectorTableに登録してもESTABLISHED以降の
パケットしか届かない。
SYNを処理するには"ip.proto"に登録して自分でポート番号を判断するしかないんだろうか?
もしそうだとして、TCPヘッダのデコードも自分でやらなきゃならないのかな。
0116デフォルトの名無しさん
2013/03/08(金) 14:09:47.53SYNのビットを見りゃいーじゃん
0117デフォルトの名無しさん
2013/03/08(金) 14:10:54.120118デフォルトの名無しさん
2013/03/25(月) 14:31:30.1550バイトを送ったところで回線に不具合が起きて自動的にセッションが張りなおされました。
この場合、データの続きは51バイト目から送られますか?1バイト目から再送されますか?
0119デフォルトの名無しさん
2013/03/25(月) 14:51:51.280120デフォルトの名無しさん
2013/03/25(月) 15:05:59.94でもACKって回線が切れる前に送ったかどうかわからないよね??
0121デフォルトの名無しさん
2013/03/25(月) 15:07:07.56反応無かったら何度も送るか
つまり51バイト目からになるのかな
0122デフォルトの名無しさん
2013/03/25(月) 15:10:02.34ACKは古いセッションに送るのか
新しいセッションはどこまで送れてるのかわからないのに51バイト目から再開してくれるのかな??
0123デフォルトの名無しさん
2013/03/25(月) 15:22:30.34大丈夫なように動作するだろう。
0124デフォルトの名無しさん
2013/03/25(月) 15:27:16.58じゃないと前のセッションがどれかわからないよね?
0125デフォルトの名無しさん
2013/03/25(月) 16:17:29.230126デフォルトの名無しさん
2013/03/25(月) 16:40:27.67途中で何かトラブルがあった場合、別のポートから続きが送られてくることもあるって理解で合ってますか?
0127デフォルトの名無しさん
2013/03/25(月) 16:45:06.670128デフォルトの名無しさん
2013/03/25(月) 16:48:13.00あってません
もういちど、自分の手で、続きを送れ
0129デフォルトの名無しさん
2013/03/25(月) 16:56:26.81回線が不安定になっても自動的に繋ぎなおされることは無いってこと?
0130デフォルトの名無しさん
2013/03/25(月) 16:57:01.53100バイト送ったなら100バイト届くし、その間にポートが変わるようなことはない
TCPの中の人がギブアップするようなトラブルが起きたら、切断されてエラーになる
そのようなエラーが起きたときは、自動的に接続が貼り直されることはないし、自動的に別のポートから続きが送られることもない
0131デフォルトの名無しさん
2013/03/25(月) 17:01:09.78ありがとうございました
0132デフォルトの名無しさん
2013/03/25(月) 17:02:33.340133デフォルトの名無しさん
2013/03/25(月) 17:04:07.100134デフォルトの名無しさん
2013/03/25(月) 17:04:33.620135デフォルトの名無しさん
2013/03/25(月) 17:13:22.430136デフォルトの名無しさん
2013/03/25(月) 17:25:03.880137デフォルトの名無しさん
2013/03/25(月) 20:54:31.05性善説ならば
0138デフォルトの名無しさん
2013/03/25(月) 20:55:50.770139デフォルトの名無しさん
2013/03/25(月) 22:07:05.430140デフォルトの名無しさん
2013/03/25(月) 22:25:49.900141デフォルトの名無しさん
2013/03/26(火) 00:10:17.03板名に「技術」って付いてるけとその実態は技術板じゃなくて企画板じゃん
0142デフォルトの名無しさん
2013/03/26(火) 05:07:38.280143デフォルトの名無しさん
2013/03/26(火) 05:57:20.66まぁ、MMOのネットワーク限定ならな・・・
0144デフォルトの名無しさん
2013/03/26(火) 20:25:12.040145デフォルトの名無しさん
2013/03/26(火) 20:46:14.28アマゾンでも楽天でもいいぞ
0146デフォルトの名無しさん
2013/03/26(火) 22:09:02.13MMORPG でググレば、いくつか解説サイトは見つけられるけど、
いったい何が分からないの?
・dyama's web page: MMORPG/Protocol
http://dyama.chaosnet.org/index.cgi?MMORPG/Protocol
-- ごく簡単な解説(日本語)
・Description of the game protocol
http://code.google.com/p/galaktia/wiki/Protocol
-- MMORPGをベースにしたゲームプロトコルの詳細な解説
Pythonによるサンプルコード付き(英語)
・MMORPG プロトコル エンコードの解読
http://ja.softuses.com/92917
-- MMORPGプロトコルをリバースエンジニアリングする技法を解説(日本語)
TCPソケットの経験があって技術英語の読解力があればそれほど難しくないから、
高校生レベルの課題のように見えるが.....
0147デフォルトの名無しさん
2013/03/29(金) 22:10:35.43自作するのか。その辺が知りたいな。
0148デフォルトの名無しさん
2013/03/29(金) 23:14:22.33> メールソフトは既存のソフト
ユーザーエージェントのことでOK?
だったら, 既存のものを使う
# 自分用にカスタマイズできればそれでOK
0149デフォルトの名無しさん
2013/03/30(土) 01:23:27.320150デフォルトの名無しさん
2013/03/30(土) 03:53:56.60既存のソフトで事足りるから既存のソフトを使ってる
それに通信部分は余裕でもメーラーとしての便利な各種機能を実装するのが面倒
アドレス帳とか、メールの検索とか、自動振り分けとか、etc...
一つ一つは実装しろって言われたらできるけど、全部実装するのは面倒
0151デフォルトの名無しさん
2013/03/30(土) 15:44:58.01どっちもelispとjavascript(browser addon)でカスタマイズ。
0152デフォルトの名無しさん
2013/03/30(土) 16:52:03.330153デフォルトの名無しさん
2013/03/30(土) 17:54:14.11メールを読まれてる可能性はどこも一緒だから
それを懸念するなら母数が多いところのほうが安全だろ
0154デフォルトの名無しさん
2013/03/30(土) 18:18:33.610155デフォルトの名無しさん
2013/03/30(土) 18:59:21.53サーバに言えよ
0156デフォルトの名無しさん
2013/03/30(土) 19:22:20.95母数が多いところを選ぶのは安全だが
選ばないという手もある
そんな俺は自宅メールサーバーを立てたよ
相手側のサーバーは避けられないからそれは仕方ないけど、母数とかって話が出たから確率論でいくと、
「どちらか一方のサーバーで解析される確率」より
「相手のサーバーで解析される確率」のほうが必然的に低いわけだから
後者の自宅サーバーのほうが安全
自宅メールサーバーマジオススメ
0157デフォルトの名無しさん
2013/03/30(土) 19:38:06.010158デフォルトの名無しさん
2013/03/30(土) 22:13:30.88金が結構かかるじゃん。
0159デフォルトの名無しさん
2013/03/30(土) 22:45:38.67何を言っているんだ。
サーバで見られること気にしてるのに、サーバで、またはサーバとの通信を暗号化しても意味ないだろ。
S/MIMEとかMUA間でメッセージを暗号化するんだよ。
0160デフォルトの名無しさん
2013/03/30(土) 22:49:41.12このスレの住人ならドメインと自鯖くらい持ってるだろ。まあセカンダリを分けるとなると大変だけど。
0161デフォルトの名無しさん
2013/03/30(土) 23:14:59.53メールを暗号化してもPGP作った人みたいにFBIに追いかけられませんか?
0162デフォルトの名無しさん
2013/03/31(日) 12:01:43.31どういうこと?w
詳しくw
0163デフォルトの名無しさん
2013/03/31(日) 18:38:40.950164デフォルトの名無しさん
2013/03/31(日) 18:56:08.59書籍は規制対象外なのを利用して、本として持ち出して、
スキャナで取り込むとかしたんだっけ?
0165デフォルトの名無しさん
2013/04/03(水) 00:05:18.98受信者がいなければ、行き場を失ったデータはどこへ行くのか?
一定数はキューみたいなものに保存されるのかしら?
それとも逐一消えていくのかしら?
前者の場合、リアルタイムシステムに悪影響を与えてしまうと思うけど、どうなんでしょう。
初心者でスマソ
0166デフォルトの名無しさん
2013/04/03(水) 00:10:51.440167デフォルトの名無しさん
2013/04/03(水) 00:18:11.89受信ソケットの話かルータのIPの話かわからないが破棄すればいいだろ。いないってなんだ。
0168デフォルトの名無しさん
2013/04/03(水) 00:35:39.78"1"というデータを送信、250msec待つ
次は"2"というデータを送信、待つ
…
という送信プログラムと、
特定のポートにアクセスしてデータを所得するプログラム
を書いてみたんだけど、送信プログラムをしばらく走らせてから受信プログラムを走らせても、
すでに消え去ったと思われる1というデータを取得してしまう。
0169デフォルトの名無しさん
2013/04/03(水) 00:40:59.53icmpで反応があることを期待してはいけない。
相手が生きているか死んでるかはっきりしないのが分散システムの基本。
0170デフォルトの名無しさん
2013/04/03(水) 01:06:41.67本当に受信者居ないの?
もしかしてパソコンの電源が入ってない?
0171デフォルトの名無しさん
2013/04/03(水) 11:19:05.08送信相手がいないと確定してるときって送信しないんだっけ?
UDPは気にせず送信しちゃうんじゃないの?
0172デフォルトの名無しさん
2013/04/03(水) 12:31:35.650173デフォルトの名無しさん
2013/04/03(水) 13:00:01.31気にせず送信すると思う。
>>172
プログラム側に問題があるのかな…
OS側のバッファのせいとしか思えない…
0174デフォルトの名無しさん
2013/04/03(水) 13:05:27.61捨てられるだけだよ
0175デフォルトの名無しさん
2013/04/03(水) 13:32:21.38試しに1じゃなくて送信時刻を送ってみては
0176デフォルトの名無しさん
2013/04/03(水) 14:19:03.340177デフォルトの名無しさん
2013/04/03(水) 19:24:47.39サンクス
5秒ほど遅れてた…
0178デフォルトの名無しさん
2013/04/03(水) 21:56:32.66受信プログラムを待機させている間にソケットにポート設定をしてたのが原因みたい
よくワカンネ
0179デフォルトの名無しさん
2013/04/04(木) 11:58:03.35ふざけんなよ!
>送信プログラムをしばらく走らせてから受信プログラムを走らせ
って書いてたよな? 適当なことを書きやがって
ポートをバインドした時点で受信は開始されます
カーネルにバッファされます
0180デフォルトの名無しさん
2013/04/04(木) 12:12:58.810181デフォルトの名無しさん
2013/04/04(木) 13:30:39.19死ねよおまえ
生きてる価値ねーよ
0182デフォルトの名無しさん
2013/04/04(木) 13:57:20.53なにが「よくワカンネ」だ
0183デフォルトの名無しさん
2013/04/04(木) 22:09:15.340185デフォルトの名無しさん
2013/05/13(月) 21:29:52.72ここ数年C#にどっぷりつかってたから、C++でコーディングするのが面倒だった。
実行環境のことを考えなくてよいなら、C#やJavaで作る方が簡単だな。
0186デフォルトの名無しさん
2013/05/13(月) 21:34:47.80Socket作るんだったらたぶんC#のほうが簡単そう。
0187デフォルトの名無しさん
2013/06/01(土) 23:20:34.89select(2)の第一引数には結局何を渡せば良いのん?
バークレーソケットの場合、FD_SETSIZEを渡しとけば機能的には問題無いらしいが、
これは例えばFD_SETSIZEが32768の環境なら、select()を呼ぶたびに
32768個のディスクリプタがチェックされることになるので無駄が生じている気がする…
あとWinsockではFD_SETした個数を渡せば良いというのは本当ですか
0188187
2013/06/01(土) 23:24:31.90ttp://msdn.microsoft.com/en-us/library/windows/desktop/ms740141(v=vs.85).aspx
>nfds [in]
>Ignored. The nfds parameter is included only for compatibility with Berkeley sockets.
→ガン無視されるので0とか-1とか渡しても良い(適当)
バークレーソケットではどうなのですか
0189デフォルトの名無しさん
2013/06/01(土) 23:49:25.060190187
2013/06/02(日) 00:00:57.31レス�dクス、
select(2)を呼ぶ時点でFD_SETされているのはソケット番号であってディスクリプタ番号ではなく、
ソケット番号がディスクリプタ番号と一致するとは限らないと思うのですが、それでも?
実はバークレーソケットでは一致するのでしょうか
(C標準ライブラリのIOBとかの実装と同じで、
ハンドル==配列の添え字、とする実装のが自然とは思えますが、仕様としてどうなの?)
0191デフォルトの名無しさん
2013/06/02(日) 00:15:20.65fdは全部数字。
「ソケット番号」という概念はない。
0192デフォルトの名無しさん
2013/06/02(日) 00:50:32.12レス�dクス多分理解しました
バークレーソケットの場合は全部fdなので問題は無い、と、
ただ、サーバ側のプログラムでは、クライアントから新規接続cがあった場合、
listenしていたfdをaccept(2)に渡して接続c用の新規fdを取得する結果、
select(2)で待つべきfdが増殖していくと思うのですが、
ということは<一番大きいfd+1 >というのはそのつど更新していくもの?
それとも、通信プロセスを起こすタイプのマルチスレッドサーバにすると問題無い(普通はそうする?)のでしょうか…
あと関連質問なのですが、
通信「スレッド」を起こすタイプのマルチスレッドサーバではどうすれば良いのでしょう…
子プロセスにfdを渡すのと異なり、親がfdを閉じるわけには行かない
しかし親だけがselect(2)するのでは通信「スレッド」を起こす意味がない
また、実情はともかく、仕様上はWinsockはスレッドセーフとは謳われていない
(Winsock互換の非スレッドセーフな実装が理論上は有り得る)
ので、どうプログラミングするのが正しいのかいまいちわからん…
0193デフォルトの名無しさん
2013/06/02(日) 03:49:28.43マルチスレッドサーバならselect(2)は使わなくていいでしょ。
いろいろな混合モデルもあるけど、最初は簡単なモデルで。
0194デフォルトの名無しさん
2013/06/02(日) 09:34:05.28mtuの値を取得してその値-フレーム分をreadするのでしょうか?
0195デフォルトの名無しさん
2013/06/02(日) 10:54:39.80ノンブロッキングモードにして適当に大きなサイズ (8KB とか 64 KB とか) で読めばいい
0196デフォルトの名無しさん
2013/06/03(月) 01:05:59.710197デフォルトの名無しさん
2013/06/03(月) 01:16:29.850198デフォルトの名無しさん
2013/06/03(月) 01:24:07.02ダウト
0199デフォルトの名無しさん
2013/06/03(月) 01:56:25.170200デフォルトの名無しさん
2013/06/03(月) 02:00:17.970201デフォルトの名無しさん
2013/06/03(月) 02:05:28.99しない
実験してみるといい
0202デフォルトの名無しさん
2013/06/03(月) 02:05:39.310203デフォルトの名無しさん
2013/06/03(月) 03:59:52.420204デフォルトの名無しさん
2013/06/03(月) 11:23:03.450205デフォルトの名無しさん
2013/06/03(月) 11:26:58.12受信データが1以上でバッファはデータ以上の大きさで読み込むと?
受信データが無いのに読み込むと?
0206デフォルトの名無しさん
2013/06/03(月) 11:33:03.050207デフォルトの名無しさん
2013/06/03(月) 11:41:45.210208デフォルトの名無しさん
2013/06/03(月) 12:12:09.020209デフォルトの名無しさん
2013/06/03(月) 23:50:05.470210192
2013/06/08(土) 23:51:12.09プロセスを起こすタイプのマルチスレッドサーバの現代版サンプル(他)↓
http://www.v6pc.jp/jp/upload/pdf/socket-sample-20121203.pdf
いとぢゅん氏が絡んでいたやつっぽいので多分信用に足る
で、Winsockにおいてプロセスにソケットを渡す方法↓
http://app.m-cocolog.jp/t/typecast/114340/102386/category/3335520
プロセスの終了を何の工夫も無くWaitForMultipreObjects()で待つと64プロセスが上限になるが、
そこはそれ、WaitForMultipreObjects()で64プロセス待つスレッドを64スレッド待つ、とかいう
多段構成が考えられる(いや知らんけど多分、
WinsockはGUIとの共存に適した非同期インタ──フェ──スも有するが、
とりあえずそこまでウィンドウズべったりにしなくとも、
select()かWsaPoll()だけでもマルチスレッドサ─バをなんとか構成できるのではないか(適当)
■ このスレッドは過去ログ倉庫に格納されています