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

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2012/10/31(水) 17:05:08.29
主にソケットに関しての質疑応答スレッドです。

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

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

関連スレ
ネットワークプログラミング雑談
http://toro.2ch.net/test/read.cgi/tech/1235800707/
0223デフォルトの名無しさん2013/06/15(土) 15:58:13.05
FD_SETじゃなくてFD_SETSIZEの事言ってるんだろうけど
そんなもの使うのヤメレ
0224デフォルトの名無しさん2013/06/15(土) 15:59:06.31
保証されてるのはFD_SETSIZE未満の記述子に対してだな。
しれっとウソつくなよ。>>221
0225デフォルトの名無しさん2013/06/15(土) 16:46:01.43
>>222
> > Windsock
> ってのは, BSD ソケット API を Windows で実装したものって理解してたんだが違うのか?

違う。似て非なるもの。意味不明の改変もある。
0226デフォルトの名無しさん2013/06/15(土) 16:46:47.76
>>225
>>221は馬鹿でよく分かってないので間違ったこと書くのは仕方ない。
0227デフォルトの名無しさん2013/06/16(日) 12:00:56.26
windsockってなんだwinsock2のことかね
0228デフォルトの名無しさん2013/06/17(月) 12:46:20.67
>>227
1も2もどっちも嫌い
0229デフォルトの名無しさん2013/06/23(日) 03:27:09.95
別物なんだよなあ…ところどころ似てるけど全然違うから紛らわしい
0230デフォルトの名無しさん2013/07/03(水) NY:AN:NY.AN
質問です。
Winsockを使っています。
一度通信を終えた後に再度通信を行おうとすると、sendをacceptが認識してくれません。
bind,listen関数は正常に動作しています。
クライアント側は完全に再起動、サーバーはwhileで使いまわしています。
原因に心当たりのある人教えてください
0231デフォルトの名無しさん2013/07/03(水) NY:AN:NY.AN
>sendをacceptが認識してくれません

認識するわけなかろう
02322302013/07/03(水) NY:AN:NY.AN
>>231
済みません。仰る通りでした。
connectの戻り値は0でクライアント側は繋がっていると認識しているようです。
サーバー側を消すとエラーが出てくるので間違い無いと思います。

サーバー側はacceptを使っているスレッドを消していない時は2つ以上の接続であっても、上手く動作します。
クライアント側が再接続する場合もちゃんと動きます。
しかしスレッドを再起動した時には一つ目の接続から認識しません。
変数は毎回初期化しています。
0233デフォルトの名無しさん2013/07/03(水) NY:AN:NY.AN
サーバーはwhileで使い回してるのにスレッドを再起動?
状況がよくわからんな
0234デフォルトの名無しさん2013/07/03(水) NY:AN:NY.AN
closeし忘れ?
0235デフォルトの名無しさん2013/07/03(水) NY:AN:NY.AN
>>232
ちゃんとListenしなおしてる?
0236デフォルトの名無しさん2013/07/04(木) NY:AN:NY.AN
listenしなおしってなんだよ
しっぱなしでいいだろ
いちいち再listenとかどこのBASICモドキだよ
0237デフォルトの名無しさん2013/07/04(木) NY:AN:NY.AN
accept に渡してるソケットを accept の戻り値で書き換えてるとか?

accept の戻りのソケットは 接続発生毎に別物だから
変な使いまわしからすると 「接続は受けた けど クライアントとの通信が出来てない」 ってなことになる
02382302013/07/05(金) NY:AN:NY.AN
>>233,236
考えてみればlistenしっぱなしで良かったです;
設定を弄る時に排他処理が必要かと思い、止めようとしてました

>>234,5
再lisetn,closeはしていると思います。

>>237
有用な情報ありがとうございます!
以下のような処理をしてるので大丈夫だとは思いますが、調べてみます。

