- 1 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 03:43:08 ]
- 主にソケットに関しての質疑応答スレッドです。
Programming UNIX Socket FAQ (日本語訳) www.kt.rim.or.jp/~ksk/sock-faq/indexj.html Winsock Programmer's FAQ (日本語訳) www.kt.rim.or.jp/~ksk/wskfaq-ja/ 関連リンクは>>2-10辺り 足りなかったら適当に付け足してね 前スレ ネットワークプログラミング相談室 Port24 pc12.2ch.net/test/read.cgi/tech/1246895188/ 関連スレ ネットワークプログラミング雑談 pc12.2ch.net/test/read.cgi/tech/1235800707/ Java ネットワークプログラミング 【教えて!】 pc12.2ch.net/test/read.cgi/tech/1086238859/
- 55 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 20:14:07 ]
- 1はバックログ数1というわけではないんだな。これが。
- 56 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 22:12:56 ]
- それはOSによる。
例えばLinuxは最小が8、最大はsysctl.max_syn_backlog 2の階乗にラウンドされる。
- 57 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 22:46:01 ]
- 反論するなら、1がバックログ数1であるものを例示して反論してくれたまえ。
- 58 名前:デフォルトの名無しさん [2009/10/25(日) 00:07:08 ]
- パケットのフラグメント化を許可する方法を教えてください
- 59 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 00:14:17 ]
- 経路上の中継器の管理者にフラグメントされたパケットを落とさないように依頼する。
- 60 名前:デフォルトの名無しさん [2009/10/25(日) 13:04:09 ]
- listenソケットて閉じちゃいけないの?問題発生したんだが
- 61 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 13:12:44 ]
- どんな問題か書け
- 62 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 14:05:12 ]
- セレクト使った場合
相手がクローズしたかどうかを知るにはどうすればいいの?
- 63 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 15:03:27 ]
- >>1のFAQ嫁
- 64 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 15:05:51 ]
- s.eof()
- 65 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 22:27:46 ]
- >>59
中継器は使用せず直接LANケーブルで送信受信側をつないでます どうやらパケット自体送出できないみたいなのです フラグメント化が必要なデータだと
- 66 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 22:52:42 ]
- PS3かなにかのメッセージか?
動いてるなら気にスンナ
- 67 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 23:47:01 ]
- いえ、送出できてないので動かずです
- 68 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 00:25:23 ]
- >>58, 59
何がしたくて, 何をやったらどうなってるのよ? どう言う意味でパケットのフラグメントを使ってるのよ? IP フラグメントってのは, 下の例のような構成で, 中継が MTU=500 のネットに会わせて, 勝手に IP パケットを分割する 時の話だぞ 端点 -> MTU=1000 のネット -> 中継 -> MTU=500 のネット -> 端点 UDP で MTU 以上のデータを送信したいとかって話?
- 69 名前:デフォルトの名無しさん [2009/10/26(月) 15:50:31 ]
- selectって条件が揃うまで値を返さないんだよね?
そうなるとrecvとaccsept用に2つスレッド作らないといけないのか?
- 70 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 16:17:26 ]
- recv用とaccept用のディスクリプタを両方セットしとけば、いずれか一方が読み込み可能になれば返ってくる
スレッドは1つでok
- 71 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 16:39:01 ]
- UDPソケット作る時に宛先アドレスを指定して作った場合も
sendto,sendmsgを使うなら宛先は指定しなければならないんでしょうか?
- 72 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 17:41:42 ]
- > UDPソケット作る時に宛先アドレスを指定して作った
作り方教えて
- 73 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 17:44:43 ]
- あー
勘違いしてました
- 74 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 18:24:38 ]
- UDPでもconnectしとけばsend/recv使えるよ
- 75 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 20:21:31 ]
- これからネットワークプログラムを開発する場合
今のトレンドのプログラム言語はなんでしょうか
- 76 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 20:22:20 ]
- Rubyだ
- 77 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 20:26:40 ]
- Javaだ
- 78 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 20:29:14 ]
- トレンドなんか気にしているようではいけない
- 79 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 00:12:51 ]
- >>68
すみません、UDPでMTU以上のデータを送りたいということです。 分かりにくくて申し訳ないです
- 80 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 00:54:01 ]
- >>79
OSとか環境とか情報はないのか? sendto で宛先指定すりゃ普通に出ていかないか? 送れてない時ってエラー帰ってないか? どうしても send が使いたいんだったら >>74 もっとも, 組み込み用のスタックとかだと UDP の connect は, 実装してないスタックもあるらしいが…
- 81 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 06:19:11 ]
- >>79
送れません。
- 82 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 10:31:31 ]
- なんでRFCも読まずにネットワークプログラムしてる奴がゴロゴロいるんだ?
- 83 名前:デフォルトの名無しさん [2009/10/27(火) 23:38:53 ]
- ICMP って 「アイコンプ」って読んだら変かなあ
- 84 名前:デフォルトの名無しさん [2009/10/27(火) 23:54:47 ]
- hen
- 85 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 23:56:00 ]
- SNMPをスヌンプって読む人はいるよ
漏れは読まないけど
- 86 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 23:57:11 ]
- >>82
ノ
- 87 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 11:08:25 ]
- WSDLはうぃずどぅるだけどな
- 88 名前:デフォルトの名無しさん mailto:sage [2009/10/31(土) 04:47:46 ]
- リフラグメント前提のパケットを大量に流してあげると、フラグメントしてくれる親切なルータにDoS出来てしまう気がした。これってセキュリティホールじゃ?
ICMP echoは捨ててもいいと思うけどね。ルータで捨てた時に送って来るICMPは捨てると良くないことが起きそうだが。
- 89 名前:デフォルトの名無しさん [2009/11/01(日) 21:35:44 ]
- >>80
UDPのconnectなんてあるんですね。。でも、connectすりゃ、send,recv使えるって しなくてもmtu以下のサイズなら使えます。そういうことではないのでしょうか? OSがUNIXでもwindowsでもないからおくれないのかなぁ
- 90 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 21:47:16 ]
- connectしなかったらsendは使えない
だって宛先不明 sendtoやsendmsgは使える connectしたらsendも使える
- 91 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 23:04:55 ]
- >>88
そんな古いDoS攻撃…
- 92 名前:デフォルトの名無しさん [2009/11/01(日) 23:21:35 ]
- 複数の接続を受けるサーバーを作りたいんだけど
人数が増えるたびrecvの回数増やすにはどうすればいいんだ?
- 93 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 00:37:19 ]
- recvの回数増やすというのはよくわからないが
受け付けた接続ごとに別々のスレッドを立ち上げるか selectやpoll等を使ってひとつのスレッドですべての接続を捌くか 好きなほうを選べ
- 94 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 02:12:48 ]
- スレッドで処理してる間に、パケット届くと取りこぼしそうだw
- 95 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 02:37:43 ]
- はあ?
- 96 名前:デフォルトの名無しさん [2009/11/02(月) 03:33:19 ]
- UDPパケットを取りこぼしなく取り込みたいのですが
なにかいい方法ありませんか?
- 97 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 09:59:52 ]
- あきらめれ
- 98 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 10:28:49 ]
- >>96
取りこぼさないのは無理なので、取りこぼしたことを検出して回復を図る
- 99 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 11:25:32 ]
- 取りこぼしたくなければ素直にTCP使っとけ
UDPにするなら取りこぼしてもいいようにプログラム側を設計しろ っていうのが定型文的な解答
- 100 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 15:29:39 ]
- 決してしてはならないのは
「Ethernat直結でしか使わないからUDPでも取りこぼしなんて起きないだろう」 などと考えること。これをやってハマる初心者が意外に多くて困る。
- 101 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 16:09:27 ]
- 同時にパケット発射すれば簡単に消えるしな。
- 102 名前:デフォルトの名無しさん [2009/11/04(水) 18:16:51 ]
- マルチスレッド鯖製作中なんだけど
誰かからデータ受信したら送信してきた相手以外の クライアントにそのデータを送るにはどうしたらいいの?
- 103 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 18:29:17 ]
- 言葉どおりにやればいい
- 104 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 18:31:15 ]
- 受信したことを別スレッドに通知するにはどうすればいいの?
- 105 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 19:14:21 ]
- 通知を受け取りたい各スレッドごとにキューのようなデータ構造を何か用意する
通知を送りたいスレッドは宛先スレッドのキューに送りたいデータを置く 通知を受け取りたいスレッドはヒマなときに自分のキューを見てデータが来ていたら取り出す OSによってはそういったメッセージキューの機能をすでに持っていることもある 自分で作る場合はスレッドセーフにすることを忘れずに
- 106 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 19:29:06 ]
- 難しいこと考えないで、
受信したスレッドが全部のソケットに書けばいい 排他が気になるなら、ひとつmutexをロックしておけばいい
- 107 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 19:30:21 ]
- >>102
その質問そのものをコードにしてみればいいじゃないか(受け取ったデータを他に転送) リソース競合には気をつける必要があるけど処理自体はおまいの質問そのものだぞ
- 108 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 19:32:41 ]
- >>102
何か効率の良い方法とか、そういうライブラリの存在を訊きたいのかもしれないが そのレベルだとどちらの意味でもがんばって送信しやがれってレベルでしかないぞ。
- 109 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 22:04:39 ]
- >>106
スレッドに値渡ししたら次のアクセプトで変数上書きしてて 受信したスレッドは、送信する相手のソケットを知ることができないんだ だから他のスレッドに通知してそのスレッドから送信させようかなと グローバルの配列で管理しておかないとだめってことか
- 110 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 22:13:09 ]
- 配列というか上に書いてある通りキューだろ
(キューの実装は配列でもいいけれど)
- 111 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 22:36:17 ]
- でもそれってrecvをノンブロックのしないといけないんでしょ?
- 112 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 22:56:51 ]
- そんなこと関係ない。
- 113 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 00:15:28 ]
- どういうこと
ノンブロックで受信とそのキューとやらのチェックをポーリングさせるってことじゃないのか
- 114 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 01:33:27 ]
- 1接続しか許さないサーバプログラムを作る方法を教えてくだちい
listen()でバックログを1にしてaccept()した瞬間にlistenソケット閉じて ってやればいいかと思ったけど acceptする前にどんどん接続を受け付けやがる
- 115 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 02:47:46 ]
- 接続待ち受けのソケットでそのまま通信すればいいんじゃね?
- 116 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 04:37:56 ]
- システムコールに惑わされずにまずRFC読め
- 117 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 08:47:12 ]
- 同期用キューでも作って渡せばいい
詳しくはこっちだな マルチスレッドプログラミング pc12.2ch.net/test/read.cgi/tech/1253521167/
- 118 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 09:01:16 ]
- >>114
無理なOSは無理なんで諦めてください。 あらかじめ双方のポート番号が分かっているなら 双方からconnectって手があるけど。
- 119 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 09:02:35 ]
- >>113
お前がそう言う実装に拘る理由こそ、どういうこと?
- 120 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 09:29:30 ]
- >>114
キミのやりたい事は完璧にはできない。 バックログを0にして、acceptしたらlistening socketをcloseする。 これでもacceptしてからcloseするまでの間は接続を受け付けてしまう。 >>118 可能なOSを例示してくれ。今まで聞いたことが無いから知りたい。
- 121 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 09:41:41 ]
- 昔のvxWorks
- 122 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 10:01:50 ]
- >>118
双方からconnectってなんだよ。
- 123 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 10:46:35 ]
- ポート食いつぶし攻撃か?
- 124 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 11:55:49 ]
- マイコンのプロトコルスタックを作ってる最中なのだがちょっと質問。
データ送信したとき全くの正常ならば 相手から返ってくるAcknoledgeNumber=自分が送信したSequenceNumber+TCPデータ長 となる筈なんだろうけど、この相手のACKパケットに入ってるAcknoledgeNumberが和より少ないときってこっちは何をすれば良いんだ? もらったAcknoledgeNumberの分までは正常と見なして続きから送り直せばいいのかね?
- 125 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 15:25:59 ]
- >>124
そんなもんは気にせずに window size が 0 になるまで無理やり送りつけるんだ
- 126 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 17:43:56 ]
- マイコンに限らず再送バッファの大きさに支配されると思う
再送バッファサイズ<=窓までは送れる
- 127 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 22:18:00 ]
- >>126
最後は再送バッファサイズの問題とかスロースタートの問題には 行き当たるんだろうけど、プロトコル的には送ったもん勝だわな
- 128 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 02:03:33 ]
- >>122
host1: socket→bind→connect host2: scoket→bind→connect TCPの接続開始ハンドシェイクはこういうやり方でも可能。
- 129 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 22:03:48 ]
- 意味が分からん。
ソースで示して>128
- 130 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 13:54:24 ]
- 横着しないで RFC 位読め
- 131 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 14:48:44 ]
- UDPって「取りこぼし」だけじゃなくて「送りそこね」もあるんだよな
- 132 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 16:41:10 ]
- 途中で捨てられたも多い。取りこぼしだと届いてるのに拾えなかった感が有るが、そもそも届いてない。
- 133 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 21:50:24 ]
- Windowsでネットワークアドレスの違うIPアドレスへ強制的に
UDPのパケットを送る方法って無いでしょうか? SetIpNetEntry()で静的arpに登録して送っても駄目みたいでした。 (たぶん送信時に跳ねられている)
- 134 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 23:07:35 ]
- arpコマンドで登録すればいいんじゃ?
- 135 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 00:10:05 ]
- >>134
SetIpNetEntry()を呼ぶのと、arpコマンド実行は同じ事だと思うけど、 試しにpingとwireshark使ってやってみました。 Destination host unreachable. と出て、相手には何も届いてないですね。 しかも、Windows7でやると特権がいるとかでエラーになるし、 諦めてブロードキャストで送ることにします。
- 136 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 08:54:56 ]
- ftpでファイルを送受信することになりました
こっちも相手側もクライアントとサーバになります VC(MFC)でプログラムを作ろうと思いますが どうやって作っていいかわかりません クライアント側はサーバーに接続して ファイルを転送する?イメージがあります。 検索するとCFtpConnectionをつかって作るのがわかりました でもサーバー側ってどうやって作るんでしょうか? どこかにサンプルとかヒントはありませんか?
- 137 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 09:38:23 ]
- ファイルが転送できればいいのかFTPプロトコルを実装したいのか
- 138 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 10:18:54 ]
- 多分ファイル転送ができればいいです
プログラムでファイルをリモートのPCに送りたいのと 相手側がいつでもファイルをこちら側に送れるように ftpサーバー機能があればいいです
- 139 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 10:21:10 ]
- >>133
違うネットアドレスへ送ろうとする場合、arpはgateway に対してだよ?routeはどうなってるの?
- 140 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 10:39:50 ]
- >>138
では www.geekpage.jp/programming/winsock/ をちょこっと見ればできますね
- 141 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 11:07:33 ]
- >>140
ありがとうございます 見てみましたがftpについては見当たりませんでした ftpサーバとしてftpクライアントの要望にこたえる例とかしりませんか?
- 142 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 11:10:23 ]
- サーバなんて既存のやつ使えばいいじゃない
サーバもクライアントも作るなら特定のプロトコルにこだわる必要もないだろう
- 143 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 11:11:38 ]
- だめだこりゃ
- 144 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 11:13:14 ]
- あとMFCならこういうのでどうか
ttp://www.codeproject.com/KB/IP/CFtpServer.aspx
- 145 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 11:18:28 ]
- >>142
一応売り物にするのでフリーのは問題ある?のではないかと思ってます システムに組み込んで売っても問題ないフリーソフトとかありませんか? >>144 ありがとうございます 参考にサンプル落とし見ようとしたら登録が必要なようですorz 英語はわからなくて…すみません
- 146 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 11:25:49 ]
- 多少の英語も出来ずにプログラマやってるのかよ
- 147 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 11:28:01 ]
- もうRFC959読んで自前で実装しちゃいなよ
日本語訳もあったはずだ
- 148 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 11:48:47 ]
- >>145
BSDライセンスのFTPサーバ。FreeBSDのとか。 まあ機能限定で実装すれば自前でも簡単だけど。
- 149 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 11:54:27 ]
- >>148
ありがとうございます ちょっと調べてみます 自分でいろいろ調べてたらXPにもftpサーバがあるみたいなのですが XPのを使うのとフリーのftpサーバ使うのは全然違う意味ですか? XP標準にあるならそっちのが楽なのかなぁ?と思ったりしてます
- 150 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 12:03:14 ]
- >>149
IISのこと?
- 151 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 12:04:52 ]
- IISはXPのProにはあるけどHomeには無いから気をつけて
- 152 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 12:09:04 ]
- >>150
そうです XP Proを使う予定でs
- 153 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 17:17:07 ]
- 初心者極まりない質問で申し訳ないですが、お願いします。
VB6.0のwinsockオブジェクトを用いて、出来合いのサーバ(ORCA_CLAIM)に データを送信するプログラムを作成してます。 ポートとアドレスを指定して送りたいデータを送信し、 ただクローズするだけなのですが、送信後にサーバのステータスが CLOSE_WAITになったまま消えてくれません。 (# netstat -nap localhost などで確認) そうなると再送信してもポートが現在使用されていますと出て、 エラーを返すのでとても困っています。 サーバソフトの製作元にもたずねて見ましたが、そんな現象はありえないと いうお話でしたので、どうもこちら側に決定的な原因があるようです。 状況説明がうまくないようでしたら申し訳ありません。 何か、ありがちなミスなどありましたらご指摘よろしくお願いします。
- 154 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 17:41:20 ]
- winsock1.closeはしてるの?
- 155 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 17:51:47 ]
- IISに投げてみたけどCLOSE_WAITにはならないよ
Option Explicit Private Sub Command1_Click() Winsock1.LocalPort = 0 Winsock1.RemoteHost = "localhost" Winsock1.RemotePort = 80 Winsock1.Connect End Sub Private Sub Winsock1_Close() Winsock1.Close End Sub Private Sub Winsock1_Connect() Winsock1.SendData "GET / HTTP/1.0" & vbCrLf & vbCrLf End Sub Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long) Dim s As String Winsock1.GetData s MsgBox s End Sub
|

|