5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

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

1 :デフォルトの名無しさん:2005/12/31(土) 14:07:24
主にソケットに関しての質疑応答スレッドです。

Programming UNIX Socket FAQ (日本語訳)
  http://www.kt.rim.or.jp/~ksk/sock-faq/indexj.html
Winsock Programmer's FAQ (日本語訳)
  http://www.kt.rim.or.jp/~ksk/wskfaq-ja/

関連リンクは>>2-10辺り
足りなかったら適当に付け足してね

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


2 :デフォルトの名無しさん:2005/12/31(土) 14:08:22
2get

pingください

3 :デフォルトの名無しさん:2005/12/31(土) 14:11:56
過去スレ:
Port14 http://pc8.2ch.net/test/read.cgi/tech/1118469143/
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

まとめ http://makimo.to/cgi-bin/search/search.cgi?q=%83l%83b%83g%83%8F%81%5B%83N%81%40%91%8A%92k%8E%BA&andor=AND&sf=0&H=ikenai&D=tech&shw=2000

4 :デフォルトの名無しさん:2005/12/31(土) 14:13:24
図書コーナー:
UNIXネットワークプログラミング〈Vol.1〉ネットワークAPI:ソケットとXTI
  http://www.amazon.co.jp/exec/obidos/ASIN/4894712059/
  そのソースコード
  http://www.unpbook.com/src.html
詳解TCP/IP〈Vol.1〉プロトコル
  http://www.amazon.co.jp/exec/obidos/ASIN/4894713209/
詳解TCP/IP〈Vol.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/
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/

5 :デフォルトの名無しさん:2005/12/31(土) 14:14:15
URL抜粋:
★規格
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
★プログラミング
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/

6 :デフォルトの名無しさん:2005/12/31(土) 14:15:31
★ツール類
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

★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

7 :デフォルトの名無しさん:2005/12/31(土) 14:43:39
乙枯惨

8 :デフォルトの名無しさん:2006/01/01(日) 04:43:05
コンテンツデリバリーサーバーのソースコードとかってオンラインで公開されていますか?
アカマイ等の商用のものはもちろんないでしょうが、、
よろしければ教えて下さい。

9 :デフォルトの名無しさん:2006/01/02(月) 17:22:58
>>4
Visual Basicではじめるネットワークプログラミング超入門
http://www.amazon.co.jp/exec/obidos/ASIN/4839917523/250-1947313-9296230

これも追加しとけ

10 :デフォルトの名無しさん:2006/01/02(月) 17:56:41
>>8
Apacheのソース見ていけば参考になるよ
HTTPにそって80番でポート開放してるだけだから
HTTPの仕様読んだ方が楽だと思うけど

11 :デフォルトの名無しさん:2006/01/04(水) 12:47:20
>>10
もうちっと小さいソースを薦めようぜ
boaとかlighttpdとかあるだろ

12 :デフォルトの名無しさん:2006/01/04(水) 14:44:39
shttpd.cで

13 :デフォルトの名無しさん:2006/01/05(木) 18:30:40
ネットワークアダプタが複数存在するマシンで通信する
デバイスを固定したい。Fedora4を使っているんだけど、
eth0〜eth3まである。ここで通信先をeth0に固定しようとして

setsocketopt(sock, SOL_SOCKET, SO_BINDTODEVICE, EthName, sizeof(EthName));

こう書きました。sockは勿論のこと、EthNameにもデバイス名として
'eth0'と格納してる。コンパイルは通るけど実行時のログでは、
戻り値が-1でエラーは1(パラメタエラー)となる。
どーしてもわからないので教えて欲しいです。m(__)m

14 :13:2006/01/05(木) 18:47:13
1つ解決しました。権限がrootじゃないと駄目だったようです。
が、今度はエラーが19(そんなデバイス名は無い)と言われました。
eth0じゃなければ他に名前ってあるのでしょうか?

すみませんが宜しくお願いします。

15 :デフォルトの名無しさん:2006/01/05(木) 19:48:52
なんで、インターフェースのIPアドレスにbind(2)しないの?

16 :デフォルトの名無しさん:2006/01/05(木) 20:47:22
>>13
'eth0'とかsetsocketoptとかいろいろ不安になる人ね。

sizeof(EthName) → strlen(EthName) or sizeof EthName - 1

17 :デフォルトの名無しさん:2006/01/06(金) 18:41:28
>>16
EthName は char * だったりしてw


18 :デフォルトの名無しさん:2006/01/06(金) 19:27:06
winsockでスレッド立てないで非同期でプロシージャに返さないで
メインのループの中でもしメッセージがあったら受け取るって
いうの作ろうかと思ったんですけどそういうのそもそも可能ですか?
どこかにサンプルのソースとかあったら教えてください。

19 :デフォルトの名無しさん:2006/01/06(金) 20:53:12
>>17
だったら"eth0"→4[=sizeof (char *)]でピッタリじゃん!

20 :デフォルトの名無しさん:2006/01/06(金) 20:53:59
>>18
>>1のFAQをselectで検索

21 :18:2006/01/06(金) 21:35:25
>>20
どうもありがとうございます

22 :デフォルトの名無しさん:2006/01/06(金) 23:48:01
昔、FIONREADを使ってたのを思い出した。

23 :デフォルトの名無しさん:2006/01/07(土) 06:13:27
Echo サーバーを作ろうと思っています。
WSAAsyncSelect()関数にサーバ側のソケットを渡してイベントを待機します
telnetから接続を試みるとFD_ACCEPTイベントが実行され
文字を送るとFD_READ、切断でFD_CLOSEのそれぞれのイベントが発生するのですが
しかし、複数の接続が発生した場合どのクライアントからの受信なのかが判断付かない状態です。
接続要求があった際に各クライアントのソケットはリスト構造で一応確保しています。
WSAAsyncSelect()関数にそれぞれのクライアントを登録しておいても結局イベントが
発生した際にはどのクライアントのイベントが判断がつかない状態です・・・

複数の接続を受け入れた状態でデータを受信した際に一体誰が送信したデータなのか?
を判断する術をご教授ください。

24 :デフォルトの名無しさん:2006/01/07(土) 06:21:13
>>22
WinsockのノンブロッキイングI/Oは要注意。2000以降はまともだけど。

25 :デフォルトの名無しさん:2006/01/07(土) 06:22:36
>>23
recvfrom

26 :デフォルトの名無しさん:2006/01/07(土) 13:48:25
>>23
selectで着信があったソケットを調べる、とか
クライアント側から通知してもらう、とか

27 :デフォルトの名無しさん:2006/01/07(土) 14:05:47
token作るとかじゃないの?

28 :デフォルトの名無しさん:2006/01/10(火) 23:45:43
質問です
あるサイトの別々のページを連続で取得しようとすると、何ページが取得した後、

>ErrorCode #10054
>Connection reset by peer
>既存の接続はリモート ホストに強制的に切断されました。
が出て、それ以降は、同一プロセスからは何度やっても別のページを取得しようとしても
取得できなくなります。
#10054を回避する方法を教えてください。

29 :デフォルトの名無しさん:2006/01/10(火) 23:47:19
はじめまして!!c#について質問させてください。
私の家のパソコンにはC#のVisual Studio Net 2003がインストールされています。
ここで、プログラムを作って完成させたんですが・・・よく考えてみると大学では、
C#2005だったと思うんです。できたら、家だ作ったプログラムをコピーして大学
の授業でも使いたいと思っているんですが・・・この2つには互換性はあるのでしょうか?
どなたか知っている方おられませんか??


30 :デフォルトの名無しさん:2006/01/11(水) 03:47:29
新手のマルチか

31 :デフォルトの名無しさん:2006/01/11(水) 14:52:32
パーソナルファイヤーウォールはポート番号から現在そのポートを開いている
アプリケーションを特定しているようですが、これはどうやればできるのでしょうか?
(Win2000)

>>28
サーバがコネクション数に制限かけてるだけだと思いますが。
連続で取得しないようにするしかないのでは。

32 :デフォルトの名無しさん:2006/01/11(水) 15:22:48
>>31
sourceあるから、これ見ればわかるんでない?
http://www.sysinternals.com/Utilities/TcpView.html

33 :デフォルトの名無しさん:2006/01/11(水) 15:55:45
>>32
どうもです。
ソースが公開されている netstatp ではXPのみのAPIを使っていますね・・・
2000でもできるTCPViewのソースは残念ながら後悔されていないようです。

34 :デフォルトの名無しさん:2006/01/11(水) 15:57:10
x XPのみのAPIを使っていますね
o XPのみのAPIを使って実現していますね


35 :31:2006/01/11(水) 16:26:10
こんなの見つけましたんで見てみます。
http://sourceforge.net/projects/winsockfirewall/

36 :28:2006/01/11(水) 20:29:06
>>31
そうですか、どもです

37 :デフォルトの名無しさん:2006/01/11(水) 21:39:01
>>31
http://codezine.jp/a/article.aspx?aid=101
こっちだ

38 :デフォルトの名無しさん:2006/01/12(木) 02:04:25
apatchというかcern httpdのソースって逝けてないよなあ。参考にしない方がいい。
マルチユーザでもうまく80番ポートを共有して、CGIみたいな手頃感でウェブアプリケーション組み込める鯖ソフトってできそうだけどね。


ところで、思わずパクりたくなるような出来のP2Pのソースってどこかにある?
LimeWireとかCabosとか見てみたけど、Javaはいまいち好きになれない。。。
やっぱりネット処理だとパフォーマンス稼ぎたいからCがいい。

39 :デフォルトの名無しさん:2006/01/12(木) 02:23:52
>>38
君の考えが浅いに一票。


40 :デフォルトの名無しさん:2006/01/12(木) 05:28:50
練習にFTPサーバを作ってみようと思ったのですが、疑問が出てきました。
PASSIVEモードでデータコネクションを張る前に、サーバ側が適当なポートを開けて待つことになると思うのですが、このとき、全く関係の無い接続があった場合の対処はどうすればよいのでしょうか?
クライアントのIPアドレスで判断することも考えましたが、同一IPアドレスからイリーガルな接続が無いとも限らないので、不十分かと思います。
同様にACTIVEモードでは、クライアントがポートを開けて待つことになると思うのですが、やはり全く関係の無い接続にどう対処すればいいのでしょうか。
というか、FTPのこの仕組みって、セキュリティ上の問題が無いのでしょうか?


41 :デフォルトの名無しさん:2006/01/12(木) 06:38:01
FTPにセキュリティ上の問題があるのはその仕組みだけじゃないから
もう誰も使わなくなりつつある

42 :28:2006/01/12(木) 11:47:01
>>31
毎回 自ポート番号を変えることで回避できました。

43 :40:2006/01/12(木) 15:10:30
>>41
他のセキュリティ上の問題って、通信が暗号化されていないということですか?
他に問題があるのでしたら、参考までに教えてもらえないでしょうか。

で、自分が目指しているものは、ポートを1つしか使用しないFTPサーバが作ることです。
コントロールもデータも全部ポート21 への接続でまかないたい、ということです。
これは、ルータの内側にサーバを立てて、ポートフォワードして使用することを考えてのことで、できるだけフォワードするポートが少ないようにしたい、という希望があるからです。
なので、ポート21 に connect されたとき、それが
 ・データコネクションなのかコントロールコネクションなのか
 ・どのクライアントからの接続なのか
を判断する方法が欲しいのです。
1IPアドレス 1クライアントなら IPアドレスで判別することができるのですが、1IPアドレスから複数クライアントの接続がある場合、判別は困難となるわけです。
では、ポートをその都度割当てる場合(通常のFTP)ではどうなのかと考えてみると、開いたポートへの接続は目的のクライアントからのものである確率が高いということしか言えず、もしかしたらまったく別の、時には悪意を持った接続であるかもしれないわけです。
だからFTPサーバというものは、何らかの方法でクライアント接続の正しさを検証しているのではないかと考えました。
もしそのように接続がお目当てのクライアントからのものであることを判別する方法があるのであれば、自分の目的も達成できるのではないか、と思っているのですが、どんなもんでしょう?

これが適わないならば、せめてポートフォワードができるだけ少なくなるようないいアイディアは無いでしょうか。


44 :デフォルトの名無しさん:2006/01/12(木) 15:57:35
FTPにはクッキーとか接続トークンとか無いの

45 :デフォルトの名無しさん:2006/01/12(木) 18:45:34
ftpのサーバ間転送についてどう思う?

46 :デフォルトの名無しさん:2006/01/12(木) 19:36:15
FTP自体がobsolete

47 :デフォルトの名無しさん:2006/01/12(木) 19:38:49
>>43
SCP

48 :デフォルトの名無しさん:2006/01/12(木) 21:41:38
Webサーバーにある文書ファイルを、ローカルPCで読み込んで、修正した後に、更新したいのですが、一番簡単な方法を教えてください。


49 :デフォルトの名無しさん:2006/01/12(木) 21:53:40
>>48
質問があいまいです

50 :デフォルトの名無しさん:2006/01/12(木) 22:26:30
>>45
そんなの10年前ほどに死滅したんじゃなかったの?

51 :デフォルトの名無しさん:2006/01/12(木) 23:45:37
いま、PCを判断するためにMACアドレスを使おうとしています。
ところがPPPoEで接続している場合など、擬似的なネットワークインターフェースが作成されますよね?
MACアドレスを列挙したときに、それらの擬似的なものも拾えてしまって困っています。
そういう擬似的なものを除外したいのですが、まったくやり方が見えません。
LANカード(PCIバスにさすとか、マザーボードに乗っている奴)のMACアドレスは08-・・・
のように0から始まるとか、そういう識別に使えるルールはあるのでしょうか?


52 :デフォルトの名無しさん:2006/01/12(木) 23:50:59
>>48
>>47

53 :デフォルトの名無しさん:2006/01/12(木) 23:52:38
>>51
うちのはされない

54 :デフォルトの名無しさん:2006/01/12(木) 23:54:13
>>51
ARP

55 :デフォルトの名無しさん:2006/01/13(金) 00:01:33
>>54
すみませんが、もうちょっとヒントお願いします。
物分りが悪くてすみません。

56 :デフォルトの名無しさん:2006/01/13(金) 00:07:35
>>51
OSは?
インターフェース名で分からないの?

ちなみに「Ethernet」のMACアドレスはベンダーIDで始まってる。
http://standards.ieee.org/regauth/oui/oui.txt
http://coffer.com/mac_find/

57 :デフォルトの名無しさん:2006/01/13(金) 00:18:30
WindowsXPから、Linux(fedora core3)のシェルのコマンドとか自作のプログラムを
実行する方法ご存知でしたら教えてください。

58 :デフォルトの名無しさん:2006/01/13(金) 00:21:11
シェルのあるところにパスを通せばいいような・・・足りないか?

59 :デフォルトの名無しさん:2006/01/13(金) 00:32:51
>>56
OS書き忘れてました。WindowsXPです。
インターフェース名でわかるのですが、MACアドレスをユーザーに申請してもらうので、
LANカードのMACアドレスをください、といっても通じない可能性があるもので。
(そこで、MACアドレスを列挙してあげるアプリを使わせます。そのアプリで擬似NICのアドレスをはじきたいわけです)

リンクありがとうございます。早速見させていただきます。


60 :デフォルトの名無しさん:2006/01/13(金) 00:33:20
ssh使う


61 :デフォルトの名無しさん:2006/01/13(金) 00:39:18
>>57
http://homepage2.nifty.com/cs/linux_command/command/ssh.html


62 :デフォルトの名無しさん:2006/01/13(金) 00:40:24
57です。
みなさん、アドバイスありがとうございます。
sshで出来そうなのは実はGoogleで少し調べてみて、情報は得られていたの
ですが、sshはWindowsXPには標準では装備されていないようなんですが、
WindowsXP標準の機能で、実現する方法は無いでしょうか?
というのは、自作のVC++のプログラムから、Linux上の自作プログラムを
起動したいのです。よろしく。


63 :デフォルトの名無しさん:2006/01/13(金) 01:18:59
Fedoraでtelnetdなりrexecdなり動かしとけばいいじゃん
ちなみにFedoraでの設定方法はスレ違いなので、ここで聞くなよ

64 :デフォルトの名無しさん:2006/01/13(金) 01:20:55
CGIでできる事ならそっち使うな

65 :56:2006/01/13(金) 01:40:59
>>59
いや、プログラム内でインターフェース(アダプタ)の名前(wszName)見れば、
ほとんどの疑似インターフェースは弾けるんじゃないの?
dwTypeとか, dwDescrもあるよね。

GetIfTable/GetIfEntry

66 :デフォルトの名無しさん:2006/01/13(金) 02:21:37
>>57
rshにすれば?

67 :デフォルトの名無しさん:2006/01/13(金) 04:29:09
次のように定義される gethostbyname_r

 int gethostbyname_r(const char *name, struct hostent *ret, char *buf, size_t buflen, struct hostent **result, int *h_errnop);

name と ret は分かるんだけど、他の引数には何を指定したらいいの?
NULL でいい?

68 :デフォルトの名無しさん:2006/01/13(金) 08:00:54
>>67
http://sources.redhat.com/cgi-bin/cvsweb.cgi/libc/nss/bug-erange.c?rev=1.2&content-type=text/x-cvsweb-markup&cvsroot=glibc

69 :67:2006/01/13(金) 11:24:37
>>68
ありがとう。参考になりそう。
とどのつまり、NULLじゃいけないってことかな?案外面倒だね。
特に buf のことがよくわからないだけに、どう扱ったらいいのかよくわからないよ。
でもそのコードを見る限り、必須なんだろうね。

ところでそのサンプル、free が無いけどいいのかな?
gethostbyname_r の中で解放される?
/* Allocate buffer, remember to free it to avoid memory leakage. */
なんてコメントがあるけど。

70 :デフォルトの名無しさん:2006/01/13(金) 11:36:42
自作のVC++のプログラムにssh組み込めばいいじゃん。
ライセンス回避もいろいろな手段が有るし、sshはソース有るよ。

71 :デフォルトの名無しさん:2006/01/13(金) 11:37:51
サンプル程度ならプログラム終了時にOSが解放するからfree書かないことが多い

クライアントアプリの場合も単発で終了するようなものなら書いてなくても動く

サーバーアプリの様に長時間連続稼動するものは当然メモリリークが起こる

72 :68:2006/01/13(金) 16:53:15
>>69
> 特に buf のことがよくわからないだけに、どう扱ったらいいのかよくわからないよ。

MF-Safeにしたいから、gethostbyname_rを使うんだよね?

gethostbyname_rが利用するメモリを、gethostbyname_rを呼び出す側が用意する。
利用目的は帰り値の保存(hostent構造体には入りきらないもの)。

MF-Safeなインターフェースのメモリ管理には、
・メモリを呼び出す側が用意する。gethostbyname_r(glibc版)
・freeする関数も準備してある。getaddrinfo/freeaddrinfo
・スレッド固有メモリを使う。gethostbyname_r(一引数版)
などのパターンがある。

buf, ret, h_name, h_alise, h_addr_listを%dで出力してみれ

73 :デフォルトの名無しさん:2006/01/13(金) 16:57:03
>63
rexecでできました。
ただし、rexec実行後に毎回passwordを聞いてくるので、それを無しに
したいのですが。

74 :デフォルトの名無しさん:2006/01/13(金) 17:09:54
> ちなみにFedoraでの設定方法はスレ違いなので、ここで聞くなよ

75 :デフォルトの名無しさん:2006/01/13(金) 18:31:56
もしかすると既出の質問かもしれないのですが
開発を主にUnix(solaris)で行い、運用も同OSで行うようなもので
しかし時々Win2000 or XPでも使用するソフトをつくる予定です
その際に悩んでいることがあるのでおねがいします

Unixのソケット関数とWin32のAPIで明らかに仕様が違うため
共通で使うことができません

Javaを仕様すればソケット部分も含めて同じにできますが
C++を使用したいのでそれはできません

このような場合にはどう対処するのがただしいのでしょうか?

76 :デフォルトの名無しさん:2006/01/13(金) 18:38:17
違うところだけ、汎用インターフェースを持つモジュールにまとめる。


77 :デフォルトの名無しさん:2006/01/13(金) 19:51:41
#ifdef

78 :デフォルトの名無しさん:2006/01/13(金) 20:28:23
>>75
Java+JNI+C++

79 :デフォルトの名無しさん:2006/01/13(金) 20:28:58
>>72
> MF-Safe

MT-Safeのこと?

