ネットワークプログラミング相談室 Port24
■ このスレッドは過去ログ倉庫に格納されています
0001lmtp
2009/07/07(火) 00:46:28Programming 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辺り
足りなかったら適当に付け足してね
前スレ
ネットワークプログラミング相談室 Port23
http://pc12.2ch.net/test/read.cgi/tech/1230466044/
関連スレ
ネットワークプログラミング雑談
http://pc12.2ch.net/test/read.cgi/tech/1235800707/
Java ネットワークプログラミング 【教えて!】
http://pc11.2ch.net/test/read.cgi/tech/1086238859/
0446デフォルトの名無しさん
2009/08/24(月) 00:32:130447デフォルトの名無しさん
2009/08/24(月) 01:04:36エラー対策もほぼ異なる(羽目になる)んだが
UNIXで一括りしてる時点でたいしたことないな
0448デフォルトの名無しさん
2009/08/24(月) 04:42:47たまたまNT4に移植したunixの実装依存だろ。
マクは何でもアポーのライブラリ呼ばされそうだけどな。unixとして実装しても、マクとして使う分にはいろいろ問題有るでしょ。
0449デフォルトの名無しさん
2009/08/24(月) 05:09:050450デフォルトの名無しさん
2009/08/24(月) 09:53:36何か知っているなら語ってくれ
0451デフォルトの名無しさん
2009/08/24(月) 12:48:50知ったか乙
0452デフォルトの名無しさん
2009/08/24(月) 14:19:150453デフォルトの名無しさん
2009/08/24(月) 14:36:450454デフォルトの名無しさん
2009/08/24(月) 14:38:20新しくコンテストを来年開きたいと思っています
プログラマー(ゲーム・ツール・)の方は
http://pc12.2ch.net/test/read.cgi/tech/1221701297/l50
のスレに来てもらえるとうれしいです。
運営も募集しています。
↓のような感じでコンテストを開始する予定です。
http://219.113.110.143/
0455デフォルトの名無しさん
2009/08/24(月) 19:21:23HSPって・・・だいぶ古くないか?それに、これ、荒らし・・・・
0456440
2009/08/24(月) 21:51:18>>445
.NETはMicrosoft製の共通言語基盤で、momoはそのオプソ版だと理解してます。
そうであればJavaで書けばプラットフォーム非依存になる事と同じ理屈ですから、
申し訳ないけど、今のところはC言語(C++含む)でソケットプログラミングした場合における
プラットフォーム間(特にUNIX<->Windows)の移植性という主題に限定させてください。
>>446
それがですね、DeleGateというプロキシソフトがありまして、キャッシュサーバとして
利用した場合、Linuxならトラフィックが過大になっても「なんとか使える」レベルなんですが
(もちろんSquidより劣化度は悪いけど)、Windowsだと最新マシンでも「使い物にならない」ほど
性能が劣化するという事例(クレーム)を経験しています。詳しく調べていなかったのですが、
CPUやメモリの動作状況には十分な余裕はあり、どこかで引っかかっているという印象でした。
もともとDeleGateのコードは古い設計で、しかもWin移植版はオマケ程度というのが常識なので
しかたがないんですが、マシン性能だけで全ての問題が解決するわけではないこともご理解ください。
>>448
まず、UNIX間で性能チューニングに関してプログラミングで大きな差異は無いと理解しています。
また、主題からは外れますが、運用面でUNIX毎にバッファサイズやセマフォ数などの
チューニング手法、あるいはトラブルシューティング法が異なることは事実とはいえ、
どれか一つを理解していれば他のUNIXへ移っても経験は生かすことができます。
(オイラはSunOS/Solaris/HP-UX/Linuxを経験してます。)
でもそれがWindowsに移るともなれば、チューンもエラー対策も一から勉強し直しに
なるんじゃないかと思うのです。それは(運用面における)大きな差異ではないでしょうか?
(長いので続きます)
0457デフォルトの名無しさん
2009/08/24(月) 23:04:260458440
2009/08/24(月) 23:46:48>>448
>たまたまNT4に移植したunixの実装依存だろ。
たしかに今時は性能が重要視されるサーバソフトの開発ではマスタ・スレーブ方式な
マルチプロセス構成はしないでしょうね。UNIXでもマルチスレッドが当たり前な時代ですから。
ただ、NT4.0時代からWindowsを離れて浦島太郎状態なので、マルチスレッド構成で最近の
Windows 200x Serverであれば本当に通信制御に関してUNIXからの移植性に問題無しなのか、
今時の設計技術動向を知っている人がいれば教えてもらいたく、質問カキコしました。
あるいは書籍やWebを紹介してもらえるだけでも(英文可)、とても嬉しいです。
>マクは何でもアポーのライブラリ呼ばされそうだけどな。unixとして実装しても、マクとして使う分にはいろいろ問題有るでしょ。
MacOSXではapache/samba/proftpd/postfix/named/cups...etcが普通に(裏で)動いていますよ。
プロセスの起動/停止はMac固有(launchd)だし、設定ファイル編集のGUIはObjective-Cライブラリで
新規開発が必要ですけど、それはネットワークプログラミングの話題からは外れますよね。
MacOSXの底辺はDawinというBSD系UNIXですし、カーネルはMach(マイクロカーネル)ですが、
そのPOSIX互換サービスは歴史が古いだけあって、互換性(移植性と性能)の問題はほぼ皆無です。
そのあたり、出来の悪いWindowsのService for UNIXとの間には絶対的な壁があります。
あるいは「いろいろ有る」という問題点を具体的に指摘してくださいませ。
0459デフォルトの名無しさん
2009/08/24(月) 23:59:060460デフォルトの名無しさん
2009/08/25(火) 07:49:140461デフォルトの名無しさん
2009/08/25(火) 08:22:410462デフォルトの名無しさん
2009/08/25(火) 10:29:530463デフォルトの名無しさん
2009/08/25(火) 15:00:54AF_INET の AF って何の省略? アナルファック?
0464デフォルトの名無しさん
2009/08/25(火) 15:19:46ttp://www.google.co.jp/search?hl=ja&q=AF_INET
0465デフォルトの名無しさん
2009/08/25(火) 15:19:540467デフォルトの名無しさん
2009/08/25(火) 23:17:14なかなかうまくいかないので誰かご教授お願いします。
0468デフォルトの名無しさん
2009/08/25(火) 23:23:34簡単に作れると思うけど1台からじゃ効果ないな。
0469デフォルトの名無しさん
2009/08/25(火) 23:27:260470デフォルトの名無しさん
2009/08/26(水) 00:01:480472デフォルトの名無しさん
2009/08/26(水) 01:58:14http://tsushima.2ch.net/test/read.cgi/newsplus/1251155274/
0473デフォルトの名無しさん
2009/08/26(水) 19:45:280474デフォルトの名無しさん
2009/08/26(水) 21:31:030475デフォルトの名無しさん
2009/08/26(水) 22:50:48accept()しなけりゃ良いだけだけど何で1接続だけ受け入れたいの?
マルチスレッド嫌ならselect()使う方法とかあるけど。
0476デフォルトの名無しさん
2009/08/26(水) 23:19:34while{
send
recvform
受信したbufferの処理
}
この場合、recvformで受信したUDPデータをバッファにためます。
そして、バッファのデータをそのあとに処理します。
そのあとに、送信処理を行い、再びデータを受信する。
といった流れでいいのでしょうか?
たとえば、UDPのデータが二つ同時に来た場合、
先着のデータ受信中(recvform中)に、後着のデータが来た場合、
後着のデータは先着が受信中なのでrecv出来ずに破棄されるのでしょうか?
それとも上書き?されてしまうのでしょうか?
同時に来た時点で、受信サイズがたとえば同一のデータを送っていたとしても
めちゃくちゃになるのでしょうか?
0477デフォルトの名無しさん
2009/08/26(水) 23:36:060478デフォルトの名無しさん
2009/08/26(水) 23:39:340479デフォルトの名無しさん
2009/08/26(水) 23:42:02動画のようにリアルタイムで必要なデータなら古いデータが来たところで意味がない。
それに1コマがなくても前後のコマで保管したりできるから必要ない。
そういう場合にUDP。
0480476
2009/08/26(水) 23:58:10先着のデータは無事に受信できるとして?
というか、recvform1回でもそれぞれ別のUDPデータを2つ同時に受信できるのかー
常に受信ごとにrecvformで待ち受けしなければいけないものかとおもってた
0481デフォルトの名無しさん
2009/08/27(木) 00:02:190482476
2009/08/27(木) 00:25:02受信しなくても受信する??
0483デフォルトの名無しさん
2009/08/27(木) 00:40:52その後recvformの呼び出しでプログラムがOSから受け取る
0484デフォルトの名無しさん
2009/08/27(木) 00:50:29つまり、先着と後着のデータ分バッファがないとだめってことですか
バッファがない場合、後着はバッファに上書きされることなく、OS側ですら受信されないということでしょうか?
でも、recvform呼ばずにOS側が受信するってそういうものなのでしょうか?
socketなんて生成しなくてもイーサネットでデータ送られるとOSが受信はするということですよね
0485デフォルトの名無しさん
2009/08/27(木) 00:55:49ソケット作らなきゃUDPの中の人はバッファリングしてくれません。
イーサネットの中の人は常にデータ受信してると思うけど。
0486デフォルトの名無しさん
2009/08/27(木) 01:03:47OSが保存するバッファは違うということですよね
OSがない場合だと、そのOSから受け取るという概念はないわけですよね
つまり同時に着た場合は、どうなるんだろう
0487デフォルトの名無しさん
2009/08/27(木) 01:07:420488デフォルトの名無しさん
2009/08/27(木) 01:09:15同時に着くって言うのはないよ。
タイミングが近いってだけで、処理自体は常に1つしか行われないんだから
通信だって1つのデータを送受信中に別のデータを送受信はできない
0489デフォルトの名無しさん
2009/08/27(木) 01:13:22では、
while{
recvform
受信したバッファを別のバッファにうつす
}
という処理をしておけば、受信バッファに上書きされることはありえないということでしょうか?
たとえ、近いタイミングでこようが
0490デフォルトの名無しさん
2009/08/27(木) 01:18:15そうなる
0491デフォルトの名無しさん
2009/08/27(木) 01:28:23別のバッファをうつしている最中に、データが来たら先ほどどなたかおっしゃってたように
OSのバッファへと一時的にいれられるわけであってますか?
それをrecvformでとりだす。
ただし、socketせいせいしている場合に限る
結局はrecvform自体、OSのバッファから取り出しているってことなのでしょうか?
オプションでタイムアウト時間指定してやるのも、このOSのバッファの中が指定した時間空なら
受信エラーをかえすってイメージでしょうか
0492デフォルトの名無しさん
2009/08/27(木) 01:45:02そんな認識であっていると思うよ
Socketが必要なのは
たとえばデータが送られてきたとき、どのプログラムにそのデータを渡せばいいと思う?
Socket生成しbindさせることによって、特定ポートに送られてきたデータを特定のプログラムに渡すことができる。
もしそのポートにbindされたプログラムがなければOSはそのデータを破棄することになる。
0493デフォルトの名無しさん
2009/08/27(木) 02:51:12Linuxの使用を推奨する。
0494デフォルトの名無しさん
2009/08/27(木) 03:47:26環境は?
0495デフォルトの名無しさん
2009/08/27(木) 06:27:18http://www.ip-checker.net/
こういうサイトで調べて出てくるアドレスと違っています。これはどういうことでしょうか?
0496デフォルトの名無しさん
2009/08/27(木) 06:37:370497デフォルトの名無しさん
2009/08/27(木) 07:01:540498デフォルトの名無しさん
2009/08/27(木) 07:33:38ルータがアドレス変換してるから。
NATとかでぐぐれば分かる。
0499デフォルトの名無しさん
2009/08/27(木) 08:22:35linuxではbind前に遡ってデータを受信できるのか? こりゃ、吃驚だ。w
0500デフォルトの名無しさん
2009/08/27(木) 08:45:46ルータを介さない自分のグローバルIPを取得する関数もしくは鉄板な方法ありますか?
0501デフォルトの名無しさん
2009/08/27(木) 09:13:060502デフォルトの名無しさん
2009/08/27(木) 09:13:400503デフォルトの名無しさん
2009/08/27(木) 10:26:30自分はグローバルIPアドレスをもってない可能性が高い。
0504デフォルトの名無しさん
2009/08/27(木) 10:28:26なんでIPって言っちゃいけないの?
0505デフォルトの名無しさん
2009/08/27(木) 10:49:260506デフォルトの名無しさん
2009/08/27(木) 10:57:270507デフォルトの名無しさん
2009/08/27(木) 11:10:14だから何でIPと言っちゃいけないの?
0508デフォルトの名無しさん
2009/08/27(木) 11:15:59分ったら消えろ。
0509デフォルトの名無しさん
2009/08/27(木) 11:23:21アホですか?
0510デフォルトの名無しさん
2009/08/27(木) 11:40:14意味はわからなくないが、厳密に言えば間違い
0511デフォルトの名無しさん
2009/08/27(木) 11:57:360512デフォルトの名無しさん
2009/08/27(木) 12:02:39理解できないの?
アホ確定ですね。
0513デフォルトの名無しさん
2009/08/27(木) 13:12:08スルーしる
0514デフォルトの名無しさん
2009/08/27(木) 13:17:17お前も二度と「レス」とか「携帯」とか使うなよ
0515デフォルトの名無しさん
2009/08/27(木) 13:24:180516デフォルトの名無しさん
2009/08/27(木) 13:25:15あぁ、見かけたら「使うな。クズ」と言っていいぞ。ww
0517デフォルトの名無しさん
2009/08/27(木) 13:52:06ipv6とかで、IPが長いと省略されてしまうんだけど
IPを省略しないで表示させるにはどうしたらいいのかな。
0518デフォルトの名無しさん
2009/08/27(木) 14:27:150519デフォルトの名無しさん
2009/08/27(木) 14:37:52いちいち反応するやつの方がうぜえ
日本語の省略文化が判ってない馬鹿
0520デフォルトの名無しさん
2009/08/27(木) 15:15:290521デフォルトの名無しさん
2009/08/27(木) 15:32:020522デフォルトの名無しさん
2009/08/27(木) 15:39:22わざととしか思えないからスルー白
0523デフォルトの名無しさん
2009/08/27(木) 17:00:12どっちも同じ。
0524デフォルトの名無しさん
2009/08/27(木) 17:19:320526デフォルトの名無しさん
2009/08/27(木) 18:31:28自分のアドレスがプライベートだったら内部だけで解決するのは無理だな
ダイナミックdnsの自動更新の仕組みとか調べたら参考になるかも
0527デフォルトの名無しさん
2009/08/27(木) 18:35:470528デフォルトの名無しさん
2009/08/27(木) 18:39:28SOAPとかで取得するやつ
0529デフォルトの名無しさん
2009/08/27(木) 18:44:12それでもPC内だけでって要望には応えられないんだよな
0530デフォルトの名無しさん
2009/08/27(木) 18:48:070531デフォルトの名無しさん
2009/08/27(木) 19:04:50一般的な方法は存在しない。
一般的でない方法ならたくさんあるのでそれを何通りも使って保険かける。
0532デフォルトの名無しさん
2009/08/27(木) 20:31:28おまえの電話教えてよ
↓
おまえの番号教えてよ
↓
おまえ何番だっけ
0533517
2009/08/27(木) 22:14:110534デフォルトの名無しさん
2009/08/27(木) 22:15:31ttp://www.ip-checker.net/ のようなサイトをHTTPで叩いて
出てきたHTMLをパースすればOK
0535デフォルトの名無しさん
2009/08/28(金) 00:19:54ポートとIPの両方を指定してbindするのでは、
負荷って変わりますか?
bindしないIPとbindしないポート宛のデータが、bindするデータと混ざって送られてくるとして
とあるIP以外からは、とあるポートに送られてこないデータ送信があるとします。
そんな中で、IPとポートの二つをbindする必要があるかってことです。
ポートだけでも受信しないんだから、IPのbindしなくてもいいのでは?
負荷が変わらないもしくは、負荷が下がるならそっちのがいいような
0536デフォルトの名無しさん
2009/08/28(金) 00:22:09ブロードキャストで送信した場合って、ポートをbindしていたら受信できませんよね?
ブロードキャストはポート指定して送信できますか?
0537デフォルトの名無しさん
2009/08/28(金) 00:47:090538デフォルトの名無しさん
2009/08/28(金) 00:49:070539デフォルトの名無しさん
2009/08/28(金) 01:00:49http://chimp-sanctuary.org/oursanctuary/hitori.htm
引退(ヒトが勝手に引退と決めるだけなのですが)となったチンパンジーは、
人目につかない非公開の場所で単独飼育されるのが一般的です。それは、
40〜50年と言われるチンパンジーの寿命を考えると、ほとんどの人生をその
狭い檻の中で送ることになります。
0540デフォルトの名無しさん
2009/08/28(金) 01:04:46何が聞きたいのかさっぱりわからん
0541デフォルトの名無しさん
2009/08/28(金) 01:08:55たとえば111.111.111.111がルーターを介したアドレスだとしたら、111.111.111.111に何か送ればその人に確実に届いて他のPCに行くことは無いのかということです。
0542デフォルトの名無しさん
2009/08/28(金) 01:13:03bindでポートとIP両方指定した場合と、ポートだけ指定した場合では
負荷は違うのでしょうか?弾く層が違う?
ちなみにそのポート宛に届くのは、bindするIPアドレスだけからだとして
0543デフォルトの名無しさん
2009/08/28(金) 01:44:22linuxなら /proc/net/tcpとか、/proc/net/udpとかに生データが書いてあるんで、
それ解析すればいい。フォーマットは見たら大体分かる。
その他のOSなら知らね。
0544デフォルトの名無しさん
2009/08/28(金) 01:49:070545デフォルトの名無しさん
2009/08/28(金) 02:01:26ルータの設定による。
■ このスレッドは過去ログ倉庫に格納されています