ネットワークプログラミング相談室 Port14
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん
2005/06/11(土) 14:52:23Programming 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/
過去スレ:
Port13 http://pc8.2ch.net/test/read.cgi/tech/1109793931/
Port12 http://pc5.2ch.net/test/read.cgi/tech/1102427855/
Port11 http://pc5.2ch.net/test/read.cgi/tech/1096187183/
Port10 http://pc5.2ch.net/test/read.cgi/tech/1090385857/
Port9 http://pc5.2ch.net/test/read.cgi/tech/1080658835/
Port8 http://pc5.2ch.net/test/read.cgi/tech/1073560271/
Port7 http://pc5.2ch.net/test/read.cgi/tech/1063035045/ ★行方不明
Port6 http://pc5.2ch.net/tech/kako/1052/10521/1052106444.html
Port5 http://pc2.2ch.net/tech/kako/1040/10402/1040220302.html
Port4 http://pc3.2ch.net/tech/kako/1034/10342/1034236536.html
Port3 http://pc3.2ch.net/tech/kako/1023/10233/1023359282.html
Port2 http://pc.2ch.net/tech/kako/1006/10062/1006258198.html
Port1 http://pc.2ch.net/tech/kako/970/970344582.html
関連リンクは>>2-10辺り
足りなかったら適当に付け足してね
0002デフォルトの名無しさん
2005/06/11(土) 14:53:34UNIXネットワークプログラミング〈Vol.1〉ネットワークAPI:ソケットとXTI
http://www.amazon.co.jp/exec/obidos/ASIN/4894712059/
詳解TCP/IP〈Vol.1〉プロトコル
http://www.amazon.co.jp/exec/obidos/ASIN/4894713209/
The Implementation (TCP/IP Illustrated, Volume 2)
http://www.amazon.co.jp/exec/obidos/ASIN/020163354X/
TCP/IPによるネットワーク構築
〈Vol.1〉原理・プロトコル・アーキテクチャ
http://www.amazon.co.jp/exec/obidos/ASIN/432012054X/
〈Vol.3〉クライアント‐サーバプログラミングとアプリケーション
http://www.amazon.co.jp/exec/obidos/ASIN/4320028007/
―Linux/POSIXソケットバージョン
http://www.amazon.co.jp/exec/obidos/ASIN/4320120841/
―Windowsソケットバージョン
http://www.amazon.co.jp/exec/obidos/ASIN/4320029992/
マスタリングTCP/IP RTP編
http://www.amazon.co.jp/exec/obidos/ASIN/4274065618/
Linuxソケットプログラミング―ネットワークプログラミングにおける実践技法
http://www.amazon.co.jp/exec/obidos/ASIN/4894714671/
Webプロトコル詳解―HTTP/1.1、Webキャッシング、トラフィック特性分析
http://www.amazon.co.jp/exec/obidos/ASIN/4894715414/
WinSock2.0プログラミング
http://www.amazon.co.jp/exec/obidos/ASIN/4797306882/
猫でもわかるネットワークプログラミング
http://www.amazon.co.jp/exec/obidos/ASIN/4797323604/
IPv6ネットワークプログラミング
http://www.amazon.co.jp/exec/obidos/ASIN/4756142362/
0003デフォルトの名無しさん
2005/06/11(土) 14:55:22★規格
RFC 日本語版リスト
http://www5d.biglobe.ne.jp/~stssk/rfcjlist.html
JPNIC RFC関連リンク集
http://rfc-jp.nic.ad.jp/link/
RFC Editor
http://www.rfc-editor.org/
HTMLなRFC (セクションを直に示すのに便利)
http://www.freesoft.org/CIE/RFC/
RFC 2616 "Hypertext Transfer Protocol -- HTTP/1.1" 日本語訳
http://www.studyinghttp.net/rfc_ja/2616/rfc2616_ja.html
IANA Well known port numbers
http://www.iana.org/assignments/port-numbers
0004デフォルトの名無しさん
2005/06/11(土) 14:56:54★プログラミング
まずは >>1 の FAQを読むこと。
C10K ヘヴィーロードサーバ
http://www.kegel.com/c10k.html
MSDN
http://msdn.microsoft.com/library/en-us/dnsitehelp/html/tochelp.asp
Raw IP Networking FAQ
http://www.whitefang.com/rin/
Java で packet capture
http://netresearch.ics.uci.edu/kfujii/jpcap/doc/
Randomness Recommendations for Security
http://www.faqs.org/rfcs/rfc1750.html
BoostSocket
http://www.crystalclearsoftware.com/cgi-bin/boost_wiki/wiki.pl?BoostSocket
The Code Project - Internet & Network programming
http://www.codeproject.com/internet/
ネットワークプログラミングの基礎知識 (問題ありのサイト?)
http://X68000.q-e-d.net/~68user/net/
0005デフォルトの名無しさん
2005/06/11(土) 14:58:10★ツール類
ethereal - http://www.ethereal.com/
tcpdump - http://www.tcpdump.org/
Windump - http://netgroup-serv.polito.it/netgroup/tools.html
WinPcap - http://www.winpcap.org/
pathchar - ftp://ftp.ee.lbl.gov/pathchar/
pchar - http://www.employees.org/~bmah/Software/pchar/
Packetyzer - http://www.networkchemistry.com/products/packetyzer/
libevent - http://www.monkey.org/~provos/libevent/
★プロトコル
TTCP
http://www.sean.de/Solaris/ttcp.html
http://www.kohala.com/start/ttcp.html
UDP Hole Punching
http://homepage3.nifty.com/toremoro/p2p/firewall.html
0006デフォルトの名無しさん
2005/06/11(土) 14:59:02★IP, TCP実装
http://www.iti.fi/documentation/miniip.html
http://www.sics.se/~adam/uip/
http://www.codeguru.com/Cpp/I-N/network/tcpip/article.php/c5447/
http://www.geocities.jp/bruce_teller/security/garakuta.htm
★その他
パタリロ〜クックロビン音頭〜
http://www.fileup.org/file/fup2930.mp3
通報
http://www.cyberpolice.go.jp/
00071
2005/06/11(土) 15:01:2000081
2005/06/11(土) 15:13:36The Implementation (TCP/IP Illustrated, Volume 2)
http://www.amazon.co.jp/exec/obidos/ASIN/020163354X/
は、
詳解TCP/IP〈Vol.2〉実装
The Implementation (TCP/IP Illustrated, Volume 2)
http://www.amazon.co.jp/exec/obidos/ASIN/4894714957/
に入れ換えた方が良さそうね。
あと
詳解TCP/IP〈Vol.3〉トランザクションTCP, HTTP, NNTP, UNIXドメインプロトコル
http://www.amazon.co.jp/exec/obidos/ASIN/4894716674/
も入れた方がいいかな。
0009デフォルトの名無しさん
2005/06/11(土) 15:26:57猫以外で
0010デフォルトの名無しさん
2005/06/11(土) 15:33:49乙
しかし前スレは酷い終わり方だな
0011デフォルトの名無しさん
2005/06/11(土) 15:35:45ttp://www.kt.rim.or.jp/~ksk/wskfaq-ja/
0012デフォルトの名無しさん
2005/06/11(土) 15:41:38サンクス!
0014デフォルトの名無しさん
2005/06/11(土) 16:34:060015デフォルトの名無しさん
2005/06/11(土) 16:56:020016デフォルトの名無しさん
2005/06/11(土) 17:38:03ソケット周りのライブラリを整備しようと思います。
もう少しでα版が出せそうなので待っててください。
0017デフォルトの名無しさん
2005/06/11(土) 18:39:540018デフォルトの名無しさん
2005/06/11(土) 18:44:09boost風の奴をつくってください
0019デフォルトの名無しさん
2005/06/11(土) 19:13:45クックロビン音頭が Not Found
0020デフォルトの名無しさん
2005/06/11(土) 19:47:580021デフォルトの名無しさん
2005/06/11(土) 19:49:390022デフォルトの名無しさん
2005/06/11(土) 23:00:24ttp://web.archive.org/web/20020307025408/http://www-vox.dj.kit.ac.jp/nishi/programming/tcpip.txt
0023デフォルトの名無しさん
2005/06/11(土) 23:48:29> > となって終っているのですが、これ以降の記事は存在するのでしょうか?
>ないと思います。学科のマシンにも(どこかからanonymous ftpで取ってきた
>ものを)置いてありますが、第16回が最後になっています。
0024デフォルトの名無しさん
2005/06/11(土) 23:53:24みんなが第2の「コアラ大将」になるチャンスかもしれない
0025デフォルトの名無しさん
2005/06/12(日) 14:25:140026デフォルトの名無しさん
2005/06/12(日) 19:01:41Internetworking with TCP/IP の初版がいつだと思っているのだ。
(改訂され続けてるのがすごいよね)
……いつだっけ?
0027デフォルトの名無しさん
2005/06/14(火) 01:47:42たとえば、JAVA(サーブレット)とVisual C++ 6.0で、ソケットを用いて通信はできますか?
0028デフォルトの名無しさん
2005/06/14(火) 01:53:490029デフォルトの名無しさん
2005/06/14(火) 02:03:11出来るよ。
ただ、データのマシンレベルでの表現形式はマシンや言語によって違うから、
それには注意しないとまずい。
0030デフォルトの名無しさん
2005/06/15(水) 00:02:59書いてあるのですが、設定する方法は無いでしょうか
0031デフォルトの名無しさん
2005/06/15(水) 09:37:55っつーかそれはnetshやWMIみれ
0032デフォルトの名無しさん
2005/06/15(水) 18:44:05TCPのデータ通信用のソケットなのか、UDPのデータ通信用なのかを
判別できる関数ってないでしょうか?
0033デフォルトの名無しさん
2005/06/15(水) 19:28:510034デフォルトの名無しさん
2005/06/15(水) 21:01:28接続済みのTCPとListenしているTCPソケットなら分別できそうですが、
UDPの分別が難しそうです・・・。
0035デフォルトの名無しさん
2005/06/15(水) 21:03:190036デフォルトの名無しさん
2005/06/15(水) 21:48:48スレッド1 が読むだけで、
スレッド2 が書き込むだけ、
ってな感じで同時に読み書き、ソケットにsetsocketoptでタイムアウト設定し
クラスにまとめて上限のないselectみたいなの作りたいんだけど。
0037デフォルトの名無しさん
2005/06/15(水) 22:40:02socket的には問題なし。双方向チャンネル。
ただし、stdioやiostreamなどのバッファリングを噛ませる時は注意。
0039デフォルトの名無しさん
2005/06/15(水) 23:32:02makimo.to/
0040デフォルトの名無しさん
2005/06/15(水) 23:51:00これに対してlisten()は必要なのでしょうか?
また必要で無い場合でも、使う事は可能なのでしょうか?
0041デフォルトの名無しさん
2005/06/16(木) 04:53:350042デフォルトの名無しさん
2005/06/16(木) 04:55:13ハァ?
0043デフォルトの名無しさん
2005/06/16(木) 05:30:00UDPでは不要だし、やったらエラーでるよ。
ところで、sockaddr_inの情報だけがあって、それと既に接続されてるかチェックする方法って無いですか?
0044デフォルトの名無しさん
2005/06/16(木) 06:56:35R.Stevens氏の著作のソースコードは現在入手可能ですか?
UNIXネットワークプログラミング〈Vol.1〉
に載ってた
ftp.kohala.com
に接続できませんが。
0045デフォルトの名無しさん
2005/06/16(木) 07:07:04SO_PROTOCOL_INFO
0046デフォルトの名無しさん
2005/06/16(木) 07:40:42http://www.unpbook.com/src.html
から入手可能。
0047デフォルトの名無しさん
2005/06/16(木) 07:44:34www.kohala.com の方は接続できるし
ソースもあるよ。
0049デフォルトの名無しさん
2005/06/17(金) 13:13:05EINPROGRESSからECONNREFUSEDへと変更になったようです。
でも、これって、なんかひどくない?
未完了状態と拒否判明とを、どう区別つければいいの??
どなたかくわしい人、助けて!
http://www.mid.comp.nec.co.jp/SUPPORT/RNOTE/UX48/ONLINE/UP-R13.8/file/xpg4unix/index
> 以降の各項目は、XPG4 UNIX の設定如何に係わらず、従来と動作が
> 変わったもの、あるいは機能的な追加(拡張)が行われたものです。
> connect(3N)
> 機能 : ソケットでの接続要求の発行
> 変更点1 : 非同期モードの UNIX ドメインソケットで、サーバ
> 側が接続受け入れできない状況での errno の値が
> 変更されます。
> 従来: EINPROGRESS
> XPG4 UNIX: ECONNREFUSED
0050デフォルトの名無しさん
2005/06/17(金) 14:30:03エラー理由(errno)がより適切になったという事だろ。
> 未完了状態と拒否判明とを、どう区別つければいいの??
errnoを見ろよ(w
0051デフォルトの名無しさん
2005/06/17(金) 17:14:26簡単な HTTP サーバみたいなもんを作ったんだが、
リクエスト送って GET を繰り返すと
(Keep-Alive のインプリメントはしていないので1回
ごとに accept したソケットは close してる)
401回目の GET をしに connect しても
(client 側の connect は成功)
サーバ側の accept が接続を検出してくれず、以降
そのソケットに何を送っても accept が反応しなく
なるという現象が・・・
なにがまずいのだろう ・・・
誰かこの 400 という数字に心当たりある人居ませんか?
0052デフォルトの名無しさん
2005/06/17(金) 17:24:41案外ソケットは閉じてても、ファイルが開きっぱなしだったりするかも
0053デフォルトの名無しさん
2005/06/17(金) 20:19:59ありがちなのが、fork()したあとで
親プロセス側でaccept()で取得したconnectionのfdをclose()していないパターン
かしら
0054デフォルトの名無しさん
2005/06/17(金) 22:42:58$ lsof <Enter>
0055デフォルトの名無しさん
2005/06/17(金) 22:47:170056デフォルトの名無しさん
2005/06/17(金) 23:59:52installしろ。>>51のようにLinuxならlsofってパッケージでしょう。
0057デフォルトの名無しさん
2005/06/18(土) 00:11:450058デフォルトの名無しさん
2005/06/18(土) 00:49:330059デフォルトの名無しさん
2005/06/18(土) 01:04:15通常クライアント側はsocketにポート番号なんかを関連付けませんけど
特定のポート番号で通信したい場合はどうすればいいのでしょうか?
TCPの場合ですと
soc = socket()
の後、bind()でこちらのポート番号を関連付けてから、connect()の第1引数に指定すれば良いのでしょうか?
UDPの場合だと、connect()もしないので想像も付かないんですが、どうすれば良いのでしょうか?
初歩的な質問ですみません。
0060デフォルトの名無しさん
2005/06/18(土) 01:13:06UDP, TCPに共通のAPIです。要するにbind/connectしろと。
UDPのばやい、bind/connect使わずに、recvfrom/sendtoする方法もあるが。
0061デフォルトの名無しさん
2005/06/18(土) 11:53:38bindせずにconnectしたら、recvfromを使う意味がない
006251
2005/06/18(土) 13:04:27ソケットじゃなくて、コネクションごとに作っていたスレッドが作れなくなって
発生していた現象だった .. orz
boost::thread で作ってるんだけど、スレッド終了してもスレッドオブジェクト
が残っていて、作れなくなっていた。
さて、GETの処理のほうは何とかなったのだが、このスレッド数400はどう
やったら増やせるのだろうか?
Windows上なら同じプログラムで800スレッドとかもいけるのだが・・・
別プロセスなら、別途400とか作れるのだからシステム的には余裕のはず
なのだが、どうもプロセスごとに作れるスレッド数に上限があるような・・
どこをいじればよいのだろうか?情報がみつからない・・
0063デフォルトの名無しさん
2005/06/18(土) 13:08:36を解決するのが先だろ。なんでシステム上限を上げて対処しようとするかな……
まあ、スレ違いだけど。
0064デフォルトの名無しさん
2005/06/18(土) 13:36:450065デフォルトの名無しさん
2005/06/18(土) 16:03:00いや、一旦は解決した。テストしてた処理だけなら。
しかし、その先にやりたい本当の処理の為にはやはり400では足りない。
てか、FedoraCore4にアップしたら 300ちょいしか作れなくなった .. orz
0066デフォルトの名無しさん
2005/06/18(土) 17:23:08又1信号だと-2[V]にしてから立ち上がって0[V]にする。
この仕様だと、直流成分が-1[V]としてでてしまいノイズの元となると思うのですが、
なぜ0[V],-2[V]でなくて1[V],-1[V]にしなかったのでしょうか?
0067デフォルトの名無しさん
2005/06/18(土) 19:05:260068デフォルトの名無しさん
2005/06/18(土) 19:43:42そんな大掛かりなことをしたいならapache2のような構造にしろよ
0069デフォルトの名無しさん
2005/06/18(土) 19:47:18C++標準ライブラリにはないので、環境くらい書かないと…
0070デフォルトの名無しさん
2005/06/18(土) 20:49:48スマソ。標準ライブラリにはないんですか・・・。
windowsで設定されてるDNSを取得してそこに問い合わせればいけるのかな??
DNSの勉強しなくてわ・・・
0071デフォルトの名無しさん
2005/06/18(土) 20:59:340072デフォルトの名無しさん
2005/06/18(土) 21:07:36Win32なら、
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dns/dns/dns_start_page.asp
0073デフォルトの名無しさん
2005/06/18(土) 21:26:28ありがとおおおお。早速読んでみます。
0074デフォルトの名無しさん
2005/06/20(月) 02:40:20いや、apache2、参考にしてる、実は。
ただ、モジュール側から見て一部真似てみただけだけど。
スレッド管理とかどういう風になってるのかまだ見れてない。
一応、この前の対策で、HTTP用途のほうならイケそうな感じ
にはなった。
だが、肝心のゲームサービスのほうでやはりスレッドが欲しい・・・
1ゲーム1スレで走るととてもプログラミングの見通しが良く
なりそうなのだが・・・
1スレで複数ゲーム制御してしまうと、とてもプログラムの見通し
が悪くなる。前バージョンはコレでバグ取りで嵌ったので、
今回はマルチスレッドでやりたいのだ。
0075デフォルトの名無しさん
2005/06/20(月) 03:00:341接続=1スレッドなんて効率が悪くてやってられないだろ。
普通にマルチスレッドにするのは(I/O待ち等を考えても)当然だが
それは、1スレッドで複数の接続を管理した上で
そのスレッドを複数(少数)持つ、
という形が、効率の上では一番良さそうだけど。
0076デフォルトの名無しさん
2005/06/20(月) 03:04:440077デフォルトの名無しさん
2005/06/20(月) 07:02:030078デフォルトの名無しさん
2005/06/20(月) 07:19:10じゃ、まずスレッドの管理をどうしているのか見ろよ。
スレッドを作るのは結構リソースを使うんだぜ?
パフォーマンスなんてどうでも良いと思っているなら、スレッド大量作成でも構わないけどな。
だったら、スレッドの作成が成功するまでリトライでもしとけば良いだろ。
0079デフォルトの名無しさん
2005/06/20(月) 10:39:45最近はスレッド管理が発達してるから
案外負荷は少ないかもしれない
0080デフォルトの名無しさん
2005/06/20(月) 10:47:140081デフォルトの名無しさん
2005/06/20(月) 12:32:48おまえら何も語ってないに等しいな。チラシの裏にでも書いてろ。
0082デフォルトの名無しさん
2005/06/20(月) 12:39:04おまえもなニヤニヤAA(ry
0083デフォルトの名無しさん
2005/06/20(月) 13:39:420084デフォルトの名無しさん
2005/06/20(月) 15:15:340085デフォルトの名無しさん
2005/06/20(月) 21:01:560086デフォルトの名無しさん
2005/06/21(火) 03:58:52できなくてもがいてます。
テキストファイルはダウンロードできるのですが、
バイナリファイルをダウンロードできないです。
リンク先のプログラムを参考にしているのですが、
http://www.nakka.com/lib/inet/httpcex.html
http://www.nakka.com/lib/inet/httpcex00.lzh
このプログラムではバイナリファイルは受信できないので
しょうか?
バイナリダウンロード時は受信したファイルサイズが本来のファイルサイズ
に全然足りないです。
0087デフォルトの名無しさん
2005/06/21(火) 04:32:540088デフォルトの名無しさん
2005/06/21(火) 04:35:230089デフォルトの名無しさん
2005/06/21(火) 07:32:39返答ありがとうございます。
"RecvBuf[buf_len] = '\0';/* 受信したバッファの後ろにNULLを付加する */"
という記述がまずいということでしょうか?
0090デフォルトの名無しさん
2005/06/21(火) 08:09:38ちゃう。
strlenとかstrcatとか、受信したデータを文字列として扱っているところが、
あからさまにバイナリを意図していない証拠。これ以上はネットワークとは
何の関係も無い話なので、初心者板にでも逝く。
0091デフォルトの名無しさん
2005/06/21(火) 13:30:59009286
2005/06/21(火) 20:56:44ありがとうございます。私はこれまで
バイナリ、テキスト、文字列といったことをあまり考えずに
やってきました。ちょっと勉強してきます。
0093デフォルトの名無しさん
2005/06/22(水) 14:49:430094デフォルトの名無しさん
2005/06/22(水) 18:03:550095デフォルトの名無しさん
2005/06/23(木) 17:02:06STLに入れてごにょごにょしたいのですが。
0096デフォルトの名無しさん
2005/06/23(木) 17:28:530097デフォルトの名無しさん
2005/06/23(木) 17:37:00かまわない
>>96
GNU wget
0098デフォルトの名無しさん
2005/06/24(金) 22:00:28arpとかnetstatなら、iphlperapi.dllとかicmp.dllを使って出来るので、
nbtstatも・・・と思ったのですが、見つかりません。
0099デフォルトの名無しさん
2005/06/25(土) 01:18:44ごめんウソ
0100デフォルトの名無しさん
2005/06/25(土) 03:31:43とりあえずわかりやすいから買っとけ
010198
2005/06/25(土) 12:32:57netapi32.dllを利用すれば出来そうですね。
0102デフォルトの名無しさん
2005/06/25(土) 17:58:15socket(AF_INET, SOCK_RAW, IPPROTO_RAW)
で自分でIPヘッダを作って送信することはできないのですか?
プロトコル番号が255のIPヘッダが勝手に付け足されてしまうんですが・・・
0103デフォルトの名無しさん
2005/06/25(土) 18:24:20それって、>>4 にある Raw IP Networking FAQ に載ってるんだけど。
このへん↓
ttp://www.whitefang.com/rin/rawfaq.html#10
winsock は良く知らんので間違ってたらすまん。
0104デフォルトの名無しさん
2005/06/25(土) 19:18:47どもです。そこにあったsetsockoptを付け足してみたけど、駄目みたいです。。
LINUXでやってみるとうまくいくんだけどな・・・
やっぱり
プロトコル番号が255のIPヘッダ→自作のIPヘッダ→ペイロード
って感じになってしまいますです。
0105デフォルトの名無しさん
2005/06/25(土) 20:30:150106マイク ◆yrBrqfF1Ew
2005/06/25(土) 20:33:310107デフォルトの名無しさん
2005/06/25(土) 21:10:32UDPとかなら送れるみたいですが、TCPやほかの適当な番号を入れると送信できないみたいです。
>>106
そうなんですか・・・
0108デフォルトの名無しさん
2005/06/25(土) 21:20:560109デフォルトの名無しさん
2005/06/25(土) 23:39:36ほんとだ・・・
ttp://miyakoda.jugem.jp/?eid=109
NMAPは3.7でSP2に対応してるみたいだから、ソースでも見てみようかな・・・
winpcap使ってるのかな?
0110デフォルトの名無しさん
2005/06/26(日) 00:50:440111デフォルトの名無しさん
2005/06/26(日) 00:58:43サーバー・クライアントモデルでのTCP通信をしております。
サーバーとクライアント1対1で、クライアントにおけるsendの返り値が256、
サーバーにおけるrecvの返り値が255となぜか1だけ損失しているんですが、
このような現象が起こることはあるのでしょうか?
今までは正常に動いていたのに、ちょっとソースをいじったら
このような現象が起きてしまいました。
ご教授お願いいたします。
0112デフォルトの名無しさん
2005/06/26(日) 01:28:50ある
0113デフォルトの名無しさん
2005/06/26(日) 10:21:06仕様どおりの動作。まずは1で紹介しているURLを熟読する。
0114デフォルトの名無しさん
2005/06/26(日) 10:21:20俺もそれなったことあるよ
ちょっとソースをいじったらいいよ
0115デフォルトの名無しさん
2005/06/26(日) 11:16:25よくない。
011686
2005/06/26(日) 14:45:36http://up.isp.2ch.net/up/4b38d15c36a8.zip
しかし・・・非同期通信なのにファイル受信中にプログラムが
固まってしまいます。その上、ダウンロード速度が異様に遅いです。
0117デフォルトの名無しさん
2005/06/26(日) 17:27:25ものすごいメモリコピーしている悪寒……。
256バイトごとrecvして、
「今まで受け取ったバイト数+ recvしたバイト数」、新しいメモリを確保して、
「今まで受け取ったバイト数+ recvしたバイト数」、新しいメモリにコピーして、
今までのメモリ解放の繰り返し
で、コネクションが切れたら、メモリ内容をファイルに書き出し。
メモリベンチプログラムかな?
011886
2005/06/26(日) 17:42:11ひょっとして私とんでもないことしてます?
011986
2005/06/26(日) 18:03:03このプログラムでダウンロード中はCPUの占有率(Alt+Ctrl+Delで見れるやつね)
が90%超えちゃうんですけど、メモリの使い方がやばいせいですかね?
0120デフォルトの名無しさん
2005/06/26(日) 19:49:20300MBのものをダウンロードするにはどうする気だ?
0121デフォルトの名無しさん
2005/06/26(日) 19:49:42ネットワークプログラミング以前の問題で、かなりヤバい。
データ構造とかアルゴリズムとかの勉強をやり直すべき。
0122デフォルトの名無しさん
2005/06/26(日) 19:54:45と思った
でも、確保したそばからメディアに書き込んでいったほうがお利口さんだと思った
0123デフォルトの名無しさん
2005/06/26(日) 19:55:14似たようなやり方してるからね。
あくまでサンプルということならそれでもいいけど
実際にまともなものを作るにはどうかなって感じ。
012486
2005/06/26(日) 20:13:20どうも、どうも。ご助言ありがとうございます。
キーワードはいただきましたので、その辺りを調べる、勉強するをしてから、
書き直してみたいと思います。ありがとうございました。
0125デフォルトの名無しさん
2005/06/26(日) 21:56:451回の転送で送れる限界くらいのサイズまで受信→ファイルへ書き出し
→続きを受信→書き出し→以降終わるまで続ける。
で最後に連結させてるけど・・・
じゃないと、受信途中で何らかのトラブルおきてもリジューム出来なくなるから・・・
0126デフォルトの名無しさん
2005/06/26(日) 22:39:13エラーが起きたらfflushして、レジュームは書き出せている
ファイルサイズの末尾から。
0127デフォルトの名無しさん
2005/06/26(日) 23:38:45> エラーが起きたらfflushして、
ヘッダのLast-Modified: フィールドにファイルのタイムスタンプを合わせて、
> レジュームは書き出せているファイルサイズの末尾から。
これを利用するかどうかを、レジュームしようと再接続した時の
Last-Modified: フィールドと比べて決める。
0128デフォルトの名無しさん
2005/06/26(日) 23:43:49だとOSごと落ちた時とかアプリが固まった場合
マズくないかね
0129デフォルトの名無しさん
2005/06/26(日) 23:44:250130デフォルトの名無しさん
2005/06/27(月) 02:01:22>>50
エラー理由(errno)がより適切になったというのは正しいが、
UNIXドメインソケットではICMPなんぞ使わない。INETドメイン
ソケットの場合とerrnoを揃えたというのがより正確な説明だろう。
>>49
接続相手が未完了状態だから、接続が拒否される。未完了状態と
拒否判明はもともと区別なんてできない。
0131デフォルトの名無しさん
2005/06/27(月) 14:02:540132131
2005/06/27(月) 14:09:28Ethernet とか IPの階層から実装してる人いませんかー?
0133デフォルトの名無しさん
2005/06/27(月) 14:18:13そういうのはBSDからパクってくるのが普通じゃないかね。
PSPとかがそう。
0135デフォルトの名無しさん
2005/06/27(月) 14:25:10石を直接扱うのとLANカードを扱うのでも違うし
ドライバが提供されているのもあるし
0136131
2005/06/27(月) 14:36:33勉強中なんですが、なかなかいい資料とかもなくて・・・。
0137デフォルトの名無しさん
2005/06/27(月) 17:07:04>>6のURLを見よ。
0139デフォルトの名無しさん
2005/06/27(月) 22:13:020140デフォルトの名無しさん
2005/06/28(火) 01:10:48適度に枯れてないと。
0141デフォルトの名無しさん
2005/06/28(火) 02:00:53今みたいに何から何までIP喋るようなご時世だと。
0142デフォルトの名無しさん
2005/06/28(火) 02:35:180143デフォルトの名無しさん
2005/06/28(火) 15:10:32そんなにめんどくさいのけ?
0144デフォルトの名無しさん
2005/06/28(火) 15:51:19ttp://www.ieee.org/
めんどくさいかどうかは本人の主観だな
0146あああ
2005/06/29(水) 00:32:42それぞれcmdとdataのメモリの内容、メモリから読み出した直後
のレジスタの内容、実際に出力される内容はそれぞれどのような
値になるでしょう?
char cmdreg = CMD_PORT, datreg=DATA_PORT;
unsigned int16 cmd;
unsigned int32 data;
cmd=0x87cd , data=0x20030719;
outw(cmdreg,(cmd & 0xff00)>>8 | (cmd & 0xff)<<8);
outl(datreg, data);
0147あああ
2005/06/29(水) 00:34:46それぞれcmdとdataのメモリの内容、メモリから読み出した直後
のレジスタの内容、実際に出力される内容はそれぞれどのような
値になるでしょう?
char cmdreg = CMD_PORT, datreg=DATA_PORT;
unsigned int16 cmd;
unsigned int32 data;
cmd=0x87cd , data=0x20030719;
outw(cmdreg,(cmd & 0xff00)>>8 | (cmd & 0xff)<<8);
outl(datreg, data);
0148デフォルトの名無しさん
2005/06/29(水) 00:35:500149デフォルトの名無しさん
2005/06/29(水) 00:41:230150143
2005/06/29(水) 17:05:13お前は黙ってろw
0151デフォルトの名無しさん
2005/06/30(木) 09:20:35う。ソフトを作成しています。
その中で1つ問題がありVPN接続完了後、FTP認証の際PPTPのトンネルが出来てい
ないのでFTPの認証が出来ません。数回リトライするうちにトンネルが出来てお
り成功します。
そこで質問ですが、VPN接続完了後トンネルが完成した時に発生するWindows API
を教えていただきたいと思います。
0152デフォルトの名無しさん
2005/06/30(木) 09:29:25( ^ω^)そんなのないお
PingPingしておっきおっき
0153デフォルトの名無しさん
2005/06/30(木) 16:34:55GMEM_MOVEABLE オプションを付けて GlobalAlloc で確保したメモリを
GlobalLock で固定して送信データをセットした後で、 send を非同期で
呼び出して、FD_WRITE イベントで 上記確保メモリを GlobalUnlock →
GlobalFree で開放するという手順は、何か問題がありますか?
0154デフォルトの名無しさん
2005/06/30(木) 16:46:03記憶違いならすまんが。
WSAEWOULDBLOCK→FD_WRITEで「送信が完了した」のではなく、
単に送信バッファが開いて「送信できるようになった」だけであって、
もう一度send()を呼ばなきゃいかんのじゃないかな。
そのかわり、その間メモリはロックしておく必要はないので、GMEM_MOVEABLEのGlobalAlloc()で
確保したものであっても構わないだろう。
そもそもGMEM_MOVEABLE自体、32bit Windowsでは過去の遺物であって
使う必要がないとは思うが。
0155デフォルトの名無しさん
2005/06/30(木) 17:40:18レスどうも。
>単に送信バッファが開いて「送信できるようになった」だけであって、
>もう一度send()を呼ばなきゃいかんのじゃないかな。
connect の直前に FD_CONNECT | FD_CLOSE で、send の直前に
FD_WRITE | FD_CLOSE でWSAAsyncSelect を呼んでるので、送信が
完了した時に FD_WRITE のイベントが発生すると解釈してました orz
もしかして、send で送信バッファに送信データをにコピーしても、送信
バッファに十分な空きがあった場合、即座に FD_WRITE イベントが発生
すると言う事でしょうか・・・ ((((;゚Д゚)))
0156デフォルトの名無しさん
2005/06/30(木) 18:58:03( ^ω^)即座だお
0157デフォルトの名無しさん
2005/07/02(土) 11:03:29日本語で解説されたサイトなど無いでしょうか・・
0158デフォルトの名無しさん
2005/07/02(土) 12:05:290159デフォルトの名無しさん
2005/07/02(土) 12:29:54>>3に行け。
0160デフォルトの名無しさん
2005/07/02(土) 14:14:29>>3のどこですかね・・?中々見つからなくて・・・
0161デフォルトの名無しさん
2005/07/02(土) 14:21:480162デフォルトの名無しさん
2005/07/02(土) 14:23:49>158 は rfc とつぶやき、>159 は >3 を見ろという。じゃ、どれを見ればいいかぐらい分かるよな?
「RFC 日本語版リスト」で「ドメイン」or「Domain」or「DNS」でページ内検索すればいくらでも見つかるだろ?
0163157
2005/07/02(土) 14:25:44RFCとか読むの始めてで・・
RFC読みにくて嫌いになったんですが、RFC以外の
読みやすいドキュメントって無いですかね?
0164デフォルトの名無しさん
2005/07/02(土) 14:44:32本屋に行けよ
0165デフォルトの名無しさん
2005/07/02(土) 15:05:21157 が求めているのは規格書じゃなくて入門的な本・記事だろう。
気にいらなければ放置しろって。
といっても、俺も知らんが。
0166157
2005/07/02(土) 15:06:38読みやすい規格書が欲しいんです
StudyingHTTPのような
0167デフォルトの名無しさん
2005/07/02(土) 15:09:080168デフォルトの名無しさん
2005/07/02(土) 15:09:33馬鹿かお前は
0169157
2005/07/02(土) 15:13:18語彙力も全然無いです
プログラマーに向いてないかもしれません
それでも知りたいんです
0170デフォルトの名無しさん
2005/07/02(土) 15:20:33中卒の人間に失礼だろ
0171デフォルトの名無しさん
2005/07/02(土) 15:25:40あのサイトのターゲットは本当の初心者向けじゃないだろ。
0172デフォルトの名無しさん
2005/07/02(土) 15:28:540173157
2005/07/02(土) 15:31:23パケットキャプチャーしてその内容と
適当にググった内容を照らし合わせて勉強してたんですが・・
DNSはそうも簡単にいかず。
0174デフォルトの名無しさん
2005/07/02(土) 15:36:560175デフォルトの名無しさん
2005/07/02(土) 15:38:28できるが、お前の性格は直せん。
0176157
2005/07/02(土) 15:39:08リゾルバとサーバのやりとりを、プログラムで再現したいんです
例えばwww.2ch.netのIPを取得したり
0177デフォルトの名無しさん
2005/07/02(土) 15:45:14の使い方も全然知らない? 普通のソケットプログラムは書けるが、
DNS のプロトコルがわからんから先に進まない?
ttp://x68000.q-e-d.net/~68user/net/resolver-3.html
を見ればわかるレベルなの?
0178デフォルトの名無しさん
2005/07/02(土) 15:48:100180デフォルトの名無しさん
2005/07/02(土) 15:58:02二度とこなくていいぞ。
0181デフォルトの名無しさん
2005/07/02(土) 16:52:38規格は規格。解説書とは違う。死ね。
0182デフォルトの名無しさん
2005/07/02(土) 17:09:58あることだが、規格書とコーディング解説文の区別さえ
つかんもんかね?
0183デフォルトの名無しさん
2005/07/02(土) 17:23:52プログラミングよりまずは日本語の勉強から始めさせないと
0184157
2005/07/02(土) 18:02:01自分より馬鹿そうな奴がいると集団で群がるのな
超おもしれぇ
0185デフォルトの名無しさん
2005/07/02(土) 18:04:55まぁガンガレ
0186157
2005/07/02(土) 18:12:020188デフォルトの名無しさん
2005/07/02(土) 18:16:17| k, ヽ广 | | 'l''゙l┘ .`'グ/ |゙l.,ィ |.| )゙l /'゙l″、 r-,、 、 .:c、、
ッ┘`,l゙ ,ノ ヽ ,,,,,`'′ .,/,,,!‐'', ,ノ う゜.| | .,ノ ヽ ,,,,,`'′ |゙l ゙l,ヽ .|゙l ヾi、
゙i、/゙,-'''i、 .く, .,巛 ‘r\ /.'゚_ / ./‐I / | | .〈、,l]゙l `',\ | | ,。 .,i´゙l | | .�� il゙ ゙l
l゙.l゙ ゙lッ'" ././ | | .,,) ゙l .!/]/ 丿 | .l゙.|、 /丿| | .,,〉.) | ゙l .,リ .`-" .l゙ | .,l〕 .ヽ"
/.l゙ j,i´ l゙,E.,l゙.| `'''′ l゙{ /,,| | ゙l,ヽ .゙l,d,,l゙ | `'''゙ ゙l ゙‐'| ゙l ゙‐'|
/ l゙ ゙l,~゙'''i、 .゙l´丿 | ゙l, '(/|゜| .゙-゙l .゙l`丿 \.,} \.,}
∨ `''ー" ゙'" ヽ ゙l ヽ} `" `
0189デフォルトの名無しさん
2005/07/02(土) 18:24:510190157
2005/07/02(土) 18:26:350191デフォルトの名無しさん
2005/07/02(土) 18:26:500192143
2005/07/02(土) 20:16:54なんて書いてあんの?
0193デフォルトの名無しさん
2005/07/02(土) 21:08:330194157
2005/07/02(土) 21:25:55最初にそういうすすめかたをする方がドキュソ
0195157
2005/07/02(土) 21:31:260197デフォルトの名無しさん
2005/07/02(土) 21:39:090198デフォルトの名無しさん
2005/07/02(土) 21:40:450199デフォルトの名無しさん
2005/07/03(日) 00:02:260200デフォルトの名無しさん
2005/07/03(日) 09:35:43通常はFD_READが来たらすぐrecv()するような処理を書くと思うのですが、
もし受信を放置してソケットからバッファを取り出さないでいると
何かヤバいことになったりするでしょうか?
それとも自動的に捨てられたりするのでしょうか?
0201デフォルトの名無しさん
2005/07/03(日) 09:44:44UDPなら後から受信したデータが自動的に捨てられる。
TCPなら受信バッファサイズが不足していることが送信側に伝えられる。
通常、送信側は送信を一時停止するなりしてバッファに空きが出来るのを待つ・・・が、実際どうなるかは送信側の実装しだい。
0202デフォルトの名無しさん
2005/07/03(日) 10:01:10> 実際どうなるかは送信側の実装しだい。
実際のところ、どんな OS がどんな変な挙動をするの?
0204デフォルトの名無しさん
2005/07/03(日) 10:21:30> 実際どうなるかは送信側の実装しだい。
そういう実装があったとしても、それは仕様外の振る舞い。
0205デフォルトの名無しさん
2005/07/03(日) 14:21:290206デフォルトの名無しさん
2005/07/03(日) 16:15:06どうすればいいんでしょうか
String型とかはわかるんですが。。
0207デフォルトの名無しさん
2005/07/03(日) 16:18:28簡単だ
int型やfloat型をString型に変換して送ればいい
受け取り側でまた戻せばよかろう
0208206
2005/07/03(日) 16:24:42207さん感謝です。
こんな簡単なことでよかったのねorz
0209143
2005/07/03(日) 18:15:36人に聞いといて、「こんな簡単なこと」かよ。
よく今まで生きてこれたな、おめー。
0210デフォルトの名無しさん
2005/07/03(日) 18:23:050211デフォルトの名無しさん
2005/07/03(日) 18:32:29>>206は、我々の研究である、「チンパンジーにネットワークプログラミングをさせよう」
という試みの結果生じたレスであります。
まさか実験体5号が、人に質問するという、高度な問題解決の方法を図るとは考えておりませんでした。
今後とも生温かく見守ってやってください。
0212デフォルトの名無しさん
2005/07/03(日) 18:35:30単にchar*にキャストしたのか
sprintfでも使うことにしたのか
でも"String"だから、Javaとか.NETとかなのかな。
0213デフォルトの名無しさん
2005/07/03(日) 19:27:12ost << f << " " << f2;
write(fd,ost.str().c_str(),ost.str().size());
とかだろか? memcpy(&buf[0],&f,sizeof(float));とかしたら
エンディアンやらコンパイラの吐くfloat形式やらで
間違いなく引っかかるし。めんどくさい。
0214デフォルトの名無しさん
2005/07/03(日) 23:02:53ネットワークプログラミング初心者が一番初めに読む本としてはどれがいいですか?
一応TCP/IPについては勉強済みです
0215デフォルトの名無しさん
2005/07/04(月) 00:25:20http://www.amazon.co.jp/exec/obidos/ASIN/4320120841/
―Windowsソケットバージョン
http://www.amazon.co.jp/exec/obidos/ASIN/4320029992/
どっちか。
0216デフォルトの名無しさん
2005/07/04(月) 02:12:59WSAEventSelect()とWaitForMultipleObjects()では64個までのイベントしか
待つことができないため64個を超えるソケットは使用できないとありましたが、
WSAAsyncSelect()でも64個を超えるソケットは使用できないのでしょうか?
0217デフォルトの名無しさん
2005/07/04(月) 15:26:01試した方が確実だと思うよ。
0218デフォルトの名無しさん
2005/07/04(月) 16:06:24RCPT TO:<****@***.***>
のときに
550 relaying mail to ***.*** is not allowed
というエラーが返ってきて、メールの送信ができませんでした。
しらべてみると、サーバが「POP before SMTP」という方法を使用しているらしく
POP認証もしてみたのですが、
それでも、エラー返ってきます。
どのようにして実装すればいいでしょうか、教えてください。
0219デフォルトの名無しさん
2005/07/04(月) 17:54:550220デフォルトの名無しさん
2005/07/04(月) 19:32:06envelope-from もその isp のアカウントにしてますか?
そうでないならリレーと看做されてoutってことでは?
0221デフォルトの名無しさん
2005/07/04(月) 19:45:26ありがとうございます。
リレー禁止なサーバの場合どのようにして他のドメインにメールを送るのでしょうか?
あて先アドレスの@以下の部分をとって接続先を
mail.(@以下)
とするだけで問題ないでしょうか?
0222デフォルトの名無しさん
2005/07/04(月) 19:49:39はい、MAILコマンドのアドレスもおなじISPのものです。
0223デフォルトの名無しさん
2005/07/04(月) 20:02:25以下のようなあたりを確認してみてはどうでしょうか。
1.試してみる
適当なMUAで、POPでメールを受信した後、メールを送信してみる。
2.もう一度試してみる
telnet popserver.xxx.xxx pop 、telnet smtpserver.xx.xx. smtp などして、
手動で試してみる。
2. 1と2に成功した場合には、プログラムを見直してみる。
先方の応答を無視してテキトーに流し込むコードだと、QUIT への応答が無いうちに
ソケットをcloseしてしまって、先方で sigpipe でアボーンしたりすることがあります。
USER, PASS, QUITのそれぞれについて、サーバからの応答をちゃんと受信しているか
確認してみてください。
0224デフォルトの名無しさん
2005/07/04(月) 20:48:29> リレー禁止なサーバの場合どのようにして他のドメインにメールを送るのでしょうか?
つーか、自分の契約しているISPに、契約通りにIP接続して、自分に送りなよ。
それが成功しているなら、その旨はっきり明記しろ。
でなければSMAPer認定だ。
0225デフォルトの名無しさん
2005/07/04(月) 21:57:170226デフォルトの名無しさん
2005/07/04(月) 22:31:380227デフォルトの名無しさん
NGNG0228デフォルトの名無しさん
2005/07/04(月) 23:40:190229デフォルトの名無しさん
2005/07/05(火) 00:38:56023086
2005/07/05(火) 01:17:47GUIを持つhttpダウンローダーで、もがいていた者です。
いただいたご意見を基に
recvする毎にfwriteするようにプログラムを改造しました。
また一度のrecvサイズを256→65536byteにすることで固まり具合が軽減しました。
とりあえず動かしてみたところ、今のところ異常はないです。
プロジェクトファイルとかexeとか
http://up.isp.2ch.net/up/83b5e5f5550a.zip
0231デフォルトの名無しさん
2005/07/05(火) 07:20:50これは受信データがくるまでブロックする機能をカットするだけなのでしょうか?
0232デフォルトの名無しさん
2005/07/05(火) 07:33:55受信データをバッファに書き込んでる途中に関数が返ったりしないのかなってことです(これは非同期かな^^;)
0233デフォルトの名無しさん
2005/07/05(火) 08:18:51そうです。
ただし古いWindowsではデータを失うことがあります。
0234デフォルトの名無しさん
2005/07/05(火) 15:39:48>>223さん
レスありがとうございます。
自分自身には問題なくメールをおくることができます。
telnetを使って試してみたところ、他のサーバに問題なく送れるようになりました。
しかし、ISPの接続を使わない(学校のネットワーク)でもう一度やってみたところ、
550エラーがかえってきました。
ISPの接続を使わない場合は、もしかしてPOPで認証してもSMTPで、
ほかのサーバにはおくれないのでしょうか?
また、ISPの接続では問題なくプログラムも動くようになりました。
ありがとうございます。
0235デフォルトの名無しさん
2005/07/05(火) 16:04:47> ほかのサーバにはおくれないのでしょうか?
それはISPのポリシー次第。
自分だったら、POP before SMTP程度じゃ外部から外部へのリレーは許さんね。
0236デフォルトの名無しさん
2005/07/05(火) 16:15:55outgoing port 25 を遮断するNW管理者もいるので、
自前smtpクライアントは今後利用しにくくなるような気がする。
0237デフォルトの名無しさん
2005/07/05(火) 18:28:03587 を使えよ
0238デフォルトの名無しさん
2005/07/05(火) 19:09:22VC++でネットワークアダプタがPCに複数刺さっている場合に
アダプタ名からそいつが持っているIPアドレスを取得できる
APIがあると聞いたんですが教えていただけないでしょうか
お願い致します。
0239デフォルトの名無しさん
2005/07/05(火) 19:16:260240デフォルトの名無しさん
2005/07/06(水) 09:59:140241デフォルトの名無しさん
2005/07/06(水) 10:55:08http://www.kt.rim.or.jp/~ksk/wskfaq-ja/examples/getifaces.html
http://support.microsoft.com/default.aspx?scid=kb;en-us;186312
http://support.microsoft.com/default.aspx?scid=kb;en-us;186312
0242238
2005/07/06(水) 11:37:27てめーいいかげんなこと言ってんじゃねーよドカスが
0243デフォルトの名無しさん
2005/07/06(水) 11:59:450244デフォルトの名無しさん
NGNG0245デフォルトの名無しさん
2005/07/06(水) 16:33:34>>236さん
ありがとうございます。
メールの送信は何とかできました。
メールを送信していてわかったのですが、
日本語が文字化けするメールソフトがあります。
メールを送信する際に文字コードはどのようなものを使えばよいでしょうか?
0246デフォルトの名無しさん
2005/07/06(水) 16:42:42Content-Type: text/plain; charset=ISO-2022-JP
として、ISO-2022-JP。根拠となるRFCは1468。
0247デフォルトの名無しさん
2005/07/06(水) 19:09:12迷惑だからその程度の人間はそんなソフト作るな
0248デフォルトの名無しさん
2005/07/06(水) 19:35:10subject 等は ISO-2022-JPで mimeエンコード。
本文は ISO-2022-JP。
RFC2045、RFC2047あたりを参照。
0249デフォルトの名無しさん
2005/07/06(水) 19:41:44ちゃんと読んでいれば>245みたいな馬鹿な質問はしなくて済む
こういうこと?
0250デフォルトの名無しさん
2005/07/06(水) 19:57:59誰も質問しにこなくなるぞ
0251デフォルトの名無しさん
2005/07/06(水) 20:07:420252デフォルトの名無しさん
2005/07/06(水) 20:09:18質問に答えることで生計を立ててる香具師でもいるのか?
0253デフォルトの名無しさん
2005/07/06(水) 20:49:11>>251
0254デフォルトの名無しさん
2005/07/07(木) 07:00:06→ sendはエラーを返さないが、8KBしか送れない。
→ 次に続きの248KBをsendしようとする。
→ WSAEWOULDBLOCKが返る。
→ (しばらくしてからFD_SENDが来る)
WSAEWOULDBLOCKが返る例として過去ログにこういうのがありました。
上記のと同じ非ブロッキングモード+getsockopt()で送信バッファが8KBの状況でテストしてみたのですが、
2MBほど一気にsend()すると一回で全部送れました。
受信側アプリケーションも受信できていました。
過去ログが間違ってるのでしょうか。
それともWin2kが特殊で送信バッファを拡張したりするのでしょうか。
0255254
2005/07/07(木) 07:07:03無線LANで接続しています。
受信側は何度かに分けて受信していました。(そらそうだ^^;)
ナント。send関数は一瞬で処理を返しました。エラーはでていません。
返った瞬間バッファをdeleteしたりとか嫌がらせしても負けずちゃんと送ってくれてるようです。
0256254
2005/07/07(木) 07:11:43> 返った瞬間バッファをdeleteしたりとか嫌がらせしても負けずちゃんと送ってくれてるようです。
もしかして送信バッファの他にさらにセカンダリ送信バッファみたいなのがあり
send関数はそこにコピーするのでしょうか。。
# さらに補足、Winsock2です。
0257デフォルトの名無しさん
2005/07/07(木) 07:37:03> 過去ログが間違ってるのでしょうか。
常にWSAEWOULDBLOCKになるわけじゃないから、間違ってない。
なる可能性を排除したプログラミングは間違いだが。
0258デフォルトの名無しさん
2005/07/07(木) 11:27:54>もしかして送信バッファの他にさらにセカンダリ送信バッファみたいなのがあり
>send関数はそこにコピーするのでしょうか。。
カーネル(OS)は自前のバッファを持っています。
で、カーネル内のバッファにコピーが完了すると、
api 的には「送信できた」ということになります。
256Kバイトを1回送るくらいではブロックしないにしても、
速めのペースでずーと送っていればそのうちブロックするなり
WOULDBLOCKが帰るなりするでしょう。
>getsockopt()で送信バッファが8KBの状況で
たとえTCP/IP層でのバッファサイズが真に8Kだったとしても、
通常はその下のレイヤがもっとずっと大きなバッファを持っているので、
この「8K」という数字にはあまり意味がありません。
0259デフォルトの名無しさん
2005/07/07(木) 13:47:47http://support.microsoft.com/?scid=kb;ja;214397
0260デフォルトの名無しさん
2005/07/07(木) 15:40:32うほっ、いい資料。
0261デフォルトの名無しさん
2005/07/07(木) 16:02:230262デフォルトの名無しさん
2005/07/07(木) 19:13:10あるサーバの特定のポートに同時に複数のクライアントがアクセスすることは出来ますか?
サンプルを作ってみたのですが、ソケットでは1つのポートは同時には1つのクライアントしかアクセスできないようなのですが。
1 : N の CSシステムを作る場合、どうしたらいいのでしょうか?
(1)各クライアントがサーバの異なるポートを順次消費してゆく?
(2)ポート占有時間を短くして、ある程度の単位ごとに、クライアントを切り代える?
(1)の方が現実的のような気がしますが、一般的にはどんな方法がとられているのでしょうか?
0263デフォルトの名無しさん
2005/07/07(木) 19:23:16>>1から読め。
0264デフォルトの名無しさん
2005/07/07(木) 19:26:42acceptした1ソケットで1つのクライアントしか対応出来ないのは当然。
0265デフォルトの名無しさん
2005/07/07(木) 22:58:17> (1)各クライアントがサーバの異なるポートを順次消費してゆく?
普通はそうする
> (2)ポート占有時間を短くして、ある程度の単位ごとに、クライアントを切り代える?
普通はそうする
> (1)の方が現実的のような気がしますが、一般的にはどんな方法がとられているのでしょうか?
普通は両方
0266デフォルトの名無しさん
2005/07/08(金) 00:04:48> acceptした1ソケットで1つのクライアントしか対応出来ないのは当然。
なんか下手な表現だし、>>265は無知蒙昧だし…
>>262
http://pc8.2ch.net/test/read.cgi/tech/1109793931/920
0267デフォルトの名無しさん
2005/07/08(金) 00:47:46サーバー側はlisten()したソケットでクライアントを待ちます。
接続できたらaccept()はそのクライアントと通信するソケットを返します。
最初にlisten()したソケットは使いまわしでまたaccept()で別なクライアントを待つことができます。
それを繰り返して通信するソケット(クライアント)が増えていくわけです。
0268デフォルトの名無しさん
2005/07/08(金) 15:55:400269デフォルトの名無しさん
2005/07/08(金) 16:09:30そこらへんの8kとか256kというのはOSやIPスタック依存のマジックナンバなので、
ほぼどんなサイズであろうとちゃんと動くように作るのが正解。
0270デフォルトの名無しさん
2005/07/08(金) 20:03:51マウスの動きやキーボードの入力を覚えさせてマクロ化するにはどうしたらいいのでしょうか?
そのとき、データ送信や受信もしたいのですが。
手っ取り早くプログラミングをしらなくても手作業で
記録できるソフトとかは無いものでしょうか?
そのようなものがない場合はプログラミングでも結構です。
よろしくお願いします。
0271デフォルトの名無しさん
2005/07/08(金) 20:07:440272デフォルトの名無しさん
2005/07/08(金) 20:31:330273デフォルトの名無しさん
2005/07/08(金) 21:58:57グローバルフックなりなんなり使え
0274デフォルトの名無しさん
2005/07/08(金) 23:51:45あるからWindows板のくだ質スレ行け。
0275デフォルトの名無しさん
2005/07/09(土) 15:06:14これくらい。
0276デフォルトの名無しさん
2005/07/09(土) 16:17:22あほの諸君らにもわかるんちゃうん?こたえてみ!
0277デフォルトの名無しさん
2005/07/09(土) 16:27:21野球で使う大きめのグローブ。その予備のこと。
またはプロトコル層の総称。
サーブルーチン-さーぶるー・ちん
1970年代に活躍した北京出身の俳優。チンさんの愛称で親しまれた。
その出演した映画を元にしてソケットプログラミングが誕生した。
0278デフォルトの名無しさん
2005/07/09(土) 19:05:46おもったとおりやわー
0279デフォルトの名無しさん
2005/07/09(土) 20:25:47をしたいのですが、そういったことをするためにはネットワークプログラミングを勉強すればOKなのでしょうか?
もしそれがネットワークプログラミングで可能という事であれば言語は何が適当でしょうか。
0280デフォルトの名無しさん
2005/07/09(土) 20:37:25ネットワークプログラミングの一種だが、そういうこと
をするライブラリ関数は世の中にゴマンと存在するので、
今から書く必要はない。そういう存在するライブラリ関数
を利用するだけで十分。
だから、ネットワークプログラミングは不要。
言語は… perl あたり?
0281デフォルトの名無しさん
2005/07/09(土) 21:29:31今C言語始めているのですが、本当にエクセル等を使ってやりたい事ができるか不安になって質問
させて頂きました。まだ具体的にどのようにすればURLから文字列を取得してやればよいのか全然わかりませんが、
C→Javaを勉強しようと思っていたのを取りやめて
C→Perlにしたいと思います。
http://table.yahoo.co.jp/t?s=7202.t&g=d
ここにあるような例えば出来高だけの文字列を取得してグラフ作れたら、
もうなんと言いますか最高なのですが、こんなことまでPerlで本当にはたしてできるのでしょうか?
疑って申し訳ありませんが、もしできるのであればプログラム(Perl)ってとても素晴らしく逆に
すごすぎで恐ろしいくらいだなと思いまして。。Perl信者になってしまいそうです。
0282デフォルトの名無しさん
2005/07/09(土) 21:33:16とりあえず、Cの標準関数をマスターしてから来てください。
0283デフォルトの名無しさん
2005/07/09(土) 21:34:27おいおい無茶言うなよ
0284デフォルトの名無しさん
2005/07/09(土) 21:59:280285デフォルトの名無しさん
2005/07/09(土) 22:18:23できるよ。
http://search.cpan.org/~rhooper/HTTP-Lite-2.1.6/Lite.pm
あたりを使って、指定した URL の中身をとってきて、あとは
http://search.cpan.org/~gaas/HTML-Parser-3.45/Parser.pm
http://search.cpan.org/~kwilliams/HTML-SimpleParse-0.12/lib/HTML/SimpleParse.pm
http://search.cpan.org/~msisk/HTML-TableExtract-2.02/lib/HTML/TableExtract.pm
あたりのどれか適当な奴を使って、中身から必要な部分を
切りだせばいいんじゃね?
俺、perl は詳しくないし、ここだともはやスレ違いになるから、
perl スレに行って聞いた方がいいと思うけど。
あと、perlに関しては俺は言語が素晴らしいんじゃなくて、
ライブラリが沢山揃ってるのが素晴らしいだけだと思うんだが、
これは perl スレの連中には言わないでくれ(w
0286デフォルトの名無しさん
2005/07/09(土) 22:21:11というのも、Perlのアドバンテーだな。
0287デフォルトの名無しさん
2005/07/09(土) 22:24:29HTMLがtextベースだから、じゃなろうか
0288デフォルトの名無しさん
2005/07/09(土) 22:28:40そりゃ関係ない。 httpを通してバイナリのファイルも送れるわけだし。
0289デフォルトの名無しさん
2005/07/09(土) 22:30:21GET, POST, etc. やらヘッダーの事じゃないの
0290デフォルトの名無しさん
2005/07/09(土) 23:30:07libcurl でも使えばいいんじゃね?
0291280
2005/07/10(日) 00:44:32一からプログラミングを勉強するらしいのにCを使うってのは、
あまりお勧めできん。目的を達成するには、もっと楽な言語が
他にたくさんあるんだから、そっちを使うべき。
CにはCならではの良さが勿論ある (たとえば perl は C で
書かれているわけで、Cがなければそもそも perl も動かん)
が、こういう状況でベストな言語じゃないだろう。
俺はCが一番得意だが、この用途なら、スクリプト言語で済ますよ。
HTMLページの構成はしょっちゅう意味もなく変わるわけで、そう
いう変更に ad hoc に対応するのに C で書くのは面倒くさい。
0292デフォルトの名無しさん
2005/07/10(日) 01:14:00語りはもういいから。ウザ
0293デフォルトの名無しさん
2005/07/10(日) 02:40:150294デフォルトの名無しさん
2005/07/10(日) 03:00:13現実問題として、今時のほとんどの言語処理系は、
Cで作られてるだろ。
0295デフォルトの名無しさん
2005/07/10(日) 03:09:47GC 含め、ランタイムライブラリは C なんだろうけど
ML, Lisp, Smalltalk 辺りも大部分はターゲット言語で書かれてるね
C じゃないと書けない所だけ C で書いてる
0296デフォルトの名無しさん
2005/07/10(日) 03:16:25有名なのは Jython とか Scheme 系とか
横道にそれてしまったな……
>>279 みたいなのなら、適当なスクリプト言語探した方が良いと思う
0297デフォルトの名無しさん
2005/07/10(日) 08:58:32いろいろCやっていると今後もプログラム作りたくなった時など有効になるかとも思ったのですが、
どうやら目的達成だけの事を考えるとperlあたりが最適なのですね。勉強になりました。
>>285さんの方法はとても具体的で非常にありがたかったのですが、肝心の使い方がよくわかりませんでしたので、
(使い方もそうですがエクセル等に取得したデータを表にするという事もどうすればよいのか。。)
まずは、みなさんがお勧めのperlを勉強したいと思います。
あ、詳しくは勉強してからperlスレにて聞きたいと思うのですがperlは任意のデータを拾ってきてそれを表にするという事はできるのでしょうか?
もしできないのであればエクセルを勉強するのも一つの手かなと今になって思ったりしています。。
質問ばかりで本当に申し訳ないのですがどうか最後にもう一声だけお力をお貸しして頂けないでしょうか。ご迷惑おかけします。
0298デフォルトの名無しさん
2005/07/10(日) 09:30:22覚えなければならない。これは中〜上級者向け。
ExcelはCSVファイルを読み込むことが出来るので、CSVファイルを作成す
るという方法もある。こっちは比較的難易度低め。初級者向け。
0299デフォルトの名無しさん
2005/07/10(日) 10:25:31HTMLデータが必要なのか、テキスト変換したのが欲しいのか、
DOMで扱うのが良いのか、URLそのものがデータなのか、どれなんだ?
0300デフォルトの名無しさん
2005/07/10(日) 10:26:19> あ、詳しくは勉強してからperlスレにて聞きたいと思うのですがperlは
> 任意のデータを拾ってきてそれを表にするという事はできるのでしょうか?
ネットワーク関係ないからperlスレで聞け。
0301デフォルトの名無しさん
2005/07/10(日) 20:57:11ないようなので(知りませんでした。すみません。)、perlスレかエクセルのスレ行ってきます。
今までありがとうございました。
0302デフォルトの名無しさん
2005/07/10(日) 22:16:210303デフォルトの名無しさん
2005/07/11(月) 00:42:16今現在はWindowsで、InternetReadFileなどでちょっとした文書を取ってきて整理する
簡単なプログラムを書いているだけですが、ネットワークプログラミングに
興味が出てきたので、もう少しつっこんで学んでみたいのですが、
ググってもキーワードが悪いのか、なかなか望むような解説が見つかりません。
「猫でもわかる〜」は参考になるでしょうか。
0304デフォルトの名無しさん
2005/07/11(月) 00:45:340305デフォルトの名無しさん
2005/07/11(月) 08:00:13HTTPならRFC読めばわかる。
0306デフォルトの名無しさん
2005/07/13(水) 21:13:270307デフォルトの名無しさん
2005/07/14(木) 06:44:12http://www.kt.rim.or.jp/~ksk/wskfaq-ja/articles/io-strategies.html
の経験則6を見ると、WSAAsyncSelectには64制限は無く、
100-1000程度のSOCKETは問題なく扱えるようだ。
最近のマシンスペック/メモリならもう少しいけるかも。
0308デフォルトの名無しさん
2005/07/14(木) 10:32:13> 最近のマシンスペック/メモリならもう少しいけるかも。
(゚Д゚)ハァ?
>>216も>>307もちゃんと技術的文章読めるようになれよ。
かなり頓珍漢な事書いている。
http://www.kt.rim.or.jp/~ksk/wskfaq-ja/advanced.html#64socketsを読み直せ。
0309デフォルトの名無しさん
2005/07/14(木) 10:58:08> (゚Д゚)ハァ?
( ゚д゚)ポカーン
0310デフォルトの名無しさん
2005/07/14(木) 11:15:50しかも/threadの…
0311デフォルトの名無しさん
2005/07/14(木) 11:42:32「・・・ようだ」という台詞がどんだけ信頼するにあたらないかの実例
0312デフォルトの名無しさん
2005/07/14(木) 18:40:090313デフォルトの名無しさん
2005/07/14(木) 19:21:09そういう仕様のOSならそれでいいんじゃないでしょうか。
LinuxやWindowsの話じゃないですよね。
0314デフォルトの名無しさん
2005/07/14(木) 22:20:07WSAAsyncSelectを使った、Windowメッセージを使ったSOCKETの個数に制限があるかということを
ちゃんと引用付きで述べているわけですが、
>>308==>>311みたいなバカは日本語がちゃんと読めないばかりに
よくわかってないまま知ったかぶりをして
墓穴を掘っていると言うことで良いですよね?
0315デフォルトの名無しさん
2005/07/15(金) 00:34:55> WaitForxxxやselectには64個の制限があることはちゃんと知っていて
ヤレヤレ
0316307
2005/07/15(金) 04:51:44なに偉そうにボケたこと言ってるの?
そんなところはちゃんと読んでるし、理解してるつもりだけど。
それより>>216を読んで元の質問の意味を理解することをお勧めする。
もちろん、WSAAsyncSelectというものについても、よく勉強しましょうね。
0317まじレス不要?
2005/07/15(金) 05:53:20event機構にスレッドごとの64という制限があると書いてあるのだから、
当然同じ制限があるんじゃないのか?
WSAAsyncSelectはeventとHWNDの関連付けだけやって、
後はevent処理API群のお仕事だろ? (それを理解できてないのかな?)
まあ、microsoftはころころ仕様変えるし、
こういう制限を気にするのは(俺)サーバだろうから、想定している環境で試してみたらどうよ。
0318デフォルトの名無しさん
2005/07/15(金) 07:21:10なんでeventが出てくるんだ?
winsock内部で、オーバーラップI/Oで処理している可能性だってあるだろ。
0319デフォルトの名無しさん
2005/07/15(金) 07:22:280320307
2005/07/15(金) 07:27:37まあlocalhost:8080でapacheを動かしておいてBCB6でTClientSocketを100個作り、
メッセージがちゃんと来ること、
HTTPレスポンスがちゃんと来ること
KeepAliveTimeoutによるDisconnectがConnectした順番とは別の順序で送られてくること
を確認しただけだけどね。
0321307
2005/07/15(金) 07:35:34WSAAsyncSelectを使った非同期ソケットに、上限64個などという制限は無いよ。
(Win9xで上限100という制限はあるけどね)
だから、中規模のサーバー(接続数100-1000程度)であれば
WSASyncSelectを使ったメッセージ処理型のサーバーという選択肢もある、と
http://www.kt.rim.or.jp/~ksk/wskfaq-ja/articles/io-strategies.html
の経験則6の前半部に書いてあるよ。
0322デフォルトの名無しさん
2005/07/15(金) 07:57:180323デフォルトの名無しさん
2005/07/15(金) 08:03:22Winsock1.1の頃、つまり、Windows3.1の頃からあるんですよ。
その時代にもあったAPIに対して
「内部実装ではEventが使われている」などという仮定をしている時点で
「何トチ狂った決めつけしてるんだコイツ?」な訳ですよ。
0325307
2005/07/15(金) 08:09:03サーバー側がapacheだろうとなんだろうと関係ないだろ。
クライアント側で100個扱えるかどうかテストしたんだから。
で、今度は
Windows版のApacheはMaxClientが最大64という制限があるって言い出すのか?
0326307
2005/07/15(金) 08:48:38・apacheはselectを使っている
・だから同時接続64の制限があるはず
・だから320-321はでっちあげ、もしくはいい加減なもの
・トホホ
いやあ、おめでたいことで。
0327デフォルトの名無しさん
2005/07/15(金) 09:03:24これを複数スレッドで64オーバーを実現してるって話じゃないの?
0328神
2005/07/15(金) 13:01:24何が真実かそれは神のみしるのです。
アーメン;
0329デフォルトの名無しさん
2005/07/15(金) 17:31:19程よく熱々になってる人がいるのかな?
0330デフォルトの名無しさん
2005/07/15(金) 18:05:060331デフォルトの名無しさん
2005/07/15(金) 20:14:55使って通信プログラム作ってる人いませんか?
0332デフォルトの名無しさん
2005/07/15(金) 23:55:46どこかにありませんか?
0333デフォルトの名無しさん
2005/07/16(土) 00:25:340334332
2005/07/16(土) 00:35:33ホストAからホストBへARP要求を送信しても、recvfromでは、ホストAの
MACアドレスが返ってきたり、ホストBのMACアドレスが返ってきたりします。
あちこちのページをのぞいてみたのですが、よく分からず、
そのものズバリ!のソースを探している次第です。
よくわからないのですが、
Apache Bench とか Subversion ではRAWソケットを使っているのでしょうか?
イメージ的にはTCPのような気がするのですが。
0335デフォルトの名無しさん
2005/07/16(土) 01:24:170336332
2005/07/16(土) 01:36:32MACアドレスを知りたいという目的だけでなく、GARPも使いたいのでARPテーブルの参照では
ダメなんです・・・ごめんなさい。
0337デフォルトの名無しさん
2005/07/16(土) 04:02:49> ホストAからホストBへARP要求を送信しても、
どんなARP要求やねん!
普通ブロードキャストやろ?
tcpdumpの結果晒してみい。
0338デフォルトの名無しさん
2005/07/16(土) 10:49:08> イメージ的にはTCPのような気がする
突っ込みどころが多すぎる気が・・・
何をどうやってARPをTCPで送るん?
0339332
2005/07/16(土) 12:40:38書き方が悪かったですね。
ホストAからターゲットをホストBとしてブロードキャストしても・・・と読み替えてください。
>>338
ApacheBench等がTCP/IPのような気がするという意味で書きました。
国語力なくてすんません。
0340デフォルトの名無しさん
2005/07/16(土) 17:45:52ちゃんと-eつけろよ
0341デフォルトの名無しさん
2005/07/16(土) 17:56:200342デフォルトの名無しさん
2005/07/16(土) 21:51:510343332
2005/07/16(土) 22:25:44tcpdumpのログを取りながら、あれこれいじっていたら
キチンと応答が来るようになりました。ただ一点を除いて・・・。
(何が問題だったのかは、ただいまソースコードの比較中です)
各ホストをターゲットにしてARP要求をブロードキャストすると、
キチンと対象ホストからARP応答が来ます。
そこで、自分自身をターゲットにしてARP要求をブロードキャストしたのですが、
応答がなく(tcpdumpも何も吐かない)、タイムアウトしてしまいます。
自分自身から応答が来ると思っていたのですが・・・。
何か思い違いをしているのか、これが正しい動作なのか分かりません。
分かる方、教えてください。
0344デフォルトの名無しさん
2005/07/17(日) 00:12:06arpテーブルに、自分自身は表示されないのと関係がある!
0345デフォルトの名無しさん
2005/07/17(日) 01:34:170346デフォルトの名無しさん
2005/07/17(日) 03:56:38ARPにあわせたビット列を送るだけ
0347デフォルトの名無しさん
2005/07/17(日) 07:16:04responseの方は、kernelが勝手に送るから、
自前でARPを機能させたいなら、kernelのARPを止めないと。
0348デフォルトの名無しさん
2005/07/18(月) 01:19:08いろいろ使いまわしていていままで問題出ていないけど
時々、1000未満のポートで待ち受けするとおかしい現象が出る。
クライアントはconnectしているのにサーバはacceptしていない。
そういう現象ありませんか?
0349デフォルトの名無しさん
2005/07/18(月) 01:23:53自作ライブラリのバグでしょ。
0350デフォルトの名無しさん
2005/07/18(月) 05:15:221024以下じゃないのか?FAQにちゃんと書かれてる
0351デフォルトの名無しさん
2005/07/18(月) 07:27:260352デフォルトの名無しさん
2005/07/18(月) 23:17:05切断されても帰るよ
そのときreadすると0バイト(エンドオブファイア)だったりする
0353デフォルトの名無しさん
2005/07/18(月) 23:31:41select関数を使って、データが送信されたかどうか毎回LOOPしてチェックしている
んですが、これって、回線切断時にもselect関数の戻り値が1になって返って
来てるみたいなんですがどういう事かよくわかりません。
データが届いている時しか戻り値が1ではないんですか?
0354デフォルトの名無しさん
2005/07/18(月) 23:36:23>>31
0355デフォルトの名無しさん
2005/07/18(月) 23:37:57>>352
0356デフォルトの名無しさん
2005/07/18(月) 23:40:19?どいういう意味???
0357デフォルトの名無しさん
2005/07/18(月) 23:41:42間違って書いたという意味
0359デフォルトの名無しさん
2005/07/18(月) 23:41:51切断されたら0ですよね?
エラーとして捉えてるんかな?
0360デフォルトの名無しさん
2005/07/18(月) 23:43:00ナメてんのかこら
0361デフォルトの名無しさん
2005/07/18(月) 23:44:24そもそも select の直の戻り値って見るものなのかな
Linux なら select_tut 見てみると分かりやすいかもしれない
あ、マジレスいらない・・・?
0362デフォルトの名無しさん
2005/07/18(月) 23:45:10まあまあ
セレクト抜けて、でもゼロだったりエラーだったりしたら
それはもう別れの季節なんだよ
0363デフォルトの名無しさん
2005/07/18(月) 23:47:150364デフォルトの名無しさん
2005/07/18(月) 23:49:30現在はWindowsです。WSAAsyncSelect等もありますが
今は使っていません。(将来的にはLinux上でも動かせるようにしたい
んで。移植のことを考えてのこと)
select_tutはwindowsでも使えるんですか?
0365デフォルトの名無しさん
2005/07/18(月) 23:51:41あと、もう一つ質問です。
recv関数を他のスレッドからも呼んでるんですが、
複数のスレッドで、recv関数を呼んでも大丈夫なんですかね?
0366デフォルトの名無しさん
2005/07/18(月) 23:56:54大丈夫だよ
でも同時に呼ぶのはひとりずつにしなさい
二人以上で責めると壊れちゃうから
0367デフォルトの名無しさん
2005/07/18(月) 23:58:140368デフォルトの名無しさん
2005/07/18(月) 23:59:32自分で作った関数は呼び合ったら駄目と思ってたんやけど。
0369デフォルトの名無しさん
2005/07/18(月) 23:59:50自分の責任を無関係な人に押し付ける
社内にいる某バカタレとダブるんだが。
わからないというから親切におしえたものの
そいつの問題環境に一致しない回答をしたものだから
あとで世にでた製品に組み込まれたバグになった。
で、俺が回答した答えが悪いなんて言い出しやがって。
2chで書いて責任がどうなんてことは無いだろうが。
こいつの書き込みからそういう魂胆というか
普段そんな調子じゃないのか?というにおいがぷんぷんしてくる。
0370デフォルトの名無しさん
2005/07/19(火) 00:01:230371デフォルトの名無しさん
2005/07/19(火) 00:04:46select_tut は select のチュートリアルだからそのキーワードで検索すれば出る。
Windows でも Linux でも基本的には select は変わらない。
おそらくいろいろ基本が分かってないんだと思う。
というわけで recv でそんなにエラーが返ってくるのは勝手な推測だが、君がおかしなことをしてるから、と思う。
0372デフォルトの名無しさん
2005/07/19(火) 00:05:23私は、自分の責任を無関係な人に押しつけた事なんてありませんよ?
しかも、教えて回答した答えが悪いって言われて
で?
0373デフォルトの名無しさん
2005/07/19(火) 00:07:300374369
2005/07/19(火) 00:08:26> recv関数を他のスレッドからも呼んでるんですが、
> 複数のスレッドで、recv関数を呼んでも大丈夫なんですかね?
大丈夫かどうかは、君が抱えている問題による。
「ここでアクセル踏んでも大丈夫なんですかね?」という質問に
どう答えればいいか考えてみよ。
0375デフォルトの名無しさん
NGNG0376デフォルトの名無しさん
2005/07/19(火) 00:22:590377デフォルトの名無しさん
2005/07/19(火) 11:47:20コンパイル時に必要な"libeay32.lib" "ssleay32.lib"を
どうしてもビルトできない。
Windows用の"libeay32.lib" "ssleay32.lib"を
ダウンロードできるサイト誰かご存じないでしょうか?
0378332
2005/07/19(火) 12:12:59これが正しい動作ですね。自分自身へARP要求をするってことはG-ARPを
意味するので、これで応答があっては、ネットワーク上でIPが重複しているのか
そうでないのか判断つかなくなってしまいますよね。すごいアホな質問に
つきあってくれた方々ありがとうございました。
0379デフォルトの名無しさん
2005/07/19(火) 12:39:07ビルドすればいいじゃん。
0380デフォルトの名無しさん
2005/07/19(火) 13:03:23http://www.02.246.ne.jp/~torutk/cxx/openssl/install.html
でも嫁。
いちおうダウンロードはできるが。
自分でビルドしろ。
0381377
2005/07/19(火) 13:12:58自分でビルトしようとしたんですが、
ヘッダー内の構文エラーと言われてしまっては
もう太刀打ちできませんorz
0382デフォルトの名無しさん
2005/07/19(火) 15:59:08端末1 - ブリッジ(FW)
端末2 - PCなど
上の図のようにつながっている構成で、
端末1上で端末2のIPアドレスを調べたい、と思っています。
端末2のほうが何かパケットを投げれば、
そのsrcアドレスを見て、すぐわかるんですが、
ただListenしているだけで、何も自ら通信しないような端末だと、
arpとかが流れるのを待つしかありません。
より早く確実に端末2のIPを調べるために、
何かしらのパケットを端末1から端末2に対して投げて、
その返答が受けられればいいのですが、
何か都合の良いプロトコルなどはないでしょうか?
0383デフォルトの名無しさん
2005/07/19(火) 16:37:49tracerouteでつかってるやつ
0384デフォルトの名無しさん
2005/07/19(火) 21:56:32送り手側
send(sock, &sendaddr, sizeof(sendaddr), 0);
受けて側
recv(sock, &recvaddr, sizeof(recvaddr), 0);
これで、エンディアンを意識せずに送受信できますか?
こちらにはリトルエンディアンマシンしかないので実験ができません。
0385デフォルトの名無しさん
2005/07/19(火) 22:01:06残念だけどだめ
0386デフォルトの名無しさん
2005/07/19(火) 22:28:10broadcastでping
0387デフォルトの名無しさん
2005/07/19(火) 23:16:43#define defhtons(a) a=htons(a)
#define defntohl(a) a=ntohl(a)
#define defntohs(a) a=ntohs(a)
addr_send(int sock, struct sockaddr_in *sendaddr)
{
defhtonl(sendaddr->sin_family);
defhtonl(sendaddr->sin_addr.s_addr);
defhtons(sendaddr->sin_port);
send(sock, sendaddr, sizeof(struct sockaddr_in), 0);
//ネットワークバイトからホストバイトに戻すのは省略
}
//受信関数も省略
これだったらエンディアン気にせずに送受信いけますか?
0388デフォルトの名無しさん
2005/07/19(火) 23:18:40余計ダメ
0389デフォルトの名無しさん
2005/07/19(火) 23:38:58{
defhtonl(sendaddr->sin_family);
send(sock, sendaddr, sizeof(struct sockaddr_in), 0);
defntohl(sendaddr->sin_family);
}
addr_recv(int sock, struct sockaddr_in *recvaddr)
{
recv(sock, recvaddr, sizeof(struct sockaddr_in), 0);
defhtonl(sendaddr->sin_family);
}
三度目の正直ということで・・・
portとipはすでにネットワークバイトに変換してあるから
famlilyだけをネットワークバイト、ホストバイト変換すればよかったんですね。
勉強になりました。
0390デフォルトの名無しさん
2005/07/19(火) 23:40:07addr_recv(int sock, struct sockaddr_in *recvaddr)
{
recv(sock, recvaddr, sizeof(struct sockaddr_in), 0);
defntohl(sendaddr->sin_family);
}
n, hを逆にしてました。
こっちが正しいです。
0391デフォルトの名無しさん
2005/07/19(火) 23:48:52> portとipはすでにネットワークバイトに変換してあるから
なことはない。
0392デフォルトの名無しさん
2005/07/20(水) 09:04:34自分のプログラムで既にしてるからって事ではなくて?
じゃないと、変換するのは、もう決まり文句みたいになってるから、まさか・・・・
0393382
2005/07/20(水) 12:16:25>>383
tracerouteってことはICMPですね。
それも考えたんですが、あて先アドレスをどこにするのか、ってのと
端末2がちゃんと返してくれるかがわかんないんですよね・・・。
>>386
同じくこれも考えたんですが、broadcastのpingに対して返事しない端末とかがあったんですよね・・・。
0394384
2005/07/20(水) 13:08:19servaddr.sin_addr.s_addr = htonl(servIP);
servaddr.sin_port = htons(servPort);
こんな風に必ずすると思っていたんですけど、違うんでしょうか。
自分のプログラムでは必ずこのようにしています。
0395デフォルトの名無しさん
2005/07/20(水) 13:13:050396デフォルトの名無しさん
2005/07/20(水) 13:20:21ttp://srd.yahoo.co.jp/PAGE=P/LOC=P/R=2/*-http://www.geocities.jp/hibiyank/skypep2p-3.htm
検索もできない395は逝っとけ。
0397デフォルトの名無しさん
2005/07/20(水) 15:35:01合ってますよ。391の意味は漏れにも解らない。
問題はそこではなくて、送信側、受信側の両方の実装においてsockaddr_in
内部のフィールドのレイアウトが同じであることが保証されるか、ってことの
ような気がします。
IP(v4)アドレスとポート番号を送りたいのなら、単に4バイト+2バイト送る式で
何の不都合も無いと思いますが・・・
0398デフォルトの名無しさん
2005/07/20(水) 17:21:120399デフォルトの名無しさん
2005/07/20(水) 17:24:20返事しない端末でも、ARPテーブルのキャッシュにはdynamicで残るから、
そこから拾うとか。
0400デフォルトの名無しさん
2005/07/20(水) 17:37:380401デフォルトの名無しさん
2005/07/20(水) 23:15:09> 問題はそこではなくて、送信側、受信側の両方の実装においてsockaddr_in
> 内部のフィールドのレイアウトが同じであることが保証されるか、ってことの
> ような気がします。
そもそもcompilerによって、あるいはcompile時のoptionによって、alignmentが違うし、
そうじゃなくてもfieldの数が違うケースがある。
*BSDやDarwinにはs*_lenがあるが、SolarisやLinuxにはない。
sockaddr_*型(つまり自分)のサイズが入る。
0402デフォルトの名無しさん
2005/07/20(水) 23:47:370403384=394
2005/07/21(木) 11:10:43long, shortの組でいこうと思います。
これならC言語でバイト数が定義されていますので。
0404デフォルトの名無しさん
2005/07/21(木) 18:23:11今P2Pアルゴリズム関係をいろいろ調べてるんだけど、分散ハッシュだと
完全一致の検索が早いのはわかったけど、あいまい検索で高速なアルゴリズムって
なんかあるの?
0405デフォルトの名無しさん
2005/07/21(木) 18:24:06!?
0406デフォルトの名無しさん
2005/07/21(木) 19:13:59君には無理だ
0407デフォルトの名無しさん
2005/07/21(木) 19:15:510408デフォルトの名無しさん
2005/07/21(木) 19:54:52相談室だろ?ここ。
0409デフォルトの名無しさん
2005/07/21(木) 19:58:400410デフォルトの名無しさん
2005/07/21(木) 20:27:06たしかに画期的なものを発案するのは無理そう
>>407
やっぱないのかな
Winnyのクラスタ概念はいいアイデアだと思うけど
検索対象の急激な変化には耐えられないという欠点があるしね
すべてを検索できない
Skypeのユーザ検索はホストが存在してるのかな?
なにかいいアイデアはないものか
0411デフォルトの名無しさん
2005/07/21(木) 21:25:29他の板でやれ
このスレまでまきこむな
0412デフォルトの名無しさん
2005/07/21(木) 21:43:32P2Pスレへどうぞ
NAT同士でP2Pって可能なの?
http://pc8.2ch.net/test/read.cgi/tech/1118455558/
【匿名性】2ちゃんねら向きのP2Pプロキシ【向上】
http://pc8.2ch.net/test/read.cgi/tech/1085187225/
【P2P発展のために】悪用しにくいP2P技術
http://pc8.2ch.net/test/read.cgi/tech/1088758708/
P2P総合
http://pc8.2ch.net/test/read.cgi/tech/1048668198/
0413デフォルトの名無しさん
2005/07/22(金) 00:07:26ロハで教えてやる立場で言うのでは
態度が異なるのは当然だろ。
回答をお求めになるお金を払っていただける
お客様にも態度が異なるのも当然でございます。はい。
0414デフォルトの名無しさん
2005/07/22(金) 00:28:55貧乏臭い思考だな
0415デフォルトの名無しさん
2005/07/22(金) 02:21:490416デフォルトの名無しさん
2005/07/22(金) 09:59:550417デフォルトの名無しさん
2005/07/22(金) 10:46:290418デフォルトの名無しさん
2005/07/22(金) 10:52:21それを ケチ と称するんだよ
全分野においてお金を使いたがらないのはケチではなく
ただの貧乏性だ
0419デフォルトの名無しさん
2005/07/22(金) 11:26:56かわいそうに。頭がおかしい人なんですね。
0420デフォルトの名無しさん
2005/07/22(金) 12:57:160421デフォルトの名無しさん
2005/07/22(金) 20:37:48ホストAからホストBへnバイトのデータを送信するときに
Aのネットワーク障害でnバイト中のmバイトしかBに届かなかった場合
read()をするとmバイトはデータを得られるはずですが
そこから残りのn-mバイトを受信しようとread()を実行するとどうなるのでしょうか?
即座に何かしらのエラーを返すのかTCPのタイムアウトまで待たされるのか
実験する環境もないのでよくわかりません
0422デフォルトの名無しさん
2005/07/22(金) 20:46:27この場合はメッセージ送信用ソケット、メッセージ受信用ソケット
をそれぞれ用意しないと駄目なんでしょうか?
0423デフォルトの名無しさん
2005/07/22(金) 20:50:08どういう障害かによるが、たとえばケーブルが切れた、といった状況を
想定すると、read()だけでは検出する手段は無いよ。
read()は単に永久にブロックする。
そういう状態を検出したければ、キープアライブオプションを設定するか、
自分でread()にタイムアウトを設定するか、ハートビートとして何かの
電文を定期的に送信するか、といった手法を取る必要がある。
0424デフォルトの名無しさん
2005/07/22(金) 20:59:13TCP なら双方向通信なんだから、1個のソケットで送信と受信できるだろ。
UDP なら2ついるけどな。
0425422
2005/07/22(金) 21:29:53相手のメッセージを受信する場合はrecv()を呼ぶ必要があるわけです。
ですが、recv()でメッセージを待っている間は次の処理に進みません。
send()を呼んで連続してメッセージを送ることができません。
これを解決するにはソケットを2つ用意しないといけないと思ったんですが・・・
0426デフォルトの名無しさん
2005/07/22(金) 21:45:31非常に単純な実装としては、例えば select して読めるなら recvし、
読めた分だけバッファに追記する。んで1メッセージとおぼしき分だけ
バッファに溜まったら、画面に出力する。
この処理の過程にはブロックする箇所は無いので、送信が必要なら
この処理の前後にでも間にでも行えばいい。
他のやり方としては、
読み出し用にスレッドを一本起こすとかそういうことをしても良いし。
0427422
2005/07/22(金) 21:45:48多人数でサーバーを介さずにIMを行いたいです。
このときに、メッセージを誰がいつ送ってくるのか分かりません。
特定のメンバのメッセージ受信を待っている間は他のメンバのメッセージを受信できません。
そこで、ソケットを二つ用意して、マルチスレッドを利用すれば
メッセージ受信専用ソケットは常にメッセージを受信して、
もう一つのソケットでいつでもメッセージを送信することが可能になると思いました。
そうなれば、多人数でのIMができると思ったのですが、
ソケットを二つ用意する必要があるのがいまいち納得できません。
ソケットひとつで多人数でのIMを実現する方法はありませんでしょうか。
0428デフォルトの名無しさん
2005/07/22(金) 21:47:19UDP
0429422
2005/07/22(金) 22:02:13スレッドを一本用意して実装してみたいと思います。
0430デフォルトの名無しさん
2005/07/22(金) 22:23:270431デフォルトの名無しさん
2005/07/22(金) 22:25:42送信で待機させられることはないから
送信はUIと連動させて(ボタン押したら送信ね)
受信はスレッドを立てて同じソケットを受信待機しといて
メッセージが来たらUIに反映させてまた受信待機に入るようにすればいい
ソケットは共有ね
0432デフォルトの名無しさん
2005/07/23(土) 01:43:43あるってばさ。
non blocking mode にしとくとか、
送信用にスレッド立てるとかすればないけど。
0433デフォルトの名無しさん
2005/07/23(土) 03:06:07変更できるのですか?
0434デフォルトの名無しさん
2005/07/23(土) 11:20:04NDISのレイヤーを自分で叩いてください。
0435433
2005/07/23(土) 16:25:12ありが�d。
ドライバ関係はわかんないんでwindowsはあきらめます。
0436デフォルトの名無しさん
2005/07/23(土) 16:42:570437デフォルトの名無しさん
2005/07/23(土) 16:59:53情報遅いな。もともと無縁の人?
http://blogs.msdn.com/michael_howard/archive/2004/08/12/213611.aspx
0438デフォルトの名無しさん
2005/07/23(土) 20:23:13ネットワークの接続をつかってダイアルアップ接続したり、
接続が現在確立されているのか、切れているのかを監視したりしたいのですが、
どのようなAPIを使えばできますでしょうか?
0440デフォルトの名無しさん
2005/07/23(土) 20:32:230441マイク ◆yrBrqfF1Ew
2005/07/23(土) 21:08:18winpcapが代わりに叩いてくれるだろ。
0443デフォルトの名無しさん
2005/07/23(土) 21:17:160444デフォルトの名無しさん
2005/07/23(土) 21:22:01>>241
0445438
2005/07/23(土) 22:37:11では。
0446デフォルトの名無しさん
2005/07/24(日) 01:37:210447デフォルトの名無しさん
2005/07/24(日) 03:11:320448デフォルトの名無しさん
2005/07/24(日) 03:16:23そんな頭ごなしに決め付けるな!
猫だってしつければきちんとトイレを覚えるんだぞ!
やれば出来るって!
0449デフォルトの名無しさん
2005/07/24(日) 03:17:12猫を侮辱するな
0450デフォルトの名無しさん
2005/07/24(日) 03:36:03スマヌ・・・
0451デフォルトの名無しさん
2005/07/24(日) 05:16:57uPnPのプロトコルの解析したのがどっかにあったの見たけど
見たらえらい単純な構造だったけど、バックドア系のウィルスなんかに悪用されないように
情報があまりでまわってないのかな?
0452デフォルトの名無しさん
2005/07/24(日) 06:15:08> バックドア系のウィルスなんかに悪用されないように
これはあってもおかしくないと前から思ってるけど
あまり話を聞かないんだよな
もはや当たり前すぎて話題にも上らないんだろうか
0453デフォルトの名無しさん
2005/07/25(月) 21:05:21別段UPnPを使う必要も無いからでは?
UDPで十分・・・とか?
0454デフォルトの名無しさん
2005/07/25(月) 21:34:36山田ウィルスはUPnPで穴開けるぞ
0455デフォルトの名無しさん
2005/07/25(月) 21:58:090456デフォルトの名無しさん
2005/07/26(火) 19:46:19はいはい。おまえもなーですね。はいはい。
0457デフォルトの名無しさん
2005/07/26(火) 20:42:23netshじゃないの?
亜種がたくさんあるからUPnP使ってるものがあってもぜんぜん不思議じゃないけど
0458デフォルトの名無しさん
2005/07/26(火) 23:24:02FTPソフトなどで、ダウンロード速度制限機能とか付いてますが、どのように実装しているのか?
ってことです。
while(1)
{
時刻取得A
recv()
時刻取得B
sleep(理論値の時間-(B-A))
}
みたいなコードを書いたのですが全く駄目です。
そもそも、OSが用意して入れているAPIのみで実現できるのでしょうか?
OSはLinux上で実装予定です。
よろしくお願いします。
0459デフォルトの名無しさん
2005/07/26(火) 23:24:59FTPソフトなどで、ダウンロード速度制限機能とか付いてますが、どのように実装しているのか?
ってことです。
while(1)
{
時刻取得A
recv()
時刻取得B
sleep(理論値の時間-(B-A))
}
みたいなコードを書いたのですが全く駄目です。
そもそも、OSが用意して入れているAPIのみで実現できるのでしょうか?
OSはLinux上で実装予定です。
よろしくお願いします。
0460デフォルトの名無しさん
2005/07/27(水) 03:12:43// 100kbに制限
while(1)
{
char buffer[1kb];
send-recv(buffer, 1kb);
sleep(10);
}
0461デフォルトの名無しさん
2005/07/27(水) 03:17:391000/100=10とか、sendrecvの処理時間考慮してない。けど
制限速度を下回っても超えることはないから問題ない。
0462デフォルトの名無しさん
2005/07/28(木) 00:41:28昔Winsockで行ったときはできたのですが、感覚の違いからか全く理解できんのです・・・
ちなみにTCPで単純なチャットプログラムを作ったところ上手く行ったのですが、
UDPにした途端・・・
UDPでサーバ側待機するときのbindに対応するのはどこがどうなるんでしょうか?
クライアント側で接続を確立する時はUdpClient()?Connect()?
便利な関数のオーバーロードがありすぎでどれをどう使ったら適切なのかもう混乱・・・
それっぽいコード書いたら待ってないはずのポートで受信してたり、
待ってるはずのポートは待ちぼうけだったり・・・
聞く場所おかしいかもしれないですが、どこで聞けば適切かも分からず・・・
何方かご教授お願いできませんでしょうか
0463デフォルトの名無しさん
2005/07/28(木) 00:48:46いきなりデータ送信してよし。
0464デフォルトの名無しさん
2005/07/28(木) 09:35:25そのものズバリが出てるんで参考にせよ。
ttp://dobon.net/vb/dotnet/internet/udpclient.html
簡単に説明すると、UdpClient クラスに bind は無い。そのかわり、コンストラクタ
で bind するポートを指定することで bind する。
あと、UDP では connect は必須じゃない。connect すれば send の時に
アドレス指定しないでよいという利点はあるが、他のアドレスへ送信できな
くなるので良し悪し。セコくインスタンスを使いまわすなら connect しない
ほうがよい。
0465デフォルトの名無しさん
2005/07/28(木) 12:15:04ありがとうございます。
コンストラクタを使ってbindでしたか・・・
参考のページを見ないまでに見事正常動作しました。
しかしMSDNに手順を追って書いてもらえるといいんですがね・・・
ただ単にオーバーロード列挙してあるだけなんで余計混乱。
ともあれ、頭の中でかなり閃いてしまったのでもう少しコード書いてきます。
本当にありがとうございました。
0466デフォルトの名無しさん
2005/07/28(木) 13:53:34手順はTCPの教科書を適当に見ればOK
0468デフォルトの名無しさん
2005/07/29(金) 07:37:27UDPによるTCPエミュレーションをやってるようなライブラリやサンプルはありませんか?
言語はCが良いです。
Win・UNIXは問いません。
0469デフォルトの名無しさん
2005/07/29(金) 09:20:30好奇心です。
そんな微妙なもの何に使うのですか?
0470デフォルトの名無しさん
2005/07/29(金) 09:59:00とりあえずここは読んだよな?
ttp://www.kt.rim.or.jp/~ksk/wskfaq-ja/intermediate.html#udpgood
その上で、どんな用途のためにそうしたいのか説明したほうが良くね?
0471468
2005/07/29(金) 11:25:22やりたい事は、最近ちらほらと話題に出てくるUDP Hole Punchingの実験をしてみたかった事
それで、エラー処理がある程度必要になってくるようなのを作ろうとしてるので、既にそういうライブラリがあるならそれを使うかな? と
0472デフォルトの名無しさん
2005/07/29(金) 19:05:28TCP/IP
0473デフォルトの名無しさん
2005/07/29(金) 19:42:15この辺とかはどう?
ttp://www.valinux.co.jp/opensource/iproxy/
ttp://thebends.org/~allen/utunnel/
0474デフォルトの名無しさん
2005/07/29(金) 23:14:140475デフォルトの名無しさん
2005/07/29(金) 23:33:03バカ猫でも分るサイトありませんか?
本でもいいです。
0476デフォルトの名無しさん
2005/07/29(金) 23:56:05基本情報技術者試験の参考書辺りすすめとこうかな
0477デフォルトの名無しさん
2005/07/30(土) 00:07:520478デフォルトの名無しさん
2005/07/30(土) 02:45:56最初はヘナチョコでもいい。がんばれ。
0479デフォルトの名無しさん
2005/07/30(土) 11:29:53Commer本
0480デフォルトの名無しさん
2005/07/30(土) 16:38:010481デフォルトの名無しさん
2005/07/30(土) 17:02:310482デフォルトの名無しさん
2005/07/30(土) 17:15:17かなりスケールする必要のあるサーバプログラムの設計をしています。
扱うセッションは、長くて同時接続数も多いもの、同時接続数は少なくいが
スループットが要求されるもの、の二種類があります。
どういう実装が好ましいか、というのが今のトコロの問題です。
0483デフォルトの名無しさん
2005/07/30(土) 17:18:22・同時接続数の大きい方のセッションは、1スレッドでOVERLAPPED IO で処理する。
・同時接続数が小さい方のセッションは、セッション毎にスレッドを立てて処理する。
という実装を行っているのだけれども、タイムアウト処理の綺麗な実装方法があるなら、
どちらもIOCPでまとめてやってしまいたい。
IOCP 使うときにタイムアウトって普通はどう実装するの?
0484デフォルトの名無しさん
2005/07/30(土) 17:39:07接続、再送、読み?
↓はどうよ?
http://www.codeproject.com/internet/winsockiocp.asp
0485デフォルトの名無しさん
2005/07/31(日) 01:05:41確かにどうやればいいんだろう。
ちょっと考えてみた。
現在接続しているソケット記述子と、
そのソケットで最後にsendなりrecvなりした時刻を一緒にして管理しておいて、
GetQueuedCompletionStatus()の最後の引数で一定時間ごとに制御を戻して確認->クローズ
あるいは別にタイマを用意して一定時間ごとに……。
効率悪い?
0486デフォルトの名無しさん
2005/07/31(日) 21:47:300487デフォルトの名無しさん
2005/08/01(月) 10:03:40ICOPで投入したIOリクエストに対するタイムアウト処理です。
>>485
タイマーが良いのかな。.Net の非同期IOのサンプルコードでも、
タイムアウト処理はタイマー立ててやってますね。
んでスレッドが違うからCancelIO相当の処理は出来ず、
ソケットをクローズして処理中のIO要求を完了させるという・・・
>>486
その辺が使えれば異様に簡単なので、ちょっと試して見ます。
ありがとうございました。
0488484
2005/08/01(月) 14:42:570489デフォルトの名無しさん
2005/08/01(月) 21:21:17uchar buf1[1024];
memset(buf1, 0x11, 1024);
send(sock, buf, 1024);
/*thread2*/
uchar buf2[1024];
memset(buf2, 0x22, 1024);
send(sock, buf2, 1024);
TCP/IPプロトコル・マルチスレッドにおいて、
上記のように同じソケットにたいしてほぼ同時に異なるスレッドからそれぞれデータが送信された場合、
受け取り側には
0x11, 0x11, 0x11, ..............., 0x11, 0x11, 0x11, 0x22, 0x22, 0x22, .............., 0x22, 0x22, 0x22
または
0x22, 0x22, 0x22, .............., 0x22, 0x22, 0x22, 0x11, 0x11, 0x11, ..............., 0x11, 0x11, 0x11
かどちらかの形でデータが届き、その境界を判断することはできないが、
0x11, 0x11, 0x22, 0x22, 0x22, 0x11, 0x22, ..............................................................., 0x22, 0x22, 0x11
このように両方のデータが混在して届くようなことはない
こういう考えでプログラム組んでいっていいんですよね。
0490デフォルトの名無しさん
2005/08/01(月) 21:27:070491デフォルトの名無しさん
2005/08/01(月) 22:11:540492デフォルトの名無しさん
2005/08/01(月) 22:18:05どっちなんだよぉぉぉ
0493デフォルトの名無しさん
2005/08/01(月) 23:51:27または
0x22, 0x22, 0x22, .............., 0x22, 0x22, 0x22, 0x11, 0x11, 0x11, ..............., 0x11, 0x11, 0x11
こういうふうにくることはないよ
必ずどちらか一方で一旦戻される
0x11, 0x11, 0x11, ..............., 0x11, 0x11, 0x11,
か
0x22, 0x22, 0x22, .............., 0x22, 0x22, 0x22,
ただし
0x11, 0x11, 0x11, .....
......, 0x11, 0x11, 0x11,
なんてこともある
0494デフォルトの名無しさん
2005/08/02(火) 00:15:56あほ?
>>489
駄目です。
send()したものが、一つのTCPセグメントになることは保証されていません。
0495デフォルトの名無しさん
2005/08/02(火) 00:39:240496デフォルトの名無しさん
2005/08/02(火) 00:44:550497デフォルトの名無しさん
2005/08/02(火) 00:45:36どこでそう決まってるの?
0498デフォルトの名無しさん
2005/08/02(火) 00:54:40もちろんデータ欠損の可能性はあるけど。
0500デフォルトの名無しさん
2005/08/02(火) 01:14:04日本語だと分かりにくいので本家
http://tangentsoft.net/wskfaq/intermediate.html#threadsafety
非同期IOを使った場合、少なくとも>>489の
>0x11, 0x11, 0x22, 0x22, 0x22, 0x11, 0x22, ..............................................................., 0x22, 0x22, 0x11
>このように両方のデータが混在して届くようなことはない
は保障されるんじゃない?
0501デフォルトの名無しさん
2005/08/02(火) 01:20:250502デフォルトの名無しさん
2005/08/02(火) 01:34:13だからさ、どこで保証されてるのさ
0503デフォルトの名無しさん
2005/08/02(火) 02:08:250504デフォルトの名無しさん
2005/08/02(火) 02:23:56TCP
0505500
2005/08/02(火) 02:24:15どこにも保障するとは書かれていないね。
ちょっとスレッドセーフとは違う気もするけど、
MSDNでは、たとえばWSAAsyncGetHostByName()の場合、
多重に名前解決をすることはできないと明記されている。
注意すべきところではちゃんと記述しているみたい。
WSASend/Recvにこんな記述があった。
>If you are using I/O completion ports, note that the order of calls made to WSASend is also the order in which the buffers are populated.
>WSASend should not be called on the same socket simultaneously from different threads, since it can result in an unpredictable buffer order.
適当訳
完了ポートへの通知は、バッファの登録順にやってくる。
WSASend/Recvは、異なるスレッドから同時に呼び出さないほうがよい("should")
バッファの順番が予測できないからである。
これを読むと、
マルチコアな環境で、同時にバッファA、バッファBを非同期IOでWSASend()した場合、
どちらが先に送信されるかは分からない。
でも、
各バッファの中身は、そのまま送信される、というように読めるんだけど……。
0506500
2005/08/02(火) 02:29:36×WSASend/Recvは、異なるスレッドから同時に呼び出さないほうがよい("should")
○WSASend/Recvを、同一のソケット記述子に対して、異なるスレッドから同時に呼び出さないほうがよい("should")
0507デフォルトの名無しさん
2005/08/02(火) 03:02:57どうせやるならCriticalSectionでロックしてスレッドセーフにしなさいということらしい
0508デフォルトの名無しさん
2005/08/02(火) 03:11:43もういいからやめれ!
Windowsであると勝手に仮定しているし、
sendじゃなくてWSASendになっているし、
そもそもWSASendは渡したデータを全てすぐに送ると約束してない。
>>489
どのOSかと、TCPなのかUDPなのかくらい書いて。(「TCP/IP」じゃなくて)
その情報がないと「駄目」って答えになるね。駄目な状況、環境があるから。
0509489
2005/08/02(火) 10:58:48できればwin環境にも対応したいと思っていますので
unix, winどちらでもできたほうが嬉しいです。
通信ソケットはどちらでも
sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
です。
0510デフォルトの名無しさん
2005/08/02(火) 11:10:42これ以上何が訊きたいわけ?
0511デフォルトの名無しさん
2005/08/02(火) 12:02:49駄目です。
0512489
2005/08/02(火) 12:08:30結論は
受信、送信する場合はどれかのスレッドに一任すること。
もし複数のスレッドでデータを送受信したければフラグなり
何なりを利用して排他制御を行うこと。
でしょうか、勉強になりました。
ありがとうございました。
0513デフォルトの名無しさん
2005/08/02(火) 13:02:57はい。
send()の帰り値もちゃんと見て処理してねん。
0514デフォルトの名無しさん
2005/08/02(火) 23:05:130515デフォルトの名無しさん
2005/08/02(火) 23:45:43もしかして馬鹿janeという新しい派生ブラウザが誕生したんですか。
情報ありがとうございます。
0516デフォルトの名無しさん
2005/08/03(水) 00:30:130517デフォルトの名無しさん
2005/08/03(水) 03:57:140518デフォルトの名無しさん
2005/08/03(水) 10:27:12そのくらいなら今のでも普通に出来るだろ・・・
というか、クリックしないでスクロールされても
困る場合の方が多いけどな。
0519デフォルトの名無しさん
2005/08/03(水) 19:09:55F3押しても最初から検索するのを何とかしてくれ。
ついでにhttpリンクをダブルクリックしても飛ばない仕様を何とかしてほしい。攣りそうなほど光速でクリックすると反応するがw
>>518
できないだろ。スレッド一覧で、カラムの無いところをクリックしてそのウインドをアクティブにしないとホイールが聞かない。
スレッドのカラムの無いところをいちいち触らないといけないのは煩わしいだろ。
スレッドを触ると勝手にダウンロードされるし。
0520デフォルトの名無しさん
2005/08/03(水) 23:11:360521デフォルトの名無しさん
2005/08/04(木) 03:20:15もんくいわずにどこでもほい〜るつかえ
あと、F3はスキンでなんとかしろ
なんでもぐちをいえばねがいがかなうとおもうなよ
0522デフォルトの名無しさん
2005/08/04(木) 12:25:09マ人らしく改良しちまえ
0523デフォルトの名無しさん
2005/08/06(土) 21:17:15他にどんな方法があるのでしょうか?今更車輪を開発したいわけではなくて
勉強のためなのですがどこから手をつけてよいやら全くわかりません。
0524デフォルトの名無しさん
2005/08/06(土) 21:49:08環境による。
0525デフォルトの名無しさん
2005/08/06(土) 21:54:320526デフォルトの名無しさん
2005/08/06(土) 22:09:32Winsock2のLSPとか、フィルタドライバを使うことになるだろうなぁ。
0527デフォルトの名無しさん
2005/08/07(日) 00:15:51その他LinuxやBSDでは、LawSocketからデータを取得すればよいのですね
とりあえずその辺について理解して、EtherFrameから何か情報を抜き出せるところ
まで学習してみたいと思います。どうもです。
0528デフォルトの名無しさん
2005/08/07(日) 00:29:30http://www.bribes.org/perl/wnetpcap.html
http://cpan.uwinnipeg.ca/htdocs/Net-RawIP/Net/RawIP.html
http://aspn.activestate.com/ASPN/CodeDoc/Net-RawIP/RawIP/libpcap.html
あたりも面白い。libpcapより上になってしまうが、色々試すのに楽。
0529デフォルトの名無しさん
2005/08/07(日) 00:37:36あとはどうやってデータ構造にアクセスするか知れば情報は引っ張れそうです。
WinsockのLSPというのは良くわからないですね。Cでもいいのでサンプルか何かあれば
いいのですがMSDNにはLSPをインストールするとかいう意味不明なサンプルしかないですね
LSPちょっと難しいようですね
0530デフォルトの名無しさん
2005/08/07(日) 02:09:15自分のIPアドレスを取得したいのですが、どのような関数を使用すれば取得できるのでしょうか?
0531デフォルトの名無しさん
2005/08/07(日) 02:48:01getifaddrs(3)
0532デフォルトの名無しさん
2005/08/07(日) 17:14:56DWORDじゃなくてLONG_PTRだった(変わった?)んだな。
http://msdn.microsoft.com/library/ja/jpfileio/html/_win32_CreateIoCompletionPort.asp
http://msdn.microsoft.com/library/en-us/fileio/fs/createiocompletionport.asp
「DWORDだから64bit対応を考えたらポインタを渡せない」とか
「PSDKのサンプルではポインタ渡してるけど大丈夫かよ」とか思ってたけど
問題なかったわけだ。
まあOVERLAPPEDの拡張部にポインタ入れても大差ないんだけど。
で、質問。
http://msdn.microsoft.com/msdnmag/issues/1000/Winsock/
によると、TransmitFileは、
「server版以外では同時に処理できるのは2つまで」とあるけど
これは本当?
日本語のページをいろいろ見たけど見つからなかった。
ただ、http://msdn.microsoft.com/library/en-us/winsock/winsock/transmitfile_2.aspに
> The server optimizes the TransmitFile function for high performance. Workstations optimize the
> function for minimum memory and resource utilization. Expect better performance results
> when using TransmitFile on Windows Server.
とあるので、
それが「同時に2つまで」という制限のことなのかとも思うんだけど。
0533デフォルトの名無しさん
2005/08/08(月) 21:34:21ネットワーク専門の所で聞いたほうが良いと言われたのでよろしくお願いします。
WinSockを使った通信の勉強してるんですが、
acceptで10038のエラーコードが返ってきます。
下記のサイトで勉強しているのですが
ttp://www.geekpage.jp/programming/winsock/
サイト内コンテンツの
>TCPを使う(サーバ、エラー処理付き)
ttp://www.geekpage.jp/programming/winsock/tcp-3.php
のソースをそのままコピペして実行しても10038が返ってきてしまいます。
どうしてこうなってしまうのかどなたか教えてください。
0534デフォルトの名無しさん
2005/08/08(月) 21:39:05・コピペミス
・ネットワークに接続されていない
のいずれか
0535533
2005/08/08(月) 22:14:48ネットワークに接続されていないというのは、
正確に言うとどこまでを指すのかわかりませんが。
今スレッドに書き込みしてるPCでプログラムの実行をしています。
サーバ、クライアント共に同じPCでの実行なので、
127.0.0.1と192.168.11.3(LAN内でのこのPCアドレス)
を試してみましたが両方10038が返って来ます。
0536デフォルトの名無しさん
2005/08/08(月) 22:35:09sock = socket(ふにゃららふにゃらら);
お前さんのふにゃららふにゃららの部分をコピペしろ
ここにいる人間はエスパーじゃないからもっと詳しい情報がないと答えれないぞ
0537デフォルトの名無しさん
2005/08/08(月) 22:40:15あとここに書いてあること実行してるか?
0538533
2005/08/08(月) 22:48:51>のソースをそのままコピペして実行しても10038が返ってきてしまいます。
と、書いたとおり、HPに載ってるソースをそのままコピペしました。
>>536さんが言うように抜粋すると
SOCKET sock;
sock = socket(AF_INET, SOCK_STREAM, 0);
bind(sock, (struct sockaddr *)&addr, sizeof(addr));
listen(sock,5);
sock = accept(sock, (struct sockaddr *)&client, &len);
n = send(sock, "HELLO", 5, 0);
closesocket(sock);
sockに関連する記述部分は以上です。
>>537
VC6++を使用してますが、
プロジェクトにws2_32.libは参加させてあります。
プログラム自体はきちんと走ります。
上記URLのプログラムではエラー表示をさせているので
それで「10038」のエラーが出ているとわかりました。
0539デフォルトの名無しさん
2005/08/08(月) 22:57:35sockを上書きしてるけど
0540デフォルトの名無しさん
2005/08/08(月) 23:06:31WSAStartupじゃねーの?
0541デフォルトの名無しさん
2005/08/08(月) 23:08:26/
/
` ー
sock = accept(sock, (struct sockaddr *)&client, &len);
だって!! _,.>
r "
\ _
_ r-''ニl::::/,ニ二 ーー-- __
.,/: :// o l !/ /o l.}: : : : : : :`:ヽ 、
/:,.-ーl { ゙-"ノノl l. ゙ ‐゙ノノ,,,_: : : : : : : : : :ヽ、
__l>ゝ、,,ヽ /;;;;;;;;;;リ゙‐'ー=" _゛ =、: : : : : : : :ヽ、
/ _________`゙ `'-- ヾ_____--⌒ `-: : : : : : : :
...-''"│ ∧ .ヽ. ________ / ____ ---‐‐‐ーー \: : : : :
! / .ヽ ゙,ゝ、 / ________rー''" ̄''ー、 `、: : :
.l./ V `'''ー-、__/__r-‐''"゛  ̄ ̄ \ ゙l: : :
l .,.. -、、 _ ‐''''''''-、 l !: :
| / .| .! `'、 | l: :
l | .l,,ノ | ! !: :
/ '゙‐'''''ヽ、 .,,,.. -''''''''^^'''-、/ l !: :
r―- ..__l___ `´ l / /: :
\ `゙^''''''―- ..______/_/ /: : :
` ^゙´
0542デフォルトの名無しさん
2005/08/08(月) 23:10:210543533
2005/08/08(月) 23:14:35そこだけ自分で修正してました。。。
オリジナルのソースではSOCKETを2つ作っていて
なんでかわからず、sock0→sockにしていました。
>>534のコピペミスが大正解でした…。
すみませんでした。
ありがとうございました。
0544デフォルトの名無しさん
2005/08/08(月) 23:38:30> と、書いたとおり、HPに載ってるソースをそのままコピペしました。
(゚Д゚)ハァ?
0545デフォルトの名無しさん
2005/08/08(月) 23:49:09すいません、完全に勘違いしてました。
0546デフォルトの名無しさん
2005/08/09(火) 00:04:27多分挫折するね
0547デフォルトの名無しさん
2005/08/09(火) 00:14:50ネットワークプログラミングを初めて1週間やそこらで完璧になるわけがない。
たくさん転びながら学んでいけばいいさ。
0548デフォルトの名無しさん
2005/08/09(火) 00:47:400549デフォルトの名無しさん
2005/08/09(火) 02:40:28プログラマってそんなやつばっかだろ?
0550デフォルトの名無しさん
2005/08/09(火) 03:54:26LANが接続されたときに送られてくるメッセージなどはあるのでしょうか?
0551デフォルトの名無しさん
2005/08/09(火) 07:57:040552デフォルトの名無しさん
2005/08/09(火) 08:27:35どうプログラミングに関係あるのだ?
0553デフォルトの名無しさん
2005/08/09(火) 08:29:37どのようにネットワークコネクションが確立されたタイミングを検出しているのかを知りたいです。
0554デフォルトの名無しさん
2005/08/09(火) 08:29:45MSNメッセンジャー関連プログラミングスレ Ver.2
http://pc8.2ch.net/test/read.cgi/tech/1042032733/
0555デフォルトの名無しさん
2005/08/09(火) 08:39:230556マイク ◆yrBrqfF1Ew
2005/08/09(火) 09:45:07「プログラマ」は「2chネラ」に置き換える必要があるな(▽
0557デフォルトの名無しさん
2005/08/09(火) 10:04:18サーバへのアクセスを開始したいのです
0558デフォルトの名無しさん
2005/08/09(火) 19:51:060559デフォルトの名無しさん
2005/08/09(火) 19:53:03しかも定期的に大量のクライアント情報を送信してる模様
0560デフォルトの名無しさん
2005/08/09(火) 20:01:29こういう事は最近のネットワークアプリは考えることが大切だと思う。 ハイバネーションから立ち上がったりとか、
Wifiのネットワークを切り替えるとか、VPNを上げたり落としたりとか最近のネット環境は非常にダイナミック。
そのたびにハングするようなアプリではいけない。
自分はどうすればいいのか知らんが。
0561デフォルトの名無しさん
2005/08/09(火) 20:06:17じゃないとサスペンドした後、リジュームしたら別のネットワークだった、
こういう事態に全く対応できない。
0562デフォルトの名無しさん
2005/08/10(水) 20:40:080563デフォルトの名無しさん
2005/08/11(木) 01:04:41Content-Typeのmultipartの副型である mixed と related に関してです。
一応、自分で調べた限りでは
mixedは、各パートが独立している。(RFC 2046)
relatedは、複数のパートの内、あるパートから他のパートを参照している。(RFC 2387)
という特徴があることがわかりました。
しかし、色々と調べているうちに下記の資料を見つけて
混乱しています。
ttp://www.umin.ac.jp/http-man/
上記の資料(日本語)の4.2.1.1で
「"multipart/mixed"メディアタイプは、最初のボディーパートが同時に送られる
他のボディーパートへの参照を含む場合に使用される。」とあります。
これでは、relatedと同じようなことを意味していて
両者の違いが分からなくなってしまいました。
そこで、質問なのですが上記の資料は、どのようなものなのでしょうか?
何となく RFC 1945 の元になっているような感じがするのですが・・・
また、mixed と related の明確な違いを教えてください。
0564デフォルトの名無しさん
2005/08/11(木) 03:34:40> そこで、質問なのですが上記の資料は、どのようなものなのでしょうか?
古い。RFCの予稿。>>3で最新を参照せよ。
> mixedは、各パートが独立している。(RFC 2046)
> relatedは、複数のパートの内、あるパートから他のパートを参照している。(RFC 2387)
昔はmixedとContent-Location:などで"related"相当を記述。
その後relatedが出来た。
http://www.ietf.org/rfc/rfc-index.txtの「Updated by」を見て最新のものを。
「Obsoleted by」なものを信じてはいけない。
0565デフォルトの名無しさん
2005/08/11(木) 07:32:33助かります。
実は、RFCに関しては、存在自体は知っていましたが
詳細は知らないため、どう見ていいかもわからず途方にくれてました。
ありがとうございました。
0566デフォルトの名無しさん
2005/08/11(木) 11:38:57ひさしぶりにRFC-JPのサイトを覗いて見たら完全に死んでるのね。
0567デフォルトの名無しさん
2005/08/12(金) 00:58:19ACE_ThreadとACE_SOCKについて探しているのですが、いまいちよくわかりません。
0568デフォルトの名無しさん
2005/08/12(金) 09:16:16サーバが死んだのかと思った
0569デフォルトの名無しさん
2005/08/12(金) 09:58:47>>567
本家のページと書籍。
0570デフォルトの名無しさん
2005/08/12(金) 14:56:44shutdown()とは、一体何をしているんでしょうか?
send()したあと、すぐにclosesocket()したら、
送信先にデータが届く前に切断されてしまって、
shutdown()を挟んでやるだけでちゃんと送信されるようになったのですが。
0571デフォルトの名無しさん
2005/08/12(金) 15:28:39↓
shutdown(SD_SEND);
↓
recv()でバッファ空まで受信
↓
shutdown(SD_RECIEVE)
↓
closesocket()
だっけか。ちゃんとした手順は。
0572デフォルトの名無しさん
2005/08/12(金) 17:38:56あなたの書いた通りのこと。
その他にはFINの処理。
http://www5d.biglobe.ne.jp/~stssk/rfc793j.html
0573570
2005/08/12(金) 17:54:48shutdown()ってブロッキングソケットに対して呼び出したらブロッキングを起こしますか?
MSDNだと、FD_CLOSEが来るまで待つとなっていて、
ブロッキングソケットの場合が書いてないような。
0574デフォルトの名無しさん
2005/08/12(金) 18:04:19TCPスタックの仕事です。
つーか殆んど全てのAPIで"CLOSED"になった瞬間を知るのが困難。
0575570
2005/08/12(金) 18:18:45すると、ソケットプログラマにとっては、
インターネットのTCPソケットで、shutdownをSD_SENDで呼び出したら、
すぐにclosesocketしようがデータは必ず送信されると考えていいんですか?
もちろん、ハード上の障害(LANケーブルが引っこ抜かれたとか)は考えない場合。
0576デフォルトの名無しさん
2005/08/12(金) 18:19:490577デフォルトの名無しさん
2005/08/12(金) 23:03:18参考になるサイトはありますでしょうか?
0578デフォルトの名無しさん
2005/08/12(金) 23:08:550579デフォルトの名無しさん
2005/08/13(土) 02:04:44画像掲示版等で画像をダウンロードしようとすると
ENVが設定されてないのか、通知しろっていって来るんですけど
USER_AGENT以外に何を通知すればいいんですかね?
0580デフォルトの名無しさん
2005/08/13(土) 07:10:53IE の通信を横取り丸とかでダンプしてその HTTP ヘッダ類をそのままパクれば
いんじゃね?Cookie も必要になるかもしれんが、そのへんは自分でがんがれ。
0581デフォルトの名無しさん
2005/08/13(土) 07:39:24> ENVが設定されてないのか、通知しろっていって来るんですけど
メッセージをそのまま書きなよ。
Referer: 辺りだと思うけども。
>>580
Etherealがいいね。
0582デフォルトの名無しさん
2005/08/13(土) 20:43:07どんなプログラムを作ってるの?皆さん。
0583デフォルトの名無しさん
2005/08/13(土) 21:49:580584デフォルトの名無しさん
2005/08/13(土) 23:43:080585デフォルトの名無しさん
2005/08/13(土) 23:53:430586デフォルトの名無しさん
2005/08/14(日) 00:06:16思ったことを素直に書いてひねりを入れるのを忘れちゃったよ
0587デフォルトの名無しさん
2005/08/14(日) 01:53:10PC-αのIRCクライアントが送受信した文字列をPC-βのサーバプログラムが
間接的に受信・解析し、特定文字列の場合は指定された動作をする・・・という処理を
行わせたいと思います。
つまり、ローカルネットワーク上を流れる特定ポート(IRCなら6667など)を監視し、
常にパケットを間接受信するパケットキャプチャのような処理を行わせたいです。
可能でしょうか?
動作OSはWindows2000、言語はVC++です
0588デフォルトの名無しさん
2005/08/14(日) 03:10:39あなたしだいですが。
かんばってください♪
0589デフォルトの名無しさん
2005/08/17(水) 17:20:11_beginthread()で作ったスレッドが止まったままなんですが。
動かす方法は有りませんか
0590579
2005/08/17(水) 19:02:19ありがとうございます
Windowsじゃないので、IEからパクってくることができません
自分のブラウザのENVを見ると、Referer, Agent, 程度しか設定していないにもかかわらず
それを送り込んでも、ENVを設定しろといわれます
何か一般的でないENVで振り分けしている場合などあるのでしょうか?
0591デフォルトの名無しさん
2005/08/18(木) 03:59:27調べていたら、パケットキャプチャ、パケットダンプと2つの言葉が出てきて、どちらがどう違うのかもよくわからない状況なのですが…
過去ログにはwinsock2.2を使うといい、というようなことが書いてあったのですが。
また、パケットを調べるソフト、というのは簡単なサーバとのやり取りをするプログラムと比べた場合
作成するのは簡単な部類に入るのでしょうか。よろしおくおねがいします。
0592デフォルトの名無しさん
2005/08/18(木) 09:30:38http://homepage2.nifty.com/spw/tips/PacketDump.html
0593デフォルトの名無しさん
2005/08/19(金) 21:12:25winpcap使ったほうが簡単
0594デフォルトの名無しさん
2005/08/19(金) 21:13:42OSはwindowsXPです。
0595デフォルトの名無しさん
2005/08/19(金) 21:22:270596デフォルトの名無しさん
2005/08/19(金) 23:04:480597デフォルトの名無しさん
2005/08/20(土) 11:16:12ノードにデータを送りますが、自分にも帰ってきますか?
0598デフォルトの名無しさん
2005/08/20(土) 11:36:270599デフォルトの名無しさん
2005/08/20(土) 12:36:050600デフォルトの名無しさん
2005/08/20(土) 12:49:200601デフォルトの名無しさん
2005/08/20(土) 19:38:500602デフォルトの名無しさん
2005/08/21(日) 06:27:42それともタイムアウトだったのか、DNSを直接喋らずに(gethostbynameで)
判別することはできますか?
0603デフォルトの名無しさん
2005/08/21(日) 07:18:140604デフォルトの名無しさん
2005/08/21(日) 19:07:18ここのすれのひとで、CCNAとかを持ってるって方はおられますでしょうか?
0605デフォルトの名無しさん
2005/08/21(日) 22:08:420606デフォルトの名無しさん
2005/08/22(月) 02:37:520607デフォルトの名無しさん
2005/08/23(火) 19:50:460608デフォルトの名無しさん
2005/08/23(火) 20:00:12ウインドウメッセージで飛んでくるか、
EventオブジェクトがSetされるか。
0609デフォルトの名無しさん
2005/08/24(水) 16:23:58ネットワーク環境によってレスポンスがHTTP1.0で返って来たり
HTTP1.1で返って来たりするのですがなぜでしょうか?
0610デフォルトの名無しさん
2005/08/25(木) 09:50:090611デフォルトの名無しさん
2005/08/25(木) 10:05:250612デフォルトの名無しさん
2005/08/27(土) 21:49:06ローカルのEXE立ち上げてゲームを起動したり、
ゲームをバージョンアップしたり・・・みたいなことって
どういう技術でやってるんでしょうか
最初にホムペ上からハンゲームコントローラみたいな
EXEをインストールしたら、その後はブラウザ上から
直接ゲームを起動できるようになるみたいなんですけど
0613デフォルトの名無しさん
2005/08/27(土) 22:08:45悪恥部X
でもってスレ違いだ
0614デフォルトの名無しさん
2005/08/28(日) 00:22:20と仮想IPを
持つプログラムつくりたいと思っています。
それで簡易クラスタをサーバで構成できれば
面白いと思ってます。
XP上のeclipse+CDTで作りたいのですが
仮想コンピュータ名を作るにはどうしたらいいんでしょうか?
0615デフォルトの名無しさん
2005/08/28(日) 01:44:15すまそ
でもってありがとう
0616デフォルトの名無しさん
2005/08/28(日) 23:02:170617デフォルトの名無しさん
2005/08/28(日) 23:19:49関係ねーじゃん
0618デフォルトの名無しさん
2005/08/29(月) 19:20:430619デフォルトの名無しさん
2005/08/30(火) 19:02:28この本のサンプルを試しているのですが
0x00が途中に混じるデータを送信するにはどうすれば
いいのでしょうかまる二日かけましたが混じっていないデータしか
送信できません。
0620デフォルトの名無しさん
2005/08/30(火) 19:05:46コードがないとその本を持っている人しか答えられないね
普通に考えると文字列処理関数('\0'を終端とする)がどこかにあるんでしょ
0621デフォルトの名無しさん
2005/08/31(水) 17:34:330622
2005/09/02(金) 08:09:39文字列とデータの違いを知ることですね。
文字列の定義を検索してくれ。
0623デフォルトの名無しさん
2005/09/02(金) 09:09:120624デフォルトの名無しさん
2005/09/02(金) 13:25:41用語の使い方が頭悪いだけですよ
バイナリデータといいたかっただけ
言いたい事は察してあげてください
0625デフォルトの名無しさん
2005/09/02(金) 13:26:140626デフォルトの名無しさん
2005/09/02(金) 14:25:10「読み込める状態にあるか、書き込める状態にあるか、エラー」を"判別してくれる"
って解説してるところと、
「読み込める状態、書き込める状態、エラー」に"なるまで待つ"
って解説してるところがあるんだけど、どっちですか?
0627デフォルトの名無しさん
2005/09/02(金) 14:38:470628デフォルトの名無しさん
2005/09/02(金) 16:28:36タイムアウトを設定できるからどちらも正解。
Windowsでなければ、pollかkqueueがいいけどね。
0629デフォルトの名無しさん
2005/09/02(金) 21:53:51ありがとうございました。
0630デフォルトの名無しさん
2005/09/03(土) 13:04:44int sock;
if((sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0)
errorfunc();
//以下に色々な処理が続く
//エラーを返す可能性のある関数が存在。
エラーを返した関数があったらsocket()で作ったソケットsockを正しく消去したいんですが、
どうしたらよいのでしょうか。(connect()はまだ行っていない, accept()は行わない)
close(sock);
sock = 0;
こんなもんでいいですか?
それとも何の処理もいりませんか?
0631デフォルトの名無しさん
2005/09/03(土) 13:19:55> どうしたらよいのでしょうか。(connect()はまだ行っていない, accept()は行わない)
ならば、
> close(sock);
だけでOK。変数sockの値は関係ないので、
> sock = 0;
は不要。
あなたは「ハンドル」という概念を理解してない。
http://yougo.ascii24.com/gh/15/001551.html
ハンドルはオブジェクトにつけられた名前であってオブジェクトそのものではない。
socket()の帰り値はソケットハンドル。
0632デフォルトの名無しさん
2005/09/03(土) 13:50:01なんでよりにもよってpollを薦めるのですか?
理由を教えてください
0633デフォルトの名無しさん
2005/09/03(土) 14:09:20>>4の
C10K ヘヴィーロードサーバ
http://www.kegel.com/c10k.html
を参照して。
0634630
2005/09/03(土) 14:12:14変数を使って通信しているわけではないのですね。
ということは、
send(sock, buf, sizeof(buf), 0);
も
int tmp;
tmp = sock;
send(tmp, buf, sizeof(buf), 0);
も同じ意味なんですね。
勉強になりました。
0635デフォルトの名無しさん
2005/09/03(土) 14:46:130636デフォルトの名無しさん
2005/09/03(土) 15:12:310にする必要がある実装はむしろ普通にある。
0637デフォルトの名無しさん
2005/09/03(土) 15:15:190638デフォルトの名無しさん
2005/09/03(土) 15:20:320ではなく「INVALID_SOCKETをセットしておく実装」に訂正
0639デフォルトの名無しさん
2005/09/03(土) 16:19:06勉強の過程で、猫でもわかるのサイトを見ながらftpクライアントを制作しているのですが、
第218章「FTPサーバのカレントディレクトリ表示」のところで、どうしてもカレントディレクトリから
サブディレクトリの中に入って中身を表示させることができません。
作ったファイルをうpしますのでご指摘よろしくお願いします。
猫でもわかるプログラミング http://www.kumei.ne.jp/c_lang/sdk3/sdk_218.htm
うpファイル http://gamdev.org/up/img/3126.lzh
開発環境
OS WindowsXP
言語 VC++
ソフト Visual Studio.Net 2003
0640デフォルトの名無しさん
2005/09/03(土) 16:50:37ファイルディスクリプタ全体のうち、知りたい割合が少ない
なら poll() の方が効率がいいが、ほとんどを知りたいなら
実は select() の方が効率がいい。
poll() を勧めるなら、FD_SETSIZE に依存しないコードを
書くのが楽とかそういう理由を挙げた方がいい。
まあ移植性を気にしないなら、epoll() や kqueue() 使った
方が性能はいいけどね。
0641デフォルトの名無しさん
2005/09/03(土) 18:03:220642デフォルトの名無しさん
2005/09/03(土) 18:06:120643デフォルトの名無しさん
2005/09/03(土) 18:33:08> 0にする必要がある実装はむしろ普通にある。
具体名を。
0644デフォルトの名無しさん
2005/09/03(土) 18:53:08ま、かわいそうな人みたいだから、スルーしる
0645デフォルトの名無しさん
2005/09/03(土) 19:46:020646デフォルトの名無しさん
2005/09/03(土) 20:45:400647デフォルトの名無しさん
2005/09/03(土) 20:51:32Windows上でSocket API使いたいんなら他に選択肢はない
諦めろ
0648デフォルトの名無しさん
2005/09/04(日) 13:54:370649デフォルトの名無しさん
2005/09/04(日) 14:38:57Win32はもう整備されてないから止めとけ
0650デフォルトの名無しさん
2005/09/04(日) 14:57:480651デフォルトの名無しさん
2005/09/04(日) 15:22:18他のソケットで同じアドレスをbindできなくなるじゃないですか。
そこで、closesocketをしてから、bindやってるんですが、
テストで、close→Scoket→bind→close→Scoket→bind
って、連続でやってみたんですが、2回目のソケット作製で、エラーになるんですよ。
bindで、「アドレスが使用されてます」って。
そこで、原因を確かめるために、
bindするアドレスから、それに割り当てられているソケットを取得する方法って無いですかね
0652デフォルトの名無しさん
2005/09/04(日) 15:26:12TIME_WAIT。つかFAQなので詳細は >>1 に出てる
http://www.kt.rim.or.jp/~ksk/sock-faq/indexj.html
を参照。
解決するにはbind()の前にsetsockopt()でSO_REUSEADDRを指定しろ。
0653デフォルトの名無しさん
2005/09/04(日) 15:27:220654デフォルトの名無しさん
2005/09/04(日) 15:53:13素早いですね〜。ありがとうございます。
どうやら、bindしたソケットは解放しないで使用してみることにしました。
SO_REUSEADDRについては、もともと同じアドレスを2つのソケットにbindできることを許可するのは、
後々バグの原因にもなりかねないと思うので、やめておきます。
getsockname()については、アドレスからソケットを取得するものを考えてました。
ちなみに、bindでエラーなったことについては、WSACleanupをやっても解消されませんでした。
ついでですが、もともとソケットを解放してまたbindをやる必要があったのは、
ソケットを解放しないでいると、acceptが不要になったときにも、
クライアントの接続を受け入れる何かのバッファ処理がされてると思ったからで、
その処理が無駄になるので、それをさせないためです。
そんで、一旦ソケットをcloseしてました。
そこで、ソケットを解放しないでいて、クライアントの接続要求を破棄する方法ってあります?
非同期処理なので、acceptを再開したときには、
それ以前に接続要求があったものまで検出してしまいそうで。
0655デフォルトの名無しさん
2005/09/04(日) 16:32:58なんだか知らんが実行中に口を開いたり閉じたりせにゃならんのか?
SO_REUSEADDRははっきり言ってサーバ系ではお約束と言ってもいいんだが、
どうしてもそうしたくないんなら、accept()したsocketを単にclose()
すればいいんじゃねえの?
0656デフォルトの名無しさん
2005/09/04(日) 17:03:16そのエラーが出てるときにコマンドラインで
netstat
ってやってみ、ソケットの状態が表示されるから。
listen()がレスに出てこないのが気になるんだけど、
listen(), bind()の意味を理解してる?
0657デフォルトの名無しさん
2005/09/04(日) 17:27:02>すればいいんじゃねえの?
それやると、次にbindするまでに30〜120秒待機する必要があるみたいじゃないですか。
ttp://www.kt.rim.or.jp/~ksk/wskfaq-ja/articles/debugging-tcp.html
0658デフォルトの名無しさん
2005/09/04(日) 17:52:030659デフォルトの名無しさん
2005/09/04(日) 18:04:17自分で調べるんで、もういいです。
0660デフォルトの名無しさん
2005/09/04(日) 18:06:35誰に言ってるの?
0661デフォルトの名無しさん
2005/09/04(日) 18:14:160662デフォルトの名無しさん
2005/09/04(日) 18:28:22違う違う。
「次にbind」とか言ってるってことはclose()するのが前提なんだろうが、
どーしてもSO_REUSEADDR使いたく無いんなら、listening socketはclose()せずに、
口を閉じなきゃいかん間はaccept()したsocketをclose()しろと言ってるの。
0663デフォルトの名無しさん
2005/09/04(日) 21:03:17可変長のデータサイズが書いてあるのですが、ヘッダがおかしかった
場合は、可変長のデータの部分を無視して次の固定長のヘッダを受信したいのですが、
可変長の部分のデータを破棄する方法はどんなのがありますでしょうか。
いったん可変長のデータを受け取るというのが簡単そうですが、無駄なような気もします。
もっと効率のいい方法はありますか?
0664デフォルトの名無しさん
2005/09/04(日) 21:09:33これって、クライアントと接続が完了したソケットを閉じるという意味ですよね。
それをやっても、acceptを実行するソケットは、バックログに要求を入れ続けるでほ
0665デフォルトの名無しさん
2005/09/04(日) 21:17:220666デフォルトの名無しさん
2005/09/04(日) 21:23:54だーかーらー、ならSO_REUSEADDR使えって。
SO_REUSEADDR使うか、listening socketをclose()しないか。
それ以外の解は無いの。
0667デフォルトの名無しさん
2005/09/04(日) 23:38:550668デフォルトの名無しさん
2005/09/04(日) 23:41:08ナニが考えられる? 物理的な障害は無いという前提で
思いつくのは
・writeよりcloseが先に届いた
くらいなんだけど、これって普通にあること?
0669デフォルトの名無しさん
2005/09/04(日) 23:53:090670デフォルトの名無しさん
2005/09/04(日) 23:58:18> ・writeよりcloseが先に届いた
ない
TCP がちゃんと管理してくれる
0671デフォルトの名無しさん
2005/09/05(月) 00:02:01「ヘッダがおかしかった」ことをどうやって判断するのかそれだけだと
わからんが、データに信頼性が置けないってことは、TCPではないのかな?
普通はNAKのようなものを返して再送させるように設計するんじゃないの。
0672デフォルトの名無しさん
2005/09/05(月) 00:09:22私の勘違いです。
UDPでヘッダを送信してTCPでデータ部を受信と考えていましたが、
両方ともTCPでやればいいっすね。
あやふやな知識で質問したので迷惑をかけてしまいました。
失礼しました。
0673デフォルトの名無しさん
2005/09/05(月) 01:53:55closeのときRSTを出すようにいじっててもそのへんは大丈夫?
0674デフォルトの名無しさん
2005/09/05(月) 02:26:120675674
2005/09/05(月) 02:27:23「TCP シーケンス番号」でぐぐってみれば?
0676デフォルトの名無しさん
2005/09/05(月) 02:52:020677デフォルトの名無しさん
2005/09/05(月) 10:43:33> SO_REUSEADDRについては、もともと同じアドレスを2つのソケットにbindできることを許可するのは、
> 後々バグの原因にもなりかねないと思うので、やめておきます。
SO_REUSEADDRの仕様を誤解しているし、
そもそも簡潔にして十分な>>652のレスを早合点している。
TIME_WAITとSO_REUSEADDRの関係を自分で理解しろ。
>>659が態度悪く、もう誰もここには書かないから。
0678デフォルトの名無しさん
2005/09/05(月) 10:44:38closeはFINだろ?
0679デフォルトの名無しさん
2005/09/05(月) 13:56:54なんでこの一人だけがムキになてんの?
659が偽者なのは660が暗に示してるのにw。
てか、同じアドレスが2つのソケットに割り当てられたら、
両方が同じデータを確実に受信するのかな。
0680デフォルトの名無しさん
2005/09/05(月) 14:00:51ここにひとつのゲームがある。
このゲームは既存に存在するゲームへのアンチテーゼ。
何から何まで説明され、ユーザーが考える余地のないゲームが
多く存在する昨今、今回は「逆にまったく説明しない」または
「教えようとしない」コンセプトで作ってある。
なんだコレ?で終わる人間も居るだろうし
意味を探る人間も居る。
何かを感じないのも、何かを感じるのもどっちも間違いではなく、正解でもない。
枷を嵌め、尚もその枷を越える「チカラ」を手に入れるべき人類。
それは創作のみならず。
人類の飛翔は今の腐った思考で今を生きている、漠然と生きている
そんな人間達に一喝を入れるべきがあたしの作る「ゲーム」だ。
上記に何も感じなければ間違いではないと言ってるが
個人的には「この意味」を理解できない奴は何を作っても無駄だ。
あたしが目指す「ゲームの最終地点」は
「プログラム上のみならず現実世界ですらそのゲームを髣髴させる事」にあり。
世界を超えるデバイスとなるゲームを作る。
それがあたしの希望であり、全ての人類への警鐘となる。
目覚めよ、人間たち
0681デフォルトの名無しさん
2005/09/06(火) 00:33:50毎度毎度 age て必死だな。自分で調べれば?
0682デフォルトの名無しさん
2005/09/06(火) 00:45:150683デフォルトの名無しさん
2005/09/06(火) 02:39:36大体動く
中の人(ジャバ子)がすんげー頑張ってんだよ
ちょっとフラフラするのは大目に見てやってくれ
0684デフォルトの名無しさん
2005/09/06(火) 21:32:470685デフォルトの名無しさん
2005/09/06(火) 22:07:29GUI は?
0686デフォルトの名無しさん
2005/09/06(火) 22:42:580687デフォルトの名無しさん
2005/09/06(火) 22:55:390688デフォルトの名無しさん
2005/09/06(火) 23:00:280689デフォルトの名無しさん
2005/09/06(火) 23:06:41しかし、socket が何処でも動きそうって、そりゃ当然だろ...
0690デフォルトの名無しさん
2005/09/06(火) 23:18:090691デフォルトの名無しさん
2005/09/06(火) 23:24:56ありがとうございます。
やっぱり完全に同じようには動かないんですね。
0692デフォルトの名無しさん
2005/09/07(水) 00:18:090693デフォルトの名無しさん
2005/09/07(水) 03:14:53じゃば子を大切にな
0694デフォルトの名無しさん
2005/09/07(水) 20:14:17>telnet [ネームサーバー名] 53
とやってコマンドを打つとかでは無理ですか?
0695デフォルトの名無しさん
2005/09/07(水) 20:20:40無理じゃないお
DNSプロトコルの勉強?
0696デフォルトの名無しさん
2005/09/07(水) 20:23:01バイナリなプロトコルだから手打ちは相当面倒だとは思うがね
0697デフォルトの名無しさん
2005/09/07(水) 20:23:04>>4のX68
0698デフォルトの名無しさん
2005/09/07(水) 20:38:430699デフォルトの名無しさん
2005/09/07(水) 20:43:090700デフォルトの名無しさん
2005/09/08(木) 01:35:370701デフォルトの名無しさん
2005/09/08(木) 03:50:19実際ゾーン転送じゃなくてもTCPでリトライしなければならないことはありうる
けどテキスト指向じゃないからどのみちtelnetで取るのは難しいな
0702デフォルトの名無しさん
2005/09/08(木) 09:34:440703デフォルトの名無しさん
2005/09/08(木) 21:50:000704デフォルトの名無しさん
2005/09/08(木) 21:56:240705デフォルトの名無しさん
2005/09/08(木) 22:02:09どうもこうもないよ!
作ってみて、ウケたらRFCに載せるのさ!
というか便利だろ。便利だと思う。便利なんじゃないかな。
0706デフォルトの名無しさん
2005/09/08(木) 22:25:430707デフォルトの名無しさん
2005/09/10(土) 02:12:580708デフォルトの名無しさん
2005/09/10(土) 11:08:540709デフォルトの名無しさん
2005/09/10(土) 12:20:040710デフォルトの名無しさん
2005/09/10(土) 12:22:550711デフォルトの名無しさん
2005/09/10(土) 13:00:06環境はx86系アーキテクチャで、同一PC上でサーバとクライアントの
プログラムを動作させ、クライアントプログラムから整数値を送るという
簡単なものなのです。
本などには、送信するときにデータはアドレス昇順で送られると
書かれており、リトルエンディアンのx86系だと逆になると思い、
とりあえず送信させてサーバ側で値を表示してみたところ、
送信側と同じ値が出ました。ビッグエンディアンのプロセッサの
ことを考慮し、送信する前にhtonlなどの関数で変換すると
書かれているのですが、サーバもクライアントも同一プロセッサであれば
この関数で変換しなくてもよいということなのでしょうか?
0712デフォルトの名無しさん
2005/09/10(土) 13:02:29気になるなら変換かけたら?
0713デフォルトの名無しさん
2005/09/10(土) 13:23:03変換せずに送った場合、一応正しく表示されました。
クライアント側から送信する際にhtonlで変換して、サーバ側で受信した
際にntohlで変換した場合も正しく表示されました。
クライアント側がリトルエンディアンで、0x1234というデータを
メモリに格納し、ビッグエンディアンのサーバ側へ送信した場合、
0x1234というデータは、どこでどのように変化しているのでしょうか?
リトルエンディアンで格納したときに 34 12 となり、これを送信すると
34、12 の順に送られ、受信側では34 12 として格納される、
という流れになるのでしょうか?
0714デフォルトの名無しさん
2005/09/10(土) 13:40:10受信側で1バイトづつ読んでみればわかるだろ?
0715デフォルトの名無しさん
2005/09/10(土) 13:46:36アーキテクチャがもともとネットワークバイトオーダーと同じだった
場合は、htonl()などはno-opになるから、「余分な手間ではないか」
といったことを気にする必要は無い。
> サーバもクライアントも同一プロセッサであれば
などという仮定を入れずに、素直にhtonl()使っとけってこった。
まあ気にすべきはバイトオーダーだけではないがな。
0716デフォルトの名無しさん
2005/09/10(土) 14:09:31わかりました、とりあえず1バイトずつ読んで送信順序を確かめてみます。
ありがとうございました。
0717716
2005/09/10(土) 15:40:32変換関数を使うかどうかについても納得しました。ありがとうございます。
0718名無しさん@そうだ選挙に行こう
2005/09/10(土) 22:19:15インターネットを介して、マルチキャストってできる?
0719名無しさん@そうだ選挙に行こう
2005/09/10(土) 22:21:41インターネットが何を指すかが問題だが
マルチキャストが行って帰ってくる所までできる
0720名無しさん@そうだ選挙に行こう
2005/09/10(土) 22:26:210721名無しさん@そうだ選挙に行こう
2005/09/10(土) 22:33:29インターネットは、
例えば、YahooBBを使ってる北海道のAさんのお宅と、
Bブレッツを使ってる九州のBさんのお宅と、
ぷららを使ってる本州のCさんのお宅とで、
パケットを送受信できる環境。
マルチキャストは、回線を有効的に使うらしい。
例えば、Aさんが、BさんとCさんにパケットを送るとき、
本州までは同じ回線で1つ分のパケットがいって、
本州からBさんだけに送ることになるらしい。トラフィックが減少する。
0722名無しさん@そうだ選挙に行こう
2005/09/10(土) 23:31:07> インターネットを介して、マルチキャストってできる?
出来るところしか出来ません。
> マルチキャストって、ルータが対応してないとダメみたいだけど、
途中のルータが全てマルチキャストに対応していないといけません。
0723名無しさん@そうだ選挙に行こう
2005/09/10(土) 23:36:17国内でできる範囲を述べよ。
0724名無しさん@そうだ選挙に行こう
2005/09/11(日) 02:05:42途中のルータでマルチキャストに対応してないところってある?
0725名無しさん@そうだ選挙に行こう
2005/09/11(日) 02:38:05対応しているところの方が珍しいだろ。
確かIIJはマルチキャスト対応のサービスメニューを用意していたっけかな。
マルチキャストに対応しているネットワーク事業者が大多数なら、
ストリーミング系とか、MMORPGとかでもっと活用しているって。
0726名無しさん@そうだ選挙に行こう
2005/09/11(日) 12:47:180727名無しさん@そうだ選挙に行こう
2005/09/11(日) 15:04:48SSHとRFCでググると情報がたくさん手に入ると思うよ
0728名無しさん@そうだ選挙に行こう
2005/09/11(日) 16:14:15openssl, puttyのソース、TeraTermのssh plugin
0729デフォルトの名無しさん
2005/09/12(月) 23:09:54マルチキャストで送られたパケットを、Windowsアプリケーションで受信
した場合に、送られたパケットの送信先IPを知るにはどうすればよいの
でしょうか?
WinSockを使って実装したいのですが、方法が分かりません。
RAW_SOCKを使ってIPヘッダを取得することを試みましたが、下記の
現象が起きてしまいます。
�@socket(sock, SOCK_RAW, IPPROTO_IP)でソケットをオープンすると、
UDPデータを全く受信しません。
�Asocket(sock, SOCK_RAW, IPPROTO_UDP)でソケットをオープンす
ると、受信データにIPヘッダが入らず、UDPのペイロードから受信し
てしまいます(SOCK_DGRAMと同じ)。
どなたか分かる方教えてください。
0730デフォルトの名無しさん
2005/09/12(月) 23:14:350731デフォルトの名無しさん
2005/09/12(月) 23:25:221つのソケットに複数のマルチキャストアドレスを登録しています。
受信したときに、どのマルチキャストグループ宛のデータを受信
したのか知りたいのです。
0732デフォルトの名無しさん
2005/09/12(月) 23:49:47そのマルチキャストって、インターネットを介してるの?
それともLAN内?
0733デフォルトの名無しさん
2005/09/12(月) 23:55:30LAN内です
0734デフォルトの名無しさん
2005/09/12(月) 23:56:19すみません。間違ってました。
> �@socket(sock, SOCK_RAW, IPPROTO_IP)
socket(AF_INET, SOCK_RAW, IPPROTO_IP)
> �Asocket(sock, SOCK_RAW, IPPROTO_UDP)
socket(AF_INET, SOCK_RAW, IPPROTO_UDP)
0735デフォルトの名無しさん
2005/09/13(火) 00:03:29試さずに答えるが、�AでsetsockoptでIP_HDRINCL設定したらどうよ?
しかし"ソケット"は、接続の"端点"を表す抽象化だから、
# あちらはどこにあるか分からないがちゃんと(一対一で)つながっている
本当は別のソケットにするのが良いと思うよ。
0736デフォルトの名無しさん
2005/09/13(火) 00:35:53> 試さずに答えるが、�AでsetsockoptでIP_HDRINCL設定したらどうよ?
実はそれも試してみたんですが、駄目でした。
結果は�Aと同じで、UDPのペイロードから受信します。
本来、RAWソケットの説明を見ると下記のように書かれているので、
IP_HDRINCLを設定しなくてもIPヘッダが含まれるはずなんですが。
「IPv4 レイヤは、扱っているソケットで IP_HDRINCL ソケットオプション
が有効になっていなければ、パケットを送信するときに IP ヘッダを生
成する。 IP_HDRINCL オプションが有効になっているときは、パケット
には IP ヘッダが含まれていなければならない。受信時には、 IP ヘッ
ダは常にパケットに含まれている。」
> 本当は別のソケットにするのが良いと思うよ。
そうしたいんですが、1つのソケットに200通り近いマルチキャスト
アドレスを設定しているため、ソケットだらけになってしまいます。
そもそも、同時に200通り近いマルチキャストを1つの端末で受信
しようとしているのが間違いでしょうか?
0737デフォルトの名無しさん
2005/09/13(火) 00:58:45それならraw socketは諦めて、Winsock2 LSPで。
0738デフォルトの名無しさん
2005/09/14(水) 04:23:34ドライバを作るってことですか?
0740デフォルトの名無しさん
2005/09/14(水) 04:55:16SOCKET sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
でソケットを生成した後、ソケット型の変数sockから接続先のIPアドレスやポート番号
などを知ることは出来るのですか?
0741740
2005/09/14(水) 04:59:07connectした後です。
別の関数にsockだけを渡しているのですが、その関数内でIPアドレスを表示
したいのですが・・・。
0742デフォルトの名無しさん
2005/09/14(水) 05:12:170743740
2005/09/14(水) 05:30:43その通りなんですが・・・。
やっぱりソケット型の変数だけから通信先のIPアドレスを取得するのは無理
なんですか。。
0744デフォルトの名無しさん
2005/09/14(水) 07:37:07俺は使ったことないけどね
0745デフォルトの名無しさん
2005/09/14(水) 12:30:24パケットモニタリングするツールを作成しているのですが。
どうやらパケット落ちしてしまっているんです。
対応策を色々調べているのですが、受信したデータを溜め込む
バッファサイズを大きくしてみようと思いまして色々調べたのですが
WSAIoctrlで操作ができるようなのですがその先が全くわかりません。
もしかしたら方法も見当違いなのかもしれませんが、もしご存知でしたら
ご教授願えないでしょうか、お願い致します。
C++ sp6
Windows XP
0746デフォルトの名無しさん
2005/09/14(水) 12:43:20getsockname()
このスレにでてきているだろう。
検索くらいしろ
0747デフォルトの名無しさん
2005/09/14(水) 21:11:27getpeernameは、ソケットの相手側のsockaddrを取る。
0749デフォルトの名無しさん
2005/09/14(水) 22:33:14Cは嫌いなんで、perlかjavaskuriptでお願いします。
0750 ◆CmEW8w8Y6I
2005/09/14(水) 22:33:520751デフォルトの名無しさん
2005/09/14(水) 22:40:150752デフォルトの名無しさん
2005/09/14(水) 23:58:36Winsock2 LSPについてkwsk
0753デフォルトの名無しさん
2005/09/15(木) 00:57:08ウォーターパワーでググれ
0754デフォルトの名無しさん
2005/09/15(木) 11:18:140755デフォルトの名無しさん
2005/09/15(木) 19:11:15リバースプロクシのむこうにいるサーバーのURLを抜いて何が楽しいのやら。
標準的な手法は無い。とりあえず通信内容をモニターしてみろ。
それっぽい項目が無いなら無理だろうな。
0756デフォルトの名無しさん
2005/09/16(金) 09:54:180757デフォルトの名無しさん
2005/09/16(金) 10:30:090758デフォルトの名無しさん
2005/09/16(金) 20:30:50WSACleanup();
socket();
bind();
listen();
accept(); (クライアントはconnect();)
まで成功して簡単な文字列をやりとりする
プログラムを作成しました、
次にKeepAliveの時間を
レジストリを使わずに指定したく調べたら
IOコントロールというのを使うと見たので
調べたところ
Ioctl()
ioctlsocket()
setsockopt()
このあたりが絡んでいるようなのですが
どの関数を使えばいいのかわかりません、
詳しい方おられたら教えてもらえないでしょうか、
また、IOコントロールについても調べたのですがいまいち
理解できません、こちらも詳しい方おられたら
一言でまとめていただけないでしょうか。
/*-------------------
windowsXP HOMEEDITION
VC6++ サービスパック6
winsock2.2 です。
--------------------*/
0759デフォルトの名無しさん
2005/09/16(金) 20:49:290760729
2005/09/18(日) 03:08:16> �Asocket(AF_INET, SOCK_RAW, IPPROTO_UDP)でソケットをオープンす
> ると、受信データにIPヘッダが入らず、UDPのペイロードから受信し
> てしまいます(SOCK_DGRAMと同じ)。
この現象ですが、WindowsXPでは発生しませんでした。
Windows2000とXPのWinSockって違うんですか?
バージョンはどっちも2.2なんですが。
0761デフォルトの名無しさん
2005/09/18(日) 03:30:03ないと思ったほうがいい
0762デフォルトの名無しさん
2005/09/19(月) 08:10:25>> マルチキャストで送られたパケットを、Windowsアプリケーションで受信
>> した場合に、送られたパケットの送信先IPを知るにはどうすればよいの
>> でしょうか?
無理。ソケットの仕様がアホなので、原理的に取得するのは不可能。
これは、マルチキャストだけでなく、ユニキャストでも、UDPでは取得不可能。
>>747
>> getsocknameは、ソケットの自分側のsockaddrを取る。
これで取得できるのは、TCPの場合だけ。UDPでは取得不可能。
このように、ソケットは欠陥だらけなので、使うのをやめておくべき。
どうしても使いたい場合は、ソケットから取得しなくても済む実装方法を普通はとる。
0763デフォルトの名無しさん
2005/09/19(月) 08:40:12UDPでも出来るよ
0764デフォルトの名無しさん
2005/09/19(月) 12:49:26> このように、ソケットは欠陥だらけなので、使うのをやめておくべき。
ワラ
0765デフォルトの名無しさん
2005/09/19(月) 13:03:330766デフォルトの名無しさん
2005/09/19(月) 13:06:280767デフォルトの名無しさん
2005/09/19(月) 13:52:00だったら recvfrom() があるので、socket に欠陥は無いってことになるかな
0768デフォルトの名無しさん
2005/09/19(月) 14:21:19Winsockを直で使うべき。
0769デフォルトの名無しさん
2005/09/19(月) 15:59:15おいおい、recvfrom() では、相手のIPアドレスとポートはわかっても、
どのIPアドレス宛にやってきたのかはわからないぜ。
>>763
UDPでrecv()やrecvfrom()したあとに、getsockname()をしても、
どのIPアドレス宛にやってきたのかはわからないぜ。
0770デフォルトの名無しさん
2005/09/19(月) 16:21:350771デフォルトの名無しさん
2005/09/19(月) 18:17:46と理解していいたのだが、違うケースでも可能なことがあるんですか?
0772デフォルトの名無しさん
2005/09/19(月) 20:47:06この例の場合は違うケースとか関係ないと思う
0773デフォルトの名無しさん
2005/09/19(月) 21:23:320774デフォルトの名無しさん
2005/09/19(月) 21:40:45bindしたときも可能。まあ、bindで指定したパラメタしか
取れないから、意味ないといえば意味ないけど。
0775デフォルトの名無しさん
2005/09/19(月) 22:26:13関連性が無いということです。
0776デフォルトの名無しさん
2005/09/19(月) 22:54:03ではないのですか?
>>774
bind()するのは、getsockname()で取れるこちら側のアドレスでしょう?
0777デフォルトの名無しさん
2005/09/19(月) 23:05:35bindしてるんだから読めて当然だよな
0778デフォルトの名無しさん
2005/09/19(月) 23:22:58本来読めてしかるべき、とも言えるんじゃまいか
0779デフォルトの名無しさん
2005/09/19(月) 23:29:580780デフォルトの名無しさん
2005/09/19(月) 23:36:400781デフォルトの名無しさん
2005/09/19(月) 23:37:270782デフォルトの名無しさん
2005/09/19(月) 23:39:08しかし本来下のレイアーの情報は上のレイアー(アプリケーション)では関知しないというのが
元々の思想ではないのか? UDP/TCPに渡したところでIPヘッダの役割は本来そこで
終わっているわけだから。
0783デフォルトの名無しさん
2005/09/19(月) 23:47:420784デフォルトの名無しさん
2005/09/19(月) 23:50:30でもそれは理想論。そんな夢のような世界ならv6への移行も一瞬だったろうにな。
確かにrecvfromのようなインターフェイスでrecvfromtoみたいな関数が欲しい所だな。
設計でも回避できるけど。
誰かジツリキあるやつIETFとかで提唱してみれ。
0785デフォルトの名無しさん
2005/09/19(月) 23:53:00> そんな夢のような世界ならv6への移行も一瞬だったろうにな。
アホ丸出しだな。
> 誰かジツリキあるやつIETFとかで提唱してみれ。
アホ丸出しだな。
0786デフォルトの名無しさん
2005/09/19(月) 23:58:020787デフォルトの名無しさん
2005/09/20(火) 00:10:56前から思ってたのだが、IPv6で作られたAdvanced Socket API for IPv6 (RFC2292)
のIPv4バージョンがあったら便利だと思う。
0788デフォルトの名無しさん
2005/09/20(火) 00:13:04意味なくね?
0790デフォルトの名無しさん
2005/09/20(火) 00:38:51元の質問はWindowsだからないはずだが。
0791デフォルトの名無しさん
2005/09/20(火) 00:39:390792デフォルトの名無しさん
2005/09/20(火) 00:42:28recfrom()で受けたパケットが、自分の複数あるIPアドレスのどこ宛に届いたか知る方法は?
0793デフォルトの名無しさん
2005/09/20(火) 00:55:320794デフォルトの名無しさん
2005/09/20(火) 12:13:49問題が明確になったね。GJ
で答えは無理
どうしても知りたければ送信データに入れてもらえ!
というかTCPでもわからんよね?
0795デフォルトの名無しさん
2005/09/20(火) 12:49:36TCPならワイルドカードでlisten()していたにせよ、
accept()した後に確定するでしょ
0796デフォルトの名無しさん
2005/09/20(火) 12:51:17ちらっとWinsock2のAPIを眺めてみたのだがWSARecvMsgとIP_PKTINFOで
出来そうに見えるけど違う?
0797デフォルトの名無しさん
2005/09/20(火) 14:05:33出来そうに見えるがXP/2003 Server限定なのが痛いな
0798デフォルトの名無しさん
2005/09/20(火) 15:35:40TCPならコネクション成立後、getsockname()で自分側のIPアドレスもわかる。
UDPだとわからないのはBSD SocketやWinsockの欠陥であり、
それぞれがインタフェースを用意すればよかっただけに過ぎない。
例えば、カーネル内では当然把握している。
それをユーザ(アプリ)へ伝えるインタフェースが不十分なだけ。
0800デフォルトの名無しさん
2005/09/20(火) 17:37:46ここの
http://66.102.7.104/search?q=cache:jKkTd2uYA-EJ:www.rsdn.ru/article/net/keep_alive.xml+%22SIO_KEEPALIVE_VALS%22&hl=ja
WSAIoctlのところを参考にやってみました。
ありがとうございます。
0801デフォルトの名無しさん
2005/09/20(火) 20:46:30> UDPだとわからないのはBSD SocketやWinsockの欠陥であり、
分かるっちゅーの。
・connect()した場合
・pktinfoとrecvmsg() (WinsockはXP/2003 Server以降)
・raw socket (XP SP2以降のWinsockはこれがダメ; LinuxはAF_PACKETがお勧め
・kernelのprotocol layer interfaceを使う
0802デフォルトの名無しさん
2005/09/20(火) 22:19:41recvfrom()で受けたパケットが、自分の複数あるIPアドレスのどこ宛に届いたか知る方法は?
0803デフォルトの名無しさん
2005/09/20(火) 22:41:38>>801
0804デフォルトの名無しさん
2005/09/20(火) 22:50:09OSのversionに依存する2番目と3番目は却下
4番目のkernelのprotocol layer interfaceってのはOS非依存の汎用?
0805デフォルトの名無しさん
2005/09/20(火) 22:57:410806デフォルトの名無しさん
2005/09/20(火) 23:01:30それをソケットの属性として取り出すのが自然だけど
UDPはそうじゃないってだけの話だよな
だからやるとすればrecvmsg()のような形で、受信の「ついでに」
パケットに付随する情報を取り出すような形式を取らざるを得ない、と。
0807デフォルトの名無しさん
2005/09/20(火) 23:02:20別にインターフェースに個別にbindしたらええやん。
0808デフォルトの名無しさん
2005/09/20(火) 23:08:17そのPCのネットワークインタフェースを列挙する「汎用的な」方法を教えてくれ
0809デフォルトの名無しさん
2005/09/20(火) 23:11:46直すべきなのはそこじゃない…
0810デフォルトの名無しさん
2005/09/20(火) 23:27:22厳密にはぐじゃぐじゃ言う香具師もいるかも知らんな。
0811デフォルトの名無しさん
2005/09/20(火) 23:32:20みたいな?
Winsockでもgetaddrinfo()ぐらいは使える、らしいぞ
0812デフォルトの名無しさん
2005/09/20(火) 23:38:37>(略)
>Requirements
>Client: Included in Windows XP.
>Server: Included in Windows Server 2003.
>Header: Declared in Ws2tcpip.h.
0813デフォルトの名無しさん
2005/09/20(火) 23:39:38そこら辺の機能をまとめた汎用ネットワークライブラリってないのかな? libcap/netlibとかは
低レベル過ぎるし。
0814デフォルトの名無しさん
2005/09/20(火) 23:46:12俺ん家のPlatform SDKのgetaddrinfo()の記述では
Requirementsがもっと甘くなっていて、Windows95(!)や
Windows NTさえサポート対象になっている。
(ドキュメントの Last updated: March 2005)
とはいえ生のWindows95で利用可能とはとても思えない訳だが
サービスパックやパッチの当たり具合によるってことだろうか?
0815デフォルトの名無しさん
2005/09/20(火) 23:48:50そりゃホスト名からアドレスを得る(ホストの名前を得る)関数だろ?
厳密も糞も全くの見当違い。
ここんところ、初心者がかなりいい加減なことを書き込むことがあるね。
0816デフォルトの名無しさん
2005/09/20(火) 23:54:50だが、もともとの話はワイルドカードでバインドするかわりの方法って話
だから、全くの見当違いではないだろう、たぶん
0817デフォルトの名無しさん
2005/09/21(水) 00:02:09いや、もともとはマルチキャストだから全然見当違い。
0818デフォルトの名無しさん
2005/09/21(水) 00:06:250819デフォルトの名無しさん
2005/09/21(水) 00:14:21誰からリクエストが来るかわからないので、ポートだけ指定してUDPで待っています。
そこへ、いろいろなホストからUDPでリクエストが飛んできます。
そして、それに対するリプライを返さないといけないのですが、
その時に、ソースIPアドレスとして、複数ある自分のどのIPアドレスを使うべきか、
当然それは、リクエストが自分のどのIPアドレスに飛んできたかと一致させる必要があるというわけです。
このように、自分のところへやって来たUDPの宛先IPアドレスを知ることは、
基本事項として欠かせないものです。特殊な要求ではありません。
0820デフォルトの名無しさん
2005/09/21(水) 00:15:530821デフォルトの名無しさん
2005/09/21(水) 00:21:46全ッ然意味わからん
ソースIPをアプリケーション層で利用してるようなプロトコルである
という意味なのか?
だって、返信返すのって、そのソケットでsendto()するだけじゃねーの?
そこに送信元IP情報はいらんよね?
0822デフォルトの名無しさん
2005/09/21(水) 00:24:30> このように、自分のところへやって来たUDPの宛先IPアドレスを知ることは、
> 基本事項として欠かせないものです。特殊な要求ではありません。
逆切れかよ!氏ね
0823デフォルトの名無しさん
2005/09/21(水) 01:10:33非対称なルーティングなんていくらでもある。 入力側はロードバランサーをはさんで負荷分散し、
出力側は別のインターフェースで返すとか。
>>821
アドレスをわざわざ対照に返す必要性は昨今大きい。 そうしないと大抵のファイアーウォールで弾かれる。
BINDのソースあたりを掘ったらそこら辺のOS依存性が抽象化されてるんじゃないかな。
0824デフォルトの名無しさん
2005/09/21(水) 01:11:43自分が複数のインターフェースを持っているなどで、
自分にはIPアドレス A, B, Cの3つあります。
(あるいは、他の環境だともっと多いかも。一般には1個以上)
そこである鯖ソフトは、port 7777番にbind()してUDP待ち受けてます。
そこへ>>821さんのホスト(IPアドレスP)からリクエストが来ました。
そのパケットはおそらく(src,dst) = (P,A)か(P,B)か(P,C)です。
さて、>>821さんのホストへリプライしなければなりませんが、
そのソケットでsendto()しても、(src,dst)=(A,P)か(B,P)か(C,P)になるかは
ルーティングテーブル依存になってしまいます。
でも、>>821さんのホストがリクエストを(src,dst)=(P,A)で送ってきていたら、
そのリプライは確実に(src,dst)=(A,P)にしないとまずいことになります。
つまり、自分のIPアドレス(A〜C)のどれ宛にリクエストが来たかを、
知る方法が必要になりますね。recvfrom()だと、相手のPのほうはわかるんですけどね。
0825823
2005/09/21(水) 01:13:22○対象
hazukashi
0826デフォルトの名無しさん
2005/09/21(水) 01:18:17127.0.0.1に宛てられたのかもしれないし、
インターフェイスのアドレスだったのかもしれないし、
ブロードキャストアドレスかもしれないけど、
それがわからないからどうしようって話。
昔のnamedはそんなの関係なしに自分のアドレスをfromにしてパケット返してた。
今はアドレス毎にbindして(socketを複数作って)解決してる。
まぁこれくらいしか解決策は無いんだけど。
0827デフォルトの名無しさん
2005/09/21(水) 01:25:26>>昔のnamedはそんなの関係なしに自分のアドレスをfromにしてパケット返してた。
さすがに今の時代、これ、いろいろやばくて通らないよね。
NATやらuRPFやら色々問題ありそう
>>今はアドレス毎にbindして(socketを複数作って)解決してる。
これ、BSDソケットの仕様が欠陥でだめすぎるので、
ほんと、やむをえなく、こんな馬鹿なことするしかないんだよね。
だれかが提案してたrecvfromto()さえあれば、socket1つで済むところ。
0828デフォルトの名無しさん
2005/09/21(水) 01:25:470829デフォルトの名無しさん
2005/09/21(水) 01:30:56不十分で、sendfromto()みたいなのも必要というか欲しい、という
話になるのかな?
0830デフォルトの名無しさん
2005/09/21(水) 01:31:15recvfromto()だけじゃなくて、sendfromto()も必要な気ガス
0831830
2005/09/21(水) 01:31:570832デフォルトの名無しさん
2005/09/21(水) 01:44:150833デフォルトの名無しさん
2005/09/21(水) 01:48:39それがsendmsg(), recvmsg()アーンド>>832
0834デフォルトの名無しさん
2005/09/21(水) 01:49:55IN_PKTINFOやIP_PKTINFOやIP6_PKTINFOをサポートしたとして、
recvfromto()のほうの代わりになるだけだろ。
0835デフォルトの名無しさん
2005/09/21(水) 01:55:54sendmsgにも使えますが何か。
0836デフォルトの名無しさん
2005/09/21(水) 01:57:59RFC3493(初出はRFC2133,RFC2553)のgetaddrinfo()のような
Protocol-Independentなインタフェースになってないので使えない。
例えば、sendto()で相手のIPアドレスを指定するときは、
struct sockaddrというProtocol-Independentな形で指定し、
これは、getaddrinfo()で得られたものをそのまま意識せずに用いれる。
0837デフォルトの名無しさん
2005/09/21(水) 02:10:14recvfrom(s, msg, msglen, flags, from, fromlen)
でもらってきた、from/fromlenをそのまま、
sendto(s, msg, msglen, flags, from, fromlen)
とすれば、相手へリプライすることができる。
ただし、>>826-827にあるように、これは今では問題が多い。
同様にIPv4/IPv6気にせずにプロトコルインディペンデントにきれいに対応するには、
recvfromto()とsendfromto()を新設するのが最も簡単で美しく分かりやすいだろうな。
0838デフォルトの名無しさん
2005/09/21(水) 02:19:58RFCを調べても、RFC3542にIPV6_PKTINFOが出てくるだけで、IPv4の定義はどこにもない。
つまり、recvmsg()を用いても、IPv4の場合は自分側のIPアドレスを得られない。
0839デフォルトの名無しさん
2005/09/21(水) 02:33:03LinuxはRHとDebianを覗いたら両方ともIP_PKTINFOあった。 機能するかどうかは
検証してないが。
0840デフォルトの名無しさん
2005/09/21(水) 02:36:290841デフォルトの名無しさん
2005/09/21(水) 02:39:15できたりできなかったり、インタフェース違ったり、特定の版でしか動かなかったりするのは、
やはりソケット仕様の重大欠陥だとは言いきれるな。
0842デフォルトの名無しさん
2005/09/21(水) 02:49:24さすがにbind不可能なアドレスをsourceに指定すればEADDRNOTAVAILを返させるだろ。
0843デフォルトの名無しさん
2005/09/21(水) 03:18:080844デフォルトの名無しさん
2005/09/21(水) 03:48:160845デフォルトの名無しさん
2005/09/21(水) 04:18:21IP_PKTINFOはquaggaで使ってるよ。
同様のものがないとOSPF実装するの面倒…
*BSDだと、IP_RECVDSTADDR, IP_RECVIFかな。
IPV6_PKTINFOは標準だから、とっととIP_PKTINF実装して欲しいな。> *BSD
0846デフォルトの名無しさん
2005/09/21(水) 05:07:45よーするに、ここで焦点となっていた、自分のどのIPアドレス宛に来たか、だけでなく、
その場合、自分のどのIFから入ってきたか、という情報まで必要ということ?
前者はレイヤー3だけど、
後者はレイヤー2情報だね。
0847デフォルトの名無しさん
2005/09/21(水) 07:04:36覗いたらちゃんと技術的な話題になっててビビった
0848デフォルトの名無しさん
2005/09/21(水) 11:37:11ルーティングデーモン、DHCP鯖、DHCPリレーエージェントなんかは必要。
0849デフォルトの名無しさん
2005/09/21(水) 20:53:29> そんなに汎用性が大事なら、
> 別にインターフェースに個別にbindしたらええやん。
>>808
> そのPCのネットワークインタフェースを列挙する「汎用的な」方法を教えてくれ
結局、この汎用的な方法があればいいんだよね?
各OSでこのへんは、どーなってる??
0850デフォルトの名無しさん
2005/09/21(水) 21:27:16SIOCGIFCONF /* get iface list */
0851デフォルトの名無しさん
2005/09/21(水) 21:33:16その得られたインターフェイスがIPアドレスを持っているかどうかと、
IP aliasがあるかどうかと、upしてるかしてないか、等を調べる汎用的な
方法を教えてくれ。
無理だろ? そゆことやろうと思うと、結局現状じゃOS依存の
ifdefだらけのコードを書くしかないんだよ。
ので、大抵のプログラムは設定ファイルなんかにbindするinterfaceや
アドレスを指定させてると思う。
0852デフォルトの名無しさん
2005/09/21(水) 21:36:27鼻息荒いね。頑張ってね。
> ので、大抵のプログラムは設定ファイルなんかにbindするinterfaceや
> アドレスを指定させてると思う。
まあ、君の目の当たりにする奴はそうなんだろうね。
0853デフォルトの名無しさん
2005/09/21(水) 21:44:38設定ファイルにIPアドレス指定させるのは敗北だと思う
>>852
自分のIPアドレスをアプリが知る汎用的な方法を教えて
0854デフォルトの名無しさん
2005/09/21(水) 22:05:070855デフォルトの名無しさん
2005/09/21(水) 22:08:01> その得られたインターフェイスがIPアドレスを持っているかどうかと、
> IP aliasがあるかどうかと、upしてるかしてないか、等を調べる汎用的な
> 方法を教えてくれ。
このへんのきれいなサンプルコードってない?
IPv6も含めてIPアドレスのリストが得られると嬉しい。
0856デフォルトの名無しさん
2005/09/21(水) 22:27:220857デフォルトの名無しさん
2005/09/21(水) 22:33:00プラットフォームは?
>>845>>848のソース読むといい。
0858デフォルトの名無しさん
2005/09/21(水) 23:20:56プラットフォームに依存しない方法ないのかな
0859デフォルトの名無しさん
2005/09/21(水) 23:58:42quaggaは絶滅したみたい。
http://kigu.lomo.jp/blog/archives/2005/09/20050905_0034.html
zebraに期待かしら?
0860デフォルトの名無しさん
2005/09/22(木) 19:59:50激亀レスだが
ANSI -> UNICODE は、MultiByteToWideChar();
UNICODE -> ANSI は、WideCharToMultiByte();
但し、バッファのサイズは文字列長の+1を指定すること
0861デフォルトの名無しさん
2005/09/23(金) 04:08:380862デフォルトの名無しさん
2005/09/23(金) 05:15:09はっきりいって、マイクロソフトの犬はどうでもいい。
0863デフォルトの名無しさん
2005/09/23(金) 09:14:300864デフォルトの名無しさん
2005/09/23(金) 09:20:21みんなが悩まず、プログラムコードも同一で健全な世界ができたとは思う。
0865デフォルトの名無しさん
2005/09/23(金) 10:00:510866デフォルトの名無しさん
2005/09/23(金) 10:05:390867デフォルトの名無しさん
2005/09/23(金) 10:06:482,3年前に出るって聞いたけど結局どうなったのあれ?
0868デフォルトの名無しさん
2005/09/23(金) 11:03:390869デフォルトの名無しさん
2005/09/23(金) 11:08:24ACEは巨大すぎる。boost::socketは出てさえいない。
0870デフォルトの名無しさん
2005/09/23(金) 11:40:23BSD使いならともかく、Linuxユーザが移植性なんて気にした歴史は
過去に一度だって無いぞ
0871デフォルトの名無しさん
2005/09/23(金) 11:42:24そもそもC++なんて使ってる時点で移植性なんてほとんど無いだろ。
まともなC++コンパイラが無くてg++も使えない環境がたくさんあるんだから。
0872デフォルトの名無しさん
2005/09/23(金) 13:21:06パケットキャプチャソフトのログ出力を、libpcap形式で行いたいのです。
そこでlibpcapファイルの構成を説明してあるページを探しているのですが、
分かる人が居たら是非教えて下さい。
ちなみに、WinPCapを利用して作成しています。
0873デフォルトの名無しさん
2005/09/23(金) 13:45:260874デフォルトの名無しさん
2005/09/23(金) 14:59:55どこにAPIのマニュアルありますか?
0875デフォルトの名無しさん
2005/09/23(金) 15:41:220876デフォルトの名無しさん
2005/09/23(金) 17:37:13ユーザーが2,15と入力すると,足し合わせた17と表示させるページをASP.NETで作りたいと思います
(実際はより複雑で,時間がかかる計算をします)
このとき,この2+15という計算はサーバーで行われあるのか,クライエントのPCで行われるのかどちらでしょうか?
0877デフォルトの名無しさん
2005/09/23(金) 18:26:220878デフォルトの名無しさん
2005/09/23(金) 20:02:22Webプログラミング
http://pc8.2ch.net/php/
0879デフォルトの名無しさん
2005/09/23(金) 20:27:430880デフォルトの名無しさん
2005/09/23(金) 22:30:08gcc動く環境はg++動く保障にならないの?
0881デフォルトの名無しさん
2005/09/23(金) 22:32:410882879
2005/09/23(金) 23:01:39他にインクルードしないといけないファイルあるの?
開発環境はBCC 5.5
0883デフォルトの名無しさん
2005/09/23(金) 23:08:520884デフォルトの名無しさん
2005/09/23(金) 23:16:580885879
2005/09/23(金) 23:33:12意味不明な事を言ってる場合じゃない
network.hの前にwinsock.hをインクルードしたらエラーが減りました。
あとはどれをインクルードすれば?
0886デフォルトの名無しさん
2005/09/23(金) 23:39:380887879
2005/09/23(金) 23:55:530888デフォルトの名無しさん
2005/09/24(土) 00:01:140889デフォルトの名無しさん
2005/09/24(土) 00:04:56どういう意味?
0890デフォルトの名無しさん
2005/09/24(土) 00:06:180891デフォルトの名無しさん
2005/09/24(土) 00:16:46お前頭大丈夫か
0892デフォルトの名無しさん
2005/09/24(土) 00:23:030893デフォルトの名無しさん
2005/09/24(土) 00:50:560894デフォルトの名無しさん
2005/09/24(土) 01:02:080895デフォルトの名無しさん
2005/09/24(土) 01:05:070896デフォルトの名無しさん
2005/09/24(土) 01:10:49糞餓鬼は、おれもママにでも聞けよと言ってしまいそうだ
0897デフォルトの名無しさん
2005/09/24(土) 01:11:420898デフォルトの名無しさん
2005/09/24(土) 01:12:44どこから入手したか書かないとまるで話が通じない
(BCC5.5に付いていたのかどうかもわからんし、付いていたのならマニュアル読め)
エラーの内容も書かなきゃ全く対応できないしな
意味不明な事を言ってるのは>>885のほうだな
0899デフォルトの名無しさん
2005/09/24(土) 03:43:560900879
2005/09/24(土) 06:18:58検索してみたら
下に載ってるソースと同じだった
ttp://www.xiuyujy.com/install-d/%B1%E0%B3%CC%C8%ED%BC%FE/c++Builder4/RUNIMAGE/CBUILDER4/INCLUDE/NETWORK.H
出来たらそのソース書いて
0901デフォルトの名無しさん
2005/09/24(土) 06:30:07バイト単位じゃないとダメなのでしょうか?
0902デフォルトの名無しさん
2005/09/24(土) 08:13:22UDP: バイトパケット
TCP: バイトストリーム
なので無理。
0903デフォルトの名無しさん
2005/09/24(土) 12:36:190904デフォルトの名無しさん
2005/09/24(土) 12:45:44( ゚д゚)ポカーン
0905デフォルトの名無しさん
2005/09/24(土) 12:47:19というと、なんだか深夜ラジオっぽいから却下だな
0906デフォルトの名無しさん
2005/09/24(土) 13:00:18content lengthをヘッダ部に指定するバイナリストリームと
Base64を利用したテキストパケットとではどっちが優れているのでしょうか?
0907デフォルトの名無しさん
2005/09/24(土) 13:11:28( ゚д゚)ポカーン
0908デフォルトの名無しさん
2005/09/24(土) 13:12:370909デフォルトの名無しさん
2005/09/24(土) 13:13:120910デフォルトの名無しさん
2005/09/24(土) 13:21:21時と場合による。
その都度都合がいいほうを選ぶべし。
0911デフォルトの名無しさん
2005/09/24(土) 13:37:280912デフォルトの名無しさん
2005/09/24(土) 13:38:420913デフォルトの名無しさん
2005/09/24(土) 13:45:23機能が限定されてるものばかりだね
拡張しまくるからテキストで頑張ります
0914デフォルトの名無しさん
2005/09/24(土) 13:50:46だからバージョン識別フィールドとか、
拡張領域とかがあるわけさ。
あ、テキストの利点。パケットスニッファのログで
通信の内容が一目見て把握しやすい。
バイナリの利点はプログラムから解析しやすい。
文字列操作は何かと面倒だしね。
スペース区切り TAB 区切りとか、柔軟に対応しようとすると
なかなか細かい文字列解析が必要で面倒。
0915デフォルトの名無しさん
2005/09/24(土) 14:09:13> スペース区切り TAB 区切りとか、柔軟に対応しようとすると
ここが気になりますね。バイナリの方がいいのかな・・・
バイナリの場合で、改変メッセージを送られた場合の良い復帰法はありますか?
テキストの場合はそれを無視して、NULL終端を待てば簡単に復帰できるんですが
バイナリだとどう復帰して良いのか思いつきません。
0916デフォルトの名無しさん
2005/09/24(土) 14:12:12バイナリ、テキスト関係ないだろ。
nul(NULLではない)終端改変されたら終りだから。
かなり浅い考えで、右往左往するタイプみたいだから、
一度冷静になって考えた方がいい。
0917デフォルトの名無しさん
2005/09/24(土) 14:13:260918デフォルトの名無しさん
2005/09/24(土) 14:18:22テキストなら許容するバッファの最大までに
nul終端(でいいの?)が無ければ切断してしまおうと思ってるんだけど
バイナリだと番兵となるものが無くてどうしようかなと
>>917
ご想像のとおりレベル相当低くてさ
0919デフォルトの名無しさん
2005/09/24(土) 14:24:41TCPなのUDPなの?
>>906のテキストパケットというのは7bitスルーにしたUDPパケットのこと?
TCPだと、
> テキストなら許容するバッファの最大までに
> nul終端(でいいの?)が無ければ切断してしまおうと思ってるんだけど
は全く意味ないよ。
UDPだったらその戦略はテキスト、バイナリに関係なく有効でしょ?
UDPパケットという境界があるんだから。
NULLって大文字4文字で書くと、ポインタのことだな。
null, nul, NULがヌル文字。(3文字はASCII規格での名前)
0920デフォルトの名無しさん
2005/09/24(土) 14:32:33TCPです。
なんか勉強不足過ぎなのか、何故まったく意味が無いのが理解できないみたいです。
スレ汚しごめんね
0921901
2005/09/24(土) 15:14:14THXです。
ビット単位で送る方法は無いんですね・・・。
う〜ん、サーバーにクライアントから送る情報が、ビットで事足りるんで、バイト文字にして送るのが凄くもったいないんですけど・・・。
具体的には、真偽値のみなんで・・・
0922デフォルトの名無しさん
2005/09/24(土) 15:20:110923デフォルトの名無しさん
2005/09/24(土) 15:27:13要求出した時点から指定量読んでダメなら切断
確率の問題もあるが、現実的にほぼ復帰可能
0924デフォルトの名無しさん
2005/09/24(土) 15:38:41そういうのを勿体ないと思って悩む時間が勿体ない。
根本的に間違っている。
0925デフォルトの名無しさん
2005/09/24(土) 15:44:13NUL文字を改竄されてたらどうするのってことジャマイカ
で、バッファの最大云々はバイナリでも有効だよっと。
ヘッダ見てサイズが不正なら切っちゃうこともできるか。
0926デフォルトの名無しさん
2005/09/24(土) 15:45:458つまとめて1バイトとして送れば良いじゃない。
0927デフォルトの名無しさん
2005/09/24(土) 15:48:320928デフォルトの名無しさん
2005/09/24(土) 15:49:35そのテスト(接続できているか、データの送受信が正常か)はどうやればよろしゅうございますか?
ローカルでクライアントを延々起動させようと考えてますが
回線ディレイもなんもないのでちょぴーり不安でし
0929デフォルトの名無しさん
2005/09/24(土) 16:09:13メッセージの最大許可長の倍のバッファを用意して
実際のリードバッファはそのバッファの中を移動させながら使っています。
\0から逆方向にもパースできる書式なので、死んだメッセージ以外の読みもらしもありません。
ただTCPを使ってる以上は不正の段階で切断でもいいかも知れませんね・・・
バイナリは必要に迫られたら切り替えてみます。ありがとう。
0930デフォルトの名無しさん
2005/09/25(日) 00:04:49TCPは、SYNとACKを繰り返してセッションを維持してるらしいですが
突然の不意な切断は、直ぐには感知出来ないと聞きました。
相手から返ってこなければ、直ぐにわかるものじゃないのでしょうか?
0931デフォルトの名無しさん
2005/09/25(日) 00:13:09素人考えだけど
0932デフォルトの名無しさん
2005/09/25(日) 00:20:150933デフォルトの名無しさん
2005/09/25(日) 00:22:510934デフォルトの名無しさん
2005/09/25(日) 00:26:47物理的に切れてすらも待つ設計だしな
0935デフォルトの名無しさん
2005/09/25(日) 00:34:07通信続行できる?
0936デフォルトの名無しさん
2005/09/25(日) 00:36:16OSがあるかもしれないな。
0937デフォルトの名無しさん
2005/09/25(日) 00:36:250938デフォルトの名無しさん
2005/09/25(日) 02:24:31windowsとかそういう実装だよなぁ。
ちょっと移動させたい時とか配線しなおしたい時に
安易にケーブル抜けなくてすごく不便。
0939デフォルトの名無しさん
2005/09/25(日) 04:25:55モバイルIP使えよ
CoAが変わったり一瞬消えたりしても影響でないので超便利
0940デフォルトの名無しさん
2005/09/25(日) 07:00:09> NUL文字を改竄されてたらどうするのってことジャマイカ
ビット化けの可能性を気にしすぎ。
ether, IP, TCPと三段階のchecksum検査を行っていますよ。
0941デフォルトの名無しさん
2005/09/25(日) 08:00:58IP(V4)のchecksumはヘッダだけ。 データは含まれない。 V6ではそれもされない。
0942デフォルトの名無しさん
2005/09/25(日) 08:42:470943872
2005/09/25(日) 15:42:07Etherealのように、他のソフトと互換性のあるログを作りたいのです。
だからlibpcap形式だけではなく、出来れば色々な種類のログ形式を知りたいのですが・・・。
(ここからここまで何ビットはこういう項目、のような)
そのものズバリが載っていなくても、参考になるページ等があったら教えて下さい。
0944デフォルトの名無しさん
2005/09/25(日) 15:51:520945デフォルトの名無しさん
2005/09/25(日) 20:03:370946デフォルトの名無しさん
2005/09/26(月) 22:41:570947デフォルトの名無しさん
2005/09/27(火) 13:42:21DHCPサーバから管理しているクライアントの一覧って取得できるんでしょうか?
MACアドレスとIPアドレスの一覧を知りたいのですけど。
DOSコマンドにありそうな気がするのですが見つけられませんでした。
0948デフォルトの名無しさん
2005/09/27(火) 14:52:57サーバーでなら見れるね。
0949デフォルトの名無しさん
2005/09/27(火) 15:57:100950947
2005/09/27(火) 17:12:13DHCPサーバはADSLモデムです。当然telnetとかはできません。
以前のADSLモデムではブラウザでログインするとクライアントの一覧を表示する
メニューがあったのですが今、使用しているADSLモデムにはありません。
こんな時に外部のPCからDHCPクライアントの一覧を見ることはできますか?
0951デフォルトの名無しさん
2005/09/27(火) 17:21:41標準的な方法は存在しない。サーバ固有に提供される機能を探すしかない
それがないなら無理
0952デフォルトの名無しさん
2005/09/27(火) 17:23:25近いことはブロードキャスト送って、arpで見ることでできる。
ブロードキャストを返さない変なOSを使っているなら、しらね。
それから、スレ違いだよ。
0953947
2005/09/27(火) 18:51:000954デフォルトの名無しさん
2005/09/30(金) 07:42:53同じHPを配信でいる方法を知りませんか?
知っている方がいましたらよろしくお願いいたします。
皆さんに提供している宣伝用HPは、以下のものです。
あなたのIDとメールアドレスによって違ってきます。
例えば、あなたのIDが**** で、あなたのアドレスが *+*+*@****.ne.jp だったと仮定すると、
ml= に続けてアドレスをいれ、&id= に続けてID番号を入れて下さい。すなわち、
http://www.yuma.jp/yue/gen.cgi?pg=05&ml=*+*+**.ne.jp&id=********
↑↑↑↑ ↑↑↑
あなたのアドレス あなたのID
となります。
登録フォームのURLは、 上記の pg=05 の部分を pg=04 に変更したものです。
すなわち、
http://www.yma.jp/yume/gen.cgi?pg=04&ml=*+*+*@****.ne.jp&id=****
0955デフォルトの名無しさん
2005/09/30(金) 11:30:550956デフォルトの名無しさん
2005/09/30(金) 13:06:29//ソケットは既に任意の鯖に接続を確立しています。
send関数でソケットに
GET %s HTTP/1.0\r\nHost: %s\r\n\r\n (%sは欲しいファイルのURL)
を書き込み、recv関数で応答データを読み込むわけですが・・・
私の場合読み込み手順を //szBufはchar szBuf[1024]として宣言しておく
while(pageLenght!=0){
memset(szBuf, '\0', sizeof(szBuf));
pageLenght=recv(s, szBuf, (int)sizeof(szBuf) - 1, 0);
//fprintfなどでファイルに受信データを書き込む等
}
のようにぐるぐる回してデータを読んでます。これは自分が、このように回せば応答全部読めてるじゃん?
と思って、"たまたま"成功したに過ぎません。
応答データの読み込み手順の問題点・正攻法などのアドバイスをお願いします・・
0957デフォルトの名無しさん
2005/09/30(金) 13:08:39"GET %s HTTP/1.0\r\nHost: %s\r\n\r\n"は
一個目の%s=欲しいファイルのパス名
二個目の%s=サーバアドレス名でしたね..
0958デフォルトの名無しさん
2005/09/30(金) 13:19:28Connection: close
すれば? ブロックI/OでEOFまで読むことを想定しているんでしょ?
まあ1.0だとdefaultでcloseのはずだけれど。
0959デフォルトの名無しさん
2005/09/30(金) 13:26:23プロトコルなどをもっと勉強してまいりますΛllΛ
0960デフォルトの名無しさん
2005/09/30(金) 14:39:19memset(szBuf, '\0', sizeof(szBuf)); は必要ないし、
sizeのところの - 1も必要ない。
recvの帰り値でどこまでデータが入っているか分かる。'\0'終端じゃなくて。
0961デフォルトの名無しさん
2005/09/30(金) 14:42:56ゴミは消しとくべきだ
0962デフォルトの名無しさん
2005/09/30(金) 15:46:370963デフォルトの名無しさん
2005/09/30(金) 16:45:431.1にすると、Content-Encoding: chunkedとか対応しないとならないから
面倒だと思う。
0964デフォルトの名無しさん
2005/09/30(金) 22:00:240965デフォルトの名無しさん
2005/09/30(金) 22:10:57でも、そのあと文字列としてすぐ扱えるからゼロ埋め
でも、szBuf[pageAllLength]='\0';の方が好き
0966デフォルトの名無しさん
2005/09/30(金) 22:23:420967デフォルトの名無しさん
2005/09/30(金) 22:28:140968デフォルトの名無しさん
2005/09/30(金) 22:49:11モニョモニョいって ごまかされました
ちちぶは きょうも やまが きれい でした
0969デフォルトの名無しさん
2005/09/30(金) 22:55:11http://pc8.2ch.net/test/read.cgi/tech/1128088448/
0970デフォルトの名無しさん
2005/10/01(土) 09:15:490971デフォルトの名無しさん
2005/10/01(土) 10:47:58WinSock2.0を使用してUDP送受信を行っているのですが、
ソケット終了のやり方が分からず、困っています。
shutdown(hSock, 0);
shutdown(hSock, 1);
shutdown(hSock, 2);
どれを試しても、recvfromから処理が帰ってきません。
(Sleep(10000)を入れて試してみたのですが、全然駄目でした)
仕方なく、
closesocket(hSock);
を呼び出すと、recvfromからいきなり処理が帰ってきて、10004を吐き出します。。。
UDPソケットを正しく終了するにはどうすれば良いのでしょうか?
環境は
Win2000
VC++6.0
です。
よろしくお願いします。
0972デフォルトの名無しさん
2005/10/01(土) 10:52:030973971
2005/10/01(土) 11:01:35返答ありがとうございます。
そうだったんですね。。。
ありがとうございます。
0974971
2005/10/01(土) 11:07:55環境書き忘れました。
Win2000 sp4
VC++6.0 最新パッチ当て済み
です。
0975デフォルトの名無しさん
2005/10/01(土) 11:27:320976デフォルトの名無しさん
2005/10/01(土) 11:32:09つーか、別に問題ないんじゃないか?
終了したいときにclosesocket(hSock); すれば。
0977デフォルトの名無しさん
2005/10/01(土) 11:34:08Winsock 2.0だと言ってるし問題ないな
0978デフォルトの名無しさん
2005/10/01(土) 11:43:22なるほど。
では、このエラーは素無視という事で。
解決しました。
ありがとうございます。
0979971
2005/10/01(土) 11:44:30名前入れ忘れました。
978=971
0980デフォルトの名無しさん
2005/10/01(土) 13:25:560981デフォルトの名無しさん
2005/10/01(土) 17:27:440982デフォルトの名無しさん
2005/10/01(土) 17:36:290983デフォルトの名無しさん
2005/10/01(土) 17:57:190984デフォルトの名無しさん
2005/10/01(土) 18:02:54しょうがねぇな。
ふつう 0 【普通】
(名・形動)[文]ナリ
(1)いつでもどこにでもあって、めずらしくない・こと(さま)。
「日本に―の鳥」
(2)ほかとくらべて特に変わらない・こと(さま)。
「ごく―の家庭に育つ」「―ならもう卒業している」
(3)特別ではなく、一般的である・こと(さま)。
「―高校」
0985デフォルトの名無しさん
2005/10/01(土) 18:27:04goo国語辞書もずいぶんな例を出すもんだな
0986デフォルトの名無しさん
2005/10/01(土) 21:39:420987デフォルトの名無しさん
2005/10/01(土) 22:00:240988デフォルトの名無しさん
2005/10/01(土) 23:57:020989デフォルトの名無しさん
2005/10/02(日) 00:30:21お前は俺か?
0990デフォルトの名無しさん
2005/10/02(日) 01:11:08レス数が950を超えています。1000を超えると書き込みができなくなります。