80 :72:2006/01/13(金) 20:31:31
そう(w
寝転びながらタイプしていたから、Tまで指が届かなかったようだ…

81 :デフォルトの名無しさん:2006/01/14(土) 12:29:26
2つのPCをLANクロスケーブルで接続して
通信速度を計測したいと思いいろいろ考えているのですが、
スタンダードな方法ってありますか?

82 :デフォルトの名無しさん:2006/01/14(土) 12:43:22
pathcharなど
http://www.ittc.ku.edu/Projects/DREN/software/

83 :デフォルトの名無しさん:2006/01/14(土) 14:49:16
wwwのhtmlに接続して内容を保存したいんだけど

84 :デフォルトの名無しさん:2006/01/14(土) 14:49:50
>>83
wget

85 :デフォルトの名無しさん:2006/01/14(土) 16:17:23
LAN自体の測定はスマートビットとか使うけどね。
PCで測定すると、PCのベンチにも成ってしまう。

C++で動くヲレラッパーライブラリ作ればいいじゃん。
普通は有料フレームワークとかで吸収したりするけどね。

86 :デフォルトの名無しさん:2006/01/16(月) 01:55:57
このスレでよいかわかりませんが、質問させていただきます。
WinSockのVer2.2で、RAWソケットを用いたファイルの
送信ツールを作成しています。
>>6の一番下のリンク先のIP PACKET MAKERのIP,UDPをそのまま利用
して、送信するものをファイルから読み込ませるようにしました。

しかし、送信するファイルが大きいと、途中でエラーが発生してしまいます。
「途中」というのは次のような様子です。単位はバイトです。
パケット長 1000 ファイルサイズ 4721898 送信バイト 2266000
パケット長 1200 ファイルサイズ 4721898 送信バイト 2360400
パケット長 1000 ファイルサイズ 292739076 送信バイト 148693000

またエラー発生箇所は、
  make_udp_packet(&pPacket_udp->udp, src_ip, m_Sport, dst_ip, m_Dport, PacketLen-20, data_buf);

という、udpソケット生成関数内の
(make_udp_packet(struct udp* udp, UINT src_ip, USHORT src_port, UINT dst_ip,
               USHORT dst_port, USHORT len, char* read_buf)
という形式の関数です。)

wsprintf((LPTSTR)udp->udp_data, read_buf);  //ソケットデータ部にデータ書き出し

という部分のようです。もちろんこの前のほうが原因かもしれません。
わかりにくい説明だと思いますが、何かわかる方いましたら
よろしくお願いいたします。
ちなみに、IPレベルもいじれるファイル送信ツールを作ろうとしています。
そのようなツールをご存知ならば教えてください

87 :デフォルトの名無しさん:2006/01/16(月) 01:57:53
どんなエラーが起きるのかくらい書けこの呆けなすが

88 :デフォルトの名無しさん:2006/01/16(月) 01:59:03
winsock2で、サーバに繋がっているクライアントのLANケーブルを
引っこ抜いた直後にクライアントからsend()を実行すると戻り値が正常な
送信バイト数で戻ってきます
これを失敗扱いにしたいのですが、良い方法(ソケットの状態を取得でき
る関数等)ないでしょうか
send()の前にselect()を駆使するとできるのでしょうか

89 :デフォルトの名無しさん:2006/01/16(月) 13:58:13
回線速度の変化をシミュレートするためのサーバー
(クライアントとサーバーの間に配置しする)を
プログラミングしたいと思っているのですが、
参考にできるようなページはないでしょうか

90 :デフォルトの名無しさん:2006/01/16(月) 18:48:20
altqとかそう言う話?

91 :魚チョコ:2006/01/16(月) 21:43:09
>>88
ケーブルをすっこ抜いたのか……。そこまで試したことねえなあ。
ケーブル切れてんのに正常に戻ってくるってことは、
send() が送信バファーに送信データーをコピーしただけで戻ってきたってことでしょ。
select() を使っても、送信に関しては、そのソケットが正常に connect され、
送信バファーに空きがあって送信可能であるということしか分からない。
それに、送信データーがそのコンピューターから「出た」ことだけ把握しても、
相手との間に中継サーバーが介在してる場合、途中で握りつぶされて届かない
こともあるわけで、あまり意味がない。
確実に送信成功を検知するには、相手側に「受信完了」通知を出させるしかない。
エラーに関しては、たいてい send() 以外のソケット関数を呼んでるだろうから、
どれかがエラーを報告したら、WSAGetLastError() でも呼んで確かめればいいのでは。

92 :魚チョコ:2006/01/16(月) 21:51:43
>>89
要するに遅さ可変のプロックシーを作りたいということなのかね?
クライアントとの間に適当なプロコトルを定めて接続先を指定させ、
もたもた受信してもたもた送信――送受信バファーの分だけどばっ
と通信してあとおひるねするようなことになるだろうなあ。スィリアル
ポートを経由するようにすれば遅くできるけど遅すぎるかな。あとは
10BASE/T しかない旧式コンピューターを調達するとか。

93 :デフォルトの名無しさん:2006/01/16(月) 22:26:05
>>89
参考にするって言ったって、受けたパケットを他のイン
ターフェースに流すだけだからなぁ。
Cisco の Web でもみてネットワークスイッチの勉強
とかした方がいいと思う。

あと何のためにそんなもん作ってるのかわからんけど、
インターネット回線の擬似テストとかなら、てきとーに
パケットをロストするとか、パケットの順序を変えると
かの機能を入れておくといいかも。

94 :89:2006/01/16(月) 22:51:07
回答ありがとうございます

95 :86:2006/01/16(月) 23:07:34
書き忘れていました。遅れてすみません。
エラーですが、

pctmkr.exe の 0x7c950370 でハンドルされていない例外が発生しました
: 0xC0000005: 場所 0x0025795a を読み込み中にアクセス違反が発生しました。 。

という形で出ています。
OSはWindowsXP、また、VisualStudio7.1を使用しています。
よろしくお願いいたします。

96 :デフォルトの名無しさん:2006/01/16(月) 23:27:20
もしご存知の方がいたら教えてください。

Linuxのiptablesではパケットのアドレスやポートの情報をDNATやSNATで自由に書換えられますが、
同じことをWindowsで実現する方法はあるのでしょうか?

よろしくお願いします。

97 :デフォルトの名無しさん:2006/01/17(火) 00:01:08
>>86
> wsprintf((LPTSTR)udp->udp_data, read_buf);  //ソケットデータ部にデータ書き出し
>>95
> : 0xC0000005: 場所 0x0025795a を読み込み中
> にアクセス違反が発生しました。 。

read_buf の内容に '%' が含まれてるに一票。

>>88
ソケットはそもそもそういう物理的な障害等を隠蔽するよ
うに作られてるからなぁ...。
何でそんなことしたいのか書いたほうがいいと思う。

>>96
ある。
やり方は知らない。

98 :デフォルトの名無しさん:2006/01/17(火) 00:11:46
>>97
ソケットというかInernetだな。
電話みたいな強い接続指向のネットワークなら、切れたら分かるからね。

99 :デフォルトの名無しさん:2006/01/17(火) 00:15:42
> Inernet
< Internet
orz

100 :デフォルトの名無しさん:2006/01/17(火) 00:52:20
Innernet を hack しよう。

101 :デフォルトの名無しさん:2006/01/17(火) 01:00:20
×Innernet
○Inernet

102 :デフォルトの名無しさん:2006/01/17(火) 01:27:12
ワラタ

103 :88:2006/01/17(火) 01:49:33
>>91
>>87
レスどうもです。
クライアントは、ある装置からRS232Cで信号を不定期に受信します
その信号をサーバに送信しなければならず、信号の送信漏れは許され
ないシステムなんです
クライアントからサーバへは一方通行の垂れ流しプロトコルの為
送信完了(サーバへ信号が届いた)を検知する術が分かりません
TCP/IPのACKが戻ってくるという話を聞きましたが、winsockでその
信号を検知する方法等があれば良いのですが。。
良い方法ご存知の方、お知恵を貸してください。

104 :デフォルトの名無しさん:2006/01/17(火) 02:01:14
>>103
setsockoptでLINGER短くしろ。

>>103
> 信号の送信漏れは許されないシステムなんです
> クライアントからサーバへは一方通行の垂れ流しプロトコルの為

そこが設計ミスなんだけどな。
どこまでが到達したか機械的に分からないわけだから。


105 :88:2006/01/17(火) 02:48:13
>>104
逆にLINGERを0xFFFFに設定して置けば、ソケットは長時間クローズ
されないので、LANケーブルを再度接続した時にソケットに溜まっている
データが流れて行くのですかね
出勤したらすぐに試してみます
どうもありがとうございました

106 :デフォルトの名無しさん:2006/01/17(火) 07:23:56
UDPにしてプロトコルレベルのACK返した方がよくね?

107 :デフォルトの名無しさん:2006/01/17(火) 08:08:58
>>103
>その信号をサーバに送信しなければならず、信号の送信漏れは許され
>ないシステムなんです
送信してるなら、サーバが受信しようがしまいが関係ないwww

108 :86:2006/01/17(火) 09:21:49
>>97
ありがとうございます。確かに、おっしゃられたとおりです。
一時的な解決策として、送信元のファイルにそのような文字が
入っていないものを使用したところ、確かにバイト数が大きくても
送信できました。wsprintfを何とかしてみます。
ありがとうございました。

109 :デフォルトの名無しさん:2006/01/17(火) 09:30:10
>>106
何故にUDP?


110 :デフォルトの名無しさん:2006/01/17(火) 21:53:42
普通UDPだな

111 :デフォルトの名無しさん:2006/01/17(火) 22:14:30
FAでTCPは使いづらい

112 :デフォルトの名無しさん:2006/01/17(火) 23:14:30
UDPではデータの到着順が保証されない。
→正常に受信できない可能性の増加
→再送の必要性増加
にならないか?
トラフィック量、双方のCPUの処理量的にそれが問題なければいいのかもしれないけど

それよりもTCPでプロトコルレベルでACK
正常に送信できない(受信できていない)場合はデータをバッファリングして、後で送信

>>105
バッファがあふれたら?


113 :デフォルトの名無しさん:2006/01/18(水) 00:00:22
>>108
> wsprintfを何とかしてみます。

て言うか、wsprintf() のマニュアル見たの?
そこで、wsprintf() 使ってるのは意味不明だよ。

>>112
釣りか?
tcp 使ってても、パケットレベルで見れば

> UDPではデータの到着順が保証されない。
> →正常に受信できない可能性の増加
> →再送の必要性増加

だよ。

個人的には、tcp の上で自前の ACK とか言ってる奴
は、ネットワークプログラマをやめた方がいいと思う。

114 :デフォルトの名無しさん:2006/01/18(水) 00:33:20
>>113
> tcp の上で自前の ACK とか言ってる奴

アプリケーションよってはアプリケーションレベルでコネクションを確認することは意味がある。 
TCPが接続されていることと相手のアプリケーションがどういう状態にあるかは関係ない。 
BGPもTCP上で自前のKEEPALIVEメッセージを流すよ。

115 :デフォルトの名無しさん:2006/01/18(水) 01:27:41
>>114
KEEPALIVE と ACK は全然違うぞ。

116 :デフォルトの名無しさん:2006/01/18(水) 01:35:35
>>89
遅レスかも知れんが、やりたいのは packet shaping ってこと?
ぐぐればそれなりに情報出てくるよ。Linux にもドライバやツール類あるし。


117 :88:2006/01/18(水) 02:23:22
<報告>
たくさんのレスありがとうございます
LINGERをまず試してみたのですが、LANケーブルを切断後、
およそ10秒後にOS(WindowsXPproSP2)がソケットを強制破棄
した様子でLINGERは無視されました
TCPレベルのACKは取り方が分からなかったので試していません
今回は送信する信号のlengthが固定値のため、結局SNDBUFを
1信号分に設定することで送信エラー時は再コネクト後に前回
送信した信号から送信開始、という仕組みにしました
…と言ってもご指摘の通り、信号が出て行っただけでサーバへ
の到達は全く保障されていませんが垂れ流し仕様を作った設計者
も責任を感じているらしく了承してもらいました

118 :デフォルトの名無しさん:2006/01/18(水) 02:25:19
>>113
> 個人的には、tcp の上で自前の ACK とか言ってる奴
> は、ネットワークプログラマをやめた方がいいと思う。

お前がやめろ。是非やめろ。

119 :デフォルトの名無しさん:2006/01/18(水) 02:27:24
>>117
Windowsはlink downで、network adoptorが切断状態になるんじゃない?

120 :デフォルトの名無しさん:2006/01/18(水) 06:19:54
それは自分側のifについて。
相手側のifが落ちてもこっちに通知が来るのはそれなりに遅れる。

121 :デフォルトの名無しさん:2006/01/18(水) 09:25:35
>>120
>>88

122 :デフォルトの名無しさん:2006/01/18(水) 09:39:38
>>113
アプリケーションレベルのプロトコルによる。
電文のシーケンスエラーというのもあるからな。
ACK/NAKのハンドシェイクを入れといたほうが何かと安心。

>>88の問題もアプリケーションレベルでACK/NAKのやり取りをすれば解決だな。

123 :86:2006/01/18(水) 13:03:10
>>113
wsprintfについてですが、
もともと>>6の一番下は簡単な文字列を送るプログラムらしいので、
そういう何かなのかとあまり考えずに使っていました。
一応、単純に第2引数のポインタで、UDPデータのアドレスを得るように
してみました。しかし、3バイト以外データが空で、アドレスを
埋め込んでしまったかもしれません。
プログラムの基礎が足りないようです。勉強します。

もうひとついいですか?1度に1500バイトを超えるデータを
単位としたくて、64kB以下を送信するフラグメントを作ってみました。
Etherealで観測すると、UDP IP IP IP... UDP IP IP IP ...
という形になっています。WinSock2の標準のUDPでもこれをしっかり
組み立ててくれるのでしょうか?まだUDPデータがしっかりしていないので
確認できないのですが・・・

124 :デフォルトの名無しさん:2006/01/18(水) 13:16:13
>>123
> まだUDPデータがしっかりしていないので確認できないのですが・・・

etherealが先かよ!
IPフラグメントでググレ。

125 :デフォルトの名無しさん:2006/01/18(水) 15:32:46
すいません質問なんですが、下記の項目はそれぞれどういう意味なんですか?
紹介されてるHP等あったら教えてください、



-send
-sendto
-recv
-recvfrom

-wsasend
-wsasendto
-wsarecv
-wsarecvfrom




126 :デフォルトの名無しさん:2006/01/18(水) 16:15:46
>>125
>>1

127 :デフォルトの名無しさん:2006/01/18(水) 22:55:46
>>122
> 電文のシーケンスエラーというのもあるからな。

tcp 上で?
プログラムがバグってるか、タコなプロトコルスタック
/デバイスドライバ/オペレーティングシステム でも使
ってるのか?
(まあ、過去にはそういう経験もしたことあるわけだが…。)

>>118 といい、痛い奴が最近多いのか?

> >>88の問題もアプリケーションレベルでACK/NAK
> のやり取りをすれば解決だな。

そんなことができれば、>>88 も苦労してないだうな。


128 :デフォルトの名無しさん:2006/01/18(水) 23:21:11
>>127
interoperabilityを考えたプロトコルなら普通(←言い過ぎか?)は
ACK/NAK相当の応答が入ると思う。
応答のタイムアウト等で>>88の問題にも対応できるし。

129 :デフォルトの名無しさん:2006/01/19(木) 00:21:49
>>128
ネゴシエーションとかのことを言ってるのかな?

ただそれは、通信路の話とは別の話で、例えば各々の
プロセスが共有メモリを介在して動く時にも必要な話だ
よね。

世の中、そういう階層の分離ができない奴がいて、
>>122 みたいに「ネットワークだから伝送エラーが起き
るな。なんとなく心配だから、ハンドシェークしておこ
う。」とか言う、勘違い君がいたりする。

> 応答のタイムアウト等で>>88の問題にも対応できるし。

>>103 クライアントからサーバへは一方通行の垂れ
     流しプロトコルの為

130 :デフォルトの名無しさん:2006/01/19(木) 00:42:27
>>127
>>129



131 :デフォルトの名無しさん:2006/01/19(木) 06:50:17
>>127
自作してるんじゃないの?

132 :デフォルトの名無しさん:2006/01/19(木) 11:28:49
ひょっとしてバインドアドレスが違えば同じポートでサーバソケット開けたりする?

133 :デフォルトの名無しさん:2006/01/19(木) 11:33:57
つ SO_REUSEADDR

134 :デフォルトの名無しさん:2006/01/19(木) 12:01:23
同一プロセス内でそれぞれ 127.0.0.1 と 192.168.1.170 (LANのアドレス) にバインドした
同じリスニングポートのサーバソケットを開けた。telnet 127.0.0.1 9999 でやった
時は前者のサーバソケットへ、telnet 192.168.1.170 9999 でやったときは
後者のサーバソケットへ接続。ふーんやっぱそうでつか。

135 :デフォルトの名無しさん:2006/01/19(木) 12:32:24
当たり前。
・TCP層のアドレスは<IPアドレス、ポート番号>。
・インターネットアーキテクチャではホストでなくインターフェースごとにIPアドレスを付ける。
の二つから。

136 :デフォルトの名無しさん:2006/01/19(木) 16:06:42
1. UDP のパケットを recv する
2. パケットをキューに入れる (別のスレッドに渡すため)
3. 1. に戻る

というループをしてるんですが、recv が終了して次の recv に入るちょっとした間に
到着したパケットって次で取得できるんですか? それとも取り漏らす?

137 :デフォルトの名無しさん:2006/01/19(木) 16:11:17
>>136
その「ちょっとした間」に来るパケットの量が、
(OSの)UDPの受信バッファよりも多ければ取りこぼす。

138 :デフォルトの名無しさん:2006/01/19(木) 16:21:41
>>137
サンキュー、パケット受信に入っていなくても OS がしばらくは持っててくれるわけね。
たまにパケット送りそこなってるらしいアプリがあって、しかも原因不明らしく、なぜか
受信側に嫌疑が振られてたんだけど、これで心置きなく突っぱねることができそうです。

139 :デフォルトの名無しさん:2006/01/19(木) 16:48:43
>>138
> たまにパケット送りそこなってるらしいアプリがあって、しかも原因不明らしく、

インターネットアーキテクチャでは、
途中にいるルータが破棄する可能性が前提なので、
パケットを受け損なうことがあると困るのであれば、
TCPその他で保障してやる必要がある。応答確認、再送など。

ルータは中間にいない場合も、HUBが破棄するかも知れない。



140 :デフォルトの名無しさん:2006/01/19(木) 17:18:56
>>139
困る困らないは別として、パケットが十分に低いトラフィックで受信側NICまで届いているのに
APでは取りこぼしていたりすると「実装不味いんじゃない?AP作り直せば」ということになるでしょう。
>>138はそんな感じなのでは?

141 :デフォルトの名無しさん:2006/01/19(木) 17:24:02
>>139
重ねてありがとうございます。マルチキャスト使って LAN 内のサーバ
探してまして、その応答部分ですね。

C: 起動。活動中のサーバを探すためにマルチキャスト
S: 自分が活動中であることを送り返す   ← ここ
C: 活動中のサーバのうち適切なところへ接続

サーバは常に何台か動いているので実害はないのですが、テストしてると
たまに起動サーバ数と応答数が合わないらしくて (再現性なし)。状況によっては
1〜2 台になったりもするんで、バグなら直しておかないと。
ほぼ同時に複数の応答パケットが返って来るんで、先の 「ちょっとした間」 で
取り漏れてるんじゃないかと疑われそうになったしだいです。

TCP のパケットエラーとかは皆無なんで、ネットワークのせいではなさそう
なんですけどね。というか送信側は別会社でソースぐちゃぐちゃだったんで
あれこれ別の理由を探してるのかなぁ、と…
どうもありがとうございました。

142 :デフォルトの名無しさん:2006/01/19(木) 19:35:15
ほぼ同時に多数から返事が返ってくるなら、イーサネットでの衝突、というやつで
UDPは喪失しているのかもしれないな。

143 :デフォルトの名無しさん:2006/01/19(木) 19:44:50
帯域が十分足りてるときにコリジョンでパケットが落ちるなんて
あまり考えられないけどなぁ・・・って普通に社内LAN通してるのか。
そりゃUDPなら落とすこともあるか。

144 :デフォルトの名無しさん:2006/01/19(木) 22:02:53
>>141
たまにと言うのがどれぐらいの頻度か知らんけど、
sniffer とか ethereal とかでモニタすると言う
のはどうだろうか?

145 :デフォルトの名無しさん:2006/01/19(木) 22:35:49
>>142
> イーサネットでの衝突
それはイーサネットレベルで検知・再送されるんじゃなかったけ。


146 :デフォルトの名無しさん:2006/01/19(木) 22:47:44
UDPなら落とすこともある

147 :デフォルトの名無しさん:2006/01/19(木) 22:54:34
>>146
イーサにとってUDPもTCPもないでしょう? それは別のレベルでの話。 イーサは16回
再送を試みるらしい。

148 :デフォルトの名無しさん:2006/01/19(木) 23:02:27
etherealみたいにパケットをキャプチャするのってどういう仕組みでパケットを読み取っているのでしょうか?
ソケットにのぞき窓でもあるんですか?

149 :デフォルトの名無しさん:2006/01/19(木) 23:30:20
あるんです

150 :デフォルトの名無しさん:2006/01/19(木) 23:44:49
>>148
ほらあれだよ
ネットにつながってるLANのコネクタを監視したらいいじゃん
無差別だったらプロミスキャスだったっけな
etherealの名前のままEthernetをどんなパケットも逃さず監視するって感じなのかな
どうやってそういう風なプログラミングをするのかは不明だが・・・

151 :デフォルトの名無しさん:2006/01/19(木) 23:54:41
イーサネットと言っても色々あります。
>>145>>147の言っているのは10Base-5とか昔の話じゃないの?

スイッチングHUBだって、キューが溢れたり、
内部バスの(バタフライなどの)スイッチングネットワークで衝突が起きたら捨て放置だよ。

http://www.cs.cmu.edu/afs/cs.cmu.edu/project/phrensy/pub/papers/AroraLM94/node7.html

152 :デフォルトの名無しさん:2006/01/19(木) 23:55:38
>>150
> どんなパケットも逃さず監視する

逃しますって。ばんばんパケット飛んでると処理間に合わないから。




153 :デフォルトの名無しさん:2006/01/20(金) 00:24:20
>>152
まあ、Ethereal で全部取れたら、sniffer の糞重
い機器の立つ瀬がないわな。

154 :デフォルトの名無しさん:2006/01/20(金) 05:15:43
 こんばんわ。初心者の疑問なのですが、お教え頂けないでしょうか?

 DirectPlayでピアツーピアアプリを開発しようとしていたのですが、WEBで検索していて、
以下のように変化してきています。

1.ピアツーピアは NAT 越えできないから、費用かかってもクラサバでやるべきだろう。
2.DirectPlay は推奨されていない(MS自身を含めて)から Socket でやるべきだろう。

 で、今はサーバーを NAT の外に置き、クライアントはどこでも可、通信は Socket で行う。
という環境を想定しています。

 そこで以下の疑問が発生して悩んでいます。

1.部分的に UDP を使いたいのですが、UDP もやはり NAT 越え出来ないのでしょうか?
  今回の環境でいうと クライアントからの送信は UDP で行えるが、サーバーからクライアント
  への送信に UDP は使えないのでしょうか?
2.速さを要求する部分には UDP を使うべきでしょうか?TCP-IP と UDP ではかなり差があるもの
  なのでしょうか?

どうかよろしくご教授下さい。

155 :デフォルトの名無しさん:2006/01/20(金) 08:37:37
>ピアツーピアは NAT 越えできないから

ダウト

>1.
そんなことはない

>2.
無視できない差がある


156 :デフォルトの名無しさん:2006/01/20(金) 10:52:42
>>155
NATごぅぇできないだろ
設定めんどうくさいじゃん
頭で思っただけでルータが設定されるならいいけど

157 :デフォルトの名無しさん:2006/01/20(金) 11:02:29
>>155 ありがとうございます。


>1 そんなことはない

やはりできるのですね?DNSサーバーへの問い合わせとかにもUDP使われてる訳ですもんね。
調べてきます。


>2 無視できない差がある

やはり。


ちょっと、勉強し直してきます。また質問させて下さい。

158 :デフォルトの名無しさん:2006/01/20(金) 13:47:55
>>155 ちょっと進歩しました。

>そんなことはない

 NAT 、静的IPマスカレードは、ゲートウェイ外部から内部へのアクセスはできました。

 ところで、それ以外のIPマスカレードの場合、やはり外部から内部にアクセスはできないのでしょうか?
 IP、UDPに関わらす。
 

159 :デフォルトの名無しさん:2006/01/20(金) 15:07:47
>>158
内部のPC のアドレスを a.a.a.a 、ルータの外部アドレスをb.b.b.b
どこか他の PC やサーバのアドレスを c.c.c.c、
p, q, r をポート番号としたとき、

多くのルーターは、
a.a.a.a:p ⇒ b.b.b.b:q ⇒ c.c.c.c: r と UDP パケットを転送すると、その後しばらくの間は、
c.c.c.c: r ⇒ b.b.b.b:q と到着したパケットを a.a.a.a : p に転送してくれる。

これを利用していろいろなことが出来る。

160 :デフォルトの名無しさん:2006/01/20(金) 15:29:49
>>158
UDP Hole punching でぐぐるといいよ。


161 :デフォルトの名無しさん:2006/01/20(金) 16:04:36
>>154
> 2.速さを要求する部分には UDP を使うべきでしょうか?
>   TCP と UDP ではかなり差があるものなのでしょうか?

速度に関する特性が全く違うので応用による。
UDPで、どんな状況下でも効率の良い実装を行うのはかなり難しい。


162 :デフォルトの名無しさん:2006/01/20(金) 16:48:57
TCPでもほとんど再送が起こらない状況ならUDPとたいして変わらんよ。

163 :デフォルトの名無しさん:2006/01/20(金) 19:47:17
unix系でのネットワークプログラミングなんですが。
サーバー側のaccept()で待つソケットについて質問があります。
普通、accept()に突っ込むソケットacpt_sockはまずバインドして、listen()で接続を受け付ける
クライアント数を設定するわけですが、accept()してからだと、クライアント数を変更することが
できません。
accept()中でも接続を受け付けるクライアント数を変更したいのですが、何かいい方法を教え
ていただけないでしょうか。

164 :デフォルトの名無しさん:2006/01/20(金) 19:55:02
>>159

 なるほど!スゴイ。このあたり掘り下げて調査してみます。

>>160

 こ、これも!さっきWEBで見ていたGapNATとNATSとかより、確実そうな方法。調査してみます。

>>161

 そうですか。では、UDPをアプリデータ通信よりも、経路確保やKEEP-ALIVEの為に使うのが現実的そうですね。

>>162

 ありがとうございます。経路確保やKEEP-ALIVE以外は全てIP転送を使用するというところから初めてみます。


 皆様、的確なご指示ありがとうございます。

 以前、別スレで他の質問をした事がありますが、板違いで質問ツアー → 玉砕 というパターンばかりでした。
 これほど的確に教えて頂けるものなのですね。感動しました。2ちゃんすごい。

 これからはスレの内容を充分把握してから質問するよう心がけます。ありがとうごさいました。

 

165 :デフォルトの名無しさん:2006/01/20(金) 21:41:04
http://pc8.2ch.net/test/read.cgi/gamedev/1078503950/635

166 :デフォルトの名無しさん:2006/01/20(金) 21:49:38
>>164
>  経路確保やKEEP-ALIVE以外は全てIP転送を使用する

UDPとTCPが並列関係。
IPはUDPとTCPの下位層で、
UDP使った時もTCP使った時も、IPを使っている。

TCP/IPというのは、IP, TCP, UDP, DNS, HTTPなどプロトコル群の総称。
同じ意味の言葉に、インターネット・プロトコル・スーツがある。

167 :デフォルトの名無しさん:2006/01/20(金) 22:51:55
>>163
ん? backlog を動的に変えたいのか?
まず、何のためにそんなことしたいのか書いたほうがいいと思う。
(backlog の意味を勘違いしてるに一票を投じておくか…。)

>>166
DNS と HTTP まで含むのか?

168 :デフォルトの名無しさん:2006/01/20(金) 23:05:05
>>167
そういう定義です。> TCP/IP
http://www.ipa.go.jp/security/rfc/RFC2828-03TJA.html#TCP/IP
http://www.instantweb.com/D/dictionary/foldoc.cgi?TCP%2FIP

169 :デフォルトの名無しさん:2006/01/21(土) 07:03:10
レイヤ的には

DNS -> UDP -> IP
HTTP -> TCP -> IP

ですよね?
どうして UDP/IP とは言わないんだろう・・・orz

170 :デフォルトの名無しさん:2006/01/21(土) 07:26:47
>>166
すみません。TCPのつもりでIPと書いていました。
用語を適切にしようするよう注意します。

171 :デフォルトの名無しさん:2006/01/21(土) 07:35:08
>>169
いや、言うよ?

172 :デフォルトの名無しさん:2006/01/21(土) 07:37:25
>>165
申し訳ありません。マルチポストしてしまいました。
2度とこのような事はしませんのでご勘弁下さい。

173 :デフォルトの名無しさん:2006/01/21(土) 07:46:48
>>171
言わないな。
TCP/IPが>>168の意味だから。

174 :デフォルトの名無しさん:2006/01/21(土) 16:29:19
>>173
だから、言うって。上のリンク見ても別に否定されないじゃん。

175 :デフォルトの名無しさん:2006/01/21(土) 18:04:01
インターネット研究している奴が、UDP/IPなんて言っているの聞いたことない。

176 :デフォルトの名無しさん:2006/01/21(土) 18:10:09
http://www.google.co.jp/search?q=%22UDP%2FIP%22&start=0&hl=ja&lr=lang_ja&ie=utf-8&oe=utf-8

まあ、DNSやHTTPをTCPやIPと同列に語るよりは、ずっとまとも。

177 :デフォルトの名無しさん:2006/01/21(土) 18:41:49
HTTP,FTP,etc. DNS,SNTP,etc.
------------------------------
TCP UDP
------------------------------
IP

178 :デフォルトの名無しさん:2006/01/21(土) 18:58:46
>>175
言うよ。
単にTCPと比べて用途が限定されてるから機会がそれほど多くないだけで。

179 :デフォルトの名無しさん:2006/01/21(土) 19:01:38
UDPもTCPもIP込みが当たり前だから、TCP, UDPで十分。
「UDPとIP」を「UDP, IP」と書いたり言うことはあっても、UDP/IPは変だ。

180 :デフォルトの名無しさん:2006/01/21(土) 19:17:14
UDP/IPが変に感じるのは、単なる知識不足。

181 :デフォルトの名無しさん:2006/01/21(土) 19:20:42
「TCP」との比較として「UDP」とだけ表記されることは良くある、というよりこっちが大半だけど

TCPについては「TCP/IP」と明記していながら
UDPについては「UDP」としか書かれていない、なんてことは
まともな書籍、資料等なら、まず無い。

182 :デフォルトの名無しさん:2006/01/21(土) 19:59:17
へー(棒読み

183 :デフォルトの名無しさん:2006/01/21(土) 20:46:44
ひとりで頑張るね

184 :デフォルトの名無しさん:2006/01/21(土) 21:00:31
TCPとUDPの使われ方が絡んでるだろ>TCP/IP

185 :デフォルトの名無しさん:2006/01/21(土) 22:35:05
>>179
> 「UDPとIP」を「UDP, IP」と書いたり言うことは
> あっても、UDP/IPは変だ。

お前、UDP/IP って「UDP と IP」の意味だと思ってる
のか? そりゃそんな意味で UDP/IP なんて書く奴はい
ないよ。

>>184
何を言いたいの?

186 :デフォルトの名無しさん:2006/01/21(土) 22:44:57
おまえらヌルい盛り上がり方してんな。

187 :デフォルトの名無しさん:2006/01/21(土) 22:47:09
>>181
>TCPについては「TCP/IP」と明記していながら

"TCP/IP" と書いたら、TCP だけでなく UDP 等も含んだプロトコルセットを
意味するのが一般的でしょう。反対に、UDP/IP という表記は多くの人に
とって違和感のある表現であると思われます。

188 :デフォルトの名無しさん:2006/01/21(土) 23:03:41
レイヤを分けるスラッシュじゃないの?

189 :デフォルトの名無しさん:2006/01/21(土) 23:06:27
>>186
いつものことだよ

190 :デフォルトの名無しさん:2006/01/21(土) 23:08:31
こんばんは。UDP Hole punching についてお教え下さい。

1.TCP でこの処理を行えないという点がよく分かりません。
「TCP は非対称だから」という事なのですが。接続の方向のことでしょうか?

2.UDPで UDP Hole punching を行った後は TCP で接続できるのでしょうか?


ちなみに、間違っているかも知れませんが 私は UDP Hole punching を以下のよう
に理解しています。

別々のNAT内に Ha, Hb がありルーターをそれぞれ Ra, Rb とする。
インターネット上に Hc がある。

1.Ha, Hb ともに Hc に接続 Hc は Ha, Hb のグローバルアドレスを記録する。
2.Ha は Hc から Hb のグローバルアドレスを取得し接続する。
  この時、Rb が conn NAT でなければ越えられないが、Ra には Hb との変換レ
  コードが記録される。
  この時点で、Hb から Ha に接続できる。
3.同様に Hb が Ha に接続( punching )する。

191 :デフォルトの名無しさん:2006/01/21(土) 23:15:17
>>187
「TCP over IP」の意味で「TCP/IP」という言葉を使う人が、世界に一人も居ないと思ってるの?
それと同様の意図で「UDP/IP」と言うのは間違いだと言いたいわけ?

192 :デフォルトの名無しさん:2006/01/21(土) 23:16:42
すみません。>>190 で言ってるグローバルアドレスとはポート番号を含めたものです。
よろしくお願いいたします。

193 :デフォルトの名無しさん:2006/01/21(土) 23:30:26
|―――――――|
|  UDP  |  TCP  |
|―――――――|
|      IP      |
|―――――――|

194 :デフォルトの名無しさん:2006/01/21(土) 23:31:05
めっちゃずれてたw

195 :デフォルトの名無しさん:2006/01/21(土) 23:31:10
>>21
∧_∧         ミ ギャハッハッ ズレてる!ズレてる!
     o/⌒(. ;´∀`)つ
     と_)__つノ  ☆ バンバン




∧_∧         
     o/⌒(゜Д゜  )つ
     と_)__つノ

196 :デフォルトの名無しさん:2006/01/21(土) 23:32:42
>>191
>それと同様の意図で「UDP/IP」と言うのは間違いだと言いたいわけ?

こっちは世界的に見て少数派だろうなぁ。
UDP が over IP である事を厳格に明示したい場合ってどういう時?

197 :デフォルトの名無しさん:2006/01/21(土) 23:34:46
     m(・∀・)<この5円玉をじっと見つめてください
     |
     D

     m(・∀・)<あなたはだんだんどうでもよくなる…
     /
    D ))

     m(・∀・)<あなたはだんだんどうでもよくなる…
      \
      (( D

198 :デフォルトの名無しさん:2006/01/21(土) 23:48:51
>>196
は?
あんた「UDP/IPは間違い」って言ってんだろ?
多数か少数かは関係ないだろ。

199 :デフォルトの名無しさん:2006/01/21(土) 23:55:03
>>198
誰と勘違いしてるのか知らんが、>>197 でも見て落ち着け。
ちなみに俺も、理由無しに UDP/IP なんて書いてる奴がいたら、ちょっと眉をひそめるな。

200 :デフォルトの名無しさん:2006/01/22(日) 00:01:18

  .-、 
 (,,■)


201 :デフォルトの名無しさん:2006/01/22(日) 00:22:16
>>190
1. TCPでも同様の技法は使える。
  非対称の接続を行う場合対称構造にはならない。
  (ただしTCPには対称に接続確立する方法がある)
2. NATルータは通常TCPとUDPを区別して管理しているので不能。

ちなみに、登録サーバがあるスタイルのものを、
UDP hole punchingと呼ぶ流儀もあるが、
http://en.wikipedia.org/wiki/UDP_hole_punching
portの利用方法のことだけを言う場合も多い。
http://muziyoshiz.jp/20041225.html

私は後者(の前者)をUCP hole punchingと読んでいる。

202 :デフォルトの名無しさん:2006/01/22(日) 01:06:44
ローカルアドレス入りのデータグラムををGatewayから
たくさん送出しちゃいました・・別に大丈夫ですよね?
ちなみに私は18歳女子高生(処女)です。

203 :デフォルトの名無しさん:2006/01/22(日) 01:11:36
残念、俺は非処女だよ。

204 :デフォルトの名無しさん:2006/01/22(日) 01:12:19
>>202
それはUDP/IPのパケットですね?

205 :デフォルトの名無しさん:2006/01/22(日) 02:17:22
Winsock+vc++でのWindowsプログラミングの練習中なんですが質問が何点か。
買った参考書では、一対一でのチャットのソフトではTCP/IPを、複数での
チャットソフトではUDP用いていましたが、TCP/IPで同様に複数でチャットを
するには、接続分ソケットを用意するということでしょうか?

それと、WSAAsyncSelectを使いメッセージ等を単一で処理をするのと、
マルチスレッド化してaccept()などを使用するのと、どちらが良いのでしょうか?
どちらとも、ということでしたら、理由などを参考程度にお願いします。

206 :デフォルトの名無しさん:2006/01/22(日) 02:20:04
WinsockFAQの、「どのIO戦略を使うべきか」でも見とけ

207 :デフォルトの名無しさん:2006/01/22(日) 02:23:35
>>205
はい、UDP/IPとちがって、TCPは接続指向ですから、
接続後とにその端点であるソケットが必要になります。

208 :205:2006/01/22(日) 02:30:18
助かります、ありがとうございました。

209 :デフォルトの名無しさん:2006/01/22(日) 02:35:23
>>205 間違っているかも知れませんが、自分は以下のように理解しています。

TCPは基本的にクラサバで、サーバー側がListenしてクライアントがConnectする。
Listenしているポートには、IPアドレス.ポート番号さえ違えば、いくらでも接続できる。(例:Webサーバーのポート80)



210 :デフォルトの名無しさん:2006/01/22(日) 03:01:16
だってTCPの接続の識別子は、
<src IP, src port, dst IP, dst port>の四つ組なんですもの。

211 :デフォルトの名無しさん:2006/01/22(日) 05:09:31
>>202
どこかのサイトの誰かのローカルアドレスに届くだけだから大丈夫

212 :デフォルトの名無しさん:2006/01/22(日) 12:40:51
>210
いや、UDPだって同じだろ?

213 :デフォルトの名無しさん:2006/01/22(日) 12:49:12
>>210
UDPには接続はない。常に一方向である。
よって<dst IP, dst port>だけで目的のソケットまで辿り着く。
TCPはそうではない。<src IP, src port, XXX, 80>は何組みもありうる。
これが>>209が理解し、>>212が理解してないこと。

UDPで、<src IP, src port>にパケットを返すケース、
それは上位層(セッション、アプリケーション)の仕様なのである。
# UDP hole punchingは上位層の振る舞いを利用する。
TCPの場合は、TCP層で<src IP, src port>が相手であることがはっきりしている。

214 :デフォルトの名無しさん:2006/01/22(日) 13:29:18
よくわからんな。
TCPのsrcaddr:srcpotが信頼できて、UDPのは信頼できないってだけの話か?
それともUDP・TCPのソケットレイヤにおける動作の違いが言いたい?
TCPだって、相手にデータを返すのは上位層の役割。送信と受信で
TCPソケットを分けるような変態設計もできるわけだし。

215 :デフォルトの名無しさん:2006/01/22(日) 13:44:27
自分はUDPパケットの中身よく知らないんですが、ひょっとして、
物理的にも DstAddr、DstPort しか持っていないんですか?

216 :デフォルトの名無しさん:2006/01/22(日) 13:47:45
すいません。sage

217 :デフォルトの名無しさん:2006/01/22(日) 13:54:28
>>215
UDPパケットにも、ありますよ。
http://www.faqs.org/rfcs/rfc768.html

けどUDP層ではそれは使わないんです。
それがUDPとTCPのサービスの違いになっています。

> それともUDP・TCPのソケットレイヤにおける動作の違いが言いたい?

その動作はサービスの違いを反映しているんです。
OSIの言葉で言うところの、各層のエンティティのアドレスって考え方を理解してください。

>>210はTCPの極めて基本的な常識です。
TCPの接続を実現するためには四つ組を識別子に使わざるを得ないんです。
# <dst IP, dst port>が同じ接続を認めないといけないので。
UDPには接続がないので、そうではありません。

これを理解してない人はTCP/IPの基本を理解してないと言わざるを得ません。


218 :デフォルトの名無しさん:2006/01/22(日) 13:57:33
>>215
SrcAddrはIPヘッダに、SrcPortはUDPヘッダに。


219 :デフォルトの名無しさん:2006/01/22(日) 14:15:36
>>218
加えるにpseudo headerの中にSrcAddr, DstAddrもある。


220 :デフォルトの名無しさん:2006/01/22(日) 14:30:18
>よって<dst IP, dst port>だけで目的のソケットまで辿り着く。
は間違い。UDPでもconnect済みのソケットは、srcを区別して捨てるようになるから。

221 :デフォルトの名無しさん:2006/01/22(日) 14:31:18
> TCPだって、相手にデータを返すのは上位層の役割。

レイヤーが理解できていませんね。

ヒント: ACK パケット

>>219
え゛?

222 :デフォルトの名無しさん:2006/01/22(日) 14:37:40
この場合のデータとは、TCPのペイロード部分を指す。
ソケットレベルで無意味なACKは考えない。
そのために、パケットではなくデータという言葉を使ったんだから。

223 :やっぱり、理解できていなかったか…。:2006/01/22(日) 14:48:12
>>222
ふーん、そうなんだ。

で、誰がそんな話してるの?

独り言なら、チラシの裏へ…。

224 :デフォルトの名無しさん:2006/01/22(日) 15:11:35
TCP hole punching を発明?

http://homepage3.nifty.com/toremoro/p2p/firewall.html の下方にあるように UDP hole punching は UDP
でしかできないとなっています。でも以下の方法でやれば TCP でもできるのでは?...

1.STUN サーバー(グローバル状態)に接続して、自分の Address.Portを記録してもらう(サーバー用として)。

2.外部からつなぐ場合、STUN サーバーから Address.Portを取得して、UDP で「サーバー用にポートを切
  り替えて」というパケットを送る。

3.ポートを切り替える。

4.外部からTCPで接続する。

駄目でしょうか?


225 :デフォルトの名無しさん:2006/01/22(日) 15:40:15
>>224
> 3.ポートを切り替える。

が無理です。

>>224のように登録サーバを使うhole punchingなら簡単です。

双方自分のIPアドレス、ポート番号を登録して、
ローカルソケットには登録したIPアドレス、ポート番号をbindし、
同時に相手にconnectしにいけばいいだけです。

UDPでも全く同じコードで動きます。


226 :デフォルトの名無しさん:2006/01/22(日) 16:00:19
>>225

>ローカルソケットには登録したIPアドレス、ポート番号をbindし、

ポートを切り替えるといってたのはその事です。やはりできるのですね?

なんでこれをやりたいかと言いますと、単にNATの背後にある PC 同士で通信したいだけなんです。
でも、UDP でやると セッションとかパケットの並べ替えとかを UDP の上に作りこまないといけないと
書いてあり、場合によっては UDP の上で TCP を発明するぐらい作りこむ事になりかねないって事
だったんです。
でも TCP でも やりようによってはできるんですね。やる気でてきました。

ところで、Symmetric NAT のルーターって全体の何割くらいあるものなのですか?
Symmetric NAT は、ポート番号総当りで突破できるでしょうか?


227 :デフォルトの名無しさん:2006/01/22(日) 18:20:47
注意点としては、
・SYNパケットがhole punchingを行うことになるが、
相手がhole punchingする前にルータにSYNが到達した場合、
ルータの振る舞い、ルータの出したICMPを受けた時のプログラムの振る舞い。

一番簡単なのは中継サーバを使う方法。


228 :デフォルトの名無しさん:2006/01/22(日) 20:23:32
かなり難しそうですね。パケットを何万を投げると何とか攻撃になりそうだし...
中継サーバーが確実ですね。

229 :デフォルトの名無しさん:2006/01/22(日) 20:51:31
>>228
udpで実際 Punching holeやってるが
コネクション型のTCPでできるの?


230 :デフォルトの名無しさん:2006/01/22(日) 21:11:12
>229
すみません。あまりネットワーク詳しくない上に、確認する環境がないもので...orz
ただ、WEBで調査した結果、できそうだなと...

でも、ルータの変換テーブルへの記録され方が TCPとUDP で同じだとの前提ですが。(ConnNAT,Destricted何とかNAT,SymmetricNATなど)

方法としては単純で、以下の手順を行います。

1.PC-A から 外部の PC-B にクライアント接続します。PC-B は PC-B からみたリモートアドレスとリモートポートを取得します。
2.PC-A はローカルポートとリモートポートを逆にして、サーバーとして待機します。
3.外部の PC-X は PC-B から PC-A のアドレスを取得して、クライアントとして接続します。

UDP Hole Punching と違うのは、ポートを逆にする手順だけだと思います。    確認できたとしたら、是非教えて下さい。

231 :デフォルトの名無しさん:2006/01/22(日) 21:16:48
sage

232 :デフォルトの名無しさん:2006/01/22(日) 21:19:43
TCPのNATはちゃんとstateを見てるんじゃないのかなぁ。

233 :デフォルトの名無しさん:2006/01/22(日) 21:24:39
今時の賢い奴はシーケンス番号の重複もちゃんとチェックしているはずだしね。

234 :デフォルトの名無しさん:2006/01/22(日) 21:29:42
>>.230 ですが。

すみません。さっきの手順でつながるのは ConnNAT の場合だけでした。
DistrictedなんとかNAT (2種類) を考えた場合、 UDP Hole Punching と同じ手順が必要だと思います。
(UDP Hole Punching の手順に ポート逆転 を追加)


235 :デフォルトの名無しさん:2006/01/22(日) 21:32:57
>>232 >>233
まじですか?もうプログラムを作り変え始めてたのに。
調査はするけど詰めが甘い自分...orz

236 :デフォルトの名無しさん:2006/01/22(日) 21:55:07
さっきの手順をまとめ直してみました。 駄目ですかね...

1.PC-A から 外部の PC-O にクライアント接続して待機。PC-O は PC-O からみたリモートアドレスとリモートポートを取得します。

2.PC-B から 外部の PC-O にクライアント接続して待機。PC-O は PC-O からみたリモートアドレスとリモートポートを取得します。

3.PC-A から PC-B に接続する場合、PC-O に要求を出します。

4.相手方のアドレスとポートを取得した両方の PC は切断して相手方にクライアント接続します。
  接続は失敗しますが、自分側ルーターの変換テーブルに相手方とのレコードが残ります。(きっと)

5.PC-B はローカルポートとリモートポートを逆にして、サーバーとして待機します。

6.PC-A は PC-B にクライアント接続します。

237 :デフォルトの名無しさん:2006/01/22(日) 23:23:41
>>236
俺の認識だと
■UDPは非コネクション系だからNATはそのパケットが正規の
ものか認識できない IPアドレスでは
■送信した時のポートを覚えておいて、そのポートできたパケットを受け入れる
■送信したIPアドレスも覚えておく

TCPのコネクションだと相手のIP固定だからルーターも
アドレスで選別できるよね?





238 :デフォルトの名無しさん:2006/01/22(日) 23:32:43
>>237
ついでに
私が作ったのはTV電話だけど
UDPの欠落、順序違いはたまに発生するけど
頻度から考えてTCPの再発明までこったする必要ないと
思うが?
TV電話の音声・映像は逆に再要求で遅延がひどいパケットは
捨てたいからUDPが向いてるけど
>>236さんがリアルタイム性の強いものを作るならばUDPの方が
向いてるし、ファイル系の速度よりも信頼性を取るならば
リレーサーバーで十分と思うが

239 :デフォルトの名無しさん:2006/01/22(日) 23:47:22
>>237

>■送信したIPアドレスも覚えておく

Restricted Cone NAT       送信した相手のIPアドレスも覚える
Port-Restricted Cone NAT    送信した相手のIPアドレスとポート番号まで覚える

この場合は考慮しています。と言いますか、送信先を覚えない Conn NAT の場合
Punching する必要はなく、STUNサーバーからアドレス取得してアクセスできる。

 自分はそう理解しています。(ひとりよがり...)

240 :デフォルトの名無しさん:2006/01/22(日) 23:57:23
固定のポート使う仕様にした方が早いんじゃない?

241 :デフォルトの名無しさん:2006/01/23(月) 00:03:49
>>238

あ、TV電話興味あるー!
今作ってるのは簡単な会議システムで、ライブ映像(音声)とファイル共有、ホワイトボード共有などです。
ライブ映像(音声)以外はローカルで完成しているのですが、マウス移動情報が大量に流れるのでUDPが理想的なのですが。

>>238 さんはTV電話はどのような技術を利用されたのですか?

自分は以前 Flash Communication Server で作ったことはあるのですが、クラサバだし、サーバーソフト値上がり(600万円!)
 したので止めました。
 今は RTC で作成を始めたところです。

>リアルタイム性の強いものを作るならばUDPの方が
>向いてるし、ファイル系の速度よりも信頼性を取るならば
>リレーサーバーで十分と思うが

 また迷いが出て来ました...そんな気がしてたのですが。
 でも ルーター の変換レコードって 90秒程度で消えるというような文章を目たもので。
 KEEP-ALIVE 用のパケット送ってれば済む話?

 よしゃぁ!UDPを試してみます。

242 :デフォルトの名無しさん:2006/01/23(月) 00:07:30
ああ、ファイル転送があるのでした...orz
( ゚д゚)ハッ! それだけ STUNサーバー を経由するか?

ちょっと落ち着いてよく考えてみます。

243 :デフォルトの名無しさん:2006/01/23(月) 00:10:46
>>240

形態的にはネットゲームみたいにしたいんです。
ロビーで相手探して接続するというような。

244 :デフォルトの名無しさん:2006/01/23(月) 00:15:39
Kanzas, Nebraska みたいなのか

http://sumim.no-ip.com:8080/collab/20

245 :デフォルトの名無しさん:2006/01/23(月) 00:26:01
>244 同じようなものですね。

文書上に両方から書き込みができる、ズーム、移動等が同期で動くというどっかにありそうな。
場合によっては NetMeeting で事足りるじゃないかって言われるかも...orz

246 :デフォルトの名無しさん:2006/01/23(月) 00:33:26
http://www.distant-view.co.jp/product/co3/# と同じようなものです。

247 :238:2006/01/23(月) 00:33:56
今はhole punchingやめました 最近安定しない
書くことたくさんあるけど・・・・

リモートツールも作ってます
■ルーターには数分に一度データーを流すことにより接続を維持します
■ファイル転送はTCPでサーバー経由で十分です
■マウスはUDPの方がいいです。TCPでは効率悪すぎます
 マシンスペック、回線により送る量の調整が必要となります
 単純なホワイトボードだとマウス情報送るべきではないよ
■今はUPnPを期待して逆向き接続にしてます、双方UPnPが使用できない
 時はリレーサーバー 複数人の場合は一人でもUPnPが使用できれば
 それをサーバーにします
■UPnPはルーターにXMLで直接送ります。それによりSP2は回避できます
■winsockではUDPは相手に一度でもつながらないと以後 ソケットは
 使用不可になるのでオプションで機能をOFFにします
 Hole Punching時の不到達前提で相手に送るときです

248 :238:2006/01/23(月) 00:40:30
なんか 同じようなもの作ってるな・・・・
Hole Punchingは明日が予測できない技術だから
業務では使用しないほうがいいよ

249 :デフォルトの名無しさん:2006/01/23(月) 01:07:02
>247

貴重なアドバイスありがとうございます。

>マシンスペック、回線により送る量の調整が必要となります

そこなんですよね。バッファリングというか、ハンドルの遊びみたいな部分というか。
UPnPって操作したことないので全くわかりません。ぅw
確か、これから使うグローバルアドレス等をPGで指定できるんですよね。勉強します。

>248

ですよね。現時点でも Synmetric NAT は越えられない訳だし...
http://www.newrong.com/product/natsdk/ とかはどうなんでしょうねぇ?


250 :デフォルトの名無しさん:2006/01/23(月) 06:00:20
>>247
> ■マウスはUDPの方がいいです。TCPでは効率悪すぎます

TCP_NODELAYやOOBつーもんがあるが

251 :247:2006/01/23(月) 09:10:39
>>250
すみません書き方悪かったです。本質的にはUDP,TCP関係ないです
回線的には書かれているようにTCP_NODELAYで乗り越えれます
レスの内容がリモートですので相手のマシンの処理能力に
影響される部分が多いです。時間情報つけて処理しきれない事に
気づいた時には回線上には大量のマウスデーターが順番待ちしてます



252 :250:2006/01/23(月) 10:12:54
リアルタイム性を失ったデータは捨てていい、
むしろ捨てた方がいいという状況下で、
TCPはオーバースペックという話なら納得。

253 :デフォルトの名無しさん:2006/01/23(月) 11:51:07
auとかモバイルでオンラインアプリ開発するならどんな言語?

254 :デフォルトの名無しさん:2006/01/23(月) 12:46:13
PHPかJavaかperl

255 :デフォルトの名無しさん:2006/01/23(月) 12:52:50
perlとphpか
リアルタイムを選ぶならjavaしかないすよね(至#;)

256 :デフォルトの名無しさん:2006/01/23(月) 13:16:30
端末側の話ならこっちだな。

BREW(Binary Runtime Environment for Wireless) 7
http://pc8.2ch.net/test/read.cgi/tech/1137502541/
CLDC+MIDP+携帯電話用Javaスレッド part 5
http://pc8.2ch.net/test/read.cgi/tech/1132493827/

おまけ:
iモード携帯電話用Java(iアプリ) Part10
http://pc8.2ch.net/test/read.cgi/tech/1131603113/

257 :デフォルトの名無しさん:2006/01/23(月) 22:36:09
>>251
そういう状況だと、TCP_NODELAY は関係ない。
そのために、OOB つーもんがあるんだが。

258 :247:2006/01/24(火) 09:08:45
>>257
単独に>>251だけ見た場合 そうですね誤解を受ける書き方ですね
ここまで掘り下げる話題でもないんだけど・・・・

リモートに関することでスレ違いだったのでハッキリかかなくてすみません
いらぬ誤解を生んだようです。

>>247でUDPの方が良いというのは訂正します。
TCPではできないというような印象を与えたようです
実際 私もTCPを使ってます(UDPの方が楽ですが)

>>250さんの言われている通りですが
マウスの生データーをTCPを使ってまで送る必要は無いということです
実際キャプチャするとわかりますが もの凄い数の微小データーが発生します
TCPですとデーターは一定の数まで送信されませんが 実際はTCP_NODELAYを指定しなくても
問題ないぐらいにデーター数は多いです。逆にTCP_NODELAYを指定すると
マウスデーター1つにつき1パケットになるので再送等のリスクは高まります
相手のマシンが たとえばwin98の低スペックの場合データーは処理しきれず
たまります。そこで>>257さんの言われるOut of Bandなわけですが
そこまでTCPの機能を駆使してもデーターを間引く事になります
相手の画面のホワイトボードにはカクカクした線がでます。
そのため、クライアント側でマウスのデーターは補間して送る必要があります

■マウスのデーターを生で送るべきではない
■もし送るならばUDPで十分(TCPでもかまわない)
■データーを落としたくなければアルゴリズムを見直す。
 (ここから先はこのスレッドと関係ないけど)


259 :デフォルトの名無しさん:2006/01/24(火) 13:14:38
OOBってTCP内UDPみたいな感じ?

260 :デフォルトの名無しさん:2006/01/28(土) 18:45:59
>>■マウスのデーターを生で送るべきではない

カーソル移動しなくてもデータが生成されるようなハードからの生データは
送るべきないだろうけど、座標情報なら送っていのでは?
XとかVNCでもそうやってるだろうし

261 :デフォルトの名無しさん:2006/01/28(土) 19:16:43
vncは端折ってる。
Xはraw bandwidth X拡張ってのがあった。それも端折る。

>>258はまじめだねえ。


262 :デフォルトの名無しさん:2006/01/29(日) 13:19:41
端折るってのは間引くってこと?

263 :デフォルトの名無しさん:2006/01/29(日) 14:07:36
ここで質問していいのか迷ったのですが、
現在、ある程度のjavaの勉強が終わったので、javaでネットワークの勉強を始めようと思っています。
最終的にはちょっとしたネットを使ったゲームができればいいなと思っています。

そこでいろいろ検索したのですが、ネットワーク初心者向けのサイトが見つからなかったので
「基礎からわかるTCP/IP Javaネットワークプログラミング」って本を買おうかと思っているのですが
他にオススメのとかご存知の方いるでしょうか。サイトとかでも教えていただけるとうれしいです。

264 :デフォルトの名無しさん:2006/01/29(日) 15:16:29
箸折る - [動] 料理のまずさに食事を投げ出して帰ること。

265 :デフォルトの名無しさん:2006/01/29(日) 22:53:31
はしょる と読みます。

266 :デフォルトの名無しさん:2006/01/30(月) 02:10:27
>>264
そんなことされるくらいなら唐辛子の持込を許可してやるよ。

267 :海原雄山:2006/01/30(月) 02:33:00
女将を呼べ!

268 :デフォルトの名無しさん:2006/01/30(月) 15:54:44
コンテンツデリバリーサーバーの、
キャッシュサーバーとしての機能のみを備えたもの
(ウェブコンテンツをキャッシュして、
 回線速度とコンテンツの内容からの即時性を元に、
 キャッシュされたものをクライアントに返すか、
 ウェブサーバーまで最新コンテンツをとりに行くか判断)
をプログラミングしたいと思っているのですが、
参考にすればいいページやソースコードなどあれば教えて下さい。

269 :デフォルトの名無しさん:2006/01/30(月) 16:08:48
>>268
> コンテンツデリバリーサーバーの、
> キャッシュサーバーとしての機能のみを備えたもの

それキャッシュサーバーやん。

http://www.squid-cache.org/Doc/FAQ/FAQ.html
http://www.squid-cache.org/Doc/Prog-Guide/
http://www.linux.or.jp/JF/JFdocs/TransparentProxy.html
http://www.squid-cache.org/related-software.html

270 :デフォルトの名無しさん:2006/01/30(月) 16:09:10
>>263
その本で十分じゃねえか? 分からなかったら本屋行って他の本買いまくれ。
分かるまで右から順番に買って行け。左からでもいいぞ。


271 :デフォルトの名無しさん:2006/01/30(月) 18:23:09
将来AMDのCPUにプロトコルスタック専用のCPUコアが乗るかもしれないというニュース
http://pc.watch.impress.co.jp/docs/2006/0130/kaigai237.htm

サーバで効果あるかもしれないな。


272 :268:2006/01/30(月) 18:43:17
>269
回答&リンクありがとうございます。


273 :デフォルトの名無しさん:2006/01/31(火) 09:28:10
>>270
本屋に行くたびに順番が変わってたりして。

274 :デフォルトの名無しさん:2006/01/31(火) 13:46:35
>>273
それを防止したいなら全部大人買いだ。箱で買え。
本棚ごと買え。株式交換で本屋ごと買収だ。


275 :デフォルトの名無しさん:2006/02/01(水) 15:18:54
UNIX(Solaris)でソケットプログラミングをTCP/IP Sockets in Cという本を読んで勉強しています。
コードも一応うまく動いているようで、クライアント側で"hello"と打てばサーバー側がそれを受け取ります。
それぞれどういう役割をしているかなんとなく理解しているつもりです。

で、これを具体的に使った例が見たいんですが
「TCP/IP ソケット プログラミング」で検索しても
具体的な例はどこにも見つかりません。
なんか簡単な飛行機の予約システムとか
本を注文するシステムのような具体例が載っているリンク知りませんか?

"hello"とかサーバーの時間を調べるくらいじゃ全然面白くないんですよねぇ。
どうかお願いします。

276 :デフォルトの名無しさん:2006/02/01(水) 15:49:50
俺が出した結論はこうだ!
Visual C# for Win64API
Visual C# for JVM
つまり.NETはいらない。
ネイティブとジャヴァヴァーチャルマシーンで動くC#が最高。
そういうこと。

277 :デフォルトの名無しさん:2006/02/01(水) 16:24:58
>>275
テンプレにRFC集のリンクがあるからHTTPでもSMTPでも好きなの読め

278 :デフォルトの名無しさん:2006/02/01(水) 17:10:12
>>275
手近で具体的な使用例といえば、
いま>>275がレスを書き込んだ2ちゃんねるとか。

279 :デフォルトの名無しさん:2006/02/01(水) 18:58:58
linux 2.4.27 + pthread で tcp のメッセージを受け付けるプログラムを書いています。

サーバ側で accept したら thread を立ち上げるものです。
接続が1つの場合は問題なく動くのですが、同時に多数の接続を試みると、
双方の recv がしばしば期待(固定長サイズ受信)に反して 0 (EOF)を受信してしまいます。
送信側では send は正常に返っているようなのですが、どうも具合が良く分からないのです。

多数同時接続の時のデバッグするときはどうしていますか?


280 :デフォルトの名無しさん:2006/02/01(水) 19:07:30
>>279
send や recv は、戻り値を見てこんな感じで送る必要がありますが、
やっていますか?

int len = data_size;
char* p = data_ptr;
while (len > 0)
 int sent = send(socket, p, len);
 if (sent <= 0) エラー処理
 len -= sent;
 data_ptr += sent;
}

281 :デフォルトの名無しさん:2006/02/01(水) 19:08:18
>>280
>data_ptr += sent;
p+= sent の間違い。

要は、たぶん期待したデータサイズだけ送れていないのではないか、と。

282 :デフォルトの名無しさん:2006/02/01(水) 19:26:31
>>280-281

早速の回答ありがとうございます。
送り側のループ処理ですね!
受信側は recv を MSG_WAITALL で呼んでいたのですが、なるほど確認してみます!


283 :280:2006/02/01(水) 22:32:09
もう少し精査してみましたが、送信部分はきちんとできていた様子です。
同時に一斉にアクセスをかけてみると幾つかの現象が生じるみたいです。

1つのホストでサーバ&クライアントを動かして、ログを元にペアとなったPIDを
順に追ってみると、サーバが存在しないプロセスに対して応答していることが分かりました。
以下は互いに通信した実際のPIDの組み合わせですが、サーバの20605
はいないはずの何かから accept して、意味のないデータを受信しているようなんです。
どの当りが影響しているのでしょう??

server-client
20603-20600
20604-20601
20605-????? ← クライアントは存在しないプロセス!?
20609-20602
20610-20606
20611-20607
20612-20608


284 :280:2006/02/01(水) 23:17:47
自己フォローです。すいません。

accept して、pthread_create した直後に、usleep をちょっと挟んだだけで、上記不具合は
全く生じなくなってしまいました(いや、うれしいんですが)。どういうことなんでしょ。。。

if ( (s = accept(sock, 5)) != -1 ){
   pthread_create(XXXX);
   usleep(5000);
}
みたいな感じです。


285 :デフォルトの名無しさん:2006/02/01(水) 23:19:34
正直な話、コードも見せずに助言だけ求めるやつって何がしたいんだろうって思うよ。
俺はお前じゃねー通の

286 :デフォルトの名無しさん:2006/02/01(水) 23:25:57
>>284
send側に問題がないのなら、recvの処理に問題があるのでしょう。
MSG_WAITALL を使わずにループにしてみてはどうですか?
移植性も高まるし。

287 :デフォルトの名無しさん:2006/02/02(木) 01:20:07
>>284
問題の部分を引用しないと、なにが悪いか分かるわけないっつの

288 :デフォルトの名無しさん:2006/02/05(日) 18:33:42
C/C++の宿題を片付ケます 60代目から引っ越してきました

で、質問です
1 TCPソケット使って GET / HTTP/1.1 をHTTP鯖に送る
2 レスポンスが帰ってくる
3 データ部分に0f38とか、ソースに本来ないものが含まれる
さいしょ、chunk分けされたものかなーって思ってたけど、
RFCに載ってないのかよーわからん・・・

具体的なサイトは、このスレをtelnetでgetしてみると得られるかもしれません。

(とりあえずまんま元の質問をコピペ)

289 :288:2006/02/05(日) 18:35:27
('A`) しまった・・質問本体書いてないじゃん

質問は、この0f38とか言う文字列が何を指しているのか、
最終的には回避したいので、回避する方法につながる何かの情報提供をおまちしておりまゥゥゥゥゥィ

290 :デフォルトの名無しさん:2006/02/05(日) 19:23:24
>>289
文字通りchunkじゃないの?
HTTP/1.1つけてGETしたんならchunk対応はMUSTなので
平気でchunkで送っていいことになってる。
対応できないんなら1.1を名乗っちゃいけない

291 :デフォルトの名無しさん:2006/02/05(日) 19:52:53
rfc2616の18ページとか、103ページとか。

292 :288:2006/02/05(日) 20:01:27
>>290さんと>>291さん
レスさんくすっす ('A`)

とりあえずrfc再読します
HTTP1.1対応するの諦めよっかな・・・

293 :デフォルトの名無しさん:2006/02/05(日) 20:21:08
あとは ttp://www.studyinghttp.net/body#Codings かな。

294 :デフォルトの名無しさん:2006/02/06(月) 12:29:28
すみません、質問です。
UDPでサーバーにあるテキストファイルの内容を読むのは可能ですか?
もし可能であればどうすればいいのか簡単な流れを教えてください。
関連する検索キーワードでもいいです。
まさかfopen()やfread()はクライアント側からは使えないですよね・・・

295 :デフォルトの名無しさん:2006/02/06(月) 12:31:31
>>294
UDPを誤解してないか?

296 :デフォルトの名無しさん:2006/02/06(月) 12:36:12
はい、誤解しまくってると思います。
自分が分かっているのはUDPでコネクションレスの通信ができる、程度です。

もしかして、サーバー側にfopen()とかやらせるには
server.cの中でfopen("xxx.txt", "rb");なんて書いてやればいいんでしょうか?
でも、どのタイミングでやらせればいいんでしょう?
すみません・・・

297 :デフォルトの名無しさん:2006/02/06(月) 12:39:21
>>296
> UDPでコネクションレスの通信
その解釈は正しくて、UDPはそれ以上でもそれ以下でもない。

> サーバー側にfopen()とかやらせるには
やらせるには、サーバ側に
> server.cの中でfopen("xxx.txt", "rb");なんて書いてやればいいん
です。

> どのタイミングでやらせればいいんでしょう?
UDPで送信する前にやっておかなくてはいけませんね
ファイルの内容が実行中に変わらないのなら、プログラム初期化時にやっても良いですし
常に変動し続けるのなら、送信する直前にするのもいいでしょう

298 :デフォルトの名無しさん:2006/02/06(月) 12:47:59
ありがとうございます!
実はクライアント側からコマンドを打てばサーバー側でなんでもできると思ってました・・・(恥
ファイルの内容はもしかすると変動するかもしれないので、送信する直前にしてみます。
また質問することが「多々」あると思いますがよろしくお願いします。自分でももっと勉強しますから。

299 :デフォルトの名無しさん:2006/02/06(月) 12:51:49
>>298
> 実はクライアント側からコマンドを打てばサーバー側でなんでもでき
ます。
ただし、当たり前ですが全て貴方が実装しなくてはなりません

300 :デフォルトの名無しさん:2006/02/06(月) 13:10:20
>>299
あら、実装すればサーバー側でなんでもできちゃうんですね。
いらっしゃるなら、ついでにもう一つ質問を・・・
UDP(コネクションレス)ならマルチユーザーになった場合、
二人のクライアントが同時にサーバーにあるデータを変えてしまうような場面に遭遇しますか?

TCP/IP(コネクションあり)だとクライアントとサーバーが
一対一でつないでいる間は他のクライアントはつなげなかったんでしたっけ?
それならそんな場面に出くわすことはなさそうですが・・・

301 :デフォルトの名無しさん:2006/02/06(月) 13:13:08
( ´ー`)y-~~

302 :デフォルトの名無しさん:2006/02/06(月) 13:14:54
_| ̄|○

303 :デフォルトの名無しさん:2006/02/06(月) 13:21:57
>>300
> UDP(コネクションレス)ならマルチユーザーになった場合、
> 二人のクライアントが同時にサーバーにあるデータを変えてしまうような場面に遭遇しますか?
いやだから、UDPはover IPな通信路を築いているだけで、
サーバ側やクライアント側のアプリケーションプロトコルはまったく感知しないんですよ

貴方の言っていることをちょっと大きく言えば
1 神飛行機に「お願いです、命たすけてくだしあ」って書いて天空に飛ばしてみる
2 神が受け取る。けど助ける命いっぱいある
3 どれ先に実行すれば良いか悩む
4 もうpanicですよ
という1〜4の手順の中で、UDPに相当するのは”神飛行機”になります。
神飛行機が神の審判を助けたり、貴方のお友達を助けるわけじゃないですよね?
この「審判」や「助ける」のはover 神飛行機なアプリケーションプロトコルなので、
貴方が「審判」の実装や、「助ける」の実装をしなくてはならないのです。

> TCP/IP(コネクションあり)だとクライアントとサーバーが一対一でつないでいる間は
> 他のクライアントはつなげなかったんでしたっけ?
> それならそんな場面に出くわすことはなさそうですが・・・
んなことない
TCPのリスナは「待つだけ」で、「コネクションが到達」したら「接続されたソケットを作」ってまた待ち続けるだけ

304 :デフォルトの名無しさん:2006/02/06(月) 13:31:43
なんかもう無意味に色んな例えで説明したくなるな
でも多分なかなか分かってくれなさそう

305 :デフォルトの名無しさん:2006/02/06(月) 13:38:48
> 命たすけてくだしあ

306 :デフォルトの名無しさん:2006/02/06(月) 13:39:24
なるほど。ということは僕自身が
どのクライアントがどういうタイミングに来たときにどうするか決めてやらないといけないんですね。

>>TCPのリスナは「待つだけ」で、「コネクションが到達」したら「接続されたソケットを作」ってまた待ち続けるだけ

ああ!そうでしたね。
よく見たら、つなげられる上限を決める定数が上の方で定義されてました。
もっと勉強しときます。
図書館がそろそろ閉まるので今日はこの辺で。また来ます。ありがとうございました!

307 :デフォルトの名無しさん:2006/02/06(月) 13:44:19
>>306
一概に「アプリケーションプロトコルとは〜というもの」とは言えないけれど、
とりあえずステートマシン(=状態遷移を伴い、状態によって挙動が変わるプログラム)を組まなくてはならないと思う
まぁ、「どういう場合に問題が起こるか?」というだけで授業まるまる1つ使うくらいの物になるから、そのへんは勉強だわな

>>305
わすれてタタタタタタタ\\・・

308 :デフォルトの名無しさん:2006/02/06(月) 13:45:25
いや別に accept 受けてから listen に入らなきゃ同時に 2 接続が
発生することもないだろ。UDP もしかり。要は作り次第。
どうでもいいがエラく早く閉まる図書館だな。

309 :デフォルトの名無しさん:2006/02/06(月) 13:46:58
失礼、2接続の発生っつうか 2 つの処理が同時に走る、だな。

310 :デフォルトの名無しさん:2006/02/06(月) 14:07:58
割り込みスマソ。
今TCPでプログラム組んでます。
send()の直前でsetsockopt()でTCPヘッダのDSCP値を
変更してパケット出力をするプログラム書いてるのですが、
etherealでパケット確認すると、TCPヘッダのチェックサム値が
エラーとなってます。
受信先ではきちんとデータ取れてるんですが・・・。で、質問なんですが、

1.チェックサムの計算って誰がやるの?NIC?OS?ソケット?
2.チェックサムが異常のパケットって破棄されると思ってたんですが、
  受け取れるのはなぜ?(recv()もエラーになってない。)実は破棄
  されない?

全くもってわからず困ってます。どなたか俺の神飛行機を受け取って
助けてくださいorz。

311 :デフォルトの名無しさん:2006/02/06(月) 14:16:01
>>310
TCP/IPを実装しているのは、例えばNICとかルータとかだよな。
どの部分でTCPのチェックサムを処理しているかわからないけれど、
TCPのチェックサムでエラーが発見された場合は再送信するようになってるはず
受け取れるということはチェックサムが正しいことになるのでは?

と神飛行機に書いてとばしてみる

312 :デフォルトの名無しさん:2006/02/06(月) 14:34:14
>>311
レスありがとうございます。

>再送信するようになってるはず
そうなると再送要求のパケットが飛ぶはずですよね?
再送要求も出てないのですよね・・・。ethrealのバグか?
他のパケットキャプチャソフト使ってもうちょっと試してみます。

他にも回答頂ける方いましたらplz m(__)m
スミマセンがageで。


313 :デフォルトの名無しさん:2006/02/06(月) 14:35:40
>>312
> そうなると再送要求のパケットが飛ぶはずですよね?
うーん・・・どうだったかなぁ
なんだか再送信要求のパケットなんて飛ばなかったと思うんだが・・・

314 :310:2006/02/06(月) 15:08:13
自己解決出来ました。書き込む前に試せよって話ですが、
現象が起きたのはLinuxの送信ポートのキャプチャを見てたのですが、
Windowsの受信ポートのキャプチャを見たら、正しいパケットでした。

Linuxの方のetherealのバグかは謎ですが、パケットを拾ってる
タイミングに問題ありなのかな?と思ってます。ちと実験で、
Windowsで送信する際にDSCP値書き換えた場合の送信ポートの
パケットとLinuxで受信したパケットを拾ってちと検証してみます。

再送要求のパケットなんてありませんでしたね(^^;失礼しました。
何分勉強途中なもので。
ありがとうございましたm(__)m



315 :デフォルトの名無しさん:2006/02/06(月) 17:35:12
いまどきCRCの生成はNICにオフロードされているので、それまでの間に
パケットをかすめ取っていると、CRCは当然合いません。

316 :デフォルトの名無しさん:2006/02/06(月) 18:42:58
>>306
> なるほど。

あの例えでわかったんかよ(ワラ

>>308
listenじゃなくて次のacceptだろ?


317 :310:2006/02/09(木) 11:32:33
今更な遅レスですが。
>>315
>いまどきCRCの生成はNICにオフロードされているので
オフロードってどういうことですか?今時って事は昔は
また違ったのでしょうか?興味本位で教えてください。

また別の質問です。スイマセン(--ゞ。
TCP/IPの受信バッファのサイズはRWIN値で設定されているのは
わかりますが、このサイズを超えたデータを受信した場合は、
超えた部分は破棄されると考えて問題ないでしょうか?

例えばRWIN値が5KBとし1KBのデータが連続的に送られてくるとします。
最初の1KBのデータを受信し、そのデータに何らかの処理を行ってる最中
にもデータは送られてる訳で、6個目以降のデータは破棄されてしまうの
でしょうか?
RWIN値のMAX値って64Kだと思うのですが、1MBのデータ送った場合等、
受信速度>送信速度でない場合データ取りこぼしまくるんじゃないかと
思うのですが。

稚拙な質問ですが教えてください。

318 :デフォルトの名無しさん:2006/02/09(木) 11:33:56
>>317
> TCP/IPの受信バッファのサイズはRWIN値で設定されているのは
> わかりますが、このサイズを超えたデータを受信した場合は、
> 超えた部分は破棄されると考えて問題ないでしょうか
破棄される
その代わり相手が再送信する
あまりにも送信できないとタイムアウトで切断される
じゃなかったっけ?

319 :デフォルトの名無しさん:2006/02/09(木) 19:56:49
送信側はRWIN分はとにかく受け取れるのが判ってるから、RWIN分を連続して送る。
その後はACKが来るのを待つ。
それが伝送制御ってもんだ。

だからRWINが大きいほうがスループットが上がるんだよ。


320 :デフォルトの名無しさん:2006/02/09(木) 21:31:32
javaでキャッシュサーバをプログラミングする際に、
参考になるようなページを教えて下さい。

321 :デフォルトの名無しさん:2006/02/09(木) 23:06:42
>>317
Checksum Offload 機能でググれ

ただ、いつも>>315の通りなわけじゃない。(断言しているが)

322 :デフォルトの名無しさん:2006/02/09(木) 23:09:36
>>320
またか>>268


323 :310:2006/02/10(金) 12:47:44
皆さんありがとうございます。
精進しますm(__)m

324 :デフォルトの名無しさん:2006/02/10(金) 18:38:01
http://pc8.2ch.net/test/read.cgi/tech/1103998649/508-509
で質問させていただいているものなのですが
ネットワーク関係はこちらのほうがよさそうなので
もし、よろしければ上記のアドレスの疑問なのですが教えていただけないでしょうか。
いろいろ試したところクライアント側の送信がゲームの毎フレームごとに
送信されておらず一定時間ごとに送信されてしまっているため
サーバー側で座標をクライアント側から毎フレームごと得られずカクカクしてしまっているようなのです。

win2k
VC#2003使用
通信部分はゲームのメインループから
・サーバー
try
{
Int32 port = 9999;
IPAddress localAddr = IPAddress.Parse("192.168.0.1");
server = new TcpListener(localAddr, port);
server.Start();
t= new Thread(new ThreadStart(receive));
t.Start();
}
catch
{}
・クライアント
t= new Thread(new ThreadStart(Con));
t.Start();
のようにスレッド化してあります


325 :デフォルトの名無しさん:2006/02/10(金) 18:44:37
なんかnagleアルゴリズムのお陰かもしれない雰囲気
でも、とりあえずどんな時間間隔でどれくらいのデータが送受信できてるのか確かめないとね

326 :デフォルトの名無しさん:2006/02/10(金) 18:47:49
>>324
C#はよく知らないが、世間で言うところの TCP_NODELAY オプションを
使うといいのではないかな。



327 :411:2006/02/10(金) 21:13:29
ありがとうございます。
nagleアルゴリズム調べさせていただきTCP_NODELAYに関してもわかりましたが
オプションらしきものがMSのドキュメントを見てもわからないため
UDPでの通信をしてみようと思っています。
>>247
でマウスの位置を送るようなことが書いてあり
リアルタイムデータ送信ならUDPのほうがよいみたいですので。
また、何かありましたらよろしくお願いします

328 :デフォルトの名無しさん:2006/02/10(金) 21:16:50
>>327
setsockopt()とか無いの?

//儚いUDPを使う>>327の強気の態度に惚れるかもしれん

329 :324:2006/02/10(金) 22:12:13
UDPで作成してみたところ
TCP使用時とほぼ同じ動きを行います。
ゲームの1フレームごとに通信が確立していない可能性が高そうなので
マルチスレッドの部分も含めて非同期通信部分を見直します。

330 :411:2006/02/10(金) 22:17:41
また、わかったこととして
try catch構文で通信のエラーを破棄する処理を入れれば問題なく動く場合でも
try catch構文をはずすだけでエラーをはいて強制終了する場合がある。

スレッドを用いた場合は明らかに通信の回数が減っている
ただし、スレッドを用いない場合は通信受付待機の時間が
ゲーム画面の1フレームの更新時間にかなりの影響を及ぼし
ゲームにならなくなってしまう。

331 :デフォルトの名無しさん:2006/02/10(金) 22:28:58
非同期UDP使えばいいんじゃないの?

332 :デフォルトの名無しさん:2006/02/10(金) 22:31:12
>>331
逆に質問
同期UDPって何だ・・・

333 :324:2006/02/10(金) 22:34:50
>>331
ありがとうございます。
なにぶん未熟なものでして、TCPで使っていた
マルチスレッドを利用したUDPの非同期?通信は試してみたのですが
TCPのときとさほどかわりませんでした。
今行っているゲームの通信部分は3Dモデルの主人公の動きを相手側でも
同じように再現するために座標を送っています。

334 :デフォルトの名無しさん:2006/02/10(金) 22:37:02
>>333
UDP結構使える?
うちのLANだと1〜2%ロスだったけど、WANに出ると正直どうなるかわからんのだ・・

335 :デフォルトの名無しさん:2006/02/10(金) 22:39:04
>>327
tcp_client_instance.NoDelay = true;


336 :324:2006/02/10(金) 23:05:04
>>335ありがとうございます
client = new TcpClient("192.168.0.1", port);
client.NoDelay = true;
と定義できました。
しかし、動作は変わりませんでした。やはり非同期通信がうまくいっていないようです。

>>334
自分もLAN環境での実験ですが
やはりロスは出ているようです

337 :デフォルトの名無しさん:2006/02/11(土) 00:16:59
TCP_NODELAYと非同期通信は全く関係ないと思うんだが・・・。

338 :デフォルトの名無しさん:2006/02/11(土) 00:59:44
非同期通信って何なんだよ・・

あれか?
プログラムレベルで同期処理するのを同期通信って言うのか?
ならノンブロッキングソケット使ってるってことか?

339 :デフォルトの名無しさん:2006/02/11(土) 01:06:43
select使えってことじゃない?

340 :デフォルトの名無しさん:2006/02/11(土) 05:09:34
物理的に一つのクライアントから、複数のIP元を装って、
一つのサーバーにhttpリクエストを生み出すことのできるフリーウェアってありますか?


341 :デフォルトの名無しさん:2006/02/11(土) 06:10:44
>>340
wget

342 :340 :2006/02/11(土) 09:31:21
回答ありがとうございます。

343 :324:2006/02/11(土) 14:35:11
ゲームのメインループに接続の関数を入れていて
それが原因で接続したり切断されたりしていたようです。
無事3Dゲームのネットワーク化に成功しました。
いろいろありがとうございました。

344 :デフォルトの名無しさん:2006/02/12(日) 17:59:08
gethostbynameとinet_ntopについての質問です。
------------------------------
#include <stdio.h>
#include <sys/socket.h>
#include <netdb.h>

int main(void)
{
char*ptr, **pptr;
charstr[4];
struct hostent*hptr;

ptr="www.asahi.com";
hptr=gethostbyname(ptr);
pptr = hptr->h_addr_list;
printf("address:%s\n",inet_ntop(hptr->h_addrtype, *pptr, str, sizeof(str)));
}
------------------------------
以上のような短いプログラムを作ったのですが出力が
address:(null)となってしまいIPアドレスが表示できません。
asahi以外にも試したのですが同じ結果になりました。
どうしたら正常に表示できるのでしょうか。ちなみに
他のhostent構造体の例えばh_name等は正常に表示できました。
OSはsuse10.0 x86_64版です。

345 :デフォルトの名無しさん:2006/02/12(日) 19:14:10
なんでstrが4byteしかないの?
そこを20とかに増やしてみては

346 :魚チョコ:2006/02/12(日) 19:15:46
>>344
 ぜんぜんエラーチェックしてないのもアレだが、str[4] がもっともアレだ。まずここを str[16] くらいにしてみよう。

347 :デフォルトの名無しさん:2006/02/12(日) 20:07:45
>>345
>>346
レスありがとうございます。
いやIPアドレス4バイトなのでcharで4バイト確保しました。
とりあえずchar str[20]位で領域増やしてみます。

348 :デフォルトの名無しさん:2006/02/12(日) 22:08:57
>>347
> いやIPアドレス4バイトなのでcharで4バイト確保しました。
あのな、sizeof("xxx.xxx.xxx.xxx")っていくつか考えてみよう。

349 :デフォルトの名無しさん:2006/02/12(日) 22:33:50
>>348
そうでした、すっかり勘違いしてた。また>>344のプログラムで単純にstrの領域を増やすと
セグメンテーションエラーになったので
#include <arpa/inet.h>
を加えchar str[16]にしたところ、無事IPアドレスが表示されました。
---------------------------------------
#include <sys/socket.h>
#include <netdb.h>
#include <stdio.h>
#include <arpa/inet.h>

int main(void)
{
char str[16];
char *ptr, **pptr;
struct hostent *hptr;

ptr="www.asahi.com";
hptr=gethostbyname(ptr);
pptr = hptr->h_addr_list;
/* printf("\taddress: %s\n",inet_ntoa(*(struct in_addr *)*pptr)); */
printf("\taddress: %s\n",inet_ntop(hptr->h_addrtype, *pptr, str, sizeof(str)));
printf("%s\n",hptr->h_name);
}
--------------------------------------
>>345>>346>>348
どうもありがとうございました。

350 :デフォルトの名無しさん:2006/02/13(月) 20:58:57
ウイルスチェッカー(AVG)のメールスキャンログを見たら、
誰かの自宅サーバっぽいIPアドレスのSMTPサーバに接続しようとしている
ログが多数、残っていました。結局、コネクションは成立していません。
ウイルス、Spyware系のチェックはしたのですが、検出されず。

メールを送ろうとしているプロセスを突き止めるには、どうすればよいでしょうか?
Win2000,VS2004(C++)です。

351 :デフォルトの名無しさん:2006/02/13(月) 21:12:43
UDPで送ったパケットの順番って
実際どのくらいの頻度でひっくり返る?

352 :デフォルトの名無しさん:2006/02/13(月) 21:18:31
>>350
VC 使えるんなら、netstat -o をズート実行してsmtp へコネクションを
張ったプロセスを見つけたら PID からプロセスの情報を得てログする、
というプログラムを書いて一晩くらい走らせてみては?

353 :350:2006/02/13(月) 21:39:21
いまやってみたんだが、、プロセス、Winnyだった。。。
ヤツってメール送る?


354 :デフォルトの名無しさん:2006/02/13(月) 21:46:30
>>353
ポート開けないヤツが使ってると思われ。


355 :350:2006/02/13(月) 21:56:13
>>354
その場合は、どうすればプロセスを特定できるんだろう?
とりあえずVMWare起動したww

356 :デフォルトの名無しさん:2006/02/13(月) 22:07:05
単にWinnyのポートを25にして使ってるヴァカがいたってだけだろ。

357 :350:2006/02/13(月) 22:54:20
昼、夕、それぞれ一人ずついたけど
思い過ごし?
それとミスったけど、ポートはPOP(110)でした。

358 :デフォルトの名無しさん:2006/02/13(月) 23:16:46
Linux初心者です。
インターバルタイマーが必要で SIGALRM を使用してるんですが、
同じプロセスで 受信処理のために NONBLOCK の select() を使用すると、
タイムアウト設定してコールしてもselect()のタイマーが正常に働きません。
どうすればいいんでしょうか?
できれば子プロセスで処理を分けずに。
またselect() のイベントでイベントハンドラーを起動するような作り方は通常
するんですか?

359 :デフォルトの名無しさん:2006/02/13(月) 23:17:35
板違いだろ。
セキュリティ板いけよ。

360 :デフォルトの名無しさん:2006/02/13(月) 23:18:34
>>359は、>>357=>>350にね。

> インターバルタイマーが必要で SIGALRM を使用してるんですが、

そこもselect()使えば?


361 :デフォルトの名無しさん:2006/02/13(月) 23:20:41
>>351
もちろん状況次第だが、関西地方のフレッツ ADSL で、
結構ひっくり返ったことがある。

# ソフトがバグってて、パケット逆転したら受信してい
# た画像がブロックノイズだらけになって、ばれた。

362 :358:2006/02/13(月) 23:23:16
360s ありがとうございます。全部select()使えばいいんですね、すみません。

363 :デフォルトの名無しさん:2006/02/14(火) 02:45:55
リッスンしているソケットをselectでずーっと待ってるときに、
中断させたいときは、別のスレッドなどから
shutdown、closesocket、などを呼んで中断させる方法しか思い浮かばないのですが、
もっとスマートな方法はありませんか?

364 :デフォルトの名無しさん:2006/02/14(火) 03:11:50
一緒にパイプとかも待てば?

同様に、WindowsならEventSelectでEventを待つよ。
IOCPのサンプルなんかで、このやり方を使ってる。

365 :デフォルトの名無しさん:2006/02/14(火) 03:23:16
>>361
なるほど結構ひっくり返るもんなんだな

366 :デフォルトの名無しさん:2006/02/14(火) 08:38:34
>>363
UNIXならsignal受けてEINTRのexeptionで復帰させるとか、
selecltじゃなくてpoll使ってurgent data受けるとか。

selectとurgent dataもOKなのかもしれないけれど、
undocumentedなので使ったことなし。

367 :デフォルトの名無しさん:2006/02/14(火) 13:03:28
>>364
>>366
返信ありがとうございます。

一緒にパイプを持って、それで抜けるようにします。

368 :デフォルトの名無しさん:2006/02/14(火) 16:29:49
>>365
経験上、帯域上限辺りまで使うと結構ひっくり返る希ガス

369 :デフォルトの名無しさん:2006/02/14(火) 20:03:38
raw socketを勉強しようと以下のようなプログラムを作ったのですが
SIO_RCVALLした所で10022が出るPCやWSARecvのところで10055が出るPCがあったりするのでお知恵を拝借させて頂けませんでしょうか
動かしてみたOSはWindows2000とWindowsXPです。Adminユーザーで実行してます。
----------------------------------------
#include <winsock2.h>
#include <mstcpip.h>
#include <stdio.h>

int main(int argc, char **argv){
SOCKET sock = INVALID_SOCKET; DWORD d, optval = 1, flags = 0, len; SOCKET_ADDRESS_LIST *addrlist; SOCKADDR_IN addr_in; WSADATA wsd; char buffer[65536]; int i; WSABUF wsb;
if (0 != WSAStartup(MAKEWORD(2, 2), &wsd)) goto err;
if (INVALID_SOCKET == (sock = WSASocket(AF_INET, SOCK_RAW, IPPROTO_IP, NULL, 0, 0))) goto err;
if (SOCKET_ERROR == WSAIoctl(sock, SIO_ADDRESS_LIST_QUERY, NULL, 0, buffer, 1024, &d, NULL, NULL)) goto err;
addrlist = (SOCKET_ADDRESS_LIST*)buffer;
if (0 == addrlist->iAddressCount) goto close;
addr_in.sin_addr.s_addr = ((SOCKADDR_IN*)(addrlist->Address[0].lpSockaddr))->sin_addr.s_addr;
addr_in.sin_family = AF_INET; addr_in.sin_port = htons(0);
if (SOCKET_ERROR == bind(sock, (SOCKADDR*)&addr_in, sizeof(addr_in))) goto err;
if (SOCKET_ERROR == WSAIoctl(sock, SIO_RCVALL, &optval, sizeof(optval), NULL, 0, &d, NULL, NULL)) goto err;
for(i = 0; i < 10;i++){
wsb.buf = buffer; wsb.len = sizeof(buffer);
if (SOCKET_ERROR == WSARecv(sock, &wsb, 1, &len, &flags, NULL, NULL)) goto err;
}
goto close;
err:
printf("ERR %u\n", WSAGetLastError());
close:
if (sock != INVALID_SOCKET){ shutdown(sock, SD_BOTH); closesocket(sock);}
WSACleanup();
return 0;
}

370 :319:2006/02/16(木) 19:56:51
ttp://www.st.ryukoku.ac.jp/~kjm/security/ml-archive/port139/2003.03/msg00137.html で
> (1)ICF/ICSのサービスを開始しろ
> (2)Personal Firewallを停止しろ
(3)IPSEC Services サービスを開始しろ
MSDNのサンプルで
printf("NOTE: IPv6 does not currently support the SIO_RCVALL* ioctls\n");
ってのを見付けたんでサービス関係をその通りに動かして、IPv6がアダプタのプロパティに入ってないことを確認したんだけど状況かわらずです
WSA*を使っているのが間違いの元かとも思いWSASocket→socket、WSAIoctl→ioctlsocket、WSARecv→recvと変えてみてもやはり同じでした
RCVALLするまでの準備の部分に何か誤りがあるのでしょうか?

371 :369:2006/02/16(木) 19:58:41
ハンドルのとこ間違って書き込んでしまいました319じゃなくて369です

372 :デフォルトの名無しさん:2006/02/16(木) 22:27:26
t est

373 :デフォルトの名無しさん:2006/02/18(土) 01:05:12
Win32APIスレでスレ違いと言われたので、こちらで質問します。
オープンしたソケットで利用中のNICのMACアドレスを得る方法を
教えていただけますでしょうか?
接続元、接続先のMACアドレスどちらでもかまいません。

OSはWindows XPです。

374 :デフォルトの名無しさん:2006/02/18(土) 01:10:16
getsockopt(s, NSPROTO_IPX, IPX_ADDRESS, &IPX_ADDRESS_DATA..);
で、IPX_ADDRESS_DATA::nodenumかな。
もちろん、IPXソケット限定だけど。

375 :373:2006/02/18(土) 18:57:24
自己解決しました。

376 :デフォルトの名無しさん:2006/02/19(日) 12:29:09
市ね

377 :デフォルトの名無しさん:2006/02/21(火) 21:47:27
warota

378 :^ω^ ◆8vOv.D2p4. :2006/02/22(水) 18:47:13
Winsockを使ったソフトを作っているのですが、

自分で立てる→127.0.0.1で接続 はできました。

ところが、人様に立ててもらって、IPを教えてもらったところ、接続しようとしても駄目でした。
その人は、自分のマシンで自作のチャットサーバを動かして、外部から接続できている、
と言ってるので、その人のネットワーク環境は特に問題なさそうです。(ポート解放等

自分→ループバック でできるのに、インターネット経由で繋がらない場合、
どんなミスがありえるんでしょうか・・・?
127.0.0.1の場合も、グローバルIPを入力しても、
同じコードで、 sin_addr.S_addr:=inet_addr(PChar(ip));
としてるので、本質的には同じだと思ってたんですが。。。

ちなみに、WSAAsyncSelectを使う非同期の、TCPソケットです。
開発環境はDelphi6Personal + ProjectJEDIのWinsock2.pas です。


379 :^ω^ ◆8vOv.D2p4. :2006/02/22(水) 19:03:57
解決しました 他の人が立てたら普通に。

380 :デフォルトの名無しさん:2006/02/22(水) 22:18:47
C#のWindowsアプリでソケット通信の非同期サーバを
作っているのですが、切断時に

Socket.Close()

を行うと下記の例外が発生するのですが、
どうすれば回避できるでしょうか?

----------------
破棄されたオブジェクトにアクセスできません。
オブジェクト名 'System.Net.Sockets.Socket' です。

381 :デフォルトの名無しさん:2006/02/22(水) 23:03:51
UNIXのソケットプログラムで。

ソケットのファイルディスクリプタ(int)から通信が行われている自分側のポート番号取得することは可能?
accept したあとの子プロセスから呼び出される関数で、ファイルディスクリプタはもらうんだけど
struct sock_addr_in の構造体はスコープ外で直接アクセスできない、という条件です。


382 :デフォルトの名無しさん:2006/02/22(水) 23:07:57
getsockname/getpeername

383 :デフォルトの名無しさん:2006/02/22(水) 23:26:33
>>382
d!

384 :デフォルトの名無しさん:2006/02/22(水) 23:33:12
>>373 >>378 >>380
このスレはアンチM$の粘着UNIXオタが常駐してるだけだから
winsockのまともな返答は期待できないと思った方が良い



そうだよな
おまえら

385 :デフォルトの名無しさん:2006/02/22(水) 23:35:40
だから俺はこう思う

このスレは「UNIXネットワークプログラミング相談室」と改名するか
UNIX板に移動した方がいいんじゃないかって

UNIX厨は隔離板から出てくるなよ

386 :デフォルトの名無しさん:2006/02/22(水) 23:40:35
なんか毎回クソ回答しかしない無能なUNIX使いが出張るスレだなあ・・
みたいなのはおれも感じてたが。
そうか。

387 :デフォルトの名無しさん:2006/02/22(水) 23:44:31
>>385
俺としては「WinSockプログラミング相談室」の方がいいかなあ。
UNIX厨が出てこられるとマジうざいんで。

388 :382:2006/02/22(水) 23:51:46
Winsockなら分かるが、正直C#はわからん。
中身のないレスをするアンチUNIX厨は鬱陶しい。

389 :デフォルトの名無しさん:2006/02/23(木) 00:09:20

  ( ゚д゚)      UNIX厨言われちゃってるよ…
_(__つ/ ̄ ̄ ̄/_ 
  \/    /
     ̄ ̄ ̄
 
  ( ゚д゚ )
_(__つ/ ̄ ̄ ̄/_ 
  \/    /
     ̄ ̄ ̄

  ( ゚д゚)
_(__つ/ ̄ ̄ ̄/_ 
  \/    /
     ̄ ̄ ̄

  ( ゚д゚ )
_(__つ/ ̄ ̄ ̄/_ 
  \/    /
     ̄ ̄ ̄

390 :デフォルトの名無しさん:2006/02/23(木) 00:49:27
Windows XP で gethostbynameにて
C:\WINDOWS\system32\drivers\etcにある
hostsファイルに記述したホスト名から
IPアドレスを取得したいのですが、取得できません。
どうしてでしょうか?

例えばhostsファイルに
38.25.63.10 x.acme.com
のようにかいてgethostbynameでx.acme.comを指定してやれば
38.25.63.10が取得できると思っているのですが・・・

391 :デフォルトの名無しさん:2006/02/23(木) 01:01:36
>>390
コードさらさないでどうやってこたえろと

392 :デフォルトの名無しさん:2006/02/23(木) 01:44:46
winはlmhostsじゃなかったっけ。
とか数年前の記憶を元にほざいてみる。

393 :382:2006/02/23(木) 01:44:50
>>390
> 取得できません。

これも状況を説明しないとね。gethostbynameはどうなるの?


394 :382:2006/02/23(木) 01:48:21
>>392
ファイル名?
HOSTSで合ってるよ。

http://book.itzero.com/read/others/0505/Oreilly.Ipv6.Network.Administration.Mar.2005.eBook-LiB_html/0596009348/ipv6na-CHP-5-SECT-3.html

395 :デフォルトの名無しさん:2006/02/23(木) 10:58:07
>>380
たぶんそのソケットが既にCloseされてるから。
Connectedプロパティを確認してみてください。
なぜCloseされているのかはプログラムの作者以外誰にもわからない。

396 :デフォルトの名無しさん:2006/02/23(木) 20:38:55
質問です。
簡単なネットワーク対戦可能なインベーダーを作成中なのですが、
一般的に皆様がこのようなゲームを作成する場合、常に移動すべく玉の
座標情報送信処理は、どのような感じ・どのぐらいの間隔で行ってるのでしょうか?
(20msに一回、UDPにて更新処理を行おうかと思っていますが…)

397 :デフォルトの名無しさん:2006/02/23(木) 23:25:26
>>396
動いたら送信
動かなかったら送信しない

このとき送るのは可能な限り
差分ではなく適当な絶対値

398 :デフォルトの名無しさん:2006/02/23(木) 23:59:33
>>396
動きが計算できるタマだったらいちいち送る必要はないんじゃないか?
プレイヤーの座標を最優先する。


399 :396:2006/02/24(金) 01:40:24
ありがとうございます。
動きに関しては誘導弾など可変の性質を持つものがあるので計算はできないです。
普段の座標情報(弾道)送信処理は
弾座標送信←20ms→弾座標送信←20ms→弾座標送信←20ms→弾座標送信…
のようになっていて、
キー入力によるプレイヤー座標の送信処理が発生した場合に
弾座標送信←x→人座標送信←20ms-x→弾座標送信←20ms→弾座標送信…
     └   ←20ms→   ┘
のような作りになっています。用はプレイヤー移動による座標送信処理は
定期的に20msごとに行われるサイクルの、その20msの中のどこかに割り込みが
入るみたいな感じで作ってあります。
二番目の質問である>どのくらいの間隔で行っているのでしょうか
というのは質問の仕方が悪かったです。

上記の仕組みで、間隔の20msは値として小さすぎるなどの問題はないでしょうか?

400 :デフォルトの名無しさん:2006/02/24(金) 01:42:12
>>399
遅延問題も兼ねるので、そのあたりはまるっきりあなたのセンスかと

401 :デフォルトの名無しさん:2006/02/24(金) 01:57:29
ちなみにプレイヤー座標が得られている限り、誘導弾は可変では無い。
そのへんの見極めが出来てないようでは

402 :396:2006/02/24(金) 02:09:07
確かに個々のハードウェア・環境によっての遅延問題はプロトコルの仕様
云々以前の問題ですね・・やはり最適な値というか、問題なさそーな
値を自分で見つけるしかないということですかね。

ロックオンとか無しでの手動誘導です。プログラミング自体慣れていないので
アルゴリズム的なセンスがないのは痛感してます…

色々と参考になりました。ありがとうございます。

403 :390:2006/02/24(金) 07:44:44
> 取得できません。

hostsファイルに記述してgethostbynameを呼ぶと復帰値NULLで
取得できませんでした。
lmhostsファイルに記述してgethostbynameを呼ぶと復帰値からIPアドレスを
取得できました。

どうしてhostsファイルを見にいってくれないんだろう?


404 :デフォルトの名無しさん:2006/02/24(金) 07:49:44
まさか、hosts.txtというオチでわ

405 :デフォルトの名無しさん:2006/02/24(金) 17:50:41

lngReturn = NetMessageBufferSend(NULL,address,fromname,
(BYTE *)msg,sizeof(WCHAR) * lstrlenW(msg));

Win2kではfromnameが反映され正常に送信できますが
WinXPSP2ではlngReturnに0xE1が戻ってきます。
fromnameをNULLにすれば正常送信できますが、勝手にマシン名が入ってしまいます。

何故?
XPでもfromnameを反映できる方法がありますか

406 :597:2006/02/25(土) 09:17:04
生ソケットで、TCP/IPを実装する場合、
TCPの最初と最後の3wayとかの部分も自分で書くんですよね?
で、送るのはsendtoで良いと思うのですが、受け取るのはrecvfromですか?
つまり、生ソケットでTCP/IPを使う場合、UDP用のAPIを使うの?

407 :デフォルトの名無しさん:2006/02/25(土) 09:27:55
to, fromの部分は自分の役割じゃん。
だから普通send, recv。

>>6に実装リストあるよ。

408 :デフォルトの名無しさん:2006/02/26(日) 00:20:38
>>403
> hosts ファイルに記述して gethostbyname
> を呼ぶと復帰値 NULL で取得できませんでした。

ちゃんとマニュアル読めよ。

Return Values
If no error occurs, gethostbyname returns a pointer
to the hostent structure described above. Otherwise,
it returns a null pointer and a specific error number
can be retrieved by calling WSAGetLastError.

host ファイルを見に行く以前の問題だよ。




409 :デフォルトの名無しさん:2006/02/27(月) 04:10:48
windowsで非同期イベントを使ってサーバーを書いているのですが

SOCKET client_sock = accept(...);
HANDLE event = CreateEvent(...); // マニュアルリセットはfalse
...
WSAEventSelect( client_sock, event, FD_READ | FD_CLOSE );
...
while(1)
{
 result = WaitForMultipleObjects( event_size, event_array, false, INFINITE );
 switch( result )
 {
 ....
 }
}

サーバーサイドはこのような感じなのです。

クライアントサイドで、
send( ... ); //1回目
send( ... ); //2回目
などとやると、1回目は、WaitForMultipleObjectsから戻り、正常に受信するのですが、
二回目以降がWaitForMultipleObjectsから戻ってきません。
1回目と2回目の間にSleep(10)などを入れると、二回目も正常に受信するのですが、
これはどういうことなのでしょうか?

410 :デフォルトの名無しさん:2006/02/27(月) 05:40:42
>>409
1回目の処理が終わる前に受信しちゃうんでない?

411 :デフォルトの名無しさん:2006/02/27(月) 07:14:11
Nバイトのsend*2がN*2バイトのrecv*1でに変換されたんでしょ。

412 :デフォルトの名無しさん:2006/02/27(月) 08:53:05
生ソケットでUDPとかのプログラム組む時のソースって、
何で擬似パケットを用意するのですか?

413 :デフォルトの名無しさん:2006/02/27(月) 09:16:57
チェックサム値の算出の為、で合ってます?

414 :デフォルトの名無しさん:2006/02/27(月) 11:00:15
疑似ヘッダをデータ構造として持たなくても、
チェックサムの値は計算できるので、
プログラマの好みの問題としか言いようがない。

415 :409:2006/02/27(月) 16:34:04
Sleepを入れないで二連続sendした後は、何のイベントも通知されなくなるんです。
FD_CLOSEも通知されません。

416 :デフォルトの名無しさん:2006/02/27(月) 16:40:36
eventの使い方を間違っているとかな。

417 :^ω^ ◆8vOv.D2p4. :2006/02/27(月) 18:24:23
非同期のソケット用にAllocateHWndでウィンドウを作って、
メッセージループでイベントを受信→処理 としていますが、
この場合、AllocateHWndを呼び出したスレッドと、
作られたウィンドウのメッセージループは、
スレッドセーフにしなくても大丈夫ですよね?

Delphi+Winsock(WSAAsyncSelect)の話です

418 :デフォルトの名無しさん:2006/02/27(月) 18:29:31
XPでWinsockを利用すればIPヘッダやTCPヘッダを書きかえれるというのを聞きました
ところがSP2の導入でそれが不可能になったと聞きました。

そこで質問です、今現在IPヘッダ,TCPヘッダを書き換えて
パケットを送信する方法は無いのでしょうか?

以下の中に答えはあるんでしょうか?
@SP2をアンインストールすればできる
AWinPcapを利用すれば出来る
BUnixだったら出来る
C上記以外の方法で出来る
Dなにやっても無理。現実は非情である。

色々間違った質問だと思いますが、良かったら答えてくださいませ
よろしくお願いします。

419 :デフォルトの名無しさん:2006/02/27(月) 18:34:26
答えられない人が横槍で感想を挟むのはスレ的に駄目なのかな?
でも。

>>418
ほほう!そうなんですか?
てっきりそーゆーのは
ネットワークカードのドライバ直で叩くんだと思ってました


420 :デフォルトの名無しさん:2006/02/27(月) 19:58:15
>>418
Linuxでpacket(7)とか。
ただ、ISPでフィルタリングされている場合は外に出ない。


421 :409:2006/02/27(月) 20:22:30
>>410
すいません。レス見逃してました。
410さんの言うとおり、1回目の処理中に2回目のイベントが発生してるっぽいです。
WaitForMultipleObjectsが呼ばれている状態でシグナル状態になったイベントしか通達されてない状態(ぽい)です
どのように回避すればいいのでしょうか?

422 :デフォルトの名無しさん:2006/02/27(月) 21:04:26
>1回目の処理中に2回目のイベントが発生してるっぽい
これは何でわかったの?

423 :デフォルトの名無しさん:2006/02/27(月) 21:18:24
>>422
「発生してるっぽい 」ってことで予想です。

424 :デフォルトの名無しさん:2006/02/27(月) 21:28:02
FD_READがきたら、-1を返すまでrecvする必要があるけど。

425 :デフォルトの名無しさん:2006/02/27(月) 22:20:36
>>424
-1まで読むように書き換えたら正常に動くようになりました。ありがとうございます。
そうだったんですか。知りませんでした・・・


426 :デフォルトの名無しさん:2006/02/28(火) 11:00:18
受信したTCPパケットのヘッダ情報を取得するには
rawソケット使わないと駄目ですかね?

427 :デフォルトの名無しさん:2006/02/28(火) 12:35:01
>>418
とりあえず、WinPcapというか、その中のPacket.libを使えば
どんなイーサネットフレームの読み書きでもできる。
NDISレベルで読み書きするので、ATMとかFDDIでもOKだと思う。
イーサネットカードしか持ってないので知らんが。

ただし、パケットをイーサネット(データリンク)のヘッダまで含めて
自分で作らないといけない。Linuxのpacket socketなら、arpの解決
ぐらいはしてくれた気がするが、それもしてくれない。
iphlprのSendARP呼べば終わることだけど。

IP、TCPを書き換えてってのが、OSのスタックが吐いたパケットに
加工する、という意味なら、仮想インターフェイスを作って、
そこへ書き込まれたフレームを読んで、加工して、実インターフェイスに
書き出す、とか。
GREのトンネル作るとか、802.1qのタグ振るとか、MPLSのラベル割り込ませるとか、SoftEther的なもの
つくるとかだったらこっち。
仮想インターフェイスのつくり方は、openvpnとか、tapcontrol.exeとかでぐぐれ。

428 :デフォルトの名無しさん:2006/02/28(火) 15:51:15
ネットワークプログラミング初心者です。
418 さんの質問と多少かぶるのですが↓のような環境で
AのポートaaaaとSのポートbbbb」がTCP接続されているのですが、

[PC(A)]---[PC(B)]---[router(R)]---(TheInternet)---[Server(S)]
  (a) (b) (c)  (d)  (e)         (f)

(A)(a)192.168.1.2 OS:WinXP (ポートaaaaでクライアントを使用)
(B)(b)192.168.1.1 OS:WinXP (Windows付属のネットワーク共有(DHCP)が稼動)
(c)192.168.0.2
(R)(d)192.168.0.1
(e)202.yyy.yy.y
(S)(f)202.xxx.xx.x (ポートbbbbでサーバー稼動)

BでA←→S間のパケットを編集する場合どのようにしたらいいでしょうか。
VC#のraw Socketを使ってBを通過するパケットのIPヘッダーなどをモニター
したり、IPヘッダーを作ってB→Aに送ったりすることはできたのですが
AからのパケットをSに流さずにBで止める方法がわかりません。
427 さんのWinPcapをつかえば可能なのでしょうか。
なにとぞご教授のほどお願いします。
(ちなみにAのクライアントソフトはホストのIPとポートが固定なのでBで串などは
つかえそうにありません。)

429 :デフォルトの名無しさん:2006/02/28(火) 15:59:03
>>428
Aのクライアントソフト、これの詳細plzwっうぇwっうぇ

430 :デフォルトの名無しさん:2006/02/28(火) 16:00:48
>>428 (訂正)ずれました
[PC(A)]---[PC(B)]---[router(R)]---(TheInternet)---[Server(S)]
NIC~(a)~~~(b)~~(c)~~~(d)~~~~~(e)~~~~~~~~~~~~~~~~~~(f)

431 :417^ω^ ◆8vOv.D2p4. :2006/02/28(火) 16:50:24
どうやら あまりに アホな 質問を して しまった ようだ

432 :デフォルトの名無しさん:2006/02/28(火) 20:48:26
PC(B)をWindows止めてLinuxでも入れたら?

433 :デフォルトの名無しさん:2006/02/28(火) 21:05:03
すれ違いかもしれませんが質問します。

コマンドプロンプトのnet viewでLAN上のPCの一覧が
表示されるんですが、どっかのPCが突然落ちた場合でも
net viewでそのPCがいつまでも表示されてしまいます。

nbtstat -Rとかやってもだめでした。

いい方法がありましたら教えてください。

434 :デフォルトの名無しさん:2006/02/28(火) 21:32:54
それはマスタブラウザがブラウズリストを保持してるから。
更新間隔を短くすれば、当然ネットワーク負荷はあがるが、
失効までの間隔も短くなる。

435 :デフォルトの名無しさん:2006/02/28(火) 22:33:37
それプログラミングじゃないし…

436 :デフォルトの名無しさん:2006/02/28(火) 22:53:10
ああなんだ。Sambaを改造する話か。

437 :デフォルトの名無しさん:2006/03/01(水) 01:27:29
>>428
1. 「Routing and Remote Access」サービスを止めるか、iphelperの
 EnableRouter()で、パケットのフォワーディングを止める。で、WinPcap
 使って、自分のプログラムでフォワーディングする。ついでに加工する。

2. NDISのフィルタドライバで、パケットのドロップ、加工を制御する。

のどちらかだと思うけど、1はダサい。やるなら2。
フィルタドライバはWINDDKのPassThruドライバを雛形にすれば良い。
WINDDKがめんどくさいか、MSDNに入ってなくて手に入らないなら、
ttp://www.ntkernel.com/w&p.php?id=7
のWinpkFilterが使えそうな気がする。privateかeducational useなら無料
らしい。

>>432の言うように、Linuxにするなら、iptablesのモジュールにするのが
手っ取り早いと思う。MASQUERADEみたいなもんか。

438 :デフォルトの名無しさん:2006/03/01(水) 12:40:10
>>437 的確なアドバイスありがとうございます。
2のNDISフィルタはDDKがないのと自分にはまだ敷居が高そうなので
とりあえず1のIpHelper+WinPcapを試すことにしました。

>>432 PC(B)がメインPCなので普段よく使うアプリなどの関係で
なかなかLinxにきりえにくに状況です。(PC(A)はスペック低すぎるので)
ただいつかはLinuxメインでいきたいとおもいます。

439 :デフォルトの名無しさん:2006/03/02(木) 02:17:44
snmpでsnmptrapだけ実装したいんだけど
net-snmpの実装があまりにもすぱっげちぃで
はきそうで
そのいいソース知ってる人いませんか?

440 :デフォルトの名無しさん:2006/03/02(木) 06:41:43
実装したいというのはどういうこと?
snmpのライブラリを書くわけ?
利用するコードを書くの?

441 :デフォルトの名無しさん:2006/03/02(木) 10:00:21
ソケットが開いてるか閉じてるか判定するにはどうしたらいいんですか?

442 :デフォルトの名無しさん:2006/03/02(木) 10:14:09
ソケットを開くにはどうすればいいんですか?

443 :417^ω^ ◆8vOv.D2p4. :2006/03/02(木) 12:51:39
>>441
recvしてみて返り値がSOCKET_ERRORなら閉じてる
0以上なら繋がってる

じゃだめかな

444 :デフォルトの名無しさん:2006/03/02(木) 16:18:15
>>441
コネクション型だとして、getpeernameとか呼んでみたらどうかな。

445 :デフォルトの名無しさん:2006/03/02(木) 16:27:06
socket() が成功した後はずっと「開いている」状態だろ。
close() しない限り勝手に閉じないよ。

接続しているかそうでないかなら>>444

446 :デフォルトの名無しさん:2006/03/02(木) 20:55:16
はじめまして
実装上でアドバイスください
WinSockで TCPでデーターを読み込む場合
1つのセッションで全てを行ってもよろしいのでしょうか?

もちろん回線的には変わらないのでしょうが
内部のバッファ的にセッションをいくつか張ってデーターを
やりとりした方が有利なのでしょうか?

447 :デフォルトの名無しさん:2006/03/02(木) 20:57:07
分割ダウンロードみたいな話?

448 :デフォルトの名無しさん:2006/03/02(木) 21:00:52
>>446
一つのセッションだと、恐らく接続先は単一のサーバであって、
要求はたぶん一つ程度のスレッドで処理される。

要求を複数に分割できるのなら、複数に分けて並行して行えば
複数のサーバに分散されて処理されるかもしれないし、
そうでなくても複数のスレッドに分散されて、先方のCPUの
処理時間を多く利用できるかもしれない。

行儀は悪い。

449 :441:2006/03/02(木) 22:11:01
なるほど、ありがとうございました!

450 :446:2006/03/02(木) 22:22:37
ありがとうございます
サーバー側のほうまでは考えておりませんでした。
たしかにその通りですね。

クライアント側もWinsockですし
やはり単一スレッドでいじめない方がよろしいですよね?
Winsock1.0の頃はCPU負荷だけでデーター保障されてる
TCPでもデータートンでましたし・・・

451 :デフォルトの名無しさん:2006/03/03(金) 00:55:28
snmpのライブラリ作るのつらいです。
だれかtrapだけでも作り方教えてください

452 :デフォルトの名無しさん:2006/03/03(金) 02:10:53
>>451
perl の Net::SNMP::Transport あたりを参考にしてみれば。
Cのシンプルなやつもありそうだけど、簡単にググった程度では見つからなかった。

453 :デフォルトの名無しさん:2006/03/03(金) 03:28:13
CreateGaame〜陸海空オンライン〜
開発開始!力ある者だけこぃ!

454 :417^ω^ ◆8vOv.D2p4. :2006/03/03(金) 13:18:17
>>453
ぐぐった
http://www112.sakura.ne.jp/~kaientai-project/creategame.htm

これはひどい

455 :デフォルトの名無しさん:2006/03/04(土) 05:06:27
Windows(xp)のRAWソケットは信用できん、とか聞いたのですが、
どこがどのように信用できないのでしょうか?
意図したようにちゃんと動かないとか?

456 :デフォルトの名無しさん:2006/03/04(土) 05:32:26
>>455
言った奴に聞け

457 :デフォルトの名無しさん:2006/03/04(土) 05:45:58
javaで作られたオープンソースのプロクシサーバーを教えて下さい。

458 :デフォルトの名無しさん:2006/03/04(土) 07:54:49
>>457
>>269


459 :デフォルトの名無しさん:2006/03/04(土) 08:35:45
レスありがとうございます。
javaでかかれたものはないでしょうか?

460 :デフォルトの名無しさん:2006/03/04(土) 08:43:14
>>459
>>269

461 :デフォルトの名無しさん:2006/03/04(土) 16:09:40
>>459
http://www.jumperz.net/index.php

462 :デフォルトの名無しさん:2006/03/04(土) 18:20:36
iTuneで『音楽を共有する』って機能がありますよね?
誰が自分のどの曲にアクセスしているのか調べるツールを作ろうかと思っています。
パケットを監視してどのIPに対してデータを送信しているのか調べるツールはフリーでも
既にあるようなので作れないことはないんじゃないかと。
ちなみに私はネットワークプログラミングの知識は今現在全くないです。
ネットで調べてはいるのですが、既に具体的なやり方を知っている方がいたら是非教えてください。参考になるサイトなどでも構いません。
言語はC++です。
よろしくお願いします。


463 :デフォルトの名無しさん:2006/03/04(土) 18:37:45
>>462
ttp://www.sysinternals.com/

464 :デフォルトの名無しさん:2006/03/04(土) 19:24:21
>>462
netstat -t

465 :デフォルトの名無しさん:2006/03/04(土) 23:41:22
>>462
WindowsならWinSock2でパケットを拾うことができる
WinSock2はNT系のみしか実装されてないけどね
拾うデータは完全に生のRAWパケットだから自前で分別して組み立てて判別しないといけない

466 :デフォルトの名無しさん:2006/03/05(日) 02:05:16
パケットの組み立てやってみたいんだけど
サンプルとかありますか?
HTTPだけでも対応してみたい

467 :デフォルトの名無しさん:2006/03/05(日) 04:32:42
http://www.ne.jp/asahi/yamashita/programming/tips/raw_socket.cpp.html

468 :デフォルトの名無しさん:2006/03/05(日) 15:55:12
殆どパケットの出入りが無いプログラムで、
送受信を同じポートにするって可能ですか?

469 :デフォルトの名無しさん:2006/03/05(日) 16:04:56
意味がわからない。ふつう送受信は同じポートだろ。

470 :デフォルトの名無しさん:2006/03/05(日) 16:09:43
ん?クライアントから見た受信ポートってふつう不定だろ?

471 :デフォルトの名無しさん:2006/03/05(日) 16:22:46
すみません、変な説明で・・
サーバーのプログラムが受信用のポートを用意している状態で、
そのポートから、別のプログラムがインターネット側に
パケットを送信する事は可能でしょうか?

472 :デフォルトの名無しさん:2006/03/05(日) 16:24:05
bindしてからconnectするようなのは変態。

473 :デフォルトの名無しさん:2006/03/05(日) 16:28:16
「webサーバにあるブラウザから別のサーバーへパケットを送信して見ることは可能」
と同じ意味なら可能。

474 :デフォルトの名無しさん:2006/03/05(日) 16:55:24
>>471
可能というかaccept後のソケットでは普通のことです。


475 :デフォルトの名無しさん:2006/03/06(月) 00:51:08
簡単なライブラリどれー?


476 :デフォルトの名無しさん:2006/03/06(月) 01:13:28
pollの第2引数って1025以上だと異常復帰するけど
pollで1025以上扱うにはどうすればいいの?

477 :デフォルトの名無しさん:2006/03/06(月) 01:56:56
ヘッダの定数増やしてカーネル再構築。

478 :デフォルトの名無しさん:2006/03/06(月) 02:56:20
>>462-467

479 :471:2006/03/06(月) 07:58:23
>>474
ここで言う「サーバーのプログラム」と「別のプログラム」は
同一のPCの上で動作しているのですが、問題無いですか?

480 :デフォルトの名無しさん:2006/03/06(月) 12:58:13
/proc/sys/fs/file-maxを1025以上にして、setrlimitで1025以上にして、poll発行してもだめなの?

481 :デフォルトの名無しさん:2006/03/06(月) 14:51:40
ああ゛ー、どう質問してよいのやら。パニック状態の>>294です。

「UNIX単体」で動く(デタラメな)データベースは作成できました。
それをUDPソケットを使って
1. 航空便名char FlightID[20]
2. 8つのオプションint option(空席チェックや購入など)
3. 購入の場合はそのチケットの枚数int seat
だけを送って、その結果をサーバーのファイルから読んでクライアントに返す、
というのをやるつもりです。
で、今
クライアント: flightIDを入力
サーバー: そんなflightIDがあるかチェック
そのflightIDがあれば
クライアント: optionを入力
サーバー: optionを送って結果を返す、って方法を考えてます
(よって入力出力入力出力と計二回やり取りすることになります)。
でも、UDPって二回もやり取りできないような気がしてきました。←説明すると長くなります
flightIDとoptionは一度に送って結果も一度に返すようにすべきですか?

あー、やっぱりうまく説明できない。
どっっっこ探しても実用的な(パクれる)サンプルがないし…もう鬱出氏脳…。

482 :294:2006/03/06(月) 14:57:41
やっぱりもっと簡単な質問にしときます。
UDPクライアントの引数は4つありますよね?(って一般的なのかも知らないですが)
4つ目はポート番号で省略ができることは分かります。
でも3つ目はエコー用の文字列ですよね?
今回はこれ使わないんですけど、ないと走りませんよね?
一般的にはこの3つ目の引数には""とか"Dummy"とか適当に入れちゃっていいんですか?

483 :デフォルトの名無しさん:2006/03/06(月) 14:59:31
UDPサーバなんて言葉はこの世に存在しません

484 :294:2006/03/06(月) 15:01:43
ここはぐっとGrin and bear it.

485 :デフォルトの名無しさん:2006/03/06(月) 15:01:57
>>482

>>4
> TCP/IPによるネットワーク構築
>〈Vol.1〉原理・プロトコル・アーキテクチャ
>http://www.amazon.co.jp/exec/obidos/ASIN/432012054X/

で一から勉強しろ。

486 :デフォルトの名無しさん:2006/03/06(月) 15:04:31
同期の必要性がある場合はUDPなんかつかうな
HTTPサーバがどうやって動いてるのか調べてみればいい
君のやりたいことそのまんまだから

487 :482 = 294:2006/03/06(月) 15:18:01
>>485
第一日本に住んでないし。
本ならバイブルとされているはずの
W. Richard Stevens著UNIX NETWORKING PROGRAMMING第一巻が
手元にあるけど実用的な使い方には一切触れてない凄物。
TCP/IP SOCKETS IN Cという本もあるけど、これもそう。
検索してもこんなの↓ばっかり。

ttp://www.ksworks.org/memo/net/udpsndrcv.htm

実際に「インタラクティブ」なのが一つたりとも見つからない。
マジ、これはイジメか?

>>486
>同期の必要性がある場合はUDPなんかつかうな

あ、それがキーかもです。
今回はUDPでやれ、ってことになってます。
UDPは"One message at a time"ですよね?
ってことは一度に送る方法しかないってことですか? ←取り敢えずここははっきりさせましょう

488 :デフォルトの名無しさん:2006/03/06(月) 15:22:10
つーか、sshかrpcで済むことをなんで生実装したがるんだろ。

489 :482 = 294:2006/03/06(月) 15:25:08
それが ネ ッ ト ワ ー キ ン グ プ ロ グ ラ ム です。

それを言い出したらみんなプログラミングなんかせずに
データベースはオラクル使え、表計算はエクセル使え、となるじゃないですか。

490 :デフォルトの名無しさん:2006/03/06(月) 16:01:08
ていうかUDPってパケットが届くことを保証してない。途中で消えるかも知れない。
その状態でTCP並のことをしようというのであればそれなりに自分でやる必要がある。
再送の機能を付けるとかね。でもそんなのはTCPでやれば悩むことはなくなる。

491 :デフォルトの名無しさん:2006/03/06(月) 16:02:15
TCPのソースみたらいいんじゃね?

492 :デフォルトの名無しさん:2006/03/06(月) 16:10:17
UDPはパケットがばらまかれたあと何もしない
届いたかもわからないし、途中で分割されることもあるし、順番がばらばらになる
送りたいデータをひとかたまりとしてデータのサイズと分割数とどの位置のデータか
を含めて小分けにしてばらまく
受け取る側で全部そろうまで待機しつづける、タイムアウトになったら必要な位置の
データをもう一回まいてもらう
まずそこから作らないといけない

493 :デフォルトの名無しさん:2006/03/06(月) 16:24:14
>>489
オラクルはメンテナンスも含めればとんでもない費用が掛かるし、
ちょっとした集計にエクセルは重くなりますよね。
でも、SSHもrpcも費用が掛からず後者に至ってはシステム標準。
土方プログラマなら兎も角、SEならプログラミングコストを削減することも仕事のうちです。
つーか、UDPがどんなものかも知らないのにネットワークプログラミングを語られてもね。

494 :デフォルトの名無しさん:2006/03/06(月) 17:32:51
スレが汚れるので馬鹿は放置の方向で。

495 :デフォルトの名無しさん:2006/03/06(月) 18:02:14
すんません。TCPで質問です。
クライアント側で自分が今使ってるポート番号を
知る方法ってありませぬか?
普通気にすることはないので、スルーしてたんですが、
必要な状態に陥ってしまったのでorz。

環境はLinuxでございます。
どなたか教えてください。おながいします。

496 :デフォルトの名無しさん:2006/03/06(月) 18:07:09
>>495
netstatのソースでも読めばよいのでは

497 :デフォルトの名無しさん:2006/03/06(月) 18:16:50
>>495
/proc/net の下で使えそうなのを探してみる

498 :495:2006/03/06(月) 18:33:30
>>496 >>497
スイマセン。恥ずかしながらwindowsばっかで仕事してました。
急遽Linuxで作るハメになっちゃったんで、ソース追っかける
とかは中々難しいです。

>>497のディレクトリの直下ってこれ何が入ってるんでしょう?
viewとかで見たらなんか文字列がゴチャゴチャとありますが。
と、こんなレベルなんです(--;。

こういう回答が出ると言うことは、ズバっとコマンドで指定して
取る事は出来ないのでしょうか?ホントスミマセン。

499 :デフォルトの名無しさん:2006/03/06(月) 18:33:30
>>481
> でも、UDPって二回もやり取りできないような気がしてきました。←説明すると長くなります

できます。←説明すると長くなります

500 :デフォルトの名無しさん:2006/03/06(月) 18:35:43
>>495
getsockname

501 :デフォルトの名無しさん:2006/03/06(月) 19:28:27
>>495
> クライアント側で自分が今使ってるポート番号を
> 知る方法ってありませぬか?

これは他のプロセスを含むのか含まないのか?
含むなら netstat --tcp -a で出来る。
ちなみにこれの元になるものが /proc/net 以下の
仮想ファイルだ。


502 :デフォルトの名無しさん:2006/03/06(月) 19:29:07
コマンド? プログラミングじゃね〜じゃん。
lsofで出来るけど。

503 :デフォルトの名無しさん:2006/03/06(月) 20:03:49
コマンドを使うのがプログラミングじゃなかったら、
シェルスクリプトでなにか作るのはなんていうの?

504 :^ω^ ◆8vOv.D2p4. :2006/03/06(月) 20:04:20
>>498
windowsが恥ずかしいのか・・・

505 :デフォルトの名無しさん:2006/03/06(月) 20:06:15
スクリプティング

506 :デフォルトの名無しさん:2006/03/06(月) 20:33:22
>>504
恥ずかしいと思う。


507 :デフォルトの名無しさん:2006/03/07(火) 00:52:55
全然違う話になるんだけど、俺実装するとき
RFCしか読まないんだけど、やっぱり
バイブルと呼ばれる日本語の本読んだほうが
いいの?2冊だけあるんだけどRFCに書いてること
回りくどい日本語で書いてあるだけとしか思えない
俺は馬鹿なのだろうか

508 :デフォルトの名無しさん:2006/03/07(火) 00:59:41
英語が読める人は、英語のバイブルを読めばいいんでないの。

509 :デフォルトの名無しさん:2006/03/07(火) 01:05:00
>>507
ちゃんとdraft-*も読んだ方がいいですよ。

510 :デフォルトの名無しさん:2006/03/07(火) 09:48:04
winsockを使ってHTMLを取得するプログラムを書いてるんですが
リクエストを送るときに
GET /index.html HTTP/1.0\r\n\r\n
と2回改行コードを入れないとサーバが改行コードとして認識して
くれてないみたいなんですがこれで普通なんですか?
とりあえず動いてるのでいいですけどすっきりしないので知ってる
方がいたら教えてください

511 :デフォルトの名無しさん:2006/03/07(火) 11:37:06
はい。
>>5行って、HTTPのRFC読んでください。


512 :デフォルトの名無しさん:2006/03/07(火) 12:11:35
GET /index.html HTTP/1.0\r\n
\r\n

インデント正確にするとこうだな
空行が終了判定だぞ

513 :デフォルトの名無しさん:2006/03/07(火) 12:22:16
>>511,512
ああ〜そうか(´A`)アホでした
すっきりしました!どうもありがとうございます

514 :デフォルトの名無しさん:2006/03/07(火) 12:26:51
>>513
HTTPリクエスト・ヘッダを勉強しろ

515 :^ω^ ◆8vOv.D2p4. :2006/03/07(火) 13:59:55
>>513
かっ・・かわいい

516 :482 = 294:2006/03/07(火) 14:21:33
>>490
>>492
ありがとうございます。
上に指示を仰いだらUDPで一回送って一回受け取りで桶、ということでした。
「それならそうと書け、ヴォケが、はったおすぞ!」とは口が裂けても言えませんでした。

>>493
誰でも最初は初心者だろ、(#゜д゜)凸ゴルァー!
本だけ渡されて「ほら、やれ」って言われてる身にもなってみろ!…とキレてみるか。

なんでネットワーキングプログラミング関連の本や資料は全部ボトムアップアプローチなんだろ?
トップダウンアプローチで書かれた本でも売れば絶対に売れるのに。

517 :^ω^ ◆8vOv.D2p4. :2006/03/07(火) 14:49:52
>>516
簡単なHTTPサーバーとかならボトアプの本でも載ってるじゃん
逆にそれより複雑だと買う人が絞られすぎちゃうんじゃね??

てか、プロトコル仕様とかで質問するなら
ボトアプの本も一個買ったらいいんじゃね?

なんか勘違いしてたらごめん

518 :デフォルトの名無しさん:2006/03/07(火) 15:15:36
>>515
表示するフォントを変えると可愛くなくなると思う。


519 :^ω^ ◆8vOv.D2p4. :2006/03/07(火) 20:38:42
>>518
MS Pゴシックで快適AAライフ

520 :デフォルトの名無しさん:2006/03/08(水) 00:57:39
TCP の server 側の待ち受けポートを作る際
struct sockaddr_in 型の変数にアドレスやポートを
設定して、ソケットとbind した後は、

その sockaddr_in 変数は廃棄してしまってよいのでしょうか?
同じようにconnect()の場合もそうでしょうか?



521 :デフォルトの名無しさん:2006/03/08(水) 01:04:40
>>516
>本だけ渡されて「ほら、やれ」って言われてる身にもなってみろ!
土方プログラマ乙。

522 :デフォルトの名無しさん:2006/03/08(水) 01:09:03
>>520
OK。 ローカル変数で十分。 

523 :デフォルトの名無しさん:2006/03/08(水) 03:13:45
CAsyncSocket の Connectって無意味じゃね?

524 :デフォルトの名無しさん:2006/03/08(水) 11:58:16
TCPで
typedef struct
{
int option;
char msg[8];
int login;
} message;

message msgStruct;

msgStruct.option = htonl(option);
gets(msgStruct.msg);
msgStruct.login = htonl(login);

send(s, &msgStruct, sizeof(msgStruct), 0);
のようにして構造体で送った値を
サーバー側で抽出、というか表示してやるにはどうすればいいですか?
intのはntohl()で戻してやる必要がある、とは書かれてるんですが
実際にどうやるのかは書かれていません。
教えて下さい。

525 :デフォルトの名無しさん:2006/03/08(水) 12:08:39
>>524
・構造体メンバーのメモリ配置が双方のコンパイラでどうなっているか確認。
・C言語初心者スレで構造体へのポインタの学習。

526 :デフォルトの名無しさん:2006/03/08(水) 12:12:40
>>524
送る側のプログラムをコンパイルしたコンパイラが、当該のコードで
その構造体に用いたアライメントやパディングなどをちゃんと理解して、
受信側でも送られたバイト列をその通りに解釈すればよい。

そういう面倒なことをしたくないのならば、テキスト表現で送るか
適当な形式で byte[] に詰め込んで送る。

例えば
unsigned char buf[16];
memcpy(buf, msg, 8);
buf[8] = option >> 24; buf[9] = option >> 16; buf[10] = option >> 8; buf[11] = option;
buf[12] = login >> 24; buf[13] = login >> 16; buf[14] = login >> 8; buf[15] = login;

などとして、受け取った側では option = (buf[8]<<24)|(buf[9]<<16)|(buf[10]<<8)|(buf[11]);
などとする(ただしintは32ビットと仮定)。

527 :デフォルトの名無しさん:2006/03/08(水) 12:12:53
>>525
ありがとうございます!
質問した直後にちょうど勘が働いてサーバー側で
printf("option: %d\n"msgStruct.option);ってやってみたらちゃんと出ました!
なぁんだ、ちゃんと届いてたのか。
また分からないことがあったら聞きますね。

528 :デフォルトの名無しさん:2006/03/08(水) 12:14:15
調べてから聞け

529 :デフォルトの名無しさん:2006/03/08(水) 12:18:22
>>526さんも詳しい説明してくれてたんですね。
一応同じタイプのマシンなので面倒なことはしなくてよさそうです。
>>ってC++のパイプですか?それともビットシフトか何か…そういう使い方したことがないので。
ありがとうございました。また聞きますね。

>>528
はい、気をつけます。
結構調べた(かれこれ五時間)んですけどね。(藁

530 :デフォルトの名無しさん:2006/03/08(水) 12:26:40
>>527
ntohl()してねーじゃん(w

予想レス「しなくても動いたから大丈夫です!」

531 :デフォルトの名無しさん:2006/03/08(水) 12:35:01
>>530
はっ、Σ( ̄□ ̄lll)!!

突っ込み、ありがとうございます。
てか、しなくても動くんですね。じゃ、しなくてもいいk(ry

532 :^ω^ ◆8vOv.D2p4. :2006/03/08(水) 13:14:44
>>531
マックに移植するとき泣く

・・・あぁ、インテル入ったからもういいか

533 :デフォルトの名無しさん:2006/03/08(水) 16:09:28
>>527
コンパイラが違うと構造体のメモリの割り当て方が違う
32bit処理系だとcharのような要素があった場合32bit確保する場合がある
コンパイラオプションで変えれるからあんまりプログラムは意識しなくてもいいけど
サーバとクライアントがコンパイラが違う時は注意が必要

534 :デフォルトの名無しさん:2006/03/08(水) 16:19:09
> 32bit処理系だとcharのような要素があった場合32bit確保する場合がある
何ていうコンパイラ?

535 :デフォルトの名無しさん:2006/03/08(水) 16:25:02
>>524
横着しないでちゃんとプロトコル決めろ
option:4byte:なんかのオプションのフラグ
msg:8byte:'\0'ターミネートされた文字列
login:4byte:なんかのログイン情報

で、合計16バイトのunsigned charな配列に確保。

536 :デフォルトの名無しさん:2006/03/08(水) 23:57:47
んでもってエンディアンに引っかたりするんで、このさいXMLでデータを(ry

537 :デフォルトの名無しさん:2006/03/09(木) 01:59:46
まあ文字データにするのが一番楽

538 :482:2006/03/09(木) 06:36:04
こんにちは、懲りない 土 方 プ ロ グ ラ マ です。

なんとかUDPでデータやり取りするプログラムできたんですが
時々、計算が合わないことが合わないことがあります。
フラグ立てたりしてデバッグしてもどう考えても間違いはない。
で、やっと気付いたんですが、
これが「UDPではデータを失うことがある」っちゅーことなんですね。

>>486さんの言った「同期の必要性」というのが今頃理解できた…もう鬱だ…氏n(ry

539 :デフォルトの名無しさん:2006/03/09(木) 07:51:37
インターネット回線の速度のバリエーションを
シュミレートできるようなオープンソースのツールはないでしょうか。
キャッシュサーバーのテスト用として利用したいのですが。


540 :デフォルトの名無しさん:2006/03/09(木) 08:10:36
> 時々、計算が合わないことが合わないことがあります。
ほんとTCPにした方がいいな。

541 :デフォルトの名無しさん:2006/03/09(木) 09:07:35
>>538
送るデータを逐一保存しておいて、連番を振って管理。
受け取り側では受信できた番号を逐一報告。
送り側では受け取り確認の取れないデータを適当な間隔で再送。

これでどうよ?TCP 使うほうが遥かに楽だがなw

542 :^ω^ ◆8vOv.D2p4. :2006/03/09(木) 10:53:43
>>541
それでもTCPの方がスライド窓機構(なんて言うんだっけ)付きだし少しハイテクだよね

543 :デフォルトの名無しさん:2006/03/09(木) 11:59:49
>>539
> シュミレートできるような

kwsk


544 :^ω^ ◆8vOv.D2p4. :2006/03/09(木) 12:05:38
>>543
×シュミレート
○シミュレート

○スクリプト
×スプリクト

○じゃがいも
×がじゃいも

○しんぶんし
×しぶぶしぶん

545 :デフォルトの名無しさん:2006/03/09(木) 12:19:08
>>539
Linuxでnetem
http://linux-net.osdl.org/index.php/Netem

546 :デフォルトの名無しさん:2006/03/09(木) 12:55:05
>>545
482さんも使ったほうがいいねぇ。

547 :482:2006/03/09(木) 15:00:59
>>546
本当によさげですね。でも環境がLinux…_| ̄|○

548 :魚チョコ:2006/03/09(木) 16:07:50
>>544
 実はシミュレートでもシの発音が [∫] で合ってないので、スィミュレイトと書いた方がましだし間違いが少ないと思うんだが、そう書いても考えのあはさかな杓子定規のたこに直されちゃうんだよなあ ミ゚仝 ゚ ミ

549 :^ω^ ◆8vOv.D2p4. :2006/03/09(木) 16:55:45
>>548
そうなのかー・・・
まぁ辞書で「シミュレーション」で出てくるから、どっちでもいいや

550 :デフォルトの名無しさん:2006/03/10(金) 00:56:43
カタカナ読むのは日本人なんでシミュレートでおk

551 :デフォルトの名無しさん:2006/03/10(金) 21:10:32
winsoketで
ioctlsocket関数でノンブロッキング
selectでノンブロッキング

どっちがいいのでしょうか?
自分はioctlsocket関数でノンノンしたいのですが。

552 :デフォルトの名無しさん:2006/03/10(金) 23:42:17
ブロッキングのことなら梅原さんに聞くといいよ

553 :デフォルトの名無しさん:2006/03/10(金) 23:54:03
茹でてマヨネーズ付けて食うとうまいよね。

554 :デフォルトの名無しさん:2006/03/11(土) 01:18:00
ioctlsocketでノンブロッキングって、ポーリングってこと?

555 :デフォルトの名無しさん:2006/03/11(土) 04:28:43
>>543
キャッシュサーバーとサーバーの間に中継サーバを配置して、
キャッシュサーバーの機能テストのために、キャッシュサーバーがサーバーから
ファイルをダウンロードできる時間を設定で変化させることができる機能を持ったものです。



556 :デフォルトの名無しさん:2006/03/11(土) 14:53:19
>>552
アンビリーバボー

557 :デフォルトの名無しさん:2006/03/12(日) 20:27:01
Win2000で
socket(AF_INET, SOCK_RAW, IPPROTO_IP)
ってな感じでパケットキャプチャを作りました。

パケットの中身をrecv()して、自己PC発のパケットで
TCPヘッダ以降の 特定のパターンだけrejectというか、
発信を無効にしちゃいたいのです。

色々調べてLSPとやらでNICに直接話すのが筋と理解した
のですが、私のスキルでは難しかったです。

TTLだけ0にしちゃうとかとにかくそのパターンのパケットだけ
発信を無効にする簡易的な火壁のようなことをしたいのですが、
何か簡単な方法はないでしょうか?

558 :デフォルトの名無しさん:2006/03/12(日) 21:10:48
>>557に便乗させてください

win2000/XPで、ウィルスバスターなどのように、常駐させておいて怪しい
通信を遮断したいです。プロミスキャストで出入りするパケットの中身は
見ることができるのですがそのソケットをシャットダウンすることが出来ないです。
やっぱwinpcapを使わないとだめですか?


559 :デフォルトの名無しさん:2006/03/12(日) 21:33:35
winはセキュリティ上パケット操作はできないようにしてある
回避策はなくもないけど、ウィルスにも使われるような技術なので
そう簡単には見つからないでしょう

560 :557:2006/03/12(日) 22:00:19
>>559
そうですか。。情報ありがとうございます!
回避策になりそうな手段をもうちょっと調べてみます。
何かヒントになるキーワードがあればまたお願いします!

561 :デフォルトの名無しさん:2006/03/13(月) 01:41:17
>>558
ipfltdrv.sysでも使うとか。

562 :558:2006/03/13(月) 02:05:23
>>561
「ipfltdrv.sys」で検索してみたらもの凄く参考になりそうなページを発見。
ttp://ruffnex.oc.to/kenji/text/fire_a/
ナイスパスTHXです。やってみます。

563 :558:2006/03/13(月) 02:15:27
間違えた。こっちの方が細かく中身を見ながら処理出来そう
なので良さそうですね。ていうかまんまです。
ttp://ruffnex.oc.to/kenji/windriver/packet/
どう見ても欲しかった資料です。ありがとうございました>>561

564 :デフォルトの名無しさん:2006/03/14(火) 14:45:26
>>559
そんなんどこにでも転がってるけどwww

565 :デフォルトの名無しさん:2006/03/14(火) 23:14:06
POP3でメールを取り込もうとしているのですが、LIST で取得できるサイズと
recv()で取得したバイト数が合いません。

recv()で取得したデータの改行コードがCRLRになっているようなんですが、
これを直してあげる必要があるのでしょうか?

初歩的な質問で申し訳ありませんがよろしくお願いいたします。

566 :デフォルトの名無しさん:2006/03/14(火) 23:31:35
>>565
RETR でメッセージを受け取るときは . のみの行が終了基準だけど。
サイズで読み出そうとしてんの?

567 :デフォルトの名無しさん:2006/03/14(火) 23:41:07
>>565
RFCを読むべきです。でもヒマなので一応説明します。

LIST が返すサイズは、完全に正しいメッセージのオクテット数(バイト数)です。
LIST が返すサイズと、RETR で得られるメッセージのオクテット数が異なっているなら、
それはサーバのバグです。

メッセージ中の改行はすべてCRLFで、そうでないならこれまたサーバ(か何か)のバグです。

RETR の返答を recv して得られるバイト数は
ターミネーション ( . + CRLF ) や、行頭に . が有る場合に余分に
付加される . などがあるため、メッセージのオクテット数とは異なります。

RETR の返答をどう解釈するかは RFC を読んでください。

568 :デフォルトの名無しさん:2006/03/14(火) 23:54:54
>>566,567
RFCをちゃんと読んでみる事にします。
それでわからないときはまた質問することにします。
ありがとうございました。

569 :デフォルトの名無しさん:2006/03/15(水) 00:37:04
チャレンジハンドシェイク認証プロトコル詳しい方いますか?
VCで簡単にデータやりとりしてみたいんですが・・・

570 :デフォルトの名無しさん:2006/03/15(水) 03:26:46
RFC1994(もしくはRFC1334)を読んでからまたおいで
勉強って言うのは自分で調べるところから始まるんだぞ

571 :デフォルトの名無しさん:2006/03/15(水) 04:08:55
>>勉強って言うのは自分で調べるところから始まるんだぞ

569じゃないけど、まず2chや人に聞こうとしていた自分の心にずしんと響きました。
根性たたきなおして勉強します。
そしてどうしても分からなくなったときには、力を貸してください。
それでは。

572 :デフォルトの名無しさん:2006/03/15(水) 04:44:14
自分で調べる手段の一つが人に聞くことなわけだが

573 :デフォルトの名無しさん:2006/03/15(水) 11:20:25
>>572
氏ね糞

574 :デフォルトの名無しさん:2006/03/15(水) 11:21:07
>572

575 :デフォルトの名無しさん:2006/03/15(水) 11:40:15
572 :デフォルトの名無しさん [sage] :2006/03/15(水) 04:44:14
自分で調べる手段の一つが人に聞くことなわけだが


学生の間しか言えない名言だな

576 :デフォルトの名無しさん:2006/03/15(水) 12:49:40
3匹も釣れてたw

577 :デフォルトの名無しさん:2006/03/15(水) 12:53:43
後釣り宣言か、真性だな

578 :デフォルトの名無しさん:2006/03/15(水) 13:09:03
もう一匹も釣れてたwwwwwwww

579 :576:2006/03/15(水) 13:52:58
>>578は僕じゃありません

580 :デフォルトの名無しさん:2006/03/15(水) 14:03:18
エサ取りも釣れたwwwwwwww

581 :576:2006/03/15(水) 14:03:35
暇な学生必死だな、と
それとも落ちこぼれ社会人かしら?
はたまた後は老けて行くだけのNEET君ですか?

582 :576:2006/03/15(水) 14:07:55
>>581
はいはい、池沼乙

583 :576:2006/03/15(水) 14:09:09
厨房多すぎw
ままのおっぱいでもしゃぶってろよwwwwwwwwwwwwwwwwwwww

584 :デフォルトの名無しさん:2006/03/15(水) 14:13:06
春休みなんだよ
小・中・高・大学生・社会人にやさしくしろ
無職にもな!

585 :デフォルトの名無しさん:2006/03/15(水) 15:09:57
>>581
いや、態々レス番書くほどの内容か?

586 :デフォルトの名無しさん:2006/03/15(水) 15:11:47
>>581
関係ない無職の俺が傷ついた

587 :576:2006/03/15(水) 15:47:06
俺はガチムチ兄貴のチンポでもしゃぶりたい気分だがなwwwwwwっwww
wwwwww

588 :580:2006/03/15(水) 16:23:08
>>585
俺天才釣り氏じゃねwwwwwwww

589 :デフォルトの名無しさん:2006/03/15(水) 23:09:17
でも究極的には人が作ったものの使い方を調べるってのは人に聞いてるわけだが。
あるいは人が書いたものを読むとか。
それとも自分で引数をいろいろ与えてどんな動作をするか調査するのかい?


590 :参加者募集中!:2006/03/15(水) 23:12:25
株式@2ch
★★★自動売買ソフトを作ろうぜ★★★ Part3
http://live19.2ch.net/test/read.cgi/stock/1141718486/l50


591 :デフォルトの名無しさん:2006/03/15(水) 23:15:30
thread(あるいはfork)とselectを併用したものとかはシンプルでどんなOSでも使い回しがきくよね
kqueueとかOSに特化したサーバは、そういったシンプルなサーバよりどの程度優れてるの?
性能が5%改善しました!とかなら馬鹿らしくて、チューンしたいとも思わないところです

592 :デフォルトの名無しさん:2006/03/15(水) 23:20:02
100接続以上とか捌くつもりがない限り、selectでいいんじゃないの。

593 :569:2006/03/15(水) 23:20:46
>>570dクス
調べてるみ

594 :デフォルトの名無しさん:2006/03/16(木) 00:31:26
>>591
libeventでも使っとけば? select/poll/kqueueのwrapperライブラリ。

595 :デフォルトの名無しさん:2006/03/16(木) 00:42:56
>>594
調べてみます、情報ありがと

596 :デフォルトの名無しさん:2006/03/18(土) 09:44:22
プログラミングコードのレベルで、
指定した割合でパケットをロスさせたり、
順番を入れ替えたりすることが可能な言語はあるのでしょうか?
下のスレで質問させていただいたのですが、
しばらくしてもご返答がいただけなかったので、
ここでたずねさせて頂きました。よろしくお願いします。
http://pc8.2ch.net/test/read.cgi/tech/1135634403/

597 :デフォルトの名無しさん:2006/03/18(土) 10:33:03
「可能な言語があるか?」と聞かれたら、「ある」としか答えられないが…。

598 :デフォルトの名無しさん:2006/03/18(土) 10:48:27
sendとかに好きなようにラップかませばいいだけだろ

599 :デフォルトの名無しさん:2006/03/18(土) 10:59:53
>>596
ところでもちろんUDPだよね? TCPではスタックレベルでパッケとロス等は吸収・復帰されるから
アプリケーションレベルでのロスはあり得ない。 

ちなみに>>545という方法も検討したら?

600 :デフォルトの名無しさん:2006/03/18(土) 11:56:52
皆様レスありがとうございます。

>>597
例えばどのような言語があるのでしょうか?
宜しければ教えていただきたいです。

>>559
下位層(2層や3層)レベルでのパケットのロスが生み出せれば良いと
考えているのですが、、
>>545のツールも参考にさせていただきます。



601 :デフォルトの名無しさん:2006/03/18(土) 12:34:17
>>599
パッケとロス

602 :599:2006/03/18(土) 12:38:49
>>601
ポケっとロス orz


603 :599:2006/03/18(土) 12:41:52
>>600
> 下位層(2層や3層)レベルでのパケットのロスが生み出せれば良いと考えているのですが、、

Linuxならiptableのモジュールでパケットをある確率で落とすというというのがあるけどね。
ホスト単体で出来るから便利。 パケット入れ替えというのはたしか無いと思ったけど。

604 :デフォルトの名無しさん:2006/03/18(土) 12:54:07
>>600
イーサネット層とかをコードレベルで扱える言語ならできるのでは?
Javaとかじゃ無理なような。

605 :デフォルトの名無しさん:2006/03/18(土) 13:06:28
kernel moduleなpacket filter作ればCでいくらでも書けるだろ。

606 :デフォルトの名無しさん:2006/03/18(土) 13:42:58
>>イーサネット層とかをコードレベルで扱える言語

例えば何さ?

607 :デフォルトの名無しさん:2006/03/18(土) 14:03:21
送信部分で、自分で送信をやめるんじゃ駄目なのか?
質問の答えにはなってないけど聞いてみる

608 :デフォルトの名無しさん:2006/03/18(土) 14:05:38
いいわけねえだろ

609 :デフォルトの名無しさん:2006/03/18(土) 14:11:26
>>608
実際のネットワークで実験しないといけないなら駄目だろうけど
挙動のシミュレーションがしたいだけなら、TCPの上で仮想的に実装しても
と思ったんだけど

叩かれそうだから去ろう

610 :デフォルトの名無しさん:2006/03/18(土) 14:27:48
コードレベルでパケットのロストなんてできるんだ。
全然しらんかった。

611 :デフォルトの名無しさん:2006/03/18(土) 14:33:40
通信経路にバカハブ置いてゴミパケット流しまくる

612 :デフォルトの名無しさん:2006/03/18(土) 16:38:13
>>600
> 例えばどのような言語があるのでしょうか?

なんでこんな質問のしかたするの?

「機械語」とか書かれても困るんじゃないの?

ここで聞くってことは、自分で作ろうとしてるか誰かに
作ってもらおうと思ってるんじゃないのか?

もしそうなら、「○○の OS + △△の言語で、□□は実
現できるでしょうか?」と聞いた方が、あんたも回答者も
幸せになれると思うよ。

613 :デフォルトの名無しさん:2006/03/18(土) 17:07:38
疲れる奴・・・

614 :http://www.vector.co.jp/soft/win95/util/se072729.html:2006/03/18(土) 18:34:12
TextSS の64bit化おながいします

もしくは64bitにネイティブ対応した置換ソフトないですか?


615 :デフォルトの名無しさん:2006/03/18(土) 19:27:37
ダウンローダーの一種を作ろうとしているのですが、ダウンロードが中止された場合にレジュームするやり方がわかりません。
WinInetでレジュームをする方法、あるいは他のコンポーネントで使いやすいものがあれば紹介してください。

616 :デフォルトの名無しさん:2006/03/18(土) 19:30:50
>>615
httpかftpかその他のプロトコルか自前のプロトコルかもわからないのに
答えようが無い。

617 :デフォルトの名無しさん:2006/03/18(土) 23:59:07
>>615
HTTPなら↓でも読んでこいと
http://www.studyinghttp.net/

618 :デフォルトの名無しさん:2006/03/19(日) 00:22:26
>612
機械語じゃなくても可能だろ

619 :デフォルトの名無しさん:2006/03/19(日) 00:41:52
>>618
要点ずれてるぞ

620 :デフォルトの名無しさん:2006/03/19(日) 01:39:15
好きな果物にはどんなものがありますか?
バナナです。
バナナだけじゃないだろ。


621 :デフォルトの名無しさん:2006/03/19(日) 02:02:26
>596=>600の質問を見る限り、>612の言いたい事って
もっと効率のいい質問の仕方をしなさいって事だと思うんだが


622 :デフォルトの名無しさん:2006/03/19(日) 04:10:32
TCPでは待ち受け処理をlistenとacceptに分けて行うと某本で読んだのですが、
何故2つに別れているかが良く判りません。2つに分けて設計されているのは
どうしてなのでしょうか?

623 :デフォルトの名無しさん:2006/03/19(日) 04:35:34
一個でいいと思うならそうしたらええがな

624 :デフォルトの名無しさん:2006/03/19(日) 07:59:53
listenは待ち受け処理しません。
待ち受けバックログの長さを指示するだけです。

625 :デフォルトの名無しさん:2006/03/19(日) 20:42:55
VisualBasic6.0で FireWall モドキを作成しています。
パケットキャプチャは出来たのですが、パケットを
蹴ることができません。

>>563 を拝見したのですが、どうも完全にVBの出る幕では
無さそうです。蹴る方法だけでも良い方法はないでしょうか?

以下のソフトはオールVB製でFirewallを実現しているよう
なので、きっと何か方法がありそうなのですが、これを見て
何か分かる方はいらっしゃいませんでしょうか?
ttp://www.vector.co.jp/magazine/softnews/040721/n0407211.html

↑からドライバを作るのではなく、ドライバをタイマー監視か
何かをしてパケットを蹴る動作を実現しているっぽいということ
は読み取れるのですが、具体的な方法がみつかりません。。

どうやれば、ドライバにちょっかいを出せるでしょうか?
よろしくお願いします。

626 :625:2006/03/19(日) 21:06:51
すみません、↑のソフト開発日記を見つけたらその中に
"ドライバを使わずに強引な方法で通信を切断〜"という
くだりがあり、"通信が完了する前に処理をしきらないと〜"
という言葉もありました。

どうやら、ドライバにちょっかいを出しているのではなく、
他の手段をとっているようです。

何かヒントありませんでしょうか?
よろしくお願いします。

627 :デフォルトの名無しさん:2006/03/19(日) 21:11:23
作者に聞けよ

628 :デフォルトの名無しさん:2006/03/19(日) 21:22:12
これは聞いたほうがいいね

629 :ナイスガイ ◆http/iAti. :2006/03/19(日) 21:55:10
>>626=625
たぶん、「RSTパケット」を送ってるんじゃまいか?
「通信が完了するまえに」ってのが怪しいw

630 :625:2006/03/19(日) 22:47:51
RSTパケットですか、ありがとうございます!
ぼんやりとですけど、意味は分かりました。
色々しらべてみます。

ついでにVBから生パケットを送出する良Sampleを
ご存知でしたら、教えてくださいませ。

631 :デフォルトの名無しさん:2006/03/19(日) 23:31:19
作者に聞けよ

632 :デフォルトの名無しさん:2006/03/20(月) 00:01:43
>>626
> 何かヒントありませんでしょうか?

Ethereal とかで見てみればいいと思うけど。

633 :デフォルトの名無しさん:2006/03/20(月) 01:16:13
pcap

634 :625:2006/03/20(月) 01:55:03
> Ethereal

ありがとうございます!調べてみます!

635 :デフォルトの名無しさん:2006/03/20(月) 07:13:07
つーかテンプレくらい読めよ。

636 :デフォルトの名無しさん:2006/03/20(月) 07:16:49
http://www.google.com/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&q=PfCreateInterface+vb&num=50
VBでもできそうだけど

637 :デフォルトの名無しさん:2006/03/20(月) 09:32:19
ttp://www.ie.u-ryukyu.ac.jp/~j00004/unix/network/levelXchatsv.c
の冒頭に

#define SOCK_NAME "/tmp/socket" /* 通信に使うソケットファイル */

ってあってこれのお陰で実行すると

connect: No such file or directory

って出ます。当然うちのSolarisの/tmpにはsocketファイルなんてありません。
これってどっかからコピーできたりするもんですか?
ここの住人なら知ってるはず。

ちなみに"/tmp/socket" ソケットファイル の検索結果 約 31 件中 1 - 7 件目 (1.02 秒)

638 :デフォルトの名無しさん:2006/03/20(月) 10:48:43
>>637
あえて汚い言葉遣いで言わせて貰うが、
PF_UNIX とか気付かないし調べもしないでネットワークプログラミング
やろうなんて10日くらい早いと思う。あたまいかれてんじゃないの?

639 :デフォルトの名無しさん:2006/03/20(月) 10:58:21
10日とはやさしい奴だな。

640 :デフォルトの名無しさん:2006/03/20(月) 11:00:36
>>637
サーバは起動したん?

641 :デフォルトの名無しさん:2006/03/20(月) 12:32:33
>>638
いやいや、それには後から気付いたねん。(^^ゞ
まずは引っかかったエラーから解いていこうかと。
小さなことからコツコツと…(目でかくして)。

>>640
それがしたんよ。

642 :デフォルトの名無しさん:2006/03/20(月) 12:41:13
サーバのソースは読んだん?
UNIXドメインのソケットに"/tmp/socket"なアドレスbindしてない?

してなければ、named pipeなのかも。その場合mknod。
ただ、named pipeがなければ、サーバ側でエラーが出ているはずなんだけど。

643 :デフォルトの名無しさん:2006/03/20(月) 12:44:19
というか、>>637がサーバか。

$ gcc levelXchatsv.c
$ ./a.out
$ ls -lF /tmp/socket
srwxr-xr-x 1 foo foo 0 2006-03-20 12:43 /tmp/socket=

できてるやん!

644 :デフォルトの名無しさん:2006/03/20(月) 16:23:23
10日もありゃずぶの素人だってできるよ。

645 :デフォルトの名無しさん:2006/03/21(火) 14:43:15
TCPのエコーする奴を少し改造して構造体を送ろうとしております。
Client側で
deposits: 100
withdrawals: 200
をServer側で
deposits: 500
withdrawals: 600
に値を変えてるんですが、結果は

Received:
totalBytesRcvd: 7
deposits: 500
withdrawals: 712
totalBytesRcvd: 8
deposits: 1476395508
withdrawals: 712

です。_| ̄|○
depositsの方は500に変わってるんですけどねぇ。
二回表示されてるのはtotalBytesRcvdがsizeof(msgStruct)の数に達してないせいです。
どこをどう直したらいいんでしょうか?
↓以下コード抜粋です。


646 :デフォルトの名無しさん:2006/03/21(火) 14:52:33
あ゛ー、UNIXの改行がなんか邪魔してて「改行が多すぎます」と出ます。_| ̄|...((○

//とりあえず構造体
typedef struct {

int dep;

int wd;

} message;

647 :デフォルトの名無しさん:2006/03/21(火) 14:54:46
//main()抜粋
int deposits = 100;
int withdrawals = 200;
msgStruct.dep = htonl(deposits);
msgStruct.wd = htonl(withdrawals);

/* Send the string to the server */
if (send(sock, &msgStruct, sizeof(msgStruct), 0) != sizeof(msgStruct))
DieWithError("send() sent a different number of bytes than expected");

/* Receive the same string back from the server */
totalBytesRcvd = 0;
printf("Received: \n"); /* Setup to print the echoed string */
while (totalBytesRcvd < sizeof(msgStruct))
{
/* Receive up to the buffer size (minus 1 to leave space for
a null terminator) bytes from the sender */
if ((bytesRcvd = recv(sock, &msgStruct, sizeof(msgStruct) - 1, 0)) <= 0)
DieWithError("recv() failed or connection closed prematurely");
totalBytesRcvd += bytesRcvd; /* Keep tally of total bytes */
echoBuffer[bytesRcvd] = '\0'; /* Terminate the string! */
printf("totalBytesRcvd: %d\n", totalBytesRcvd);
printf("deposits: %d\n", ntohl(msgStruct.dep));
printf("withdrawals: %d\n", ntohl(msgStruct.wd));
}


648 :デフォルトの名無しさん:2006/03/21(火) 15:08:34
とりあえず、最初は値変えずに送り返せよ。

それから、bit patternだけど、
1476395508→1011000000000000000000111110100
500→111110100
な。

649 :デフォルトの名無しさん:2006/03/21(火) 15:14:54
ア、ナルほど。

早速サーバー側の
//int deposits = 500;
//int withdrawals = 600;
//msgStruct.dep = htonl(deposits);
//msgStruct.wd = htonl(withdrawals);
の部分コメントアウトしました。で結果は

Received:
totalBytesRcvd: 7
deposits: 100
withdrawals: 200
totalBytesRcvd: 8
deposits: -939523996
withdrawals: 200

この最初の一回は正しいように見えますが
クライアントのローカル変数なんでそのまま表示してる、なんて可能性はありますか?
あと、bit patternというのはどう使うんですか???

650 :645:2006/03/21(火) 15:22:42
あ゛ー、オナルほど!
1476395508→1011000000000000000000111110100
の尻尾が
500→111110100
と同じ訳ですな!
しかし、なじぇでしょう?

651 :デフォルトの名無しさん:2006/03/21(火) 15:29:06
>>649
> totalBytesRcvd: 7


652 :デフォルトの名無しさん:2006/03/21(火) 20:12:26
まずは、Ethereal とかでネットワーク上のデータを見たほうがいいんじゃないか。

653 :648=651:2006/03/21(火) 21:54:42
いや>>651がファイナルアンサーだから。
Little-endianのCPUなんでしょ。

01011000 00000000 00000001 11110100
^^^^^^^^^ここが常に壊れる。



654 :デフォルトの名無しさん:2006/03/22(水) 13:19:50
sendとrecvのドキュメントをちゃんと読んだ方が良いよね。
なんでわざわざ受信(送信)したバイト数を返してくるのか、とか。

655 :645:2006/03/22(水) 14:15:04
>>651
ああ!シコるほど!
> totalBytesRcvd: 7
になってしまうのがいかんかったんですね。

if ((bytesRcvd = recv(sock, &msgStruct, sizeof(msgStruct) - 1, 0)) <= 0)
の-1はEchoBufferでテキストメッセージを送る場合に最後の\nのためにあったんですが
構造体ではいらんかったですね。
消したら

Received:
totalBytesRcvd: 8
deposits: 500
withdrawals: 600

と正常位になりました。
ありがとうございました!

656 :デフォルトの名無しさん:2006/03/22(水) 16:09:21
とりあえずお前はオウム社のマスタリングTCP/IPを読むことを勧める

657 :デフォルトの名無しさん:2006/03/22(水) 16:20:48
喜んでボケてるとこ悪いが、もう少し勉強しないと4000バイトとか読んだりする
プログラム書いたときにまたこのスレのお世話になることになるぞ。

658 :デフォルトの名無しさん:2006/03/22(水) 16:51:22
お世話になっちゃ、、駄目ですか?
私は愛していますが、、

あ、私は655さんではないですよ。ポッ

659 :デフォルトの名無しさん:2006/03/22(水) 20:31:30
>>655
> と正常位になりました。
それまでは騎乗位だったのですか?

660 :デフォルトの名無しさん:2006/03/22(水) 21:57:22
>>653
いや、>>651 で FA なのはいいんだけど、Ethereal
とかでで送信/受信のどっちが悪いか切り分けられるよう
になってないと、>>657 が言ってるような事になると思
うんだけどな。

661 :デフォルトの名無しさん:2006/03/22(水) 22:09:50
いや、誰も悪くないんだって。
OSもAPIも間のルータかスイッチも仕様どおりに動いた。
プログラムも仕様どおりに動いた。
645も神様か親DNA由来の仕様どおりに動いた。

ところで645の人は647のソースをどっからかコピペしてきて
改変したんだろうけど、元のソースでちゃんと
while (totalBytesRcvd < sizeof(msgStruct))
{
 ...
totalBytesRcvd += bytesRcvd
}
っていう構造になってるのに、それを改悪して「動作が変」とか言ってるんだよね。
元のソースがどういう動作をするようになっているのか、recvの戻り値の意味も
考えてよく考察するようにした方が良いと思う。

662 :デフォルトの名無しさん:2006/03/22(水) 22:26:51
なんかネットワークプログラミングってこの話題に終始するよね。
奥が浅すぎだよね。

663 :デフォルトの名無しさん:2006/03/22(水) 22:34:35
sendやrecvの使い方程度がこのスレにはお似合いってことでは・・・

664 :デフォルトの名無しさん:2006/03/22(水) 23:30:55
>>662
まあ、初心者ははまりやすいとこだし。
個人的にはなんでそんな仕様にする必要があったのかよくわからんし。

665 :デフォルトの名無しさん:2006/03/23(木) 04:36:40
>>664
TCPレベルで何バイト送られるかが不確定であり、バイト列の切れ目というのを
表現する機能がないから自然とこういう仕様になるんじゃない?

666 :デフォルトの名無しさん:2006/03/23(木) 05:39:50
解決したのを確認した後でうだうだと薀蓄述べるのが好きだな、おまいら

667 :デフォルトの名無しさん:2006/03/23(木) 07:57:33
熟考というんです

668 :デフォルトの名無しさん:2006/03/23(木) 11:38:45
というか、今回のバグはTCPがバイト・ストリームである問題とは違うんだが…

669 :デフォルトの名無しさん:2006/03/23(木) 13:00:31
UDPでのソフトウェア設計に関わる質問だと思うんですが

サーバー側でログインしているクライアントの数を数えてるファイルがあります。
クライアントの数は固定(今のところ3人)で
ログインした者の削除フラグは0、ログアウトした者の削除フラグは1にしています
(ユーザーIDと削除フラグから成っている構造体です)。

でクライアント側から'who'なるコマンドを送って
現在ログインしている者のリストをクライアント側で表示したいと思ってるんですが
皆さんならどんな風に処理しますか?

例えば、クライアント側でforループを回して
whoコマンドに該当する番号を3回送って
サーバー側は誰がログインしてようがお構いなく3人分のデータをクライアントに返す。
でクライアント側で削除フラグの立ってない奴だけ表示する。
…というのを考えているんですけど、やる前から効率悪そうだなと思ってます。
他にもっと良い方法があれば教えてください。

670 :デフォルトの名無しさん:2006/03/23(木) 13:03:58
3人固定なら、一回で全部返せよ。収まるだろ。

671 :669:2006/03/23(木) 13:17:43
えっ、そんな方法ってあるんですか?
構造体のデータ一つ分だけ送る方法しか知らないんですが↓こんな感じで。

/* Send received datagram back to the client */
if (sendto(sock, &msgStruct, recvMsgSize, 0,
(struct sockaddr *) &echoClntAddr, sizeof(echoClntAddr)) != recvMsgSize)

本当に3人分送れるんなら嬉しいですけど。
あ、実は構造体にはIPアドレスとポート番号も含まれてます、今回の件には関係ないですが。
typedef struct {
int recNum;
char userID[8];
int delFlag;
char ip[16];
unsigned short portNum;
} user;


672 :デフォルトの名無しさん:2006/03/23(木) 13:23:55
これはヒドイ

673 :669:2006/03/23(木) 13:27:25
またまたそんな反応を…。
本当に3人分送れるんですか?

674 :デフォルトの名無しさん:2006/03/23(木) 13:37:25
プロトコルというものを考えてみては・・・
こんな状態でUDP使うとは。

675 :669:2006/03/23(木) 13:41:41
上からの指示です。逆らえません。
というかやろうと思えばやれるのは分かるんでいいかと。
で結局、3人分送れるというのは嘘ですか?

676 :デフォルトの名無しさん:2006/03/23(木) 13:43:44
>>675
おまいさ、こんなとこで人に質問したりボケたりする前にC/C++の参考書とか読めよ。
世の中をなめて生きてゆくのも否定はしないけど、まだ若そうだから今のうちにちゃんと
努力したほうが後々ラクになるよ。

677 :669:2006/03/23(木) 13:46:53
全然回答になってないんですが。
3人分送れるというのは嘘ですか?

678 :デフォルトの名無しさん:2006/03/23(木) 13:49:41
3人分のデータが入った構造体を作るんだ!

679 :669:2006/03/23(木) 13:52:38
ありがとうございます。
そう言ってもらわないとさすがに分からないですよ、いくらC知ってても。

680 :669:2006/03/23(木) 13:54:58
え、でも4人になったら構造体を変えるんですか?
やっぱそうですよねぇ…。どうしましょ?

681 :669:2006/03/23(木) 13:56:42
ちょっと一人で考えてみます。
ありがとうございました。

682 :デフォルトの名無しさん:2006/03/23(木) 13:57:13
>>680
何か「言われなくてもわかること」はあるのか?

683 :デフォルトの名無しさん:2006/03/23(木) 13:58:25
もう放置しろ。
馬の耳に念仏だ。

684 :デフォルトの名無しさん:2006/03/23(木) 14:00:36
まったく女はつかえネーヨナ。
こいつの同僚に同情するヨ

685 :デフォルトの名無しさん:2006/03/23(木) 14:08:58
buff = malloc(sizeof(user)*3);

でいいんじゃないの?

686 :デフォルトの名無しさん:2006/03/23(木) 16:09:29
まぁ、TLVにするわな。ふつー。

687 :デフォルトの名無しさん:2006/03/23(木) 18:12:42
TLVってなに?

688 :デフォルトの名無しさん:2006/03/23(木) 18:21:41
Type-Length-Valueじゃね?

689 :デフォルトの名無しさん:2006/03/23(木) 19:51:15
Telecaster - Lespaul - Flying V だろう。

690 :デフォルトの名無しさん:2006/03/23(木) 22:40:11
>>665
何バイト欲しいか指定してるんだから、そのバイト数がたまる
まで待ってりゃいいじゃん。

て言うか、普通 >>661 が書いてるようなループ作るだろ。

だったら、システムコール (もしくはライブラリ) 内でやっと
いてくれと思う。

691 :デフォルトの名無しさん:2006/03/24(金) 00:22:14
あらかじめ答えを書いておく。
http://www.kt.rim.or.jp/~ksk/sock-faq/unix-socket-faq-ja-2.html#ss2.8

692 :デフォルトの名無しさん:2006/03/24(金) 01:05:25
Accept-Encoding: gzip
で取得したデータを解凍するにはどうしたらいいですか?
C言語でhttpクライアントの実験をしています。

693 :デフォルトの名無しさん:2006/03/24(金) 02:02:12
クライアントで解けないようなエンコーディングを要求すんな。

694 :デフォルトの名無しさん:2006/03/24(金) 03:13:14
gzipの仕様を調べ、その仕様に従って解凍ルーチンを書く

つーかネットワーク関係無いし

695 :デフォルトの名無しさん:2006/03/24(金) 07:33:03
>>692
zlib

696 :デフォルトの名無しさん:2006/03/24(金) 07:33:23
zlibを使えばいいんでね

697 :デフォルトの名無しさん:2006/03/24(金) 08:22:45
>>693
もっともだなw

698 :デフォルトの名無しさん:2006/03/24(金) 08:35:25
実験なのに「もっともだなw」なんてアホだと思う

699 :デフォルトの名無しさん:2006/03/24(金) 13:27:54
めんどくさければPCにgzipをインストール後 popen("gzip -cd >hoge", "w"); して
fwrite() で書き込んで pclose() してそれから hoge を読め。


700 :デフォルトの名無しさん:2006/03/24(金) 19:05:01
>>691
釣りか?

701 :デフォルトの名無しさん:2006/03/24(金) 19:43:44
http://pc8.2ch.net/test/read.cgi/tech/1142302804/448-462n
だな

702 :デフォルトの名無しさん:2006/03/26(日) 07:35:15
ネットワークゲームのために時刻の同期をとるプロトコルを独自実装したいと
思っているのですが、SNTPではラウンドトリップにかかった時間のちょうど半分がサーバー
というかオリジナルとなる時刻を持ってる側からクライアントにデータが届くまでかかった時間
ってことにしているようなのですが、これはどの程度正確なのでしょうか?
通信の↑の方の層のある程度の持続性のある性質として、行きは遅いが帰りは速いとか、
その逆とかいうことがありうるんでしょうか?

もしそうした場合に片側方向の遅延を検出できるアルゴリズムはどういったものになるのか
…は自分でもこれから考えてみますが、教えていただければうれしいです。

703 :デフォルトの名無しさん:2006/03/26(日) 16:25:11
ADSLはUpが遅いがDownは速いとか
#↑はスループットの話でラウンドトリップタイムとはまた別かも

704 :デフォルトの名無しさん:2006/03/26(日) 20:54:22
双方が ntp などですでにシステム時刻が完全合っている状態であれば、片側方向の
通信時間を測定することはできると思うけど、双方のシステム時刻があっていない状態
では、往復時間÷2で推測するしかないと思うけど。


705 :デフォルトの名無しさん:2006/03/26(日) 23:34:28
負荷かけて速度を測定しろよ

706 :デフォルトの名無しさん:2006/03/28(火) 12:13:39
送る側の経路しか選べないしなあ。考えるだけ無駄だと思う。
正確さより、いかに現実的な計測が出来るかを追求したら?

707 :デフォルトの名無しさん:2006/03/28(火) 13:01:34
>>702
そういうアルゴリズムは存在しません。
証明はここに書くには長すぎるのでry

708 :デフォルトの名無しさん:2006/03/28(火) 22:57:46
インターネット経由なら、行きと帰りでルートが違う可能性はある。

709 :デフォルトの名無しさん:2006/03/28(火) 23:11:43
すみません。質問です。
ネット環境がない状態で通信するプログラムを作りたいんですが
ルーターを使わずにIPを取得してプログラムのテストをする方法はありますか?
簡易DHCPサーバーなども考えてみましたが、ルーターがないとIPは割り振られないみたいで・・

710 :デフォルトの名無しさん:2006/03/28(火) 23:26:42
>ルーターがないとIPは割り振られない
そんなわけねー。

711 :デフォルトの名無しさん:2006/03/28(火) 23:32:08
127.0.0.1

712 :デフォルトの名無しさん:2006/03/28(火) 23:34:07
・Windows2000/XP/2003なら、最悪でもインターフェースには
169.254/16なアドレスが自動で振られる。
・そのためのIPv6
・有効なインターフェースが無いとTCP/IPスタックがアンロードされて
127.0.0.1も消え去ってしまう話なのか?

713 :デフォルトの名無しさん:2006/03/29(水) 03:03:14
勝手にポートを特定するソフトって作れますかね?

鯖との最初の通信で認証が通らない場合
次のポートに繋ぎに行くのを繰り返す、みたいな。
迷惑ですかね。

714 :デフォルトの名無しさん:2006/03/29(水) 03:22:05
止めとけ
最悪通報される

715 :デフォルトの名無しさん:2006/03/29(水) 11:25:56
>>709
もしMicrosoft の Windows を使っているなら、
ハードウェアの追加で Microsoft Loopback Adapter ってのを追加すると、
LANケーブル等が無いときにも使えるループバック専用の仮想NICが作成されます。

詳しくはgoogleとかで。

716 :デフォルトの名無しさん:2006/03/29(水) 12:20:48
>>709
…ああ、
「ネット環境がない状態で」「通信するプログラムを作りたい」のか。
「ネット環境がない状態で通信する」プログラムを作りたいなんて
無茶な奴だ、とオモタ。

717 :デフォルトの名無しさん:2006/03/29(水) 19:42:16
>>565=568
遅レスだけど、もしかすると使ってるところもあるかもしれない POP サーバの
qmail-pop3d には、「LIST/STAT で返されるメールのサイズが不正」というバグが
あるようです。

参考) ttp://ya.maya.st/mail/qmail-violations.html

718 :デフォルトの名無しさん:2006/03/29(水) 19:43:16
>>716
片方項だけど、CRT の一部を明滅させて小型PDAに
データを転送するというプログラムも過去にはあったような気が・・・

719 :デフォルトの名無しさん:2006/03/31(金) 13:25:57
TCPでクライアントの中で
クライアント自身のIPアドレスとポート番号を知るにはどうすればいいですか?
サーバー側ではクライアントをaccept()したときに得られるみたいですが。

720 :デフォルトの名無しさん:2006/03/31(金) 13:38:44
getsockname

721 :719:2006/03/31(金) 13:44:45
おおー、ありがとうごさいます。
感謝感激!

722 :デフォルトの名無しさん:2006/03/31(金) 17:35:58
peercastとかskypeとかが
特殊なプロトコルを使って通信してるじゃないですか。

peercast://
call://

こんなやつ。
あれってどうやって作ってるんですかね。

723 :デフォルトの名無しさん:2006/03/31(金) 18:45:56
>>722
正確にはスキーム。
プラットフォーム依存になるが、Windowsなら、CLSIDをレジストリに登録して、
クラスモニカをパースできるようにするんじゃなかったっけ。

724 :デフォルトの名無しさん:2006/03/32(土) 13:36:30
zeroconfigだっけか、自分でIP用意しちゃおうぜってRFCはあるね。

次のポートに繋ぎに行くのを繰り返すと、ポートスキャンと見なされてIDS/FWのログに残る。

725 :デフォルトの名無しさん:2006/03/32(土) 17:13:46

ZoneAlarmのように
他のプログラムのネット接続を即切断したり
また繋ぎ直したり・・・は
どうやったらできるでしょうか。

ZoneAlarmが余りに不安定なので
自作した方が軽くて早くて安定な気はしていますが
ネット系のプログラミングは殆どやったことないので
分からないこと多いです。


プログラミング歴だけなら
Win3.1のVC++1辺りからやっては居ます。


726 :デフォルトの名無しさん:2006/03/32(土) 19:11:20
拡張DLLとか使って横取りでもしてるのかな?
無理矢理してるなら不安定なのは当たり前。
切断してる時に、相手からパケット来たら答えられずに接続切られるでしょ?

727 :デフォルトの名無しさん:2006/03/32(土) 19:28:40
この手のはメシのタネになりがちだから教えない。

728 :デフォルトの名無しさん:2006/03/32(土) 23:45:39
>>727
どんな情報も飯のネタになるだろ・・・尻の穴の(ry

729 :デフォルトの名無しさん:2006/04/02(日) 00:53:45
TDI Filter driver とか使う・・というか書くのが普通。

730 :デフォルトの名無しさん:2006/04/02(日) 09:02:29
フォームのページに自動的に記入して、送信するプログラムを作りたいのですが、
どのようにすれば作れるのでしょうか?
例えばこのようなページに、ブラウザで開かずに、直接プログラムから記入してそうインしたいのですが。
http://www.miyagawaakira.com/inquiry2.html


731 :デフォルトの名無しさん:2006/04/02(日) 09:09:52
最後の一行いみわかんねぇけど JavaScript でも使えば?

732 :デフォルトの名無しさん:2006/04/02(日) 09:37:06
HTTPの仕様を満たして、POSTするプログラムを作ればいいね。
まずはGETするプログラムから始めて見たら?


ちょっと機能加えるだけでパーソナルファイヤウォールとか銘打って稼げそうではあるね。
出来が悪いと、損害賠償受けたり、サポート大変だろうけど。

733 :デフォルトの名無しさん:2006/04/02(日) 09:46:28
あよく見たら 「例えばこのページのように」 じゃなくて 「このページに」 か。
荒らしツールでも作る気か?

734 :デフォルトの名無しさん:2006/04/02(日) 10:23:36
>>732
> HTTPの仕様を満たして、

HTMLの仕様も知る必要あり


735 :デフォルトの名無しさん:2006/04/02(日) 12:54:30
>>730
が書いたHPのソースコードの75行目に
<form action="http://www.moukarumail.com/user/successp/autostep/append.php?SNCD=4" meTDod="post" name ="form1" onSubmit="return check()">
とあるが、CGIでサーバ叩いたら(postメソッド投げれば)簡単にできねーか?

736 :デフォルトの名無しさん:2006/04/03(月) 02:04:46
何か荒らしサイト構築っぽいね。
あちこちのFORMに宣伝とかの書き込みするのかな?

737 :デフォルトの名無しさん:2006/04/03(月) 18:25:06
735だが
ネットワーク系の実装は、ボタンの掛け方一つでMAD Programになるからな
これ以上は教えないよ

738 :デフォルトの名無しさん:2006/04/03(月) 18:31:50
連続 POST くらい JavaScript で書けよと

739 :デフォルトの名無しさん:2006/04/03(月) 18:41:46
漏れなら、PerlかPHPで書くな

740 :デフォルトの名無しさん:2006/04/03(月) 19:28:23
漏れなら wget で済ますな。

741 :デフォルトの名無しさん:2006/04/03(月) 19:30:05
誰か.NET版のXML-RPC使って
Hello Worldでもなんでもいいから
サーバークライアント間で通信する。
簡単なプログラム組んでくれませんか?

http://xml-rpc.net/

これ。
どうも使い方がわかりづらい…

742 :デフォルトの名無しさん:2006/04/04(火) 00:31:49
漏れならruby。
wgetでpostのほうが面倒だ。

.NETのサポートはMSにお問い合わせください。

743 :デフォルトの名無しさん:2006/04/04(火) 11:20:22
ロジックだけでかまいません。
IEでプロキシサーバの自動検出機能がありますが、
どのように検出させているのでしょうか?

8080や3128ポートのパケットについて
ブロードキャストさせているだけですか?


744 :デフォルトの名無しさん:2006/04/04(火) 12:28:29
>>743
「WebブラウザのProxy設定を行うための4つの方法 − WPADのススメ −」
http://www.atmarkit.co.jp/fwin2k/win2ktips/031autoproxy/autoproxy.html


745 :デフォルトの名無しさん:2006/04/04(火) 12:40:30
>>744
なるほど、WPADプロトコル(を実装したプロキシ)を
使うわけですね。
ありがとうございます。

746 :デフォルトの名無しさん:2006/04/05(水) 13:57:54
質問です。
自前でACK/RSTパケットを送出したいです。
WinXP+VB6なのですが、VC++でも構わないので
どこかに良さげなサンプルはありませんでしょうか?

よろしくおねがいします。

747 :デフォルトの名無しさん:2006/04/05(水) 16:36:10
どこまでフラグをapiで弄れたっけ?

748 :デフォルトの名無しさん:2006/04/05(水) 17:55:35
SO_LINGERを設定してclosesocketすれば、RSTがとんだはず。

749 :746:2006/04/06(木) 21:32:29
>>747
IPヘッダは×
TCPヘッタが少々触れそうなのですが。。

>>748
おぉ!試してみます!情報ありがとうございます!゙

750 :デフォルトの名無しさん:2006/04/09(日) 09:51:12
サーバの試験をするとき、クライアントを全部別々のIPにして
試験したいときは どうすればいいかな。
同一サブネットでの試験したいときに困った

10台程度なら根性で実機用意するにしても
200台とか2000台はちょっとむりぽ

751 :デフォルトの名無しさん:2006/04/09(日) 10:30:39
vmwareとかどうよ?

752 :デフォルトの名無しさん:2006/04/09(日) 10:52:13
バーチャルインターフェースとかインターフェースエイリアスとか。
クライアント側でソースアドレスをバインドすれば問題なし。

753 :デフォルトの名無しさん:2006/04/09(日) 11:39:41
10台でがんばるならソースアドレスだけど、あんまり試験の意味はないね。
10台で2000IPのトラフィック(1GbpsNICでも10Gbps)と、2000台で2000IPのトラフィック(100MbpsNICでも200Gbps)は違うし。

754 :デフォルトの名無しさん:2006/04/09(日) 11:48:25
テストに見せかけて荒らしツール作ってるだけだったりして

755 :デフォルトの名無しさん:2006/04/09(日) 12:08:01
個人で嵐のために/24とかIP取ってたらワロス。

756 :デフォルトの名無しさん:2006/04/09(日) 13:18:15
つ DHCP

757 :デフォルトの名無しさん:2006/04/09(日) 14:20:08
>>753はどうしてトラフィック負荷テストと仮定しているのか?

758 :750:2006/04/09(日) 20:02:07
>>752
なるほど、ソースをバインドすればエイリアスでもいけるでござるか。

759 :デフォルトの名無しさん:2006/04/09(日) 20:51:10
鯖の試験で負荷以外に何か有る?
2000台も繋げるなら負荷が問題になるよなあ。

760 :デフォルトの名無しさん:2006/04/10(月) 11:10:53
>>759
負荷試験でも、試験対象がサーバソフトのコネクション捌きの性能だったり、
スケーラビリティだったりする場合、bpsはほとんど関係ない。
コネクション開始リクエストの送出にbpsが足りるかぐらい。

761 :デフォルトの名無しさん:2006/04/10(月) 14:53:12
>>750
Linux (Solarisも同じだったかも)なら
ifconfig eth0:1 ...
ifconfig eth0:2 ...
のようにしてどんどん増やして、その後どうやるか忘れたけどそのインターフェースを
通して接続する。他のOSでは知らない。


762 :デフォルトの名無しさん:2006/04/12(水) 23:31:14
決まったコンピュータ同士で通信する方法で
小さなデータをできるだけ高速に通信したいのですが、ソケットでは
socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL));
で作ったソケットを作り、物理層の上で通信するのが一番、高速ですか?
とりあえずこれで実装してみるつもりなのですが、ほかに速い方法があれば
教えてください。


763 :デフォルトの名無しさん:2006/04/13(木) 00:18:41
どういう用途なんだろう?
垂れ流し? ブロードキャスト? データは途中で消えてもいいの?


764 :デフォルトの名無しさん:2006/04/13(木) 05:57:46
馬鹿の考え休むに似たり

765 :762:2006/04/13(木) 11:04:16
用途は、一台のコンピュータで時間のかかる計算して、その結果をもう一台の制御用のコンピュータに送信することです。制御用のコンピュータはなるべく通信に時間を割きたくないので通信時間を短縮したいとおもったのです。
通信は1対1でクロスケーブルで繋ぐつもりで、データの信頼性はあんまり重要ではないです。

766 :デフォルトの名無しさん:2006/04/13(木) 11:30:42
>>762
>物理層の上で通信するのが一番、高速ですか?
…うん。バカハブとか、速いもんね。

767 :デフォルトの名無しさん:2006/04/13(木) 14:53:39
>>762
処理速度云々はてめえで見積もれ。
できないなら、とりあえずTCPで実装してから考えれ。

768 :デフォルトの名無しさん:2006/04/15(土) 00:48:02
TCPで、A,B,Cというパケットがこの順で来るべき所を
Bがなかなかこない場合、Bが抜けた状態でA,Cだけが
read()とかrecv()で取得されるという事はあり得るでしょうか?

769 :デフォルトの名無しさん:2006/04/15(土) 01:03:27
AはくるけどBがrecvを通してアプリにわたってこない限りCはアプリに渡されないよ。ソケット内部ではもってるかもしれないけど


770 :デフォルトの名無しさん:2006/04/15(土) 01:17:31
>>768
無い。そのためのTCP。
UDPならある。

771 :デフォルトの名無しさん:2006/04/16(日) 02:48:09
>>768
TCPにパケットとかデータグラムってないよ。

772 :デフォルトの名無しさん:2006/04/16(日) 07:56:53
というかセグメントという概念はある。RFCにも明記。

RFC 793 - Transmission Control ProtocolのGLOSSARYより

segment
A logical unit of data, in particular a TCP segment is the
unit of data transfered between a pair of TCP modules.

TCPの提供するバイトストリームにはデータの切目はない。
この違いを理解してください。

それから「TCP/Lower-Level Interface」ではセグメントを意識したプログラミングになります。




773 :デフォルトの名無しさん:2006/04/16(日) 18:11:58
ルータの話になるかもしれないのですが、ネットワークプログラミングの常識かと思い質問です。
ルータの仮想サーバポートなどを設定していない状態で
NAT内からUDPパケットをある特定のIPアドレス(グローバル)に対して送信します。
その場合、
1. 送信先IPアドレスからの応答は受け取れる
2. 送信元ポートへの応答は受け取れる(送信元IPアドレスは関係ない)
3. 応答は受け取れない

どうなるのでしょうか?
やはり「送信して一定期間内であれば」という条件もあるのでしょうか?
DNSが使えるので、1はクリアできると思っていますが、不安なので質問しました。


774 :デフォルトの名無しさん:2006/04/16(日) 18:59:59
NAT内から
っていうのがわからんが・・・LAN内のことか?
ping打てばわかると思うけどOKだよ

中から外はいいんだけど
問題なのは外から中が出来ない場合がある
・NAT
・NATP
・IPマスカレード
・アドレス変換
・ポートフォワディング
どれがどうなのか、最近のルータはこれを一緒に説明しているからややこしい


775 :デフォルトの名無しさん:2006/04/16(日) 19:28:09
>>773
ルータのNATの実装による。1だったり2だったり。

776 :デフォルトの名無しさん:2006/04/16(日) 19:33:13
>>773
その辺のブロードバンドルータとかASDLのモデムとかを相手にしてるなら、
xxxx:p から(ルータ等経由して) yyyy:q へ udp パケットを送ったあとしばらくの間は、
yyyy:q から(同じルータを経由して) xxxx:p への udp パケットはルーティングしてくれる。

という程度の仮定が良いと思う。

777 :デフォルトの名無しさん:2006/04/16(日) 21:50:31
NAT越えを実装する機会?

778 :デフォルトの名無しさん:2006/04/16(日) 21:58:57
NAT越えでもなんでもないよ
これがないとDNSとかUDPのサービスが受けられないよ

779 :デフォルトの名無しさん:2006/04/16(日) 23:39:22
UDPで unko という4バイトを1パケットで送信したとき
ko un みたいに逆順になることはありえない よね?


780 :デフォルトの名無しさん:2006/04/16(日) 23:42:05
受信できたら幸運だな。

781 :773:2006/04/17(月) 01:28:04
どうもです。
>>777
いや、1つはポートを空けていて、基本的にはそこで要求を待っているのですが、
何らかの要求に対して、別ポートをbindして、そこからからパケットを送信して、
それがいくつかのノードを経由して戻ってくるので、それを送信ポートで受け取りたかったのです。
UDPで一時ポートを使いたい。
送信から開始するので、ルータで設定する必要ないなら、
スレッド単位で独立した通信処理ができるので楽だなと思いまして。

>>773の1、2のどちらかは、実装による(規格化・標準化されていない)ということで、
パケットにセッションID振って、1つの待ち受けポートで全部受けて、
そのあとキューに振り分けて処理するのが安全そうですね・・・。

>>774
LAN内で、一般家庭用のルータに繋がっている想定です。


782 :デフォルトの名無しさん:2006/04/17(月) 08:28:30
>>779
まずはC言語をやり直した方がいいんじゃないかな

783 :デフォルトの名無しさん:2006/04/17(月) 08:31:16
なんでC言語だと思うのだろう・・・

784 :デフォルトの名無しさん:2006/04/17(月) 15:35:40
LinuxでC言語を仕様し、ソケット通信のプログラムを書いているのですが
readや、acceptを非同期にしたいのですがどのような手法を用いれば非同期に出来るのでしょうか?
ご回答よろしくお願い致します

785 :デフォルトの名無しさん:2006/04/17(月) 15:40:17
スレッド

786 :デフォルトの名無しさん:2006/04/17(月) 15:49:23
>>785
ありがとうございます。勉強してきます

787 :デフォルトの名無しさん:2006/04/17(月) 19:22:05
>>784
setsockoptでNON_BLOCK

788 :デフォルトの名無しさん:2006/04/17(月) 20:54:49
>>787
fcntlじゃね?

789 :デフォルトの名無しさん:2006/04/17(月) 20:58:30
select() と poll() もよろしく。


790 :デフォルトの名無しさん:2006/04/17(月) 21:07:38
>>788
正解。 Windowsだと、ioctlsocket()。

787

791 :デフォルトの名無しさん:2006/04/17(月) 21:52:31
初心者レベルな質問でスマソ
Socketで通信できるのはTCP/IPだけですか?
USBの通信状態をモニターするプログラムを実装したいのですが
Socketでは無理なのでしょうか?


792 :デフォルトの名無しさん:2006/04/17(月) 22:09:35
USBをソケットで実装してるOSがあれば扱えるはずだけど、
そーゆーOSは聞いたこと無いなー

793 :デフォルトの名無しさん:2006/04/17(月) 23:16:57
>>792
やっぱりそうですか、どうもありがとう


794 :デフォルトの名無しさん:2006/04/18(火) 00:35:37
まずUSBデバイスにMACアドレスを振る


795 :デフォルトの名無しさん:2006/04/18(火) 00:45:40
実際にやるやらないは別として。

MACアドレス無くても、(IPとしてではなく)socketとして扱うなら
上位のレイヤで吸収できるんでない?
例えばAF_USBとかにして何らかの機器識別情報をパラメータにして。

796 :デフォルトの名無しさん:2006/04/18(火) 02:57:00
>>792
それ面白いな。採用。

797 :デフォルトの名無しさん:2006/04/18(火) 08:17:54
SolarisとかAIXとかならSTREAM使えば簡単にできる。

798 :デフォルトの名無しさん:2006/04/18(火) 09:23:42
赤外線はsocketです

799 :デフォルトの名無しさん:2006/04/18(火) 10:50:36
USB とは関係ないけど Bluetooth の SPP とかもソケットで使えるな。
Winsock だと。

800 :デフォルトの名無しさん:2006/04/18(火) 10:55:00
( ゚д゚)ポカーン

801 :デフォルトの名無しさん:2006/04/18(火) 17:22:48
クライアントプログラムとCGIとの間で通信をやりたいと思っています。
クライアントはソケット通信で最初にポート80(Apache)にconnectするようになっています。

この状態でクライアント側で試しにCGIをシェル上で走らせてみると
CGIに書いてあるHTMLは表示されるのですがscanfがまったく無視された形で戻ってきます。

自分としてはCGI上に書いてあるscanfで処理が1回止まり、1度文字の入力ができれば
いいなぁと考えていたのですが、この考え方は間違っているでしょうか。

正しいか間違っているか、また間違っているならば後学の為にも正しい処理の概要を
教えて頂ければ幸いです。
言語はC言語、サーバーはRedHatです。よろしくお願いします。


802 :デフォルトの名無しさん:2006/04/18(火) 17:30:41
板違い

803 :デフォルトの名無しさん:2006/04/18(火) 19:10:08
>>801
間違っています。

*** 終了 ***


804 :デフォルトの名無しさん:2006/04/18(火) 21:31:39
>>801
>>この状態でクライアント側で試しにCGIをシェル上で走らせてみると
この部分をこちらの理解可能な言葉に直してほしい。

client ----- apache (CGI)
ではないの?
CGIの標準入力は、postされたデータと繋がっているので、
処理が止まったりはしないけど、君の言っている意味がよく分からん。


805 :801:2006/04/18(火) 22:04:37
>>804さん

説明不足、言葉足らずですみません。

>client ----- apache (CGI)

クライアントでsocketを作成後connectしてApacheに繋ぎ、「GET / HTTP1.1/」などの
文字列をsendで送信するとApache(CGI)から結果が返ってくるのですが、
その途中でscanfなどで「待ち」の状態にできないものかと試行錯誤している状態です。
その際、ポートは80で繋がっていると思いますがこのポート番号でprintf,scanfなどを使い
クライアントとデータの送受信が出来ないものか悩んでおります。


何か書いているうちに自分でも訳が判らなくなってきました・・・

4月からソケットプログラミングの勉強を始めたばかりなのでご容赦頂ければと思います。

806 :デフォルトの名無しさん:2006/04/18(火) 22:35:57
>>805
間に httpd が居るので普通は無理です。
出来たとしても特定のウェブサーバの特殊な機能だと思った方がいい。


807 :デフォルトの名無しさん:2006/04/18(火) 22:47:38
プロトコル違反になるからどんなサーバでも出来るわけないじゃん。

808 :デフォルトの名無しさん:2006/04/19(水) 02:28:24
>>805
そういうのはPOSTでやればやれんことも無いです。
Ajax push なんかはそんな感じ。

809 :デフォルトの名無しさん:2006/04/19(水) 03:21:54
速度可変のプロクシは、どのようなアルゴリズムを使っているのでしょうか。


810 :デフォルトの名無しさん:2006/04/19(水) 09:57:38
>>809
回答するからちょっと待ちねぇ

811 :デフォルトの名無しさん:2006/04/19(水) 17:41:28
>>805
見ててうざいから消えて

812 :デフォルトの名無しさん:2006/04/19(水) 20:13:41
>>805
nphとPOSTの組み合わせでできるんじゃね?
とりあえずnphでぐぐれ。

813 :>>804さん :2006/04/19(水) 21:38:44
>>805
なにか送るまで待つってどうするのかというのがまず1つ。
HTTPだと、CGIに対してGETリクエストを出した後に、
さらにおなじプロセスに対してメッセージを送れないからなにを待つんだという話。
単にディレイ入れるならCGIでsleepするだけ。
CGIから別プロセスを立ち上げるか、別に待っているプロセスがいて、
CGIを通してそのプロセスにアクセスするのは可能。
ウェブベースのアプリケーションは大体そんな感じ。
>>809
帯域制限?
一定速度を上回るとディレイ時間を増やしていき、一定速度を下回ると減らす。
while () {
receive();
if (rate < max_rate) {
++delay;
} else {
--delay;
}
delay_thread(delay);// dly_tskやnanosleepなど
send();
}
ちょうどいい速度で落ち着く。
OSの機能であるならそれを使ったほうがよし。


814 :デフォルトの名無しさん:2006/04/19(水) 21:40:25
>>if (rate < max_rate) {
逆。
if (rate > max_rate) {

815 :デフォルトの名無しさん:2006/04/23(日) 00:19:50
このweb上にあるプログラムでHTMLを吸いだそうとしてるんですが
ttp://ruffnex.oc.to/kenji/src/windows/HTTP/cHTTP.cpp
phpに対してHTMLを吸いだそうとすると、404だったり変な結果だったりします。
例)
cHTTP.exe http://www.phpoo.net/
cHTTP.exe http://www.phpoo.net/index.php
cHTTP.exe http://www.phpoo.net/index.php?p=index.html
何か解決方法はありませんか?

816 :デフォルトの名無しさん:2006/04/23(日) 00:51:15
>>815
リクエストヘッダをもう少し書いてあげれば?
Accept と User-Agent くらいは。

817 :815:2006/04/23(日) 03:20:21
リクエストヘッダにHost項目を追加したところ解決しました。
ありがとうございます。
AcceptとUser-Agentは無くても大丈夫でしたが追加しておきます。

818 :デフォルトの名無しさん:2006/04/23(日) 18:23:04
接続に使うデバイス指定ってできますか?

環境はwindowsです。
LANとPHSが繋がっています。
PHSは、自動的に接続/切断 しています。

通信処理は、
socketでTCP/IPな転送と
InternetOpenの流れのAPI使っています。

819 :デフォルトの名無しさん:2006/04/24(月) 15:56:50
>>818
ソケットを Connect する前に、使いたいほうのインタフェイスアドレスに
bind しておけばsocket使うほうはインタフェイス固定にできます。

InternetOpen の方は・・・
route コマンドで一時的にそっちのIFの優先度を上げるくらいか。

820 :デフォルトの名無しさん:2006/04/29(土) 20:07:55
ネットワーク通信性能測定用プログラムを作成したいんですが、
netperfのようなものでもっと小さいプログラムありませんか?

821 :デフォルトの名無しさん:2006/04/29(土) 20:11:42
>>820
死ねばいいよ^^

822 :デフォルトの名無しさん:2006/04/29(土) 20:20:54
2chっぽい書き込みで盛り上げるねぇ〜

823 :デフォルトの名無しさん:2006/04/30(日) 01:20:50
何かOSIレイヤが理解できないアフォが多いですね。

まあネット関係の言語は歴史的にCのほうが実績が有る。
他の言語でも、Cの実装に忠実に再現されてれば大丈夫だけど、ほとんどは多少違うので他のシステムとの通信時のデバッグで嵌る。

UDPは基本的にセッションが無いので、アドレス変換用のテーブルが作れない。
自分でNAT作ってみれば分かるよ。UDPは通らないNATでいいやと思うから。


824 :デフォルトの名無しさん:2006/04/30(日) 01:31:28
   ∩___∩
   | ノ      ヽ
  /  ●   ● | 
  |    ( _●_)  ミ
 彡、   |∪|  、`\  
/ __  ヽノ /´>  )
(___)   / (_/
 |       /
 |  /\ \
 | /    )  )
 ∪    (  \
       \_)


825 :デフォルトの名無しさん:2006/04/30(日) 03:47:32
俺漏れも、くまぁ〜

826 :デフォルトの名無しさん:2006/04/30(日) 08:32:10
情報処理試験で勉強でもしたんでちゅか

827 :釣られた人:2006/04/30(日) 15:57:10
>>823
BSDソケット という言葉を使ってくれれば100点だったのだが…

828 :デフォルトの名無しさん:2006/04/30(日) 16:02:11
ひょっとしてコピペのテンプレ誕生の瞬間に立ち会った!?

829 :さらに釣られるとすると…:2006/04/30(日) 22:37:58
>>827
えーと…200点満点では?

830 :827:2006/04/30(日) 23:03:01
試しに作ってみた。

何かOSI参照モデルが理解できないアフォが多いですね。

まあネット関係の言語は歴史的にBSDソケットのほうが実績が有る。
他のOSでも、BSDソケットの実装が忠実に再現されてれば大丈夫だけど、
Winsockの場合は多少違うので他のOSとの通信時のデバッグで嵌る。

ICMPは基本的にポート番号が存在しないので、NAPT変換用のテーブルが作られない。
自分でNAPT作ってみれば分かるよ。ICMPは通らないでいいやと思うから。

831 :809:2006/05/01(月) 05:22:01
>>813
遅くなりましたが、ご回答ありがとうございます
勉強になりました。


832 :デフォルトの名無しさん:2006/05/05(金) 03:37:42
最近の HTTPd は SCO-Hash ヘッダなるものを返して来るみたいなんだけど、これって何か知ってる?
Content-MD5 とはちゃうんか?

SCO-Hash: 6c9173af0bf8d9c21cb3526f8f39d0f6

とか。

833 :デフォルトの名無しさん:2006/05/05(金) 10:42:32
調べてないが、そういうのはRFCに書いてないか?

834 :デフォルトの名無しさん:2006/05/05(金) 22:27:26
http://so.7walker.net/
ここの独自機能っぽいが。
先頭1KBのハッシュとかなんとか。

835 :デフォルトの名無しさん:2006/05/07(日) 00:52:05
あのー、ethereal.com がexpireしたらしいんですけど、どうすればよいでしょうか?
ドッキリでしょうか。

836 :デフォルトの名無しさん:2006/05/07(日) 01:55:25
>>835
Updated Date: 05-May-2006
Creation Date: 27-Apr-1994
Expiration Date: 28-Apr-2012

837 :デフォルトの名無しさん:2006/05/07(日) 11:08:07
>>18, >>20
どうもありがとう!!

838 :デフォルトの名無しさん:2006/05/07(日) 16:49:52
WinInetを使っているのですが、Httpでアドレスがリダイレクトされたのを検出するのはどうすればいいのですか?
InternetSetOption/InternetQueryOptionでSECURITY_FLAG_IGNORE_REDIRECT_TO_HTTPというフラグがあるので試しにこれをONにしようとしたら、Setはできないフラグでした・・・orz なら何の為にQueryはできるのか・・・


839 :デフォルトの名無しさん:2006/05/07(日) 19:15:45
普通にソケットを使って通信した方が早い。

840 :デフォルトの名無しさん:2006/05/07(日) 21:57:26
long変数1つのみをマルチスレッドで読み書きする場合、クリティカルセクションで管理する必要ありますか?


841 :デフォルトの名無しさん:2006/05/07(日) 22:06:04
>>840
InterlockedIncrement
InterlockedDecrement
InterlockedExchange
辺りを使えばいいんでない?

842 :841:2006/05/07(日) 22:07:06
WIN32APIだった、すまんね。

843 :841:2006/05/07(日) 22:14:01
>>838
INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPは
InternetOpenUrlのdwFlagsであらかじめ指定しておく必要があるんじゃまいか。

844 :840:2006/05/07(日) 22:20:16
>>841
いや、大丈夫です。必要な事が分かりましたから。
ありがとうございました。

845 :デフォルトの名無しさん:2006/05/07(日) 22:20:52
>>840
場合による。
その変数に対する複数の演算が、ひとつの不可分な処理として必要なら必要。
あと、スレ違い。

http://pc8.2ch.net/test/read.cgi/tech/1130984585/

846 :841:2006/05/07(日) 22:28:50
リダイレクト検出はInternetSetStatusCallbackでコールバック関数を設定して、
INTERNET_STATUS_REDIRECTメッセージが飛んできたら検出できるはず。

847 :デフォルトの名無しさん:2006/05/08(月) 00:12:58
TCPでやり取りするプログラムを書いてるんだけど、
どうもshutdown, closeの仕方が分からない。
その辺がうまくないせいで、
同じポート番号での通信が一回しかできない。
あるポート番号で通信を行った後、
また同じポート番号を使う設定でサーバを立ち上げ直すと、
サーバがきちんとaccept状態になっていないのか、
クライアント側がconnectのところで失敗しちゃう。

チラ裏スマソ

848 :デフォルトの名無しさん:2006/05/08(月) 00:19:06
>>847
setsockoptでSO_REUSEADDRすれ。
shutdownは、closeする直前に「受信はするが送信しない」or
「送信はするが受信しない」という状態を作るだけでその現象とは関係ない。

ていうかbindの戻り値ちゃんと見てエラーチェックしろよ…

849 :デフォルトの名無しさん:2006/05/08(月) 00:20:08
あ、ごめんREUSEADDRじゃなくてREUSEPORTだ。

850 :デフォルトの名無しさん:2006/05/08(月) 00:25:42
>>848-849
チラ裏にレスくれて
ほんとありがとう。。。

なにを質問したらいいのかさえ分からなくて、
チラ裏状態のまま書き込んでしまったんだけど、
ともかく、その点についてやってみます!

851 :デフォルトの名無しさん:2006/05/08(月) 01:13:32
いいから>>1を読め

852 :デフォルトの名無しさん:2006/05/08(月) 07:20:55
↑また無能のお出まし。

853 :デフォルトの名無しさん:2006/05/08(月) 08:11:17
いや、ほんとsocket FAQは読んだ方がいい。

854 :デフォルトの名無しさん:2006/05/08(月) 12:53:37
>>849
REUSEPORTだと他のプロセスもbindできてしまうから、
積極的にそうしたい理由がなければREUSEADDRの方がいいと思う。

855 :デフォルトの名無しさん:2006/05/10(水) 00:22:39
ストリーミングを中継するようなサーバについて教えてください。
クライアントはダイアルアップルータを通してインターネットに接続できる
非固定のIPアドレスを持つとします。

公開された中継サーバにクライアントから接続して双方向にパケットを送信するとします。
TCPならクライアントからサーバに接続すればそのソケットを通して双方向に送信できます。
このときTCPなのでコネクション指向の接続であり、その場合もっと下位のレイヤでも
「セッション」のような概念をもち、サーバとクライアントのルーティングの情報をセッションとして保持していて
よって双方向の通信できると私は理解しています。
ではUDPのようなコネクションレスの場合はどうなのでしょうか?
クライアントがサーバに対してUDPのパケットを送信したらその瞬間に双方向のルーティング情報が
各経路に出来上がり、サーバからの返信も確実にクライアントに届くのでしょうか?

いっぱい間違えていると思いますが、教えてください。m(_ _)m


856 :デフォルトの名無しさん:2006/05/10(水) 00:27:38
教えてクンはさようなら

857 :デフォルトの名無しさん:2006/05/10(水) 00:37:09
>>855
届かねえ。

858 :デフォルトの名無しさん:2006/05/10(水) 00:42:18
>>855
届くよ。

859 :デフォルトの名無しさん:2006/05/10(水) 00:42:47
>>857
ありがとうございます。
届きませんか・・
残念

860 :デフォルトの名無しさん:2006/05/10(水) 00:46:12
>>855のような疑問(IPより下のそうでUDPやTCPがどう実装されているのか、
どうルーティング情報が保持されるのか、など)がわかるような良い教科書はありませんか?


861 :デフォルトの名無しさん:2006/05/10(水) 00:52:48
IPより下の層にTCPやらUDPやらが実装されているわきゃない!!

862 :デフォルトの名無しさん:2006/05/10(水) 01:01:25
UDPが正常に送受信できなければドメインを引くことすら出来なくなるぞ。

863 :デフォルトの名無しさん:2006/05/10(水) 01:03:31
>>860
TCPはpeer-to-peerのプロトコルだということを理解してください。
次にIP層のルーティング機能について理解してください。

>>4の↓を読めばいいです。
TCP/IPによるネットワーク構築 〈Vol.1〉原理・プロトコル・アーキテクチャ

864 :デフォルトの名無しさん:2006/05/10(水) 08:00:46
>>863
わかりました。ありがとうございます。

865 :デフォルトの名無しさん:2006/05/11(木) 07:21:59
複数のポートを使うクライアント・サーバ アプリを作成しています。
命令を出したりするメインポート以外のファイル転送ポート等は使用する時だけ
接続し、使い終わったら閉じるようにしているのですが、こういうやり方は
まずかったりするでしょうか??

866 :デフォルトの名無しさん:2006/05/11(木) 07:30:57
>>865
ftpはまさにそういうプロトコル。利点としては非同期にファイル転送を停止したり出来る。

867 :デフォルトの名無しさん:2006/05/11(木) 11:42:09
>>865
まずくないと思うけど、漏れならクライアント側で接続先が同じ、
かつ再接続の頻度がそこそこ高い場合にはUDPのソケットは開きっぱなしにする。
安定して同じポート番号使って、NATに優しいプログラムにしたいから。

サーバ側は1つのソケットでいいから当然開きっぱなし。

868 :デフォルトの名無しさん:2006/05/11(木) 11:43:13
( ゚д゚)ポカーン

869 :867:2006/05/11(木) 11:43:48
あ、>>867はUDPの場合の話です。
TCP の場合は好きなようにすれば良いと思う。

870 :デフォルトの名無しさん:2006/05/11(木) 12:04:38
>>868=ボケ

871 :865:2006/05/11(木) 17:49:35
レスありがとうございます。

>>866
なるほど。現状のまま行こうと思います。ありがとうございます。

>>867
そういうのもあるんですね。参考になります。ありがとうございます。

872 :866:2006/05/12(金) 01:14:33
>>871
あ、1つ重要な欠点を忘れてた。 そのデータ転送のポートの割り当て方を気をつけないと
ファイアーウォール、NATルータを通り抜けれない可能性がある。 FTPみたいに
ダイナミックにポートを当てはめてその情報をコマンドでやりとりしてとかやるとまず
だめ。 NATルータはFTPを通すためにえらく面倒な特別処理をしている。
詳しくは:

RFC 3235 NAT Friendly Application Design Guidelines

873 :デフォルトの名無しさん:2006/05/12(金) 01:45:41
RTSPというプロトコルはTCPで搬送するらしいのですが、
これってメッセージをやり取りするたびにTCPのコネクションって
切っても良いものでしょうか?

RTSPを使うアプリを見てると基本的にTCPのコネクションを維持しているようです。


874 :デフォルトの名無しさん:2006/05/12(金) 07:19:57
TCPでメッセージの都度接続を考えるやつは馬鹿

875 :デフォルトの名無しさん:2006/05/12(金) 15:47:17
>>874
そんな事考えてるのはお前くらいのもんだよ。

876 :デフォルトの名無しさん:2006/05/12(金) 15:48:38
>>875
HTTP に KeepAlive 導入したヤシも似たようなこと考えてたんじゃネーノ?

877 :デフォルトの名無しさん:2006/05/12(金) 18:37:32
>>876
HTTP/1.0以前は同じページにcssやら画像100枚やら張られるなんて
想像してなかったんだろうな。

878 :デフォルトの名無しさん:2006/05/12(金) 20:20:32
HTTPは「メッセージを送信して応答をもらって切る」の繰り返し。
RTSPもHTTPに似てるから同じでいいんじゃないか?w



879 :デフォルトの名無しさん:2006/05/13(土) 00:28:39
>874-878

レス、ありがとうございます。
結局のとこ、どうなんでしょうね。
接続を維持していたほうが負荷が小さいのは間違いないですが。
切っても良いっちゃ良いんでしょうが。



880 :デフォルトの名無しさん:2006/05/13(土) 01:43:17
>>873
参考情報
HTTPのKeep-Aliveの説明
ttp://www.studyinghttp.net/connections

881 :デフォルトの名無しさん:2006/05/13(土) 16:59:59
>>879
世の中には接続を切るとそのままセッションも捨てられるしょぼいサーバも存在するかも。
切らないほうがトラブルに見舞われることは少ないと思われ。


882 :873:2006/05/13(土) 21:37:49
>880-881

ありがとうございます。
ここまで、書いててまったく気づいてなかったのですが、
実はサーバー側の話です。

サーバー側で切ってしまうと、クライアントの方で問題にならないかな〜と
思いました。

まあ、いろんなクライアント試してみろって話ではあるんですが。

883 :デフォルトの名無しさん:2006/05/13(土) 22:06:13
繋げっぱなしでセッション保持するプロトコルはモバイル端末で使えないな。

884 :デフォルトの名無しさん:2006/05/14(日) 02:13:35
>>883
バッテリ駆動機器は別だろう、勿論。

885 :デフォルトの名無しさん:2006/05/14(日) 09:05:04
>>882
問題にならないようにHTTPにはCookieがある。
HTTPはもはや汎用のプロトコルでセッション管理も必要だから。

あなたがどういう応用を想定しているか分からないので、
あなたのケースではどうだかは分からない。

886 :デフォルトの名無しさん:2006/05/15(月) 02:12:01
UDPで送信する際、プログラマーはMTUサイズを意識しないで良い。
送り側のシステムでMTUサイズに自動で分割され、受け側のシステムで自動合成される。
つまりパケット喪失や輻輳等はあるが、自動合成後のパケットデータは信用できる。

と認識しているのですが、正しいでしょうか?

winsock2.0
vs2003
winXP win2000

887 :デフォルトの名無しさん:2006/05/15(月) 05:16:44
>>886
沖縄から北海道へ行くのに地面を掘ってブラジルへ行こうとするほどズレている

888 :デフォルトの名無しさん:2006/05/15(月) 11:05:21
教えて下さい

winsock2なんですが、一度listenしたものをプロセスを維持したまま解除
(listenしない)にしたいです。
listenに使用したfd(SOCKET)を使ってshutdownやclosesocketしても
まだLISTEN状態です。
「setsockoptでSO_REUSEADDRを使えばよい(次回からも同ソケットに
bind&listenできる)」って記述は多くあるんですがそのものを解除したい場合
はどうしたらよいでしょうか。


889 :886:2006/05/15(月) 11:17:48
出直してきますw

890 :デフォルトの名無しさん:2006/05/15(月) 11:28:54
listenしてるソケットをclosesocketすればいいだけじゃないの?


891 :888:2006/05/15(月) 12:09:43
>>890
早速ありがとうございました。
shutdown -> closesocket だとダメでしたが、closesocket だけにすればLISTENを
解除することができました。

「shutdownは必須」とばかり思ってましたがリスナーソケットですし明示的に
shutdown(s, SD_RECEIVE)する必要は無かったんですね。勉強になりました。

892 :デフォルトの名無しさん:2006/05/15(月) 20:13:32
たしか、リッスン状態でも実際は開いてないのがあったような・・・・・標準サービスとかみたいなの

893 :デフォルトの名無しさん:2006/05/16(火) 08:41:36
ママさーん! クッキンストップ!
心のポートで聞いてくれないんです!

894 :デフォルトの名無しさん:2006/05/16(火) 13:01:25
>>892
プログラム側でaccept()してないだけでしょ?

895 :デフォルトの名無しさん:2006/05/16(火) 19:56:32
VC++6.0、MFCライブラリのCAsyncSocketを利用して
クライアントから1秒ごとに送られてくる、文字列を受信して
クライアントへその都度文字列を送信する
というサーバープログラムを作りたいのですが、
C++もソケットプログラミングも初心者の自分が勉強しやすい
おすすめの参考書、サイトありませんか?

896 :デフォルトの名無しさん:2006/05/16(火) 20:36:54
無い。

897 :デフォルトの名無しさん:2006/05/19(金) 23:57:49
winsock2ですが、RAWソケットを使うことができますか?
IPヘッダのポート番号をいじりたいのですが。
よく下のような表をみるのですがあってますか?

RAW Socketでいじれる範囲
----------------------------------------------------
Win95/98/Me Win2000/XP(SP1)/XP(SP2)
Ether fame NG NG
IP header NG OK



898 :デフォルトの名無しさん:2006/05/20(土) 00:13:07
すみません
サーバ側にあるDLLをネットワークを介してクライアント側で
使用することは出来ますでしょうか?
具体的には、CGI等でサーバ側のDLL機能を呼び出しクライアントの
PCを操作するようなことを想定しています。
COMとかに関係してくるんですかね?
よろしくお願いします


899 :デフォルトの名無しさん:2006/05/20(土) 03:40:11
>>898
CGI ならネットワーク関係ないです。
手抜きしてないでちゃんとサーバの方の資料を読んで。

900 :デフォルトの名無しさん:2006/05/20(土) 09:17:53
>>897
IPヘッダにport番号はありません。

901 :デフォルトの名無しさん:2006/05/20(土) 10:07:52
>>900
プロトコルIDだろ。そのくらい推測してやれよ。
↓ここでも読んででなおしてこい。
http://www.kachijiten.com/realintention/realbbs032/

902 :デフォルトの名無しさん:2006/05/20(土) 10:23:34
推測は、無用な混乱の元です。

903 :デフォルトの名無しさん:2006/05/20(土) 10:29:23
>IPヘッダのポート番号をいじりたいのですが。


ここ読む限りどっちなのかわからんな

904 :デフォルトの名無しさん:2006/05/20(土) 10:41:14
>>901
プロトコルID ってなんだ?
プロトコル番号のことかな。
ていうか、プロトコル番号知ってる奴があんな質問しないと思う。
単に、IP ヘッダと TCP/UDP ヘッダの区別がついてないだけだろ。

905 :900:2006/05/20(土) 10:54:37
これでいいか? > >>901

RAW Socketでいじれる範囲
----------------------------------------------------
Win95/98/Me Win2000/XP(SP1)/XP(SP2)
Ether fame NG NG
IP header NG OK
TCP/UDP header OK OK


906 :デフォルトの名無しさん:2006/05/20(土) 11:11:44
馬鹿はほっとこうよ・・

907 :デフォルトの名無しさん:2006/05/20(土) 17:08:25
906がほっとかれている件について

908 :デフォルトの名無しさん:2006/05/20(土) 18:03:59
>>907の時点で906はほっとかれてないが

909 :デフォルトの名無しさん:2006/05/20(土) 18:07:41
馬鹿はほっとこうよ・・

910 :897:2006/05/20(土) 22:38:44
>>905
ありがとうございました。 

911 :デフォルトの名無しさん:2006/05/20(土) 22:40:10
>>906 >>907 >> 908 >>909
のせいで良スレが荒れるのが許せない。。。

912 :デフォルトの名無しさん:2006/05/21(日) 01:00:26
908や911のような人種がこの世から消えますように(-人-)

913 :デフォルトの名無しさん:2006/05/21(日) 01:01:21
>>906-913
ここまであぼーん推奨

914 :デフォルトの名無しさん:2006/05/21(日) 03:43:55
C#の質問失礼します。
[TcpListener].AcceptTcpClientにて得たTcpClientから接続要求してきたクライアントのIPアドレスを導き出したいのですが、
どうすれば良いのでしょうか?
--------------------------------------------
VS2003
XP 2000


915 :デフォルトの名無しさん:2006/05/21(日) 04:23:44
>>914
getpeername()

916 :914:2006/05/21(日) 10:32:09
自己解決しました。

s= [TcpListener].AcceptSocket()
s.RemoteEndPoint.ToString()
で行けました。

917 :デフォルトの名無しさん:2006/05/24(水) 14:57:32
初歩的ですいません。

ソケットって接続先がかわるたびに作成しなくちゃいけないんですか?
一つソケットを作っておいて、それを、アドレスの設定だけ変えて使いまわしては駄目なんですかね?


918 :デフォルトの名無しさん:2006/05/24(水) 15:19:22
>>917
TCPではできない。
UDPはそもそも「接続」という概念がない。
その他について俺は知らない。


919 :デフォルトの名無しさん:2006/05/24(水) 15:23:42
出来るよ。
使い回せないのは接続であって、ソケットではない。
ただしhalf closedにならないように注意。

920 :デフォルトの名無しさん:2006/05/24(水) 15:42:34
>>919
あ、そうか、connect() でやればいいんじゃん。あー!

921 :917:2006/05/24(水) 16:11:50
レスありがとうございます。

出来るけど、一般的な方法ではないという事ですかね?

例えば、uriを入力したら結果を表示してくれる簡易ブラウザを作るとして、ソケットの作成は一回だけでいいんでしょうか?
それとも、uriを受け取るたびにsocket()とconnect()をすべきなんでしょうか?


922 :デフォルトの名無しさん:2006/05/24(水) 16:24:02
最初は毎回ソケット作り直しなよ。使い終わったらちゃんとcloseして。
それが問題になりそうになれば、(まあそんなことはないと思うけれど)
再利用するようにすればいいんじゃない?
ちょっとした落とし穴があるから、最初から再利用は進めない。

http://www.kt.rim.or.jp/~ksk/sock-faq/unix-socket-faq-ja-2.html#time_wait


923 :デフォルトの名無しさん:2006/05/24(水) 16:27:41
まず、リクエスト毎にshutdown / 再connect が必要かどうかはプロトコルによります。
例えばHTTP/1.1 ならば同一ホストに対しては繋ぎっぱなしにできることもあります。

再接続が必要な場合には既存のソケットは close して socket で新しくソケットの作成
からはじめるのが普通です。

connect / shutdown と違って、ソケットの生成と破棄は単なるカーネル内のメモリ操作に
過ぎませんので、あえて避ける理由はあまり無いと思われます。

924 :917:2006/05/24(水) 16:33:39
>>922
なるほど。わかりました。作り直すようにしようと思います。ありがとうございました。

925 :917:2006/05/24(水) 16:37:17
>>923さんもありがとうございました。よくわかりました。

926 :デフォルトの名無しさん:2006/05/26(金) 20:24:43
プログラムからPingを打つにはどのようにするのがいいでしょうか。
環境はUnixです。Windowsならicmp.dllというのがあるらしいのですが…。

927 :デフォルトの名無しさん:2006/05/26(金) 20:55:31
シェルから呼べば簡単よ

928 :デフォルトの名無しさん:2006/05/26(金) 21:21:44
>>926
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>

int
socket(AF_INET, SOCK_RAW, proto);

manするとこう書いてある。
ってかmanしろボケ。

929 :デフォルトの名無しさん:2006/05/27(土) 00:02:17
権限とかいろいろ面倒だから、>>927の方法がいい。


930 :デフォルトの名無しさん:2006/05/27(土) 19:21:25
環境はUNIXでソケットを使用したUDP通信について質問があります
クライアントからサーバへsendmsgを使用し、UDP送信を行うとソケットに
自動的に空いてるポートが割り当てられますが、そのポートが割りついた
ソケットをそのまま使用して、recvmsgしても問題ないのでしょうか?
実際動かすと問題なく動作はするのですが、たまたま割りついたままに
なっているだけで、時間が経過すると外れたりするのでしょうか?
recmsgを使用するのであればbindすべきですか?
ご教授のほど宜しくお願いします

931 :デフォルトの名無しさん:2006/05/27(土) 20:13:22
くだらない質問してすいませんが、

c言語/winsockでネットワークプログラミングするとして、
送受信の時に
ttp://x68000.q-e-d.net/~68user/net/c-http-1.html
↑に書いてるようにファイル用の関数を使うべきなんですか?

send()やrecv()などの専用の関数がありますが、それは使わなくてもいいんでしょうか?


932 :デフォルトの名無しさん:2006/05/27(土) 20:31:58
http://x68000.q-e-d.net/~68user/net/c-http-2.html

933 :デフォルトの名無しさん:2006/05/27(土) 20:36:43
http://www.linux.or.jp/JM/html/LDP_man-pages/man7/socket.7.html

934 :デフォルトの名無しさん:2006/05/27(土) 20:37:03
>>932
そこに書いてあるような方法が一般的なんですか?

935 :931:2006/05/27(土) 20:45:00
場合によって使い分けるといった感じですかね。ありがとうございました

936 :デフォルトの名無しさん:2006/05/27(土) 20:46:51
どちらでも同じだと思います。
気になるなら send/recv の方を使っておいた方がよいでしょう。



http://www.linux.or.jp/JM/html/LDP_man-pages/man2/send.2.html

send() は、ソケットが 接続された (connected) 状態にある場合にのみ使用できる
(つまり、どの相手に送信するかは既知である)。
send() と write() の違いは、引き数に flags があるかどうかだけである。
引き数 flags が 0 の場合、 send() は write() と等価である。
また、 send(s,buf,len) は sendto(s,buf,len,NULL,0) と等価である。



あなたの見ているサイトのこちらの場所では

http://x68000.q-e-d.net/~68user/net/udp-2.html

UDPがsend/recv
TCPがwrite/read

みたいな書き方されてますね



937 :931:2006/05/27(土) 20:52:49
>>936
よくわかりました!ありがとうございますm(_ _)m



938 :デフォルトの名無しさん:2006/05/27(土) 20:59:59
>>936
winsock らしいけど?

939 :デフォルトの名無しさん:2006/05/27(土) 21:02:36
>>938

なんでこんなとこ見てるんだろう?

ttp://x68000.q-e-d.net/~68user

いや、このサイトが良くないという意味ではなく。

940 :デフォルトの名無しさん:2006/05/27(土) 21:14:50
>>939
え?どういう意味??
MSDN を見ないって意味ならそれも仕方ないんじゃないかと思う。
だって、肝心なところは暗号化されてるし。

>>938 は、winsock では違うって意味で書いたんだけど。

941 :931:2006/05/27(土) 21:29:34
winsockだとsend()とrecv()ですか?

http://www.golgo.jp/winsock.html#l_select
http://www.h5.dion.ne.jp/~sigma/homepage/cyberspace/httpclient.html#c07
http://stylefree.net/main/nprogramming/windows/windows1.shtml

この辺りのサイト見させてもらってるんですが、送受信(具体的に言うとHTTPクライアントのような物を作りたい)のあたりで混乱してしまって・・
どこかwinsockで詳しいサイトありませんかね?(参考書買えって感じですかね?w)

942 :デフォルトの名無しさん:2006/05/27(土) 22:48:32
>>941
良いサイトを探すのは難しいかもしれないです。
自分も同じことを考えたんだけど、最終的には本を買うしかなかった。
http://www.amazon.co.jp/exec/obidos/ASIN/4797330449/503-2450924-1963916
これがいいです。
っていうより、これしか選択肢が無い。

HTTP クライアントなら、WinInet とか使ったらどうですか?

自分の少ない経験から思っただけですけど、
クライアントに BSD 由来の API を使うのはやめたほうが
いいような気がします。

解説って需要あるんですかね?
ちょっと書いてみたいような気もする。

943 :デフォルトの名無しさん:2006/05/27(土) 22:59:21
>>1
Winsock Programmer's FAQ (日本語訳)
http://www.kt.rim.or.jp/~ksk/wskfaq-ja/
で十分じゃないのか?

944 :デフォルトの名無しさん:2006/05/27(土) 23:04:53
>>943
充分じゃないと思う。

945 :931:2006/05/27(土) 23:28:26
>>942
WinInet・・今ちょっと調べてみたんですけど、winsockよりだいぶ入り易そうですね。
今まで存在そのものを知りませんでしたwd。

>>943
初級者なんで、一から順を追ってといった感じの解説サイト(本)じゃないと厳しいですね。。


946 :デフォルトの名無しさん:2006/05/28(日) 01:49:42
その様子だとエコーサーバを作成したこともなさそうだが
TCPのコネクション確立の仕方も知らずにネットワークプログラミングをするのはどうかと
#WindowsでHTTP/FTPだけならWinInetがあるから、知らなくても多少は大丈夫だろうけど

猫でもわかる〜でも読んでおけよ
しょぼいけど抑えるところは抑えてあるぞ

947 :デフォルトの名無しさん:2006/05/28(日) 11:55:09
本一冊でも買ったほうがいいと思うなあ。
インターネットで情報入手できる時代では有るけど、歴史が違うから、書籍のほうが詳細でよく吟味されてまとめてあって読みやすいよ。


この先、氏ぬまでwindowsしか弄らないと言い切れるなら、bsd系のapiも無視してもいいかも知れないけど、
unix系にしろ、歴史的経緯で基本はbsd系のapiに行き着くので、後で応用が利かずに苦労するよ。
たとえばTCPのソケットって面倒だなあってのは、UNIXの設計思想として何でもファイルの様に扱いたいって言うのが有って、ネットワークもファイルの様にソケットに読み書きすれば通信できるって風にしたいからとか基本が理解できてないと理解できないことも多い。
あとはネットワークに限らず、全てのソフトに言えるけど、長く使われてるものほど、バグが潰されてて枯れてて不具合に巻き込まれにくい。
IPスタックの歴史で長いのはbsd由来の実装だし、windows系はまだまだ歴史が浅いよ。

まあそろそろスーパーハカーがbsd由来のIPスタックに置き換わるような革新的なIPスタックを出してくれてもいいと思うけどな。
ディスクレスクライアントとか現実的に使われてる今時、ファイルシステムに依存するIPスタックもどうかと思うし。

948 :デフォルトの名無しさん:2006/05/28(日) 12:37:04
>945
>一から順を追って
つ[RFC]
もし、プロトコルを理解する以前の問題なら
つ[>>4]

949 :デフォルトの名無しさん:2006/05/28(日) 12:50:24
>>942
Winsockは、その本が一番いいと思うけど、
カマー本のWinsockという手もある。
あっちはプロトコルの話が少し多い。

950 :デフォルトの名無しさん:2006/05/28(日) 12:51:16
>>947
ディスクレス・クライントはファイルを使わないのですか? (そうではないでしょう)

951 :デフォルトの名無しさん:2006/05/28(日) 13:04:23
>ファイルシステムに依存するIPスタックもどうかと思うし。
ソケットがwriteでかけて,readで読めるだけでしょ?

952 :デフォルトの名無しさん:2006/05/28(日) 13:07:41
ディスクリプタを扱えるだけだな
個人的には専用インタフェースが欲しいが

953 :デフォルトの名無しさん:2006/05/28(日) 13:08:23
ライブラリがいくらでもあるでしょ。
ほとんどのプログラマはわざわざソケットをじかに叩く意味もないし。

954 :942:2006/05/28(日) 18:12:32
みなさんありがとうございました。
今は本格的にネットワークプログラミングを勉強しようと思ったわけではなくて、部分的に少し必要になっただけなので、winInetにお世話になろうと思います。
(時間があればみっちり勉強したいんですが・・)

955 :945:2006/05/28(日) 18:14:00
>>954はレス番ミスです。すいません。945でした;

956 :デフォルトの名無しさん:2006/05/28(日) 19:33:53
この手の話って必ず RFC を必死で薦める人が出てくるんだよね。
初学者だって書いてあるじゃない。
なんで RFC 薦めるの?
読んだことないけどなんかいい物だって聞いてるから?

957 :デフォルトの名無しさん:2006/05/28(日) 19:35:46
×初学者
○めんどくさがり

958 :デフォルトの名無しさん:2006/05/28(日) 19:38:02
>>957
あのねぇ。
ここまでの書き込み見てわかるでしょ。
ネットワークどころか、プログラミングの初学者なの。
そういう人になんでわかりにくいもの薦めるかなぁ。
混乱させて楽しむってやつですか?

959 :デフォルトの名無しさん:2006/05/28(日) 19:38:30
プロトコルの仕様に関しては RFC で必要十分だから。
噛み砕いて欲しいならせめて 「○○ってどういう意味ですか?」 くらいまで落として欲しいもんだね。

960 :デフォルトの名無しさん:2006/05/28(日) 19:39:32
教えてクンは神様です。
偉いんだぞ!
おまいら頭が高い!


961 :デフォルトの名無しさん:2006/05/28(日) 19:41:12
>>959
この人は、そんな質問してないでしょ?
質問の答え書けばいいと思います。

Linux 系の人がうそ教えて喜んでたけどさぁ。
あれほんと悪質だよ。

ちゃんと答えかいてやればいいじゃない。

962 :デフォルトの名無しさん:2006/05/28(日) 19:42:49
>>961
じゃ、おまいが書いてあげれば良いじゃないか。


963 :デフォルトの名無しさん:2006/05/28(日) 19:43:26
バカが出たぞー

964 :デフォルトの名無しさん:2006/05/28(日) 19:44:29
>>960
なんかわかってしまった。
きっと教えるマニアっていうのがいるんだよね。
で、必死でぐぐりながら答えるの。
で、うまくぐぐれないと怒り出すの。
で、ぐぐってるだけで、きちんと知ってて教えてるわけじゃないから、
うそ教えてるの。
で、何で私が頭に来てるか理解できない。

965 :デフォルトの名無しさん:2006/05/28(日) 19:45:07
>>962
書いてあげたじゃん。
ちゃんとうそ教えてる人にも訂正するチャンス与えた。

966 :デフォルトの名無しさん:2006/05/28(日) 19:45:17
自分何も回答しないくせに、回答した人にケチ付ける人マンセー

967 :デフォルトの名無しさん:2006/05/28(日) 19:46:42
漏れはRFCは全部暗記してる

968 :デフォルトの名無しさん:2006/05/28(日) 19:47:16
>>966
教えた。
過去ログ嫁。
すっごい感謝されてる。
涙流しながらありがとうって言われたよ。

969 :デフォルトの名無しさん:2006/05/28(日) 19:48:44
>>967
嘘つけ。

970 :デフォルトの名無しさん:2006/05/28(日) 19:48:57
>>967
神降臨

971 :デフォルトの名無しさん:2006/05/28(日) 19:51:27
>>968
あなた様のおかげで命を救われ、人生をやり直すことができました。
その節は本当にありがとうございました。


972 :デフォルトの名無しさん:2006/05/28(日) 19:55:22
ぬるぽ

973 :デフォルトの名無しさん:2006/05/28(日) 20:06:13
      , イ)ィ -─ ──- 、ミヽ
      ノ /,.-‐'"´ `ヾj ii /  Λ
    ,イ// ^ヽj(二フ'"´ ̄`ヾ、ノイ{
   ノ/,/ミ三ニヲ´        ゙、ノi!
  {V /ミ三二,イ ,  /,   ,\  Yソ
  レ'/三二彡イ  .:ィこラ   ;:こラ  j{
  V;;;::. ;ヲヾ!V    ー '′ i ー ' ソ
   Vニミ( 入 、      r  j  ,′  <仲良くなってくれ
   ヾミ、`ゝ  ` ー--‐'ゞニ<‐-イ
     ヽ ヽ     -''ニニ‐  /
        |  `、     ⌒  ,/
       |    >┻━┻'r‐'´
      ヽ_         |
         ヽ _ _ 」    

  ググレカス [ Gugurecus ]
  ( 前224 〜 前194 )


974 :デフォルトの名無しさん:2006/05/28(日) 21:59:56
まぁでもこのスレはなぜか答えずに煽る人が多いのも確か

975 :デフォルトの名無しさん:2006/05/28(日) 22:27:26
馬鹿に対話を開始するヤツも馬鹿>>956


976 :デフォルトの名無しさん:2006/05/28(日) 22:28:40
馬鹿に対話を開始するヤツも馬鹿>>975


977 :デフォルトの名無しさん:2006/05/29(月) 02:09:21
>>967
伝書鳩をつかってパケットを送りたいんだけど、助言頼む。

978 :デフォルトの名無しさん:2006/05/29(月) 03:15:12
>>977
悪いことは言わないからやめとけ、パケット消失しまくりだし、
あいつら暴れるから再送とかすげー面倒。

979 :デフォルトの名無しさん:2006/05/29(月) 08:25:47
餌代だけで年間数百万の維持費が居るからね。

初学者だからこそ基本は大事という意味で、RFCとかの仕様を読んだりソケットAPIの使い方を知るのが必要だけどな。
高レベルAPIのほうが簡単でいいけど、うまく逝かない時に何が起きてるのか理解できずに途方に暮れるだけ。
車作ろうと勉強してる香具師が、自動車工学とか勉強せずにエンジンの掛け方と止め方程度の操作だけしか知らずに車作れる訳ないじゃん。

980 :デフォルトの名無しさん:2006/05/29(月) 08:48:11
それはない

981 :デフォルトの名無しさん:2006/05/29(月) 12:13:27
とりあえずRFC1149、RFC2549嫁

982 :デフォルトの名無しさん:2006/05/29(月) 12:33:01
RFC2549より
Encapsulation may be done with saran wrappers. Unintentional
encapsulation in hawks has been known to occur, with decapsulation
being messy and the packets mangled.
カプセル化はサランラップで可能らしい。なんだよこれw

983 :デフォルトの名無しさん:2006/05/29(月) 12:42:55
>>982
捕食されるのもencapsulationか

984 :デフォルトの名無しさん:2006/05/29(月) 12:45:32

 鷹による予期せぬカプセル化が発生することがあります。
 このカプセル化の解除はパケットの汚損を伴います。



985 :デフォルトの名無しさん:2006/05/29(月) 12:50:58
サランラップで包むこともできます。
しかし予期せず鷹によって捕獲されることがあります。
取り戻しても、中身が汚れ、包みは外れているでしょう。

986 :デフォルトの名無しさん:2006/05/29(月) 18:26:42
char *addr =

987 :デフォルトの名無しさん:2006/05/29(月) 18:28:58
う・・なぜか書き込みが途中で切れました・・。

えと、文字列に、IPアドレスの文字列かホスト名が入っているときに、
どちらが入っているかを判断する方法はあるでしょうか?教えてください。

988 :デフォルトの名無しさん:2006/05/29(月) 18:35:51
>>987
最初の文字が数値ならIPアドレスの文字列
それ以外ならホスト名

989 :デフォルトの名無しさん:2006/05/29(月) 18:41:29
ホスト名は最初の文字は数字ではないのですね。
ありがとうございました〜。

990 :デフォルトの名無しさん:2006/05/29(月) 19:00:01
さすが2ちゃんねる
質問に質問で答える香具師しかいない
昔とは随分質が落ちたものだ


991 :デフォルトの名無しさん:2006/05/29(月) 19:28:41
さすが2ちゃんねる
回答と質問を取り違える香具師がいる
昔とは随分質が落ちたものだ

992 :デフォルトの名無しさん:2006/05/29(月) 20:54:37
>>987
んなもんどっちが入っていようが gethostbyname() 使えばいいじゃないか。


993 :デフォルトの名無しさん:2006/05/29(月) 21:00:30
おいおい
普通はまずinet_addrで確認してからだろ。
無駄なトラフィックかけるなよ。

994 :デフォルトの名無しさん:2006/05/29(月) 21:07:16
gethostbynameは引数が
"localhost"かIPアドレス文字列の場合はトラフィック掛からないよ

995 :デフォルトの名無しさん:2006/05/29(月) 21:17:18
>>993
どうせあとでやるなら同じ。
やらないならその通りだが。


996 :デフォルトの名無しさん:2006/05/29(月) 21:21:12
今時はgetaddrifo

997 :デフォルトの名無しさん:2006/05/29(月) 22:05:08
RAWモードでプロセスのパケットをキャプチャし、特定のアドレス・ポートからの
接続をぬっころすことはできますか?

998 :デフォルトの名無しさん:2006/05/30(火) 00:17:06
OK

999 :デフォルトの名無しさん:2006/05/30(火) 00:30:27
1000 ならチンポからパケット飛ばす

1000 :デフォルトの名無しさん:2006/05/30(火) 00:32:00
あれあれあ

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

272 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)