listen(--);
-初期化処理-
while(1){
dstSocket[id] = accept(----);
if(-1 != dstSocket[id]){
--------
id = DecideNewId();
}
}
0239デフォルトの名無しさん2013/07/09(火) NY:AN:NY.AN
これは肝心なところを隠して、どうでもいいところだけ書くダメな質問の典型だな
全体に意味不明だから、もう少し勉強してから出直すほうがいいと思う
0240デフォルトの名無しさん2013/07/10(水) NY:AN:NY.AN
ほとんどのバグは本人が関係ないと思って端折ってるところに存在する
そもそも肝心なところがどこか判ってるプログラマはむしろバグらない
0241デフォルトの名無しさん2013/07/10(水) NY:AN:NY.AN
なんでこうセンスの無い人間がプログラミングなんかやるのか
すべて駆逐したい
0242デフォルトの名無しさん2013/07/10(水) NY:AN:NY.AN
9割5分くらいのPGが消えてしまうじゃないか
0243デフォルトの名無しさん2013/07/10(水) NY:AN:NY.AN
104期生ってどのくらい巨人になれるの?
0244デフォルトの名無しさん2013/07/10(水) NY:AN:NY.AN
web(HTTP)の普及のせいで
ネットワークを利用するアプリの質が極端に下がった
退化しまくり
0245デフォルトの名無しさん2013/07/10(水) NY:AN:NY.AN
なんでもWebサービス。まあ便利だけどね。
0246デフォルトの名無しさん2013/07/10(水) NY:AN:NY.AN
webサービスは機種依存性をなくしたりアプリのインスコの手間を省いたりDLL地獄回避のメリットがあると言われていたが
結局ブラウザのバージョン依存で地獄とか同じ過ちを繰り返してるとしか
0247デフォルトの名無しさん2013/07/10(水) NY:AN:NY.AN
俺の言ったwebサービスはWebブラウザは関係ないけどね
0248デフォルトの名無しさん2013/07/10(水) NY:AN:NY.AN
P2P掲示板の同期方法はどうやればいいですか?
基本が一対一の通信なのに全体で同じデータを受け取れるのはむずかしくないですか?
0249デフォルトの名無しさん2013/07/10(水) NY:AN:NY.AN
通信速度が上がったから、HTTPのオーバーヘッドが気にならんからなぁ

>>248
P2Pで全体ってどういう事を言ってるのかしらんが
全体で同じデータを受け取る必要はないだろ
0250デフォルトの名無しさん2013/07/10(水) NY:AN:NY.AN
WebサービスってWSDLとかの話だろ、ブラウザ関係ねえw
0251デフォルトの名無しさん2013/07/10(水) NY:AN:NY.AN
ソケットでhttpクライアント作ってみたけど意外に簡単すね
でも企業面接でhttpの質問のみで落とされますた
0252デフォルトの名無しさん2013/07/11(木) NY:AN:NY.AN
java の質問で拾ってもらいました10年前
0253デフォルトの名無しさん2013/07/11(木) NY:AN:NY.AN
TCPのパケットの問題で落ちたわ…
0254デフォルトの名無しさん2013/07/11(木) NY:AN:NY.AN
>>248
難しくは無い。
全体に同じデータを送る必要があるなら、全体に同じデータを送るだけ。
非常に単純な話だよ。
0255デフォルトの名無しさん2013/07/11(木) NY:AN:NY.AN
実はUDPの方が転送効率は良いんです。TCPは糞です。
http://ascii.jp/elem/000/000/712/712158/
0256デフォルトの名無しさん2013/07/11(木) NY:AN:NY.AN
>>255
tcp6に採用されるような論文書かないと説得力全くない。
特殊な状況でしか効率良くないプロトコルじゃあ...
0257デフォルトの名無しさん2013/07/11(木) NY:AN:NY.AN
TCPが効率悪く見えるのは通信が1対1のときのを測定してるからだよな
多対多の通信を想定したプロトコルなんだから
0258デフォルトの名無しさん2013/07/11(木) NY:AN:NY.AN
TCPって思いっきり1対1の通信を想定したプロトコルじゃねーか。
0259デフォルトの名無しさん2013/07/11(木) NY:AN:NY.AN
故47氏がTCPを何十倍も超える高速通信を実現したとか聞いたが
0260デフォルトの名無しさん2013/07/11(木) NY:AN:NY.AN
TCPが回線スループットの何十分の1の速度しか出ないなんて事は無いから
言ってることが明らかにおかしい
0261デフォルトの名無しさん2013/07/12(金) NY:AN:NY.AN
UDPは一方向の無手順通信
無手順だから早いってだけでハマらんようにね
0262デフォルトの名無しさん2013/07/12(金) NY:AN:NY.AN
既存ファイル転送プロトコルに比べて大して変わらない性能で何のインパクトもなかった(当時)。
0263デフォルトの名無しさん2013/07/12(金) NY:AN:NY.AN
出たなMulticastTCPお化け!
0264デフォルトの名無しさん2013/07/12(金) NY:AN:NY.AN
SCTPのマルチホーミング構成をとっているときに
クライアント-プライマリサーバからはHEARTBEAT
の送信・応答があるんだけど、セカンダリサーバの
ほうってプライマリからのハートビートインフォメーションに
乗せるんじゃなくてセカンダリサーバからHEARTBEAT
返すことってSOCKOPTのパラメタ設定とかで可能?
0265デフォルトの名無しさん2013/07/12(金) NY:AN:NY.AN
>>260
複数セッション束ねるとか、方法はあるでしょ
0266デフォルトの名無しさん2013/07/12(金) NY:AN:NY.AN
>>260
TCPはRTT依存するし、パケットロスに対する速度低下率が高すぎる。
0267デフォルトの名無しさん2013/07/12(金) NY:AN:NY.AN
>>264
dynamic multihomingが有効なら管理されてるpathの死活を把握してないといけないから、
セカンダリでもheartbeatによるpath管理が行われているはず。
フリーの実装ならRandall Stewartさんが関わっていたFreeBSDが信頼性あるんじゃないか。

>>266
http://image.itmedia.co.jp/l/im/news/articles/1206/12/l_moto_ssbp.jpg
みると、最初からwindow最大化したTCP4とRTT性能は大差ないように思う。
ack管理が閾値ベースである問題は解消してるけど、
そんなのは10年以上前からあるし。
0268デフォルトの名無しさん2013/07/12(金) NY:AN:NY.AN
無罪判決後、47氏の夢   2012年  『Winnyの金子氏が夢見る次世代高速ネットの世界』
ascii.jp/elem/000/000/712/712158/
>金子:本当にTCPがボトルネックなんですよ。みなさんあまり気付いていないですけど、
>SilverBulletで動作させてみると楽勝で10倍くらいの通信速度が出るんですよ。ヘタすると100倍くらい出ますから。
0269デフォルトの名無しさん2013/07/12(金) NY:AN:NY.AN
>>258
多対多だおω
0270デフォルトの名無しさん2013/07/12(金) NY:AN:NY.AN
>>258はTCP層だけしか見てないから仕方ない
0271デフォルトの名無しさん2013/07/12(金) NY:AN:NY.AN
TCPコネクションが <自IPアドレス, 自ポート番号, 他IPアドレス, 他ポート番号>という
組(tupple)でモデル化されることは、このスレ住人にとっては常識だと思う。

で、TCP層の利用者(user)であるアプリケーションの視点からは、
TCPコネクションは相手アプリケーションとの間の「1対1」関係に見えるし、同時に
TCPコネクションの集合を扱うTCP層の提供者(provider)であるTCPスタックの視点からは、
自集合と多集合との間の「多対多」に見える。
0272デフォルトの名無しさん2013/07/12(金) NY:AN:NY.AN
ベストエフォート側のネットワークで、
みんな帯域を譲りあいながら使ってるわけだからさ、
じゃないとslow-startとか必要ないわけよ。
0273デフォルトの名無しさん2013/07/12(金) NY:AN:NY.AN
>>266
>パケットロスに対する速度低下
それは確かにそうだね
0274デフォルトの名無しさん2013/07/12(金) NY:AN:NY.AN
>>271
ふつう、全単射を「多対多」とは言わんわな。
0275デフォルトの名無しさん2013/07/12(金) NY:AN:NY.AN
言わないな
0276デフォルトの名無しさん2013/07/13(土) NY:AN:NY.AN
TCPを多対多とか言う奴はUMLの多重度も正しく書けないだろ
0277デフォルトの名無しさん2013/07/13(土) NY:AN:NY.AN
輻輳を意識したプロトコルなんだから
1対1のことだけ考えてる訳ではないよ
0278デフォルトの名無しさん2013/07/13(土) NY:AN:NY.AN
>>277
全くその通りだが、それは論点ではない
0279デフォルトの名無しさん2013/07/13(土) NY:AN:NY.AN
速度低下の原因が輻輳であるならば
1対1の場合なら速度低下は起きない
と言っているということになる
それではいったい47氏の主張と
どこが違うと言えると言うのか
0280デフォルトの名無しさん2013/07/13(土) NY:AN:NY.AN
何が言いたいのか伝わって来ない
0281デフォルトの名無しさん2013/07/13(土) NY:AN:NY.AN
流れぶった切って宣伝です
C++で通信ライブラリのようなものを作っております
よかったらお試しください
http://ichishino.nobody.jp/
0282デフォルトの名無しさん2013/07/13(土) NY:AN:NY.AN
>281
頑張ったところを教えて
0283デフォルトの名無しさん2013/07/13(土) NY:AN:NY.AN
どっかのTCP/IPスタックがお馬鹿ってだけじゃあ
0284デフォルトの名無しさん2013/07/14(日) NY:AN:NY.AN
>>281
これは酷い
某技術書のサンプルコードとほとんど同じコードばかりじゃねえかw
0285デフォルトの名無しさん2013/07/14(日) NY:AN:NY.AN
WinSockで通信プログラム作ってるんですけど
ポート1つで通信するとした場合
ホスト側でソケット2つ用意してクライアント2人と繋げたいんですけど
どうしても片方のソケットにしか二人分のデータが飛んでこないんですけど
どうしたらいいですかね
0286デフォルトの名無しさん2013/07/14(日) NY:AN:NY.AN
マヌケな発言はやめてくれ
力が抜ける
0287デフォルトの名無しさん2013/07/14(日) NY:AN:NY.AN
まず服を脱ぎます
0288デフォルトの名無しさん2013/07/14(日) NY:AN:NY.AN
このスレに来ていいレベルじゃないな
0289デフォルトの名無しさん2013/07/14(日) NY:AN:NY.AN
いつからこのスレがレベルの高いスレだったと錯覚している?
0290デフォルトの名無しさん2013/07/14(日) NY:AN:NY.AN
俺が来た時から
0291デフォルトの名無しさん2013/07/14(日) NY:AN:NY.AN
誰も高いなんて言ってないんだが...
0292デフォルトの名無しさん2013/07/14(日) NY:AN:NY.AN
>>289
安心しろ
君がいることがレベルが高くない証明だ
0293デフォルトの名無しさん2013/07/14(日) NY:AN:NY.AN
俺とお前と
0294デフォルトの名無しさん2013/07/14(日) NY:AN:NY.AN
田舎ではまだいるけど東京ではLooseSocksはほぼ絶滅したね。
0295デフォルトの名無しさん2013/07/14(日) NY:AN:NY.AN
>>294
へえ、じゃ今はどんなのがはやりなの?こっちは田舎(神戸)だからよくわからないや
0296デフォルトの名無しさん2013/07/14(日) NY:AN:NY.AN
いまはNoseFooksだな
0297デフォルトの名無しさん2013/07/14(日) NY:AN:NY.AN
自分からドナドナされにいくのか?
0298デフォルトの名無しさん2013/07/14(日) NY:AN:NY.AN
大五郎〜♪
0299デフォルトの名無しさん2013/07/14(日) NY:AN:NY.AN
おれとおまえと
0300デフォルトの名無しさん2013/07/14(日) NY:AN:NY.AN
だいごろお〜♪
0301デフォルトの名無しさん2013/07/14(日) NY:AN:NY.AN
>>282
ネットワーク通信ですかね
サーバーアプリつくれば3000コネクションぐらいだったらいけると思います
0302デフォルトの名無しさん2013/07/14(日) NY:AN:NY.AN
微妙だな。頑張ったと言うわりに10Kは特に意識してないってことか。
0303デフォルトの名無しさん2013/07/14(日) NY:AN:NY.AN
この業界は何かと3Kと言われますしね
0304デフォルトの名無しさん2013/07/14(日) NY:AN:NY.AN
>>302
テストは10Kでやってるんですが、まあユーザープログラムの実装を入れたらもっと下だろうってことで
0305デフォルトの名無しさん2013/07/14(日) NY:AN:NY.AN
長時間の安定稼働がきついんですよね
0306デフォルトの名無しさん2013/07/14(日) NY:AN:NY.AN
10Kコネクションで、最低でも一週間以上稼働し続けられるものを目指してはいます
0307デフォルトの名無しさん2013/07/14(日) NY:AN:NY.AN
で、それを実現するために何苦労したとか、
役立つことは一切語る気はない、ただの宣伝行為という認識でいい?
03082852013/07/14(日) NY:AN:NY.AN
http://plsk.net/socket
マルチスレッドにしている部分のソースコードはらせて頂きました。
(現在は10個このスレッドを作成しています)
UDP/IPでの通信で同一ポートの使用が条件で
複数のクライアントと通信したいのですが
2箇所から通信してもらっても同じソケットにしかデータが着ません。
ここで質問なのですが
�@分けることは可能なのでしょうか?(ソケットひとつにつき一人にする)
�A分けない場合1つのソケットに複数のクライアントからデータが飛んできますが
 その様な動きはサーバーとしていいのでしょうか?
0309デフォルトの名無しさん2013/07/14(日) NY:AN:NY.AN
ソースは読んでないが、
同じソケットを使え
エラー処理はちゃんとやれ
0310デフォルトの名無しさん2013/07/15(月) NY:AN:NY.AN
>>308
不可能、いい

#ソースコードの断片から滲み出る初心者臭が酷いな
0311デフォルトの名無しさん2013/07/15(月) NY:AN:NY.AN
bindのエラーコードチェックすればすぐに分かることなのに
03122852013/07/15(月) NY:AN:NY.AN
>>309
>>311
 書き直した所bindで最初以外の9つのソケットからエラーが出てました
 エラー処理は大事ですねありがとうございました

>>310
 1つのソケットでデータを受信することにします
 ありがとうございます
 C言語初めてもう5年近くなるのにひどいありさまです 
0313デフォルトの名無しさん2013/07/15(月) NY:AN:NY.AN
ソース読んでなかった人間だけど、
ちゃんと文章で説明できてたからエスパー出来た。
それほど酷い有様でもない。
0314デフォルトの名無しさん2013/08/05(月) NY:AN:NY.AN
特定のポートを使用しているプログラムを全員殺す
というプログラムはどうやって書けばいいかな
0315デフォルトの名無しさん2013/08/05(月) NY:AN:NY.AN
全員って?例えば?
0316デフォルトの名無しさん2013/08/05(月) NY:AN:NY.AN
>>315
たとえば、待ちうけや接続で ローカルポート9999 を使用している
プログラムを全員殺す

って fuser で一覧出して殺せばいいのか
ありがとう
0317デフォルトの名無しさん2013/08/05(月) NY:AN:NY.AN
全員って、一つのポートを複数のプログラムで使えたっけか?
0318デフォルトの名無しさん2013/08/05(月) NY:AN:NY.AN
使えますが?
0319デフォルトの名無しさん2013/08/05(月) NY:AN:NY.AN
>>318
どうやって使うの?
0320デフォルトの名無しさん2013/08/05(月) NY:AN:NY.AN
socket APIで。
TCPの接続は<src IP, src port, dst IP, dst port>の四つ組で識別される。
0321デフォルトの名無しさん2013/08/05(月) NY:AN:NY.AN
>>320
複数のプログラムで使えるのは、src portの方?dst portの方?
そのとき、send()やrecv()ってどうやるの?
0322デフォルトの名無しさん2013/08/05(月) NY:AN:NY.AN
特定のポートに接続してくる迷惑な相手鯖を全員殺す
というプログラムはどうやって書けばいいかな
(迷惑の基準は一秒間に一定回数回以上とかです)
ただフィルタするんじゃなくて相手側のプロセス(出来れば鯖ごと)殺したいです
■ このスレッドは過去ログ倉庫に格納されています