トップページ⇒tech
1001コメント341KB

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

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん2010/03/23(火) 20:31:49
主にソケットに関しての質疑応答スレッドです。

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

前スレ
ネットワークプログラミング相談室 Port25
http://pc12.2ch.net/test/read.cgi/tech/1255459388/
関連スレ
ネットワークプログラミング雑談
http://pc12.2ch.net/test/read.cgi/tech/1235800707/
Java ネットワークプログラミング 【教えて!】
http://pc12.2ch.net/test/read.cgi/tech/1086238859/
0951デフォルトの名無しさん2010/12/06(月) 02:09:37
>>945
おおざっぱに思いつくのは以下

0. アクティブな(またはアクティブにできる)インターフェースが存在する
ローカルなアクセスは可能かもしれない
1. default route が存在する
外部に接続されているかもしれない
2. DNS サーバにアクセスできる
外部に接続されているかもしれない
3. DNS で外部のアドレスが引ける
ゲートウェイが生きていれば外部に接続可能かも知れない
4. DNS で引いた任意のアドレスにアクセス可能
proxy経由かも知れないが外部にアクセス可能
5. 目的のサイトにアクセスしてみる
運が良ければ目的のサイトが生きていてアップデート情報を取得可能

てなわけで, アクセスしてみるまでは無理
0952デフォルトの名無しさん2010/12/08(水) 16:59:09
最初からサイトにアクセスしてみて駄目なら諦めるでいいじゃんw
09539402010/12/12(日) 23:06:03

>>941
>>942
>>946
>>949
>>950
>>951
>>952

皆様、どうもありがとうございます。
貴重なご意見を参考に次のようにしました。

(1)自動的にアップデートを行うかどうかは、
   設定で利用者に選んでもらう。

(2)アップデートの問い合わせをして
   繋がらなかったら、タイムアウトして
   処理を終了する。

本当に助かりました。ありがとうございます。
0954デフォルトの名無しさん2010/12/12(日) 23:55:24
間抜けな思いつきにもかかわらず、無難なところで決着したな。
大抵はカオスになるんだけど。
0955デフォルトの名無しさん2010/12/15(水) 17:07:42
ネットは奥が深いし、今のインターネットは変な物が間に挟まってるのが普通な歪な状態だから仕方が無い。
0956デフォルトの名無しさん2010/12/16(木) 08:42:04
> 今のインターネットは変な物が間に挟まってる
たとえば?
0957デフォルトの名無しさん2010/12/16(木) 10:20:07
>>956
NAT
0958デフォルトの名無しさん2010/12/16(木) 12:50:59
そもそもプロバイダが挟まってるのも変だお
インターネットじゃなくてインターツリーだお
0959デフォルトの名無しさん2010/12/17(金) 17:20:39
元々は亜米利加のティア1に国際専用線を引いて自前で繋ぐのが基本だしね。

バランサとかファイヤウォールも昔は無かった。
0960デフォルトの名無しさん2010/12/17(金) 23:53:55
>>958
「internet は network と network をつないだものだ」と 30年近く信じきってたんだが
provider の持っている network は network じゃないのか?
0961デフォルトの名無しさん2010/12/18(土) 00:07:25
an internet と The Internet の違いじゃないの
0962デフォルトの名無しさん2010/12/18(土) 00:39:29
今もインターネットと10年前のインターネットも違うと思われ。
0963デフォルトの名無しさん2010/12/19(日) 14:17:26
今時は The Internet ですらなく The Net とか The Web だもの。
0964デフォルトの名無しさん2010/12/20(月) 00:50:21
winsockについて質問です。

接続してきたクライアントの情報と送信してきたメッセージを
プロンプトに表示させる簡単なサーバはできたんですが、
これを複数のクライアントからの同時接続に対応させるにはどうすればいいのですか?

今は一つのクライアントがつないだら、そいつを切断するまで他のクライアントから
送信したメッセージが画面に表示されません。

コード的にはwhileループの中でrecvを繰り返してるような感じです。

抽象的な表現でも構わないので、何かアドバイス下さい。
0965デフォルトの名無しさん2010/12/20(月) 01:02:29
別のポートで待ち受ければいいよ
0966デフォルトの名無しさん2010/12/20(月) 01:04:38
>>964
ソケット毎にスレッド起こすかポーリングでグルグル
0967デフォルトの名無しさん2010/12/20(月) 01:07:48
>>965-966ありがとうございます

スレッド起こす方法でやってみようと思うのですが、
そのスレッドの数はlisten関数の第二引数で指定した数まで
という認識でよろしいでしょうか?
0968デフォルトの名無しさん2010/12/20(月) 06:49:46
>>967
いいえ。必要な数だけ。
0969デフォルトの名無しさん2010/12/20(月) 07:43:21
ありがとうございます。
ではlisten関数の第二引数はどういうときに影響してくるのでしょうか?

それとポーリングについてですが、
この言葉自体昨日知ったのですが、クライアント側にデータを送信したいものが
ないか問い合わせをすることだそうですね。

イメージとしてはループの中で、acceptで接続を待ち続けて、
ソケットが作成されたら、一定量のデータを受信し、
以降は作成されたソケットに対して、データが受信し終わるまで
recvしまくるといった感じでしょうか?

あと、winsockを勉強するうえで、良いサイトがあったら教えて下さい。
0970デフォルトの名無しさん2010/12/20(月) 09:31:15
>>969
ポーリングについて
接続中のソケットにデーターが到着してるかどうかをチェック
入ってたら、入ってる分だけ受信して処理ルーチンをコール
戻ってきたらループ
0971デフォルトの名無しさん2010/12/20(月) 10:21:18
>>969
とりあえず、>>1くらい読んだ上で質問してるんだろうな?
0972デフォルトの名無しさん2010/12/20(月) 12:16:14
見てなかった。すみませんでした。
0973デフォルトの名無しさん2010/12/22(水) 08:49:06
shutdown関数って呼び出す必要あるのですか?
tcp/ip通信をしています。
呼び出すとしたら、サーバ側はサーバのソケットとクライアントのソケット両方に
対して、呼び出せばいいのですか?
逆にクライアント側はサーバのソケットのみしか作らないのでサーバのソケットのみに対して
呼び出せばいいのですか?
お願いします。
0974デフォルトの名無しさん2010/12/22(水) 09:10:29
>>973 一般的に送信側/受信側の個別操作が必要な時以外必要ない
0975デフォルトの名無しさん2010/12/22(水) 09:18:22
>>974
ありがとうございます。
個別操作というのは具体的にどういうことを言うのでしょうか?
0976デフォルトの名無しさん2010/12/22(水) 10:33:54
>>975
それがわからんうちは必要ないってことだ
0977デフォルトの名無しさん2010/12/22(水) 12:09:59
>>976
わかりました。ありがとうございました。
0978デフォルトの名無しさん2010/12/23(木) 07:07:11
listenの第二引数って、何の数?
どういう時に影響してくるのかよくわからんのだが。
0979デフォルトの名無しさん2010/12/23(木) 07:33:01
保留できるconnectionの最大数
下の例で何かの処理を行っている間に待たせておけるconnection要求数
listen(sock, backlog);
for (;;) {
conn = accept(sock, ...);
/* 何かの処理 */
}

処理系によって扱いが微妙に異なる
winskockは以下, unix系は man listen しれ
http://msdn.microsoft.com/en-us/library/ms739168%28v=VS.85%29.aspx
0980デフォルトの名無しさん2010/12/23(木) 08:04:24
なるほど!「そこ」の要求数だったんですね!

よく分かりました!本当にありがとうございます!
0981デフォルトの名無しさん2010/12/23(木) 08:29:14
理解してもその通りに制御不可能なlistenの第二引数の謎。
0982デフォルトの名無しさん2010/12/23(木) 14:26:01
謎というか、ここが制御できないOSは大体うんこだよ
0983デフォルトの名無しさん2010/12/23(木) 19:04:16
うんこにうんこと言われましても・・・
0984デフォルトの名無しさん2010/12/23(木) 22:23:35
syn flooding対策で、今時の大抵のOSは第二引数無視してsyn,ack返すからrefuseされる事はない。
これが、第二引数で制御不可能な理由。
0985デフォルトの名無しさん2010/12/24(金) 00:03:24
skype大規模ダウン
0986デフォルトの名無しさん2010/12/24(金) 00:19:58
>>984
widows の実装はしらんが unix 系は SYN flood だと破断するまでは
それなりに有効に動作しているように見えるが
0987デフォルトの名無しさん2010/12/24(金) 03:03:45
保
0988デフォルトの名無しさん2010/12/24(金) 08:10:19
>>986
0にした時に2つ目以降のコネクション要求に対してrst返ってくる?
0989デフォルトの名無しさん2010/12/24(金) 13:06:39
ホ
0990デフォルトの名無しさん2010/12/24(金) 18:26:35
サーバ側のコードって、サーバとクライアントのソケット作りますよね?
サーバ終了時にサーバのソケットさえクローズしてしまえば、
クライアント側から通信できないと思うんですが、
クライアント側のソケットってclosesocketする必要あるんですか?
0991デフォルトの名無しさん2010/12/24(金) 18:30:53
確保したら解放する
開いたら閉じる
ちゃんと後始末しないとメモリリークするが、それでもいいなら
0992デフォルトの名無しさん2010/12/24(金) 18:32:28
あぁ、そのまま終了しちまうんなら別にいいかもね
0993デフォルトの名無しさん2010/12/24(金) 18:38:36
終了時なら別に構わないってことですかね。
ただ単に切断するだけなら、両方閉じるようにします。
すばやい回答ありがとうございました。
0994デフォルトの名無しさん2010/12/25(土) 03:40:55
ume
0995デフォルトの名無しさん2010/12/25(土) 06:26:55
ho
0996デフォルトの名無しさん2010/12/25(土) 10:47:45
winsock 使っちゃダメと言われたから、今日は私の hogehoge 記念日
0997デフォルトの名無しさん2010/12/25(土) 19:15:09
recvで最後まで受信したかはどう調べればよいのですか?
改行文字チェック?
0998デフォルトの名無しさん2010/12/25(土) 19:15:58
最後まで受信したらrecvから0が返る
0999デフォルトの名無しさん2010/12/25(土) 19:24:24
0って相手が切断したときじゃなかったんですね。ありがとうございました。
1000デフォルトの名無しさん2010/12/25(土) 20:14:29
最後って何の最後だよ。レコードの最後、メッセージの最後…
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。