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

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

レス数が1000を超えています。これ以上書き込みはできません。
0001名無しさん@接続しっぱい。NGNG
前スレに引き続き、主にソケットに関しての質疑応答スレです。

過去スレ:
ネットワークプログラミング相談室
http://pc.2ch.net/test/read.cgi/tech/970344582/

ネットワークプログラミング相談室 Port2
http://pc.2ch.net/test/read.cgi/tech/1006258198/
0002デフォルトの名無しさんNGNG
乙!
0003デフォルトの名無しさんNGNG
さっそく質問なのですが、MFCのCSocketをワーカースレッドで使っています。
このCSocketのConnectなどで処理が止まっている(ように見える)とき、
処理を中止させるには普通、どのような方法をとるのでしょうか?
CancelBlockingCallを呼べばよいのかと思うのですが、
メインスレッドからワーカースレッドのCSocketに対してどのように
CancelBlockingCall呼び出せばよいのかがわかりません。
0004デフォルトの名無しさんNGNG
普通にメソッドをcallすればよし。
プロセスが同じだからメモリ空間も共有される
0005デフォルトの名無しさんNGNG
>>4
メインスレッドからCancelBlockingCallを呼ぶという方向性でよかったのですね。
ですがその呼び方がわかりません。
// ワーカースレッド
UINT ThreadFunc(LPVOID pParam)
{
 CSocket socket;
  :
  :
 socket.Connect(strAddress, nPort);
  :
 return 0;
}
のようにやっているのですが、このsocketにはメインスレッドから
どうやってアクセスすればよいのでしょうか。
0006デフォルトの名無しさんNGNG
>>5
一番簡単なのがグローバルにすること。
後は、スレッドのクラス化をして、オブジェクトの参照を返すなりお好きなように。
0007デフォルトの名無しさんNGNG
>>6
あ、なるほど・・・
一所懸命外からアクセスすることを考えてました。
socketの方を外にだしてやればいいんですね。
0008デフォルトの名無しさんNGNG
つーかCSocketは糞だから使うなと前スレに
0009デフォルトの名無しさんNGNG
用途によるんじゃないの
0010デフォルトの名無しさんNGNG
前スレからの続き。
http://pc.2ch.net/test/read.cgi/tech/1006258198/932-

Telnet つかってみましたが、不便なので嫌です。
Perlは嫌いです。
25ポートを使ってメールの送信は出来ました。

APOP認証は110ポートにつなげてやっています。
ポートを開いた後、AUTH をすると下記のようになりました。
これは APOP に対応しているのでしょうか?

+OK Qpopper (version 4.0.3) at hogehoge.ne.jp starting. <[email protected]>

+OK Supported SASL mechanisms:

X-NONE-SO-USE-APOP-OR-STLS
.
0011デフォルトの名無しさんNGNG
>>10
お前が嫌いだから答えない
0012前スレ977NGNG
>>前スレ984
受信したデータを調べてみたら、今までどっかに消えてた部分が見つかりました。
というのも、受信したデータのなかにおそらく'\0'のような文字があり、
データ確認のためにメッセージボックスを使ったりサイズ取得にstrlen()を使っていたため、
保存するサイズ等の計算をミスしていたものと思われます。
ルーチンを組みなおしてやってみたら成功しました。
本当にありがとうございました。
0013デフォルトの名無しさんNGNG
バイナリデータにstrlen()かよ!!
0014デフォルトの名無しさんNGNG
センス無いな・・・<バイナリデータにstrlen()
0015デフォルトの名無しさんNGNG
文字列をつかったインターフェースはunix文化からの伝統ですが何か?
0016デフォルトの名無しさんNGNG
自分が扱っているデータの種類(バイナリ)や関数の機能(strlen)も理解せずに
プログラミングすのもunix文化からの伝統ですか?
0017デフォルトの名無しさんNGNG
ネットワークプロトコルに不定長文字列をふんだんに盛り込むとunix的。
buffer overflowはunix文化の象徴と言えましょう。

プログラムの設定ファイルを空白、改行区切りの生テキストにするとunix的。
buf(以下略)

インターネットの発達はunixによって支えられてきました。
全てのレイヤ5以上のプロトコルは文字列志向に置き換えるべき。
0018デフォルトの名無しさんNGNG
ネトゲのプロトコルが文字列だったらゲームに並んだろうな
0019デフォルトの名無しさんNGNG
もしかして、 char型の配列の事を全て「文字列」って呼んじゃう人ですか?
0020デフォルトの名無しさんNGNG
DNSもPOP3もSMTPもHTTPもFTPも文字列志向だな
0021デフォルトの名無しさんNGNG
バイナリデータの受信に関する部分を、
プロトコルとして議論しているのは何故ですか?

FTPで、
ftp> binary
200 Type set to I.
ftp> get hoge.tar.gz
したあとも文字列志向ですか?
002210NGNG
どうして嫌われたのでしょうか?
0023デフォルトの名無しさんNGNG
  ∧ ∧     ┌─────────
  ( ´ー`)   < シラネーヨ
   \ <     └───/|────
    \.\______//
      \       /
       ∪∪ ̄∪∪
0024デフォルトの名無しさんNGNG
もうテメーらの質問には答えないから覚えておけよ!
0025デフォルトの名無しさんNGNG
不定長文字列と固定長バイナリが混ざってるプロトコルなんてサイアク
0026デフォルトの名無しさんNGNG
>>21
おまえはftpを勉強なおしたほうがよいと思われ。
0027デフォルトの名無しさんNGNG
Windowsで現在の接続のTCP/IP設定から
DNSの設定の情報を取得する方法はありませんか?
0028デフォルトの名無しさんNGNG
(゚д゚)ポカーン
0029疑問太郎NGNG
プロトコル開発でモデルになるシステムはなに?
0030デフォルトの名無しさんNGNG
過去スレ読むと
トーシローの輩が回答してるね
クサレプログラマの憩いの場か(藁
0031デフォルトの名無しさんNGNG
>>30
間違った回答があるってこと?
たとえばどれ?
0032デフォルトの名無しさんNGNG
unix文化を軽視する奴は許さん。
蛇足かもしれないがTCP/IPのsocket APIはBSD文化と言っていい。
だからお前等はBSDを勉強すべきであってwindowsやlinuxなどという
劣化コピー品を参考にすべきではない。
0033デフォルトの名無しさんNGNG
バクとウィはおんなし奴が作ったんだから中身はおなしやで

リヌはハナデカがつくたけどさ
0034デフォルトの名無しさんNGNG
winsock2はそうでもないような・・・
linuxの微妙な違いはイライラする
0035デフォルトの名無しさんNGNG
uni文化はもう止まっとる(藁

リヌは、、、、(ププ

ウィはブッチギリでしょう
0036デフォルトの名無しさんNGNG
たしかにバカがいるな
0037デフォルトの名無しさんNGNG
ソケット通信で構造体のデータを丸々投げたり受け取ったりって
出来ないんですか?今はデータを文字列として送受信してます。
0038デフォルトの名無しさんNGNG
>>37
できるけど、やるとトラブルの種。
0039デフォルトの名無しさんNGNG
>>38
そうなんですか、結構データの量が多くて文字列に直して送受信するのが面倒で。
データを工夫して量を減らさないとだめかなぁ・・・。
0040デフォルトの名無しさんNGNG
構造体だとメモリ上の隙間ができたりするしねー
後、バイトオーダも気をつけないといかんしねー
0041デフォルトの名無しさんNGNG
>>39
文字列にしなくても、バイトオーダーを決めて(ビッグエンディアンが「ネットワークバイトオーダー」)、
バイナリで送ってもいいっしょ。

構造体そのままだとバイトオーダーの他にアラインや型のサイズの不一致もある。
将来の拡張にも弱い。

そのあたりを意識してればいいんでは。
0042デフォルトの名無しさんNGNG
>>41
難しそうですね^^;。もうちょっと勉強してきます〜。
0043デフォルトの名無しさんNGNG
バイトオーダーってなんですか?
0044デフォルトの名無しさんNGNG
エンディアンとも言う
0045デフォルトの名無しさんNGNG
ぐぐれ。
http://www.google.com/search?num=50&hl=ja&q=%83o%83C%83g%83I%81%5B%83_%81%5B&lr=lang_en%7Clang_ja
0046デフォルトの名無しさんNGNG
winsockでサーバー、クライアントのプログラムを作っています。
プロトコルはUDPで同期通信方式とマルチスレッドを使っています。
クライアントからサーバにデータを送信した後にサーバーから
データを送信しているのですが、頻繁にsendtoでエラーが起こります。
WSAGetLastError()でエラーを調べてみると「10047 WSAEAFNOSUPPORT」らしいのですが、
ずっとlocalhostで通信を行っているので途中で変ったりしないはずなんですが。
エラーも最初の送受信で発生したり、数回送受信をした後に発生したりとランダムに起こります。
クライアントからサーバへのデータは届いていることは確認できます。
考えられる原因があれば教えていただきたいです。
0047デフォルトの名無しさんNGNG
buffer overrunでいろいろ変な風にかきかわってるとか。
0048ななしNGNG
struct sockaddr書き潰してるんでしょうな。
0049試行錯誤中 ◆.t4dJfuU NGNG
スレ違いでしたらすいません&最適なスレをお教えください。

現在、wininetを用いてCGIに引数を渡すプログラムを作ってます。
言語はVC++です。
一応、CGI側では渡した引数を受け取ってはくれてるのですが何故か、
最後の引数の後ろに/を勝手に補完してくれます。

例
 http://www.hogehoge.com/hoge.cgi?value1=123&value2=456

上記例の結果(環境変数)
 QUERY_STRING = [ value1=123&value2=456/ ]

# 456の後ろの/が余計


 これは何故でしょうか?
 どうしても原因が分からず悩んでいます。
 どなたかお分かりになる方がいらっしゃいましたらお教えください。
 お願いします。
0050試行錯誤中 ◆.t4dJfuU NGNG
因みにHttpOpenRequestでGETしております。

HINTERNET hConnect = InternetConnect(
 hSession,
 url,    // www.hogehoge.com/hoge.cgi?value1=123&value2=456
 INTERNET_DEFAULT_HTTP_PORT
 NULL,
 NULL,
 INTERNET_SERVICE_HTTP,
 NULL,
 NULL);

HINTERNET hRequest = HttpOpenRequest(
 hConnect,
 "GET",
 NULL,
 NULL,
 NULL,
 NULL,
 INTERNET_FLAG_RELOAD
 0);
0051デフォルトの名無しさんNGNG
>>49
セッション張るのはwww.hogehoge.comに対してで、CGIやパラメータは
HttpOpenRequestの方で指定するとかかも
0052試行錯誤中 ◆.t4dJfuU NGNG
>>51
レスありがとうございます。
当方、よく分からずにネット上で色々と検索しながら組んでいる最中です。

HttpOpenRequestですが、CGIに渡すパラメータを設定する部分が無いように思えますが、
どうでしょうか?
また、関係ないかもしれないですが試しにHttpSendRequestのOptionalにパラメータを設定してみましたが、
それだと、そもそも引数を渡せませんでした。

# まぁ、POSTやPUTで使用するパラメータみたいですし>HttpSendRequestのOptional

何分、よく分かってないのでマヌケなことを聞いてるかも知れませんが、ご教授お願いします。
0053試行錯誤中 ◆.t4dJfuU NGNG
>>51
すいません。
HttpOpenRequestのObjectNameパラメータで指定すればいけるようです。
ありがとうございました。
0054デフォルトの名無しさんNGNG
同期socketで質問です。
任意のタイミングで、データを受信せずにコネクションが
切断されたことを検出する方法はありませんか?
0055デフォルトの名無しさんNGNG
任意のタイミングでと書いたのは、
シグナルやメッセージではなく、自分から関数を呼び出して取得したいと言うことです。
0056デフォルトの名無しさんNGNG
recvのMSG_PEEKフラグを利用しろ。
0057デフォルトの名無しさんNGNG
>>56
ありがとうございました、すっかり忘れてました。
0058デフォルトの名無しさんNGNG
>>56
それは何ですか?
0059デフォルトの名無しさんNGNG
windowsでチャットプログラムを作っています
telnetでテストをしたいのですが、win版telnetには「一行を送る」という方法はないのでしょうか?
オプションを見た限り見当たらないのですが・・・
TELNETver1.0です
もしできないのなら、何かフリーのtelnet接続ができるスタンダードツールを教えていただければ幸いです
(検索したけどWindowsCE用テ…)
0060デフォルトの名無しさんNGNG
>>59
teraterm pro
0061デフォルトの名無しさんNGNG
teratermに1行送るってあったか?
久々に起動してみたがみあたらん・・・
0062デフォルトの名無しさんNGNG
Winsock1.1の制限について解説しているサイトありませんか?
Winsock2.0ばかり使用していて、1.1について覚えてないので、
互換性の問題が出てる可能性があるので、調べたいんです。

win95上でテストすると言う方法も勿論あるのですが、
違いの概要程度は把握していたいので。
0063デフォルトの名無しさんNGNG
IPメッセンジャーって、LAN内で立ち上げると自動でユーザーリストが追加されていくけど、どうやって実現してるの?
TCPやUDPだけじゃ出来ないよね?
0064デフォルトの名無しさんNGNG
>>63
UDPでブロードキャスト送信だよ
0065デフォルトの名無しさんNGNG
>>63
UDPにはブロードキャストという機能がある
LAN内の全てのアドレスが対象になるアドレス
255.255.255.255にsendtoする
0066デフォルトの名無しさんNGNG
LunixとWindowsで使えるC++用のクラスライブラリってありますか?
0067デフォルトの名無しさんNGNG
http://sourceforge.net/projects/iplib/
トカ?
0068デフォルトの名無しさんNGNG
>>65
255.255.255.255とはかぎらんのでは?
0069デフォルトの名無しさんNGNG
IPADDR | ~NETMASK ダロ
0070デフォルトの名無しさんNGNG
>>68
自分の居るLANのブロードキャストアドレスは、
INADDR_BROADCAST=255.255.255.255から取得するんじゃないの?
localhostを取得するのに127.0.0.1を使うようなもんで。
007166NGNG
>>67
サンクス。 使ってみます。
0072デフォルトの名無しさんNGNG
>>70
255.255.255.255は全アドレスに対するブロードキャストだよね。WANも含む。
実際にはルータが止めるだろうけど、
複数のネットワークインターフェイスがある場合、そのすべてが対象になってしまうよね。

基本的には目的のネットワークインターフェイスの情報からbroadcast addressを得て
そこ宛に送信するのが行儀がいい方法。
0073デフォルトの名無しさんNGNG
TCPでのサーバ、クライアント作ってますが
クライアントがサーバへconnect処理を行うときに
サーバがまだ起動していないときにconnectを行っても
エラーが出ません。普通ですか?
0074デフォルトの名無しさんNGNG
>>72
知らなかった・・・
ブロードキャストフラグ立ててINADDR_BROADCASTにsendtoしてたよ・・・
IPメッセンジャクローンのどれかを参考にしたから、
その参考にしたやつもそうなってた。あんまりお行儀よくなかったのね(´・ω・`)

>目的のネットワークインターフェイスの情報からbroadcast addressを得て
これどうやるの?gccでのやりかた教えてください
0075ななーしさん@接続しっぱなしNGNG
>>62
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winsock/ovrvw1_2xv6.asp

読みやがれ! このWinsock2野郎めが!
0076デフォルトの名無しさんNGNG
>>74
IPアドレスとサブネットマスクから計算できるんでないの?
0077デフォルトの名無しさんNGNG
こにちわー
ひとつ教えてください。
WINDOWSでsetsockopt関数の第3引数に2をセットしているのですが
エラーが帰ってきてしまいます。
OSの仕様でしょうか?
0078デフォルトの名無しさんNGNG
過去ログ見たんですが
・非同期ソケット
・非ブロックソケット
って別物ですよね?
0079デフォルトの名無しさんNGNG
MSDNミロ。

>BSD options not supported for setsockopt are shown in the following table.
>SO_ACCEPTCONN, BOOL, Socket is listening
0080デフォルトの名無しさんNGNG
>79
ありがとー、2日間の悩み解決です。
これで、心置きなく次の課題に移れます。
0081デフォルトの名無しさんNGNG
>>74

Programming UNIX Sockets in C からの引用。
>SIOCGIFCONF を使ってアクティブなネットワークインターフェースの
>リストを取得し、SIOCGIFFLAGS と SIOCGIFBRDADDR を使って
>ブロードキャスト可能なインタフェースを特定し、
>ブロードキャストアドレスを得る

インターネット 256 倍 Vol.2 にものってる。
でも面倒くさい…。
0082デフォルトの名無しさんNGNG
http通してgoogleのhtmlファイルを取得しようとしたら、

<HTML><HEAD><TITLE>302 Moved</TITLE></HEAD><
<H1>302 Moved</H1>
The document has moved
<A HREF="http://www.google.co.jp/">here</A>.
</BODY></HTML>

って感じのreturnが帰ってきました。正常にhtmlファイルを取得するには
どうすればよいのでしょう?

送ったヘッダは send(theSocket, "GET /\n", 256, 0);だけです。
同じコードを使ったらyahooとvectorは取得できました。
0083デフォルトの名無しさんNGNG
それはhttpを通したとは言わないな
ヘッダの作り方なんてここの過去スレでも何度も出てるし
それからsendの第三引数もアレだ
0084デフォルトの名無しさんNGNG
高速DLのftpソフトを作りたい質問です

100倍速ぐらいのをつくりたいんですけど
VCのサンプルおちてないですか?
0085デフォルトの名無しさんNGNG
>>83
適当にやってたらあかんのですね。
ヘッダと第3引数しっかり設定したら上手くいきました。感謝。
0086デフォルトの名無しさんNGNG
82って場合によってはAccessViolationじゃないの?
0087デフォルトの名無しさんNGNG
>>84
適当なソースからコピペするんじゃなくて、仕様書や規格書を頭の中にたたき込んでからにしろ。
何でRFC読まないでインターネット関連のプログラムを作ろうとする人間がいるのか和下欄。
0088デフォルトの名無しさんNGNG
RFC読んでも意味わかんないYO!
0089デフォルトの名無しさんNGNG
そういう奴は中学生からやり直すか、
作るのをあきらめてください。
0090デフォルトの名無しさんNGNG
HTTP1.1のRFCでかすぎ
0091デフォルトの名無しさんNGNG
HTTP/1.1のRFCはでかいけどよくまとまってるから良い。
たとえばメール関連のRFCは、ここのテキストは小さいが
記述が分散していてあちこち読まにゃならん。
0092デフォルトの名無しさんNGNG
通信は相手あってのものだし、"交通ルール"(RFC)の無知は罪。
0093デフォルトの名無しさんNGNG
RFC信者ハケーン
RFCがルールだなんて誰が言ったのかしら、ねえ?
0094デフォルトの名無しさんNGNG
>>93
IETFが・・・
0095デフォルトの名無しさんNGNG
RFCはルールですが、何か?
0096デフォルトの名無しさんNGNG
ルールだったら「RFC」という名前じゃないでしょ。
0097デフォルトの名無しさんNGNG
デファクトスタンダードってやつだ
009885NGNG
……と思ったら、一部のサーバ相手に上手くいかないみたいです。
http://supporter.s1.xrea.com/ に対して、プログラムを動かしたところ、

HTTP/1.1 302 Found
Date: Sun, 16 Jun 2002 23:20:53 GMT
Server: Apache/1.3.24 (Unix) mod_layout/3.0.3 mod_gzip/1.3.19.1a
Location: http://www.xrea.com/err403.htm
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html; charset=iso-8859-1
X-Pad: avoid browser bug

と言われました。ブラウザから見たところ、ファイルは存在していました。

std::string request =
    "GET / HTTP/1.1\r\n"
    "Accept: */*\r\n"
    "User-Agent: Hoge\r\n"
    "Host: www.xrea.com\r\n"
    "Connection: close\r\n"
    "\r\n";
send(sock, request.c_str(), request.length(), 0);
0099ななーしさん@接続しっぱなしNGNG
RFC全てが必ず守らなければならないルール(Internet Standard)なのではありません。
# 他にはExperimental, Informational, Historic, Best Current Practiceなど。

RFC2616, HTTP/1.1はstandardですから守りましょう。
詳しくは、RFC2026, The Internet Standards Process -- Revision 3や
http://rfc-jp.nic.ad.jp/introduction/を。
各RFCのstatusはrfc-index.txtで一覧できます。

>>96
氏ねや
>>97
違う。公式のルール。
0100デフォルトの名無しさんNGNG
>>98
Host: supporter.s1.xrea.com
0101デフォルトの名無しさんNGNG
85は次に、Chunked-encodeされたbodyについて
「変な文字が混入して困っています」と言うぅっッッ!
0102デフォルトの名無しさんNGNG
>>101
ここは85にゼロからhttpプロトコルを教えるスレになったと言うことでファイナルアンサー?
0103デフォルトの名無しさんNGNG
.
0104デフォルトの名無しさんNGNG
>>102
ftpプロトコルかもしれないし、scsiインタフェースかもしれないし、usbバスかもしれない。
しかし、telnetプロトコルじゃなければ、IEEE1394インターフェースでもないし、pciバスでもないだろうね。
0105デフォルトの名無しさんNGNG
>>104
デムパ?
0106デフォルトの名無しさんNGNG
プログラムでフレームを立てて、そのフレームで書いた文を
このスレに書き込めるようなプログラムはどのように書けばいいのでしょうか?
0107デフォルトの名無しさんNGNG
は?
0108デフォルトの名無しさんNGNG
>106
最初の「プログラムで」は余計でした。
0109デフォルトの名無しさんNGNG
フレームって何だよ
0110デフォルトの名無しさんNGNG
<FRAME> - <FRAMESET> - </FRAME>
を自動生成したいのだと思われ
0111デフォルトの名無しさんNGNG
webprog板だろ
0112デフォルトの名無しさんNGNG
>>104
ワラタ
0113ななーしさん@接続しっぱなしNGNG
>>104
> telnetプロトコルじゃなければ、

じゃなければ、て(w
0114デフォルトの名無しさんNGNG
パケットからパケットの到着時刻を知るには、どうしたら
いいでしょうか?
0115デフォルトの名無しさんNGNG
udp/ipなら、recvしたとき、time()でも、gettimeofday()でも
好きなのを発行すればいいとおもう。
0116デフォルトの名無しさんNGNG
今ごろ104の言いたいことが分ったよ!
カフェオレ牛乳でも飲むよ!
0117デフォルトの名無しさんNGNG
>>116
おれ、102だけどサッパリわからんぞ、教えてくれ
0118デフォルトの名無しさんNGNG
116じゃねーけど。
HTTPのPはProtocolのPだってことでしょ。
Ftpのp、SCSIのI、usbのb。
0119デフォルトの名無しさんNGNG
あー、そういうことかなるほど。
NTテクノロジね
0120デフォルトの名無しさんNGNG
Linux&Cでサーバプログラムを作っているのですが、
バッファオーバーランなどのセキュリティーホールをふさぐ為の
設計・コーディングについて解説してある本はありませんか?
0121デフォルトの名無しさんNGNG
>>120
いや、単にバッファを可変長にするかアフォみたいに大きくするかデータ読み出しの時点であるサイズ以上は素来診具する。
0122 ◆.t4dJfuU NGNG
お世話になります。

VC++でWinInetを使ってWEBサーバにアクセスするPGを作ってます。
プロトコルはhttpです。

存在しないサーバに対してHttpSendRequestを行うとエラーになるので、
逆に、ここでエラーになった場合はサーバが見つからなかった、ということで
逃げようとしてます。
問題は、サーバは存在しているがページが見つからなかった(若しくはアクセス不可)
場合です。
InternetReadFileで読もうとしてますが、404とかのエラーコードを認識するには
どうしたらいいのでしょうか?

どなたか教えて下さい。お願いします。
0123 ◆.t4dJfuU NGNG
HttpQueryInfoで調べられますでしょうか…?

# これからテストしてみます。
0124デフォルトの名無しさんNGNG
>120
djbのトコトカ http://cr.yp.to
esehttpdにもそんな謳い文句があったなぁ……
0125120NGNG
>124
読んでみます。ありがとうございました。

あとこんなのを見つけたのでとりあえず買ってみます。
Windows/.NET向けの書籍のようですが。

プログラマのためのセキュリティ対策テクニック
http://www.microsoft.com/japan/info/press/JPN_ViewMsPress.asp?Book_id=822&list_id=1

バッファ オーバーランを解消せよ!
http://www.microsoft.com/japan/msdn/columns/secure/secure05202002.asp
0126123 ◆.t4dJfuU NGNG
うまくいきました。
スレ汚しですいません。
0127名無しさん@MeadowNGNG
>>120
これはわりと良い、と某所で聞いた。
http://www.ipa.go.jp/security/awareness/vendor/programming/index.html
0128デフォルトの名無しさんNGNG
>>115
recvfrom()直後にtime()で得た時刻が正確なパケットの
到着時刻って理解していいんでしょうか?
初心者なものですみません。
0129デフォルトの名無しさんNGNG
>>128
何をもって受信時刻とするかによるが
recvfromで得られたとき、というのが実際妥当なところ。
それ以前の部分は中経路と考え、プログラムに到達したときとなる。
0130デフォルトの名無しさんNGNG
>>129
ありがとうございます。
しかし、ループの中にrecvfrom()があると、パケットは送信側から
どんどんくるのに、recvfrom()で得られた時刻が受信時刻って
あんまりしっくりこないなぁと思いました。
0131デフォルトの名無しさんNGNG
Linuxでサーバー、widowsでクライアントという
形を取るときに送受信で気を付けることあります?
0132デフォルトの名無しさんNGNG
>>131
改行コードと漢字コードくらい。

後は何も気にしなくて良いところがプロトコル。
0133131NGNG
>>132
なるほど、ソケット通信様々ってところでしょうか。
0134ななーしさん@接続しっぱなしNGNG
>>120
StackGuard を使う。
http://www.immunix.org/stackguard.html

んじゃ。
0135デフォルトの名無しさんNGNG
一応、エンディアンも追加しておく。
0136デフォルトの名無しさんNGNG
Winsockでrecv関数にタイムアウトを設定したいのですが
できますでしょうか?
もし、やりかたがあったら教えていただきたいのですが。
0137136NGNG
これでよいでしょうか?

struct timeval timeout;

timeout.tv_sec = 60;
timeout.tv_usec = 0;
ret = select(0,NULL,NULL,NULL,&timeout);
if (ret == 0){
printf("タイムアウト!\n";
return;
}
ret = recv(s, buff, sizeof(buff), 0);
0138デフォルトの名無しさんNGNG
>>137
selectの第二引数を調べてくれ
0139名無しさんNGNG
ソケットプログラムの勉強をしていますが、以下の処理について
何か良い方法があれば教えていただけるとありがたいです。
で、その処理ですが、ひたすらwrite()でデータを送る。
ただし、相手がビジーになったときに、その理由(バッファフルなど)を
送ってくるので,そのような時はread()で読みたい。
というものです。
このような時は、write()でブロックされてしまわないように
fcntl()を使って、NONBLOCKINGモードにしておいて、
write()とread()をループさせようと思いますが
どうでしょうか。
あと、NONBLOCKINGモードの設定とかで注意点とかあればお願いいたします。
0140デフォルトの名無しさんNGNG
>>139
私だったらスレッドで分けちゃいます
0141デフォルトの名無しさんNGNG
selectでタイムアウトを0にしてループ回せば?
0142デフォルトの名無しさんNGNG
>>139
selectは読み込み、書き込みの両方を同時に待機できるよ。
readfdsとwritefdsの両方にfd_setを指定すれば、
読み込み可能になるか、書き込み可能になったら復帰する。

int status;
do {
 fd_set rdfds;
 fd_set wrfds;
 FD_ZERO(&rdfds);
 FD_ZERO(&wrfds);
 FD_SET(fd, &rdfds);
 FD_SET(fd, &wrfds);
 status = select(fd + 1, &rdfds, &wrfds, null, null);
} while (status < 0 && errno == EINTR);

if (FD_ISSET(fd, &rdfds)) {
 /* 読み込み可能 */
}

if (FD_ISSET(fd, &wrfds)) {
 /* 書き込み可能 */
}

>>141の方法だとCPUに負荷がかかるからやめた方がいい。
0143名無しさんNGNG
ありがとうございます。勉強になります。
>>142
データを送信し終えるまで、このプログラムをループさせれば
良いということですね。
ん?そうすると、141さんのタイムアウト0でループさせるのと
一緒に思えますが、何か思い違いでしょうか。
0144デフォルトの名無しさんNGNG
fd + 1って1じゃないの?
0145デフォルトの名無しさんNGNG
>>143
読み込み、書き込みどちらかが可能になるか、エラーが返るまでブロックする
0146名無しNGNG
>>140
スレッドでわけても、writeでブロックされている時は、
別のスレッドでもreadできないのでは?
0147デフォルトの名無しさんNGNG
>>143
>ん?そうすると、141さんのタイムアウト0でループさせるのと

それはいわゆる busy loop というやつで、全速力で回るとCPU時間を
100%消費することになる。マルチタスクなOSでは好ましいスタイルとは言えない。

>>144
伝統的なbsd socketにおけるselectの第一引数には、
fdsetにセットしたfd(を整数値とみなしたときの)の最大値+1を入れる。
ちなみにwinsockでは無視されるから注意しよう。
0148デフォルトの名無しさんNGNG
>スレッドでわけても、writeでブロックされている時は、
>別のスレッドでもreadできないのでは?

ふつうのsocketの実装なら、writeとreadは並行して行えるはず。
「ふつう」がどこまで通用するかは微妙 ;-)
Solaris2.5なんかはバグってたらしい。
0149デフォルトの名無しさんNGNG
winsockでTCP非同期通信やってますが
データを送信するときはsendを使ってますが
FD_WRITEの使い方がよく分からないです。
データを送信するときはFD_WRITEを待たなければいけないんですか?
FD_WRITEは送信バッファに空きがあることを示すイベントと書いてありました。
0150デフォルトの名無しさんNGNG
>>149
MFCでクラスがあるくらいだから出来るんじゃない?
多分イベントオブジェクトを受け取ってwaitforsingleobjectかと。
0151デフォルトの名無しさんNGNG
>>149
待たなくても構わないが、ブロックするかエラーになる
0152デフォルトの名無しさんNGNG
非同期とノンブロックを区別してほすい
0153初心者NGNG
やっとselectの意味がわかったよ
0154デフォルトの名無しさんNGNG
名前が変なんだよな。WaitFor〜だとかpollだとかのほうがまだマシ
0155デフォルトの名無しさんNGNG
recvfrom()しながら、sendto()するにはどうしたら
いいでしょうか?
非同期にしたらいいんでしょうか?
0156149NGNG
>>151
じゃあFD_WRITEが発生するまで待ってからsendする方向だと、
一度sendするたびにFD_WRITEが発生したかどうかのフラグみたいなものを
用意しなくちゃいけないんですかね?
0157デフォルトの名無しさんNGNG
>154
もともとUnixのものだからね。UnixだとSocketに限らずすべての入出力は
ファイルと同じように扱える。つまりselectにSocket以外のファイルディスクリプタ
もセットしてデータの到着や書きこみ可能なタイミングを監視できるわけだ。
「どっから読んだり書いたりしようかな〜」と選択するってことでselectって
名前になっているのだと思う。
0158デフォルトの名無しさんNGNG
>>157
複数のファイル記述子からシグナル状態になった物を選択して返すからselectじゃないの?
0159デフォルトの名無しさんNGNG
なぜWinsockのselect()の第一引数は無視されるのでしょう?
というか、なぜ無視できるのでしょう?
0160デフォルトの名無しさんNGNG
>>159
fd_setの実装が、まるで違うから。マクロとかも覗いてみ。
0161デフォルトの名無しさんNGNG
Winsockの非同期TCPプログラムの参考になるHP教えてほしい。
0162デフォルトの名無しさんNGNG
>>161
www.nakka.comとか
0163161NGNG
>>162
どうも〜、って思ったらすでに見てました^^;
ココ参考にTCPクライアント(非同期型)作ってるんですけど、
データ送信するときsend使ってるけどココのサンプルはFD_WRITEの中で呼んでますよね。
FD_WRITEってイベントだから任意のタイミングではsendは使えないんですか?
0164デフォルトの名無しさんNGNG
>161
WinSock FAQもおすすめ。
http://tangentsoft.net/wskfaq/

>FD_WRITEってイベントだから任意のタイミングではsendは使えないんですか?
FD_WRITEを待たないとTCPスタック内の送信バッファの状態によっては
WOULDBOCKエラーになるかもしれない。たとえば受信側の処理がすごく低速な場合とか。
まあ普通だいじょうぶだろうけど。
0165ななーしさん@接続しっぱなしNGNG
>>164
シリアスなmulti-threadedなアプリでは、
逆のsendしてブロックされる場合もイヤだよね。
// ちなみにWOULDBOCK → WOULDBLOCK

>>161
任意のタイミングで要求出して、後はシステムにそこはかとなくやって欲しければ、
同期でprogrammingすればいいじゃない…
0166デフォルトの名無しさんNGNG
以下のHTML(一部)のPOSTをJAVAのURLconnectionクラスと
writeを使って実現可能でしょうか?

<FORM METHOD="post" ACTION="../cgi-bin/test1.cgi">


0167デフォルトの名無しさんNGNG
>>166
可能!
0168デフォルトの名無しさんNGNG
>>167
でも試したのでですが、どうもwriteで送った値が送られていないようなのですが
何か考えられる原因はありますか?
0169デフォルトの名無しさんNGNG
>>168
どうしろと・・・。
0170デフォルトの名無しさんNGNG
>168
とりあえずな、自分の送ったデータと、それへのレスポンス
でも示して貰うか、ソースを晒してもらわないことには、
何も言えない。(というより、該当することが多すぎて列挙しきれない)
0171デフォルトの名無しさんNGNG
>>166
URLconnection::setDoInput(true)って
やってみましたか?
::setDoOutput(true)だったかもしれない

これで、私はPostできましたよ
0172デフォルトの名無しさんNGNG
winsockでスレッド使った同期式TCPなんだけど毎回recvするとバッファの最大値まで
データ蓄えてから受け取ってるんだけど。データがまとめられたり分割されるのは
わかるけど、毎回まとめられてるとなんか変な感じ。クライアントでsendを何回も
連続して発行してるけどそれってマズイのかな?
0173デフォルトの名無しさんNGNG
日本語が変だな。センター国語何点だった?
0174デフォルトの名無しさんNGNG
>>156
send〜がWSA_EWOULDBLOCKで失敗した時だけFD_WRITEを待てばいいはず。

自動リセットイベントで待機する場合は、WSA_EWOULDBLOCKからWaitFor〜を
呼ぶ間にイベントがシグナル状態になるとデッドロックする可能性があるかも?

FD_WRITEは実装が複雑になるから、あまりやる必要はないんじゃないかな?
どうしてもしようと思うなら、WSAAsyncSelectを使わずに非同期(重複)I/Oを
使った方がいいかも。ロジックが大幅に変わるから直すのは大変だろうけど。
0175デフォルトの名無しさんNGNG
>>173
6〜7割取れてました、苦手な科目だったな・・・。
0176デフォルトの名無しさんNGNG
>>172
根本的にわかっていないようですね。
0177166NGNG
プログラムは

HTML
<HTML>
<HEAD>
<TITLE>テストぺージ</TITLE>
</HEAD>
<BODY BGCOLOR=#a0d0ff>
<FORM METHOD="post" ACTION="test1.cgi">
<INPUT TYPE="text" NAME="fieldname" SIZE="50"><BR>
<INPUT TYPE="text" NAME="fieldname2" SIZE="50"><BR>
<INPUT TYPE="text" NAME="fieldname3" SIZE="50"><BR>
<INPUT TYPE="submit" VALUE="書き込み">
</FORM>
</BODY>
</HTML>

のFORMのPOST部分をJAVAでやりたくて、CGIプログラムは
#include <stdio.h>
#include <stdlib.h>

main()
{
int len;
char *clen;
char *data;
clen=getenv("CONTENT_LENGTH");
if(clen==NULL){
printf("no contents.\n");
exit(1);
}
len=atol(clen);
data=malloc(len+1);
scanf("%s",data);
data[len]='\0';
printf("Content-type: text/html\n\n");
printf("<HTML><HEAD></HEAD><BODY>\n");
printf("%s<BR>\n",data);
printf("</BODY></HTML>\n");
}
0178166NGNG


で自分が作ったプログラムは


import java.net.*;
import java.io.*;

public class PasswordID{


public static void main (String [] args) {

try{
URL u = new URL("http://localhost/cgi-bin/test1.cgi");
URLConnection uc = u.openConnection();
uc.setDoOutput(true);
OutputStreamWriter out = new OutputStreamWriter(uc.getOutputStream(), "ASCII");
InputStream in = uc.getInputStream();
InputStream buffer = new BufferedInputStream(in);
Reader r = new InputStreamReader(buffer);
out.write(fieldname=a&fieldname2=b&fieldname3=c);
out.write("\r\n");
out.flush();
out.close();
int c;
while((c = r.read()) != -1) {
System.out.print((char) c);
}
in.close();
}
catch (Exception e) {
System.err.println(e);
}
}
}

です。よろしくお願いします。
0179デフォルトの名無しさんNGNG
(´_ゝ`)で?
0180166NGNG
>>179
それでwriteしても、正確なデータが遅れないんですよぉ〜。
0181じゃヴぁNGNG
>>179 のソースは間違ってるますよ
正しいソースは…
お昼休みに書く予定です
0182ごめんくさいNGNG
181です
さっきの発言はうそです ごめんなさい!!
書くきなんて全然ありません
だってお昼だもん俺も休みたいもん!!
0183179NGNG
そう俺は間違っているんだ(;_;)
JAVAなんて知らないのに煽って悪かった。
0184デフォルトの名無しさんNGNG
つーか、connectしてないよーな……
0185デフォルトの名無しさんNGNG
unixのソケットがらみのヤシをWindowsに移植しようとしてるんですが、
close(sd);
がないとか言われました(VC6)。
shutdown(sd);
close(sd);
の変わりになる関数がなんかあった気がするんですが、
教えてもらえませんか? たしか、一回呼べば済むようなヤシだったと思います。
0186デフォルトの名無しさんNGNG
closesocket
0187185NGNG
closesocket(sd);
としたら素直にとおったんですが、これでいいんでしょうか?
0188185NGNG
あ、いいみたいですね。
どうもです。 >>186
0189デフォルトの名無しさんNGNG
>>185
正解かと。
0190185NGNG
連続ですみません。またご教授下さい。
socketのKEEPALIVEの設定をしたいのですが、
KEEPALIVEの可否自体はsetsockopt()でできるみたいですが、
そのintervalはどうやって指定するのでしょうか?
よろしくお願いします。
0191185NGNG
ttp://www.kt.rim.or.jp/~ksk/sock-faq/unix-socket-faq-ja-2.html#peer_death
こんなドキュメントを見つけました。これって要するに、変えられないってことですよね。
要求ではコネクション毎にKeepAliveIntervalを指定したいみたいなんですが・・・。
まさかアプリケーションで作れってこともないと思うけど(相手がapacheなんで)。
困ったにゃ。
0192デフォルトの名無しさんNGNG
socketとHTTPをごっちゃにしてるような
0193185NGNG
いえ、HTTPクライアント(っぽい簡易版)をつくるんですよ。
どうしてKeepAliveをしたいのかは仕様に書いてないんで分かりませんが。
0194185NGNG
とりあえず、今日は帰ります。ありがとうございました。
あと>>191の口調はキモくてすんまそん。
0195デフォルトの名無しさんNGNG
TIME_WAITはsocket(特にlistenに影響)で
KeepAlive(のタイムアウト)はHTTPだと思うんだけど、違うかな
0196デフォルトの名無しさんNGNG
一枚レイヤーが違うと思われ。
SO_KEEPALIVEってのがあるけど、HTTPのKeepAliveとは別物。
0197デフォルトの名無しさんNGNG
そうなのか。ありがとう。
0198185NGNG
はい、HTTPのKeepAliveでした。お騒がせしました。
0199デフォルトの名無しさんNGNG
ちょっと質問があります。

・UDPで送られてくるデータはいかなる保証もされていない
・UDPで送られてくるデータはパケット長のみ保証されている

どっちが正しいんでしょうか?
0200デフォルトの名無しさんNGNG
>>199
そら、パケット自体の形式は保証されてるだろう。
届くかどうかは別として。
0201デフォルトの名無しさんNGNG
TCPも保証は無いんじゃなかたけ・・・
0202名無資産@ヘタレ部NGNG
>>199
UDPパケット(データグラム)は、届いたパケットの中身は
ある程度(チェックサム程度)保証される。経路で分割されたデータグラムの破片を
ユーザランドで受け取ることはない。
ただし、データグラムは到達しないかもだろうし
(分割されたデータグラムの片割れが届かなかったら、そのうち全部捨てられる)
データグラムが多重に届くことすらありえる

っていうか教科書嫁

>>201
TCPにはパケットの概念はないだろ
0203デフォルトの名無しさんNGNG
>>199
パケットが届く順序が変わるかもしれない。
あと、1回しか送ってないパケットが2回(以上)届くかもしれない。1回も届かないかもしれない。
届いたなら、データの中身は恐らく正しいであろう。壊れて届いたパケットは何も言わずに勝手に捨てられます。
0204デフォルトの名無しさんNGNG
>>203
時間差で>>202と同じ事欠いても・・・
0205デフォルトの名無しさんNGNG
重複もありうるんだっけ?
こりゃまずいな...
0206デフォルトの名無しさんNGNG
俺パケットには通し番号とCRCを自分で付加してたよ
CRCは削っても良いのか
0207デフォルトの名無しさんNGNG
>データグラムが多重に届くことすらありえる

これ良くわからん
全く同じUDPパケットが2回以上届く事なんてあるの?
UDPが届かないのは良くわかるけど
0208デフォルトの名無しさんNGNG
あと順番が入れ替わる可能性があるってのもわかるんだが…
0209デフォルトの名無しさんNGNG
>>207
あるよ。

そのパケットが送信されて受信側に届く前にそのパケットの再送要求出したときとか。
0210デフォルトの名無しさんNGNG
UDPに再送信要求なんて無いんじゃないの?
0211デフォルトの名無しさんNGNG
>>210
ルータ間
0212デフォルトの名無しさんNGNG
>>203は>>202のパケットが遅延して欠落して順番が入れ替わって多重に届いたのかな
0213デフォルトの名無しさんNGNG
promiscuous mode って何ですか?
0214デフォルトの名無しさんNGNG
>>213
宛先と無関係に流れてきたパケットをすべて取り込むモードです。
0215デフォルトの名無しさんNGNG
>>214
スニッファですな
0216デフォルトの名無しさんNGNG
promiscuousを辞書でひいてハァハァ
0217デフォルトの名無しさんNGNG
1. sexually indiscriminate: having many indiscriminate or casual sexual relationships(disapproving)
0218デフォルトの名無しさんNGNG
n = socket(...);
...
select(n+1, ...);
のようなコードがあるのですがsocket()の戻り値は
その値自体に何かの意味があるのでしょうか?
0219デフォルトの名無しさんNGNG
socket discriptor
stdin stdout stderr
とかで検索しる
0220デフォルトの名無しさんNGNG
>>219
socket discriptor でググッたら 130件もバカが見つかったよ。
0221デフォルトの名無しさんNGNG
>ごた混ぜの, 乱雑な; でたらめの; 乱交の.


(;´Д`)ハァハァ
0222デフォルトの名無しさんNGNG
すみません、質問させてください。
winsock2.0、BCCでネットゲーム開発しています。
バイナリデータの送受信にはどういった方法を用いるのですか?
yahoo・グーグルでここ二日ひたすら探したのですが
バイナリデータ送受信を解説しているものが見つからず立ち往生してます。

考えついて試してみたのは
ビットシフトで8ビットにずつに分解して1バイトの配列に格納してsend
なのですが、受信側で再び再構築すると格納してたデータがおかしくなっていました。
1バイトずつ再構築しているのでバイトオーダーの影響ではないと思うのですが

初歩的すぎる質問でしたらキーワードだけでも教えていただけると助かります。
よろしくお願いします。
0223222NGNG
>>222付け足しです。
ファイルからバイナリデータを読み出してそれを送信する、というのではないです。

変数に格納してある値をテキストデータとして送らないで送受信する方法を
「バイナリデータの送受信」と書きました。紛らわしくてすみません。
0224デフォルトの名無しさんNGNG
なぜ立ち往生するのかわかりませぬ。
0225デフォルトの名無しさんNGNG
分解するところ/再構築するところにバグがあるんでねーの
0226デフォルトの名無しさんNGNG
htonl
htons
などを検索してみるとよいかも。けど「バイトオーダー」については
わかってるみたいなので、はずしてるかもー。
0227222NGNG
>>224-226
アドバイスありがとうございます!解決しました。

225さんの仰る通り、再構築ルーチンを再度見直してみたんですが
受け取ったデータを解析するルーチンがマズかったです。
受け取ったデータはBYTE配列に入れていたんですが、ルーチンの引数を
LPSTRにしてました・・・(;´Д`) LPBYTEにしたところすんなりいきました

ただのcharは符号付で-128から128、byteは符号無しで0から256ですよね。

>>226
バイトオーダーはわかっていたつもりだったのですが、
それよりもっと初歩的な、変数の型についてのミスでした。。。

ありがとうございました!
0228デフォルトの名無しさんNGNG
こんにちは。
Winsock超初心者です。
質問があります。

「極めるVisualC++」という本のP154から始まるAPIのWinsockの
サンプルプログラムを打ち込んで、動かそうとしているんですが、
うまく動きません。

具体的には、クライアントがsendするところでエラーが帰ってきます。
WSAGetLastErrorで調べたところ、エラーの内容は「WSAENOTCONN」とのことでソケットが接続されていないらしいのですが、どう対処
していいのか分からない状態です。
とりあえず、プログラムを追ってみたのですが、サーバー、クライアント
共に正しく動いている(ような気が)します。
本当に初歩の初歩の質問だと思うのですが、何かよきアドヴァイスが
ありましたらよろしくお願いします。
0229デフォルトの名無しさんNGNG
socket()やconnect()は成功してんの? エラー処理入ってる?
send()の直前でとめて、netstatやってみたら?
0230228NGNG
>>229
お返事ありがとうございます。

>エラー処理入ってる?

エラー処理は入っています。
プログラムを確認したんですが、connectの部分がごっそり
抜けていました。恥ずかしいです。

それで、もう一度動かしてみたのですが、今度はconnect関数に
入ったところで、プログラムが反応しなくなってしまいました。
よって、connectのエラーコードも分かりません。
もちろん、サーバは動かしています。
また何かポカをやっていると思うのですが、よろしくお願いします。
0231デフォルトの名無しさんNGNG
sockaddr_in構造体にはなにを設定してんの?
0232デフォルトの名無しさんNGNG
selectしてループまわしてFD_ISSETでチェックしてrecv, sendという処理は
acceptしたクライアント数が多くなると効率悪くないですか?
せめて受信の処理を検索せずにコールバックで処理するような関数はないのでしょうか?
環境はLinuxです。
0233228NGNG
sockaddr_in構造体への代入は下のようにしています。

*サーバ
///////始め////////////
SOCKADDR_IN svAddress, clAddress;

memset(&svAddress, 0, sizeof(SOCKADDR_IN));
svAddress.sin_family = AF_INET;
svAddress.sin_port = htons(45678);
svAddress.sin_addr.s_addr=htonl(INADDR_ANY);
///////終わり////////////

*クライアント
///////始め////////////SOCKADDR_IN svAddress;

svAddress.sin_family = AF_INET;
svAddress.sin_port = htons(45678);
u_long svaddr=inet_addr("128.128.128.3");
memcpy(&svAddress.sin_addr, &svaddr, sizeof(u_long));
///////終わり////////////
0234デフォルトの名無しさんNGNG
select自体が重いからな
0235デフォルトの名無しさんNGNG
>>234
そうですね。プロファイルとってみたらselect(待ち時間は0)が50%近い値でした。
教科書どおりにacceptの度にforkするわけにもいきませんしどうしたものでしょう?
Winsockには非同期通知というのがあるらしいのでそちらを試してみようと思いますが・・・
0236デフォルトの名無しさんNGNG
スマン。unixはサッパリわからんのだよ。
WinならIOCPがあるんだが。
0237デフォルトの名無しさんNGNG
つか、待ち時間0でループ回すなよ
0238デフォルトの名無しさんNGNG
>>235
俺スレッド派だな。
0239デフォルトの名無しさんNGNG
memcpy(&svAddress.sin_addr, &svaddr, sizeof(u_long));
が怪しい。
0240デフォルトの名無しさんNGNG
struct hostent *he = gethostbyname( HostName or IP Address );
svAddress.sin_addr.s_addr = ( (struct in_addr*)( he->h_addr ) ) -> s_addr;

みたいなカンジで。
0241デフォルトの名無しさんNGNG
代入始めるsvAddressの初期化もよろしく。
0242228NGNG
おさがわせしました。
解決しました。

u_long svaddr=inet_addr("128.128.128.3")
→
u_long svaddr=inet_addr("127.0.0.1")
にしたところ動くようになりました。
127.0.0.1がローカルのアドレスであるという知識も
無かったのが問題でした。
この参考書(極めるVisualC++)だけで、Winsock
を学ぶのは無理だと思いました。
何か他の参考書を買ってきたいと思います。

お答えしていただいた皆さん、ありがとうございました。
0243デフォルトの名無しさんNGNG
>232
http://ghost.math.sci.hokudai.ac.jp/esehttpd/
ここが役に立つと思う。
Linux2.4系ならPOSIX Realtime Signalsがあります。
*BSDなら、kqueueとか使うんだったかな?

>233
つか、128.128.128.3:45678では誰かちゃんと待っているんだろうな。
0244228NGNG
>>243
>つか、128.128.128.3:45678では誰かちゃんと待っているんだろうな。

待っていませんでした(w
ちなみに、
u_long svaddr=inet_addr("128.128.128.3")
というのは、参考書のソースをそのまま写したものです。
また、それについての解説はありませんでした。
「極めるVisualC++」を買った初心者の方は注意してください。

0245デフォルトの名無しさんNGNG
>>244
つぅかTCP/IPの常識すら知らん奴がネットワークプログラミングなんぞするなよ・・・。
本は無実だと思われ。
0246228NGNG
>>245
そうですか・・・。
失礼しました。
0247デフォルトの名無しさんNGNG
>>245
なんで? どうやって勉強すんのよ? 本は無実だが>>228にも罪はない。
0248デフォルトの名無しさんNGNG
>247
>どうやって勉強すんのよ?
マスタリングTCP/IP嫁よ

>本は無実だが>>228にも罪はない。
本は、128.128.128.3みたいな妙なアドレスを出す時点で有罪
228はそれに、まったく疑問をいだかなかった時点で有罪
0249デフォルトの名無しさんNGNG
じゃあサンプルではどんなIP使えばいい?
127.0.0.1とか?
0250デフォルトの名無しさんNGNG
210.150.253.198なんかいいよ。
0251デフォルトの名無しさんNGNG
7.7.4.3もいいよね。
0252デフォルトの名無しさんNGNG
>249
たとえばそれがhttp clientなら、kantei.go.jpとか有名な
あたりを指定しとけばいいし、俺様protocolで通信する
ServerとClientなら、localhostを指定しとけばいいと思う。
#名前を引くのは当然として
0253デフォルトの名無しさんNGNG
サンプルの場合、microsoft.comやらyahoo.comやらの有名どころ、
或いは出版社のサイトになってるのが多いんだけどな。
このスレ的にはwww.2ch.netだが、「無用な負荷をかけるな」と言われる諸刃の剣。
0254デフォルトの名無しさんNGNG
IP抜かれました。住所とか個人情報ばれますか?

とかふざけたことほざいてるうちはネットワークプログラミングなんぞ10000024年早いってこった。
0255デフォルトの名無しさんNGNG
サンプルはgoogleを指定してるよ。
あそこは素直だからな。
0256デフォルトの名無しさんNGNG
うえーん(TДT)サバが立ち上がらないよお
0257デフォルトの名無しさんNGNG
というよりソケットが貰えないみたいれす・・・
0258デフォルトの名無しさんNGNG
>>249-253
どこを指定しても、ポート 45678 なんかで待っている奴なんかいないから、結局
エラーになると言う罠。
0259デフォルトの名無しさんNGNG
socket()がエラーになるのは、winsockでWSAStartup()してないと見たが、どうかな
0260デフォルトの名無しさんNGNG
>>259 ありがとうございます、できました(^▽^)ノ

# 手元の本にそんなこと載ってなかった・・・。
0261デフォルトの名無しさんNGNG
Winsockの本なら例外なく最初のセクションにあると思うが
0262デフォルトの名無しさんNGNG
>>261
最悪でもソースに書いてある。
0263デフォルトの名無しさんNGNG
TCP/IPプログラミング徹底解説って本なんすけど・・
無いっぽいです(・・)
0264デフォルトの名無しさんNGNG
それはwinsockの本なのか?
0265デフォルトの名無しさんNGNG
winsockではないようですがwindowsとunix両方についてかいてあります
本を間違ったかな・・・(-д-)
0266デフォルトの名無しさんNGNG
いや、間違っては居ないと思うが。
WSAStartup()〜WSACleanup()を除けば
ほぼUnixと同じように書けるし。

Winsock2.0の本で良書があったと思うが、
題名忘れた。
0267デフォルトの名無しさんNGNG
>>266
Winsock 2.0 プログラミング?
0268デフォルトの名無しさんNGNG
JAVAでSNTPの機能をつくりたいのだけど
なにか良い資料ない?
0269デフォルトの名無しさんNGNG
>>268
RFC
0270デフォルトの名無しさんNGNG
>>268 1件目のって、そのものズバリのような気がしますけど。
http://www.google.co.jp/search?hl=ja&inlang=ja&ie=Shift_JIS&q=Java+SNTP&lr=
0271デフォルトの名無しさんNGNG
Winsockって最大でいくつsocket作れますか?
また、その最大数を変更することはできますか?
0272デフォルトの名無しさんNGNG
WSAStartupの第二引数に帰ってくる情報をたぐれ!
変更する方法はしらん。っつーかできんと思う。

参考サイト(delだけど)
http://www.asahi-net.or.jp/~nk2w-ishr/winsock2.htm
0273おねがいしますNGNG
Windows xp では、netstat に -o オプションが追加になりプロセスIDも見れる
ようになりましたが、これと同じことを Windows 2000 でもやりたいのですが、
プロトコル(TCP/UDP)とポート番号の組み合わせからプロセスIDを取得する方法
ってわかりますでしょうか?
パーソナルファイアーウォールなどでは、取得できているようなのですが。
お願いします。
0274デフォルトの名無しさんNGNG
xpからコピーしてくれば見れるから、実現できるだろ
0275デフォルトの名無しさんNGNG
RTPやRTSPについて詳しいかた、、、参照ページなど教えてください。
お願いします。
0276デフォルトの名無しさんNGNG
>>274
xp からコピーしても見れなかった。
iphlpapi や ws2_32 の dll もコピーしたがだめだった。
具体的には、-o オプションをつけると一覧が表示されない。-an ならOK。
xp では、非公開?の AllocateAndGetTcpExTableFromStack API を使って
表示しているのは知っていたのだが、ノートンのファイアウォールは、
Win 2000/98/Me でどうやって取得しているのかが知りたい。
できれば、GUIでそれらを表示したいと考えている。

netstat を 2000にコピーするだけで動けば、strace してなにやってるか
みれたのに。。。。
0277名無しさんNGNG
>>276
ライセンス上リバースエンジニアリングは禁止されてますが何か?
0278デフォルトの名無しさんNGNG
>>277
じゃ、リバースやめます。

どうやら、Transport Driver Interface (TDI)に手を出さないと無理らしい。
このへんの情報知ってましたらお願いします。
0279デフォルトの名無しさんNGNG
>>275
>>269
0280デフォルトの名無しさんNGNG
WinSock 2.0  と言う本を買って、ネットで一対一で対戦できるゲームを作ろうとしたのですが
この内容が、ちょっとややこしいので、理解できません。

この板の過去ろぐも見せていただきましたが、
細かい部分の質問が多くて、結局、どうすれば接続を確立して、
お互いにメッセージをやりとりできるのかがわかりませんでした。
CHATTERと言うサンプルプログラムも何だかよくわからなかったです。

もしよろしければ、どのような手順で、接続を確立し、メッセージをやりとりすればいいのか、
教えて頂けませんでしょうか。

開発環境は VC++6.0 です。
MFCは、使っても使わなくてもかまわないです。
もしくは参考になるページや、本などでも結構です。お願い致します。
0281デフォルトの名無しさんNGNG
--------初期化
WSAStartup();
socket();

--------サーバ側
bind();
listen();
accept();

--------クライアント側
connect();

--------送受信
send();
select();
recv();

--------終了処理
closesocket();
0282デフォルトの名無しさんNGNG
>>281
CAsyncSocketが楽な罠。

sock.create(80);
sock.connect();
0283デフォルトの名無しさんNGNG
>>281
WSACleanupも、作法でソ。
0284280NGNG
ありがとうございました^^
だいたいの流れはわかりました。
早速やってみます。
また質問があるかも知れませんが、そのときはまたよろしくお願い致します
0285280NGNG
申し訳ないっす;;
やっぱりやってみたんですけど、エラーがデマクリで。。。
サーバーとクライアント用にソケットを作ってみました。

CAnsySock Socket_serv,Socket client;

_________________________________________

Socket_serv.Create( 9000,
            SOCK_STREAM,
            FD_READ | FD_WRITE | FD_OOB | FD_ACCEPT | FD_CONNECT | FD_CLOSE,
            "127.0.0.1" );
Socket_client.Create(9001,
            SOCK_STREAM,
            FD_READ | FD_WRITE | FD_OOB | FD_ACCEPT | FD_CONNECT | FD_CLOSE,
            "127.0.0.1" );


Socket_serv.Bind(9000,NULL);
Socket_client.Bind(9001,NULL);


Socket_serv.Listen(2);

Socket_clientConnect.("127.0.0.1",9000);

______________________________________________________________________________________________________________________________

アドレスが使用中です、と言うエラーと、ソケットはブロック化処理を行いませんが、指定された処理はブロック化を行います。
と言うエラーがでてしまいます。。あと、こんなのもでます。。。When Connecting X.400 over TP4


どこがいけないか、もしよろしければ指摘お願いしたいです;;
また、これからも結構質問するかも知れませんが、よろしくお願い致します。
0286デフォルトの名無しさんNGNG
なにをやろうとしているのか全然わからん
入門でやりたいならどっかのページ(yahoo.co.jpとか)を
取得するテストでもやってみりゃいい
0287デフォルトの名無しさんNGNG
"socket bind"とかでググればサンプルいっぱいあるだろうに
0288デフォルトの名無しさんNGNG
CAsyncSocketは知らんけど、

・clientのポート番号を指定してるのはおかしい
・Createでポート番号指定してるのにbindしてるのはおかしい
0289デフォルトの名無しさんNGNG
指定ポートからの接続以外をはねる実装もあるので、
一概にクライアントでbindするのがおかしいと言い切るのはおかしい。
>>285は2重bindなどおかしいことは多々あるが。
0290デフォルトの名無しさんNGNG
厨質デス
/*サーバ側*/
struct msgbuff {
mtype:
mtext;
}b; /*構造体テキトー*/

msgget ( msgid,............... ) /*キューゲト*/

msgrcv ( msgid,...b.mtext...... ) /*レシーブ*/
fprintf ( fp, %s, b.mtext ) /*ファイルニカキコ*/
         :
         :
この後にクライアソトに成功・失敗を伝えたいんすけど
再度b.mtextって使用可能なんすかね?
b.mtext使用してクライアソトに伝えようと思ったんすけど・・・
なんか他に(・∀・)イイ方法あるなら教えてください。

厨なんで質問の意図わかりにくいかとは思いますが
何卒オナガイシマス
0291デフォルトの名無しさんNGNG
漏れも厨なんで分からないんですが、環境はなんですか?
共有メモリを使ったIPCですk?
そして、よっぱらってぐらぐらします。
0292デフォルトの名無しさんNGNG
SystemV IPC のメッセージキューじゃなかったっけ?
UNIXプログラミング質問すれ
http://pc.2ch.net/test/read.cgi/tech/992057422/
の方がいいかも。
0293デフォルトの名無しさんNGNG
winsockでAAsyncを使ったプログラムを組んでいます
コネクトが切れたらなにかしらアクションを起こすシステムを搭載しようと思ったので相談にきました

とりあえず切断が切られた場合。
相手がclosesocket()した場合は
Msg=DATA_PENDING, lParam = FD_CLOSE
が来るのでアクションを起こすのは楽です

でも、相手がLANケーブルを引っこ抜いた場合などはこのMSGが送られてこず、
ひたすらsend recvを失敗するだけになります
今のところ15秒に一度、相手に返事を要請するデータ(相手はこのデータを受け取ると返事用のデータを返します)を送って
コネクトの生存を確かめています

今のところこのシステムに不自由はないのですが、
sockの機能でこれを代理するものはないでしょうか?
0294デフォルトの名無しさんNGNG
http://www.kt.rim.or.jp/~ksk/sock-faq/unix-socket-faq-ja-2.html#ss2.8
みるところsocketの機能としてはなさそう。
さらにそこの上のほうを見ると多少対策法あるあもね
(#以降はきられるのでコピペでよろしく)
0295デフォルトの名無しさんNGNG
>>293
そのやりかた(APレイヤーでkeep-aliveする)がTCP/IP的にはもっとも
正しい。WinsockならばSIO_KEEPALIVE_VALSを使えば、TCPレベルでの
細かいkeep-aliveが設定できるが、APプロトコルが自製のものなら
やはりAPレベルのkeep-aliveがベスト。
0296デフォルトの名無しさんNGNG
SolarisでWinSockのWSAAsyncSelectみたいなのありませんか?
0297デフォルトの名無しさんNGNG
select とか poll じゃないの?
0298デフォルトの名無しさんNGNG
WININET.DLLで同期でプログラムを組んでいます。
InternetSetOption()でタイムアウトの設定をしていますが
InternetReadFile()では正しくタイムアウトされるのですが
InternetOpenUrl()ではタイムアウトが動かす固まってしまいます。

MSDNではAPIのバグだ、と書いてありますが
かかれているとおり、非同期で組みなおすしかないのでしょうか?
http://support.microsoft.com/default.aspx?scid=kb;JA;q176420
0299デフォルトの名無しさんNGNG
かかれているように、Another solution試せばいいやん。
0300デフォルトの名無しさんNGNG
>>294-295
ありがとうございます
やり方としては間違っていないようで安心しました
参考文献もおもしろかったです
0301デフォルトの名無しさんNGNG
ソケットを再利用するにはどうしたらいいでしょう。
shutdown closesocketするだけではだめなようです。
OSはWindows2000で,MFCではなく素のAPIでやっています。
0302デフォルトの名無しさんNGNG
再利用は出来ない
0303デフォルトの名無しさんNGNG
ソケットって再利用するものなのか?
そして、この場合の再利用の意味とは?
0304301NGNG
あ、スイマセン。再取得?したらできました。
いや、相手との接続が急に切断して、また、そのsocket
でconnectできるかとおもったのですが。
見当違いでした。どうも。
0305デフォルトの名無しさんNGNG
IRCクライアント作りたいんすけど、どこかに簡単なCで書かれたソースありませんか?
とりあえず1チャンネルだけのクライアントは作れたんですけど、2複数のチャンネルを
どう処理したら良いか分かりません。
0306デフォルトの名無しさんNGNG
過去ログ嫁
0307デフォルトの名無しさんNGNG
移転age
0308デフォルトの名無しさんNGNG
age
0309デフォルトの名無しさんNGNG
ユーザ認証のダイアログがでるページに自動でログインするためには
どんなメッセージを送れば良いんですか?

VCでCAsyncSocket使ってますが、単にSendしてReceiveだと
bufferには「正しいユーザ名とパスワード入れろやボケ」とかえってきます。
0310デフォルトの名無しさんNGNG
>>309
HTTPのBasic認証だったら
ヘッダにbase64エンコードしたusernameとpasswordを入れて送るのよん。
0311デフォルトの名無しさんNGNG
メッセージ、というか、単にヘッダが足らんだけ。
どのヘッダが足らんのかは、RFC嫁。
0312309NGNG
>>310, >>311
レスありがとうございました。
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
ですね。

他にもHostも書かなきゃ駄目で、それに気がつくのに2時間かかりました…

0313ななーしさん@接続しっぱなしNGNG
>>312
このスレ最初から読むのには2時間もかからないよ…
0314デフォルトの名無しさんNGNG
ここの過去ログでいい本を紹介しているスレがあり
http://mentai.2ch.net/prog/kako/960/960830594.html
このスレの26-27がとても参考になりました。

「WinsockによるWindowsネットワークプログラミング」Arthur Dumas 海江田訳、アスキー出版 \3,980-
「Winsock2.0 プログラミング」Lewis 江村豊監修 ソフトバンク \5,800-
で、この2冊を買ってお勉強中です。

やっぱりネットに転がっている情報だけでは基礎が勉強できませんね。
0315デフォルトの名無しさんNGNG
ども、質問させてください。
今PerlのIO::Socketを使用して、サーバプログラムの基礎実験をやってるんですが、
メッセージを送受信できるサンプルプログラムを拾ってきて、動作を確かめていてたんですが、
サーバ、クライアントがどちらもLANの内側にある場合問題なく動作するんですが、
クライアント側を、ダイアルアップ経由で接続しようとすると、うまくいきません。
httpや、smtpなどのサービスは普通にアクセスが可能なのですが・・・
サーバ側のFireWallの問題かとも思い調べてみたのですが、使用しているポート(5000)は、
iptables -A INPUT -p tcp --sport 5000 --dport 5000 -m state --state ESTABLISHED,RELATED -j ACCEPT
として、許可するようにはしているのですが・・・
もう、ダメポです・・・、誰か何か情報無いですか?
ちなみに、サーバのホストはVine Linux 2.5です。ルータもこいつです。
0316デフォルトの名無しさんNGNG
>>315
板違い
ここはプログラミング板です。さようなら
0317デフォルトの名無しさんNGNG
あれ?書けた。
DIONなのに。
0318デフォルトの名無しさんNGNG
LinuxでHTTPで通信するにはどんなライブラリを使えばいいですか?
0319デフォルトの名無しさんNGNG
socket
0320デフォルトの名無しさんNGNG
言語くらい書け
0321デフォルトの名無しさんNGNG
wininet相当のものってlinuxにないんだっけ?
0322318NGNG
>>320
Cです。
0323デフォルトの名無しさんNGNG
http://www.amazon.co.jp/exec/obidos/ASIN/0735615799/249-6348885-6837141

この本の日本語版ってないのかな。
0324デフォルトの名無しさんNGNG
>>321
ありません。自分で一から書いてください。
0325デフォルトの名無しさんNGNG
OpenSSL相当のものまで一から書くのはさすがに辛いだろ…
0326デフォルトの名無しさんNGNG
質問があります。
2台のPCをインターネットを介して、TCP/IPで接続させる実験を行っています。
片方のPCはWindows2000(SP2)で、もう片方のPCがWin98です。
ソフトの開発はVC++6.0,Winsockで行っています(MFC等は不使用です)。

二台のホストをそれぞれホストA、ホストBとしますと、
ホストAでconnect関数を呼んだとき(=SYNフラグをセットしたパケットを送ったとき)、
ホストBでaccept関数が呼ばれていれば、接続が行われますが
(=SYNとACKフラグがセットされたパケットが返りますが)
まだホストBでaccept()が呼ばれていない場合、
RSTとACKのフラグがセットされたパケットがホストBから返りますよね。

connect関数を一度呼ぶと、相手がaccept関数を呼ばない場合、この処理が3回行われて
最後にconnect関数からSOCKET_ERRORが戻りますが、ここで、
1回ないし2回だけRSTとACK付きのパケットがホストBから戻り、その直後に接続が確立
する場合があります。
今回僕が悩んでいるのは、この状態で接続が確立された場合に限って、接続が2分間で
切断されてしまう問題です。自家内LANのルータ等にそのような設定をした覚えが
ありませんし、外部のネットワークでそのように設定されている事があるのでしょうか?

どなたか、お気づきの事がありましたら、お教え頂ければと思います。
プロバイダは、Yahoo!BBとフレッツISDN(DION)を使用して実験しています。
0327shigeNGNG
>>321
libCURL
w3c-libwww
libghttp
お好きなものをどうぞ。
0328デフォルトの名無しさんNGNG
両方ともホストというとアレなんで一方をクライアントとしてホスィ。
そして単純にテストプログラムのミスだと思われ。
0329326NGNG
>>328さん
ご返答ありがとうございます。
えっと、ホストAがクライアント、ホストBがサーバです。

>そして単純にテストプログラムのミスだと思われ。

それが、他の方が作成されたファイル送受信のフリーソフトを使ってみても、同様の
症状が出るのです。

症状を更に詳しく書きますと、この接続状態になってから2分間が経過した後に、
send関数を呼ぶと、WSAECONNRESET(10054)のエラーが返るのです。
2分間は通常の送受信が行えます。サーバとクライアント、どちらでもWSAECONNRESETが
返ります。2分経ってもsendを呼ばないとESTABLISHEDのままです。

どうかよろしくおながいします。
0330デフォルトの名無しさんNGNG
ネット環境が限りなく怪しい。
環境変えてみたら?
0331326NGNG
>>330さん
なるほど、そうですね。
夜に知り合いに協力してもらって、実験してみます!
0332326NGNG
スマソ、やっぱり環境依存の問題みたいですた。
YBBとケーブル会社のプロバイダを使った実験では、326の様な問題は
発生しませんでした。
…お騒がせしました…。
0333デフォルトの名無しさんNGNG
質問です。
main()をつかった、Win32コンソールクライアントをつくっています。
CAsyncSocketから派生させたソケットクラスのOnConnectとか
OnReciveとかをオーバーライドして非同期通信を実現したいのですが、
オーバーライドした関数は呼ばれることがありません。
通知を受け取るためにはどうしたらよろしいのでしょうか?

VC++6.0でプロジェクトを作成する時に”Win32 Console Application” の
プロジェクトを選択して”MFCをサポートするアプリケーション”をチェックしています。
CAsyncSocketを使うためにafxsock.hをインクルードしています。
オーバーライドしてもビルドは問題なく出来ます。
なにか、根本的にわかってないようです。

同じような経験をした方はいらっしゃいませんか?
0334 NGNG
n次元ベクトルの内積を求める関数
double inprod(doble a[],double b[],int c);
はどのように書けばいいのでしょうか?
ご教授おねがいします
0335Rina ◆tI333vNE NGNG
>>334
http://pc3.2ch.net/test/read.cgi/tech/1026138039/l50
内積求めるのが「ネットワークプログラミング」でしょうか?
0336デフォルトの名無しさんNGNG
>>335
当たり前じゃん
0337Rina ◆tI333vNE NGNG
…そうだったんだ(汗.
23になるこの年まで全然知らないでプログラミングしてきました.
欝駄子嚢.
0338デフォルトの名無しさんNGNG
>>326
ネットワーク機器の構成を書いてもらえると何かわかるかもしれんぞ
0339ななーしさん@接続しっぱなしNGNG
>>338
Socket programmingがネットワーク機器に依存しないように?
matrix programmingもネットワーク機器に依存しません。
0340デフォルトの名無しさんNGNG
>>339
ネタは余所でお願いします。
0341デフォルトの名無しさんNGNG
>>333
MFCスレの方がレスつきやすいと思うが。
C*Socketは不可視ウィンドウでメッセージを受けてるから
メッセージループがないとイベントを受け取れない。
0342デフォルトの名無しさんNGNG
Winsock2.0のWSAIoctl()のつかい方を教えてクレー。
INもOUTもいらないはずのコマンドで10022エラーがかえってくる(エーン
0343326NGNG
>>338さん
遅レス、ごめんなさい。
自家内LANと書きましたが、今手元には無く、月曜日にならないと
LAN環境に近づけません。月曜日以降に問題が解決できなければまた
書き込みさせてください。よろしくお願いします。
0344デフォルトの名無しさんNGNG
CAsyncSocketを使ってHTTPでWEBページを取得し、取得し終わった後に
別の処理をしようと思うのですが、「取得し終わった」というのは
どのように検知したらよいのでしょうか?
0345デフォルトの名無しさんNGNG
>>344
closeを受信したらでいいんじゃなーい(適当
0346デフォルトの名無しさんNGNG
>>344
CAsyncSocket::OnCloseで受けれということでしょうか。
OnCloseはたしかに呼ばれるんですけど、呼ばれた後にも
OnReceiveで受信が続く場合があるんですが・・・
0347346NGNG
失敬、>>345宛です。
0348デフォルトの名無しさんNGNG
>>346
うそこけ
0349346NGNG
ほんとですがな
0350デフォルトの名無しさんNGNG
Receiveのバッファが1000バイトくらいだと最後にOnCloseが呼ばれる
んですが、100バイトくらいにするとOnReceiveの途中で
OnCloseが呼ばれてまたOnReceiveが呼ばれます。
0351デフォルトの名無しさんNGNG
>>350
じゃあcontent-lengthは?
0352デフォルトの名無しさんNGNG
>>351
今はそれでやっています。
まぁそれでできてるので「じゃあいいじゃん」かもしれないですが
できれば取得し終わったタイミングがわかった方がスマートかなぁと
思いまして。
0353デフォルトの名無しさんNGNG
>>352
いや、そっちが普通だと思うが
0354デフォルトの名無しさんNGNG
(゜Д゚) マジデスカ!?
0355デフォルトの名無しさんNGNG
>>354
closeは冗談のつもりだったのに
0356デフォルトの名無しさんNGNG
でもcloseが先に来るとは知らなかったよ
0357デフォルトの名無しさんNGNG
content-lengthの方が普通のようなので今のままにしておきます。
ありがとうございまつた。
0358デフォルトの名無しさんNGNG
VBのwinsockコントロールはcloseは最後に来るけどなー
0359ななーしさん@接続しっぱなしNGNG
>>357
それって、
http://www.microsoft.com/japan/developer/library/vcmfc/_mfc_casyncsocket.3a3a.close.htm
http://home.postech.ac.kr/~ayo/winsock-faq/newbie.htmlの2.14
辺りの話と違いますの?
順序保証したいなら、後ろの奴みたいにハンドシェイクするんじゃない?
0360デフォルトの名無しさんNGNG
closeのあとにreceiveが来る可能性に備えとけって
MSDNに書いてあるぞ
http://msdn.microsoft.com/library/en-us/winsock/wsapiref_6jn6.asp
0361333NGNG
>>341
レスありがとうございます。
マルチポスもあれですし、時間もかけるわけ行かないので、
select使って書くことにしました。ありがとうございました。
0362ななーしさん@接続しっぱなしNGNG
>>359
最後の行余分だったな…

>>360
たぶん、CAsyncSocket::OnCloseは、
FINフラグの立ったTCP segmentを受けるとraiseするんだよね。
0363デフォルトの名無しさんNGNG
どなたかVC++でwinldap.hを使用したLDAPのアプリの作り方を教えてください.
ldap_init()でInitしたあと、
ldap_set_option()でLDAP_OPT_PROTOCOL_VERSIONを
設定しようとしたらアクセスバイオレーションで落ちてしまいます。
まあ、そこは省略もできるのでコメントアウトしたとしても、
ldap_bind_s()も失敗します。
いろいろと検索したのですが解決になる答えをみつけられません。
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/netdir/ldap/initializing_a_session.asp
個々のサンプルソースを参考にしました。そのままでは、簡単なコンパイルエラーがでますが、
変数の2重宣言のような簡単なものなのでこの問題には直接関係ありません。
ネスケのSDKを使へとかいうのは無しの方向でおねがいします。

(スレ違いかなと思いつつwinsock.hをwinldap.hが呼んでいるのでここで質問しました。)
0364デフォルトの名無しさんNGNG
WindowsとLinuxのsocket(UDP,TCP)のパフォーマンスを
比較したようなサイトってないですか?
BSD Socketベースのほぼ共通のソースを使ったものと、
それを基に各プラットフォームに最適化したものなどを
比較しているようなデータが欲しいのですが。
0365デフォルトの名無しさんNGNG
まず「socket(UDP,TCP)のパフォーマンス」を定義してくれ。
0366364NGNG
>365
単位時間あたりのUDP,TCPの送受信サイズというか
同一ハードで動作するサーバが捌けるクライアント数でしょうか?
とりあえず比較してあるデータであればそれを見てみたいのです。
0367デフォルトの名無しさんNGNG
>>366
目的を教えてくれたら俺の持ってる資料を公開してやってもいいぞ
0368デフォルトの名無しさんNGNG
MS-DOSまたはPC-DOSでWinsock APIとよく似た感じのインターフェースで
socketプログラミングできるライブラリは無いでしょうか? 市販のもので有名
なPC/TCPというものがありますが、販売終了だとか・・・。

開発言語はMS-CかTurboCです。例えばMSのLANMANで使えるsocketライ
ブラリとか、その他何か情報あれば教えてくださ〜い。
0369363NGNG
自己レスれす。
結局解決になってないのですが、
ldap_open()でudpで接続する分にはうまく動作しました。
ldap_init()とldap_set_option()をとおして
ldap_bind_s()をうまく通す方法がありましたら引き続き情報ください。
レスがつきにくいのはスレ違いだから?
0370デフォルトの名無しさんNGNG
>368
>MS-DOSまたはPC-DOSでWinsock APIとよく似た感じのインターフェースで

そんな感じの、オレも探したことあった。けど、無かった記憶。
多分、海外のプログラムマニア系のFTPとかにありそうな気が。または仕様書でも。
PC−DOSっていえば、以前、あれようのブラウザが売られてたから、
IBMに行けばなんとかなるな。無理だけど。
って、そんなん何に使うの?<368
0371370NGNG
と、言い出したので、検索したら、あったみらい。
オレは使わんが。
ttp://www.asyncsystems.com/tcpip.htm
0372ななーしさん@接続しっぱなしNGNG
>>366
> 単位時間あたりのUDP,TCPの送受信サイズというか

混みあってきたら譲り合う方式のネットワークで、
そんな性能追求しても仕方ないと思うぞ。専用のネットワークなのか?
いずれにせよ、

> 同一ハードで動作するサーバが捌けるクライアント数でしょうか?

多数のクライアントを相手にするサーバの性能は、
サーバの作りに強く依存して、network stackにはあまり依存しない。
0373デフォルトの名無しさんNGNG
>>368
 私自身は,ネットワークプログラミングの事は分からないので,
的外れかもしれませんが.
 DOS上でのネットワークプログラムとしては,以下のようなもの
があるのを知っています.

DOSVNC - a DOS Viewer for VNC
http://c0w.inode.at/mjy/dosvnc.html

 ソースコードもDLできます.
 全然的外れだったら,ごめんなさい・・・・ですが,もし参考に
なれば幸いです...
0374368NGNG
>> 370
>> 371

ここ数日探し回ったのですが、見つからないですね。教えてくださった
URL、探していた物にかなり近いのですが、高いですね・・・。(T_T)

それにしても、プログラム技術よりも基礎知識がどうも足らないようで
す。DOSでSocket通信をやるにはPacketDriverってやつがいるんです
よね? これはLANカードに付いてくる物や、FTP鯖を探せば手に入る
物もあると・・・。LANMANってのはPacketDriverではないということなの
かな? この辺、もう少し勉強してきます。(やっぱ英語力要るなぁ)

> って、そんなん何に使うの?

仕事なんです・・・。MFCしか触ったことがない新人プログラマに、でき
るかどうか調べてこい、という上司はいかがなものかな・・・と。(藁 ま、
試練ですかね。

>> 373

このソースコード、プログラミングに入ったら役に立ちそうです。どうも
情報ありがとうございます。

しかし、検索エンジンで探し回ってもわからないとき、いつも2chに行き
着いてしまうのは気のせいだろうか・・・w
0375373NGNG
>>368
 老婆心(ひょっとして甘すぎ ?)だけれど.
 参考書としては,
 「パソコンTCP/IP教科書」 アスキ− /刊
DOS上のTCP/IPにも触れられている.

 「FreeBSD ネットワーク管理ガイド」
 ピアソン・エデュケーション /刊
 UNIX系OSの FreeBSDの本だが, DOS上のTCP/IPの事にも
 触れられている.

 プログラミングには,直接関係ないが,2ch内だの
 ■★▲DOSはまだ現役! 
 http://pc.2ch.net/test/read.cgi/os/984154754/

 ■■●DOSでネットワーク●■■
 http://pc.2ch.net/test/read.cgi/os/999912322/


 あと, >>373で示したのは,
 Waterloo tcp/ip (WatTCP)
 と言われる DOS上で,TCP/IPを実装したものを含んでいる.
0376ななーしさん@接続しっぱなしNGNG
>>374
仕事かよ! 高いなんて言ってないで、
http://www.allied-telesis.co.jp/products/product/software/index.html
とっととここで買え。マニュアルも必ず買え。高いも糞もねぇ。

// まさか、MorphyOne上にportする仕事じゃねえだろうな(プ
0377名無しさんNGNG
チャットの自動応答プログラムを作りたいのですが
Javaでできますか?VBのほうがいいですか?
0378デフォルトの名無しさんNGNG
>>377
荒らしプログラムと正直に書け。
0379デフォルトの名無しさんNGNG
>>377
どっちでも、OK.
0380デフォルトの名無しさんNGNG
VC++でCAsyncSocketを使って、MSNメッセンジャーのように
メッセージをやり取りするソフトを作っています。

とりあえずメッセージ送信を、クライアント側からサーバ側へ
"MSG 送信文字列の長さ 送信先ID\r\n送信文字列"
という形式で送り、サーバ側から送信先クライアントへ
"MSG 送信元ID 送信文字列の長さ\r\n送信文字列"
というテキスト形式で送ることにしています。

受信部分は、まずOnReceive()でReceiveにMSG_PEEKフラグをつけて
256文字ほど一旦読み込み、\r\nを文字列検索してそこまでの長さを調べ、
再度\r\nまでをMSG_PEEKなしで読み込んでいます。
その後、読み込んだサイズ情報を元に、再度Receive文で
送信文字列部分を読み込む、という方法です。

しかしこの方法でテストをしているとと、メッセージをいくつかやりとりしているうちに、
急に何をsend()してもサーバに届かなくなってしまいます。
また、そうなるとサーバからのsend()も認識しなくなってしまいます。
上記のメッセージ送信以外の通信(たとえばオンライン・離席中の切替命令)
は何回繰り返してもこのような現象が起こらないため、おそらくこの
メッセージ送受信処理に問題があると思うのですが、どうにも原因がわかりません。
この現象が起こるのは本当にランダムで、同じ文字列を3回ぐらい
送信しただけで起こることもあれば、20回くらいまで耐えることもあり、
全く見当もつきません。

何が悪いのでしょうか・・・?
0381 NGNG
Windowsで非同期通知を使ったプログラムを勉強しているのですが、
send()の引数を0バイトにして呼び出したら、FD_WRITEは発生するのでしょうか?

これができればデータ送信をFD_WRITEに全部書けるので便利な気がするのですが。
もし他に方法があれば教えてください。
0382デフォルトの名無しさんNGNG
>>381
発生しないよ
0383 NGNG
>>>382
どうも。 残念(´・ω・`)・・・
0384381NGNG
こんなんでいいのでしょうかね。
PostMessage(hWnd, SM_EVENT, server, WSAMAKESELECTREPLY(FD_WRITE, 0));
0385デフォルトの名無しさんNGNG
ちょっとお伺いしたいことがあるのですがよろしいですか?
0386デフォルトの名無しさんNGNG
とりあえず書いてみそ
0387デフォルトの名無しさんNGNG
>>385よ、いいこと教えてやるから少し大人しくしてくれ。
旨いゆで卵の作り方だ。

まず、生卵を用意する。
普通は鮮度が良い程良いのだが、この調理法では古い卵でも旨くなるのであまり気にしなくて良い。
次に電子レンジに生卵を入れる。この時注意して欲しいのは
●皿を使わず、直にターンテーブルの上に置く。
●ラップ等で包まず裸のまま入れる。
●卵は1個より3〜4個置いたほうが旨くなる。

あとは、電子レンジを回して3分程チンするだけだ。(500W時)
実際に茹でてないので厳密には茹で卵とは言えないが、そこはご愛嬌。
今までの卵料理とは段違いの旨さ、ふわふわ感なので是非試してくれ。
因みに食すときは酢醤油をお勧めする。
0388デフォルトの名無しさんNGNG
>>387
 板違いというか.....
 それ実行したら・・・・・.
 以前,パソコン一般板にそういうスレが立ってたことが.
 で実行した奴が・・・・・XXXXXX(笑).
0389380NGNG
解決しました。
「OnReceiveを受けて受信処理を行う場合、Receive()は1回しか使えない」
というのが原因でした...
0390ななしNGNG
>>389 マジで?情報元きぼん
0391デフォルトの名無しさんNGNG
生のWinsockもAsyncモードではメッセージごとにrecvは1回しか使えないから
容易に類推できそうなものだが
0392デフォルトの名無しさんNGNG
ネットワークプログラミングとは全然関係ないが、スレタイトルを
よく見たら "Port3" になっていることに気がつき、感心した。
0393390NGNG
>>389,391さん
Winsock2.0プログラミングから引用
第4章 非同期転送モードの使用方法 P94 FD_READの項
「大量のデータを受信するアプリケーションの場合は、一度のFD_READ
メッセージにつき何度かrecvまたはrecvfromを呼び出すことで
データスループットを大幅に増やす方法もあります。」
とあるのですが、これは間違っているということでしょうか?
0394デフォルトの名無しさんNGNG
>>393
そのためにはWSAASyncSelectでフラグを落とせって
その周辺に書いてないか?
CASyncSocketではそういう細かい制御が
できないんじゃないの?
0395394NGNG
MSDNライブラリのWSAASyncSelectの説明から引用。
> With these semantics, an application need not read all available data
> in response to an FD_READ message--a single recv in response to
> each FD_READ message is appropriate. If an application issues
> multiple recv calls in response to a single FD_READ, it can receive
> multiple FD_READ messages. Such an application can need to disable
> FD_READ messages before starting the recv calls by calling
> WSAAsyncSelect with the FD_READ event not set.
0396デフォルトの名無しさんNGNG
ん?
最初にFD_READが来てrecvしたあと、まだバッファにデータが残ってたら
すぐに再びFD_READが来るでしょ?
で、連続してrecvすると、バッファが空なのにFD_READが
(最初のrecv直後の段階で)既に送られているので、
そのFD_READ時にrecvが失敗する(WSAEWOULDBLOCK)って話じゃないの?

2回recv出来ないとか、WSAAsyncSelectのモードとかじゃなくて、単に、
「recvが-1(BLOCK)を返しても正常に動作するように作ればいい」
ってことだと思うけど。
0397390NGNG
>>394-395
本にそのような記述はありませんでした。

>>396
ということは、recv==-1を考慮していない場合にのみ
(そんな実装アリ?)、recvを2回以上呼んではいけない
といういう意味でしょうか。なら合点がいくのですが。
0398デフォルトの名無しさんNGNG
>>397
なら本がおかしいんだろ。MSDNライブラリよりどこの
馬の骨か知れない本のほうを信じるのか?
どっちにしろ389はCAsyncSocket限定の話っぽいから
たいした問題じゃないが
0399デフォルトの名無しさんNGNG
>>398
Hookの説明には多数の間違ったサンプルが付属してたけどね。
0400デフォルトの名無しさんNGNG
同じポートでデータの送受信をする場合、sendtoとrecv(or recvfrom)を同一ループで
回して実行すると、タイミングによっては片方のポートがconnection refuse の errno
で失敗するんですが、通常、同一ポートでデータの送受信をしたい場合ってどういう
風に実装するんでしょうか?
0401デフォルトの名無しさんNGNG
400

ちなみに通信はUDPです。
0402デフォルトの名無しさんNGNG
WinSockの動作はMS単独で策定しているものではない
もし規定に従ってなかったら、それはMSの実装がおかしいだけ

そもそも、Such an application can need to disable がどういう意味なのか、
よくわからんのだが、重要なのはcanとneedのどっちだ?
0403デフォルトの名無しさんNGNG
>>400
普通にconnectもしくはaceptしてsendもしくはrecvするだけだが?
connection refuseになるタイミングってどんなの?
0404デフォルトの名無しさんNGNG
400です。
>>403
すみません。その後、自己解決しました。
相手のポートをstruct sockaddr_in型のデータに設定する所でネットワーク
バイトオーダーに変換してませんでした。つまりバグでした。
正しく設定したらできました!
0405デフォルトの名無しさんNGNG
いまさらだけど >>72 の

>255.255.255.255は全アドレスに対するブロードキャストだよね。WANも含む。

なんて大嘘に誰も突っ込まないのはなぜ??
つーか、>>74なんて、納得しちゃってるし(笑)

>実際にはルータが止めるだろうけど、

実際にはって....まるでルータの自主的な安全対策のように書くなよ。
止めなかったら、ルータじゃなくてブリッジになるだろーが(笑)
こいつ、ぜんぜんわかってなさそ・・・
255...をlimited broadcastって呼ぶのも知らんのだろうな。
知ってたら、WANを超えるなんて発想もないだろうから。
0406デフォルトの名無しさんNGNG
ちょっと調べればすぐに判ることをイチイチ指摘しても意味ないっしょ
0407デフォルトの名無しさんNGNG
winsock で、gethostbyname() のタイムアウト値って設定できるのでしょうか?
WSAAsyncGetHostByName() はなるべく使用したくありません。
0408デフォルトの名無しさんNGNG
>>407
無理
0409デフォルトの名無しさんNGNG
>>406
一連のスレッド読んでも、とてもそんな流れには見えんけどなぁ
0410デフォルトの名無しさんNGNG
selectに渡すfd_setにセットするソケットの最大数っていくつでしょうか?
0411デフォルトの名無しさんNGNG
>>410
お好きなように。
0412410NGNG
色々調べてみたんですが、FD_SETSIZEまでじゃないですか?
んで、それって256だったり1024だったりしませんか?
10万以上のソケットを監視したいんですが、一発じゃできないですかね?
できなかった場合selectでぐるぐる回そうかと思ってるんですが、
wait時間を0で指定するにはtimevalをNULLクリアして渡せばオケーですか?
0413デフォルトの名無しさんNGNG
>>412
>10万以上のソケットを監視したいんですが
下手なDoSですが。
0414デフォルトの名無しさんNGNG
何このスレ・・・・・・・?

             /ヽ       /ヽ
            / ヽ      / ヽ
  ______ /U  ヽ___ /  ヽ
  | ____  /   U    :::::::::::U:\
  | |       // ___   \  :::::::::::::|
  | |       |  |  |     U ::::::::::::|
  | |      .|U |  |       ::::::U::::|
  | |       | ├―-┤ U.....:::::::::::::::::::/
  | |____ ヽ     .....:::::::::::::::::::::::<
  └___/ ̄ ̄      :::::::::::::::::::::::::|
  |\    |           :::::::::::::::::::::::|
  \ \  \___      ::::::
0415デフォルトの名無しさんNGNG
>412
とりあえずな、
http://www.kegel.com/c10k.html
ここみろ。
0416デフォルトの名無しさんNGNG
>>412
10万って、既にTCPのポート数を超えてると思うんだが(^^;
0417デフォルトの名無しさんNGNG
>>416
ほんとだ・・・。
0418410NGNG
>>413
DoSならselect()で待つ必要はないでしょう。

>>415
ありがとうございます。
ですが、standerd lilaryはリコンパイルできる環境ではないんです。
0419410NGNG
TCPの接続はunsigned shortでしたっけ?
んじゃあ、サーバを分けるようにします。
なんにせよ、数万コネクションを処理したいんで、困ってます。
とりあえず、ループしながら100個くらいずつ調べることにします。
0420デフォルトの名無しさんNGNG
ランアナライザを作りたいのですがどこから勉強をすればいいでしょうか
0421デフォルトの名無しさんNGNG
>>420
まず英語でランはどう書くかから。
0422デフォルトの名無しさんNGNG
>ですが、standerd lilaryはリコンパイルできる環境ではないんです。

ハァ? 意味がわからん。standard libraryって何さ?
selectを使うのが必要条件だってことか?
0423410NGNG
>>422
そうです。
0424デフォルトの名無しさんNGNG
>>422
stdlib
0425デフォルトの名無しさんNGNG
>416
TCPのPORTは関係ないだろ。
問題は、ソケットハンドルだろ。
0426デフォルトの名無しさんNGNG
10万の同時接続で、selectは無謀やないやろか、、

あとは、10万/FD_SETSIZE 分forkするとかやな、、
0427デフォルトの名無しさんNGNG
>>425
コネクション張る以上、こちらのポートも消費されると思われ。
0428デフォルトの名無しさんNGNG
>>423は俺じゃないんですが。
よく考えれば確かにselect()を使う必要はないです。
ていうか、一回acceptして読み込んだら、後はreplyするだけで良かったみたいです。
ソケットの配列でも作って憶えておきます。お騒がせしました。

>>426
それも無謀っぽいですけどね(^^;
staticのエリアが結構でかいんで。
0429410NGNG
>>428は俺です。

>>427
いや、消費されませんよ。
コネクションは向こうのIP:PORTとこっちのIP:PORTなんで、向こうが違えば問題ないです。
0430デフォルトの名無しさんNGNG
TCPパケトの宛先は、SRC_IP:SRC_PORT:DST_IP:DST_PORTの4つで区別
されるから、SRC_PORTが被っても大丈夫じゃないかと思ったんだが、、
0431デフォルトの名無しさんNGNG
>>429
いや、だから65536以上のコネクションは・・・
0432デフォルトの名無しさんNGNG
>>431
はい、Portではなくてソケットディスクリプタの制限ですね。
0433デフォルトの名無しさんNGNG
>425, >427 >429 >431 >432
あれれ、一回りしているよ、、?
0434デフォルトの名無しさんNGNG
>>426
それは更に上を逝く無謀さだとおもうが(笑)
0435デフォルトの名無しさんNGNG
apacheとかって10万とか同時接続できるの?
0436デフォルトの名無しさんNGNG
FD_SETSIZEが512やとすると、100K/0.5K = 200.
200 processか、、、たしかにきついな、、
0437デフォルトの名無しさんNGNG
>435
無理です。
0438私の名前は名無しです。NGNG
そもそもselectだと数百ソケットでもかなりツライ。
kqueue等の別の手段を考えるべき。

http://www.kegel.com/dkftpbench/Poller_bench.html

kqueueは爆速なんだけど、FreeBSD限定なんで注意。
でも、一度このパフォーマンスを味わってしまうと
もうselectには戻れませぬ。
# NetBSDとかLinuxとかに移植しようとする動きはあるようだけど、
# まだ実用レベルじゃなさそう。
0439デフォルトの名無しさんNGNG
そんなん一個のマシンで裁こうとするのがソモソモ間違い。
財力にモノを言わせてスケールアウトすべし。
0440デフォルトの名無しさんNGNG
>438
415で既出
0441デフォルトの名無しさんNGNG
IPアドレス増やせばポート数問題はとりあえずないような。
clientに細工が要るけど、それくらいの接続数を確保する必要のある規模の
サービスなら最初はロビーに尋ねるんじゃなかろうか。
0442デフォルトの名無しさんNGNG
ずっと気になってるんだが、誰も設計については突っ込まないんだな。
10万以上のソケット…って時点で誰もがシステムの設計が怪しいって感じると
思うんだけど。もちろん、シェイプアップして10万以上が限界ってなら分かるけど。

結論からいうと1台のマシンじゃ無理。>>415,>>438の方法でも1台で10万近い
ソケットを捌くのは難しい。俺は>>439に一票。そもそも1台でやる仕事じゃない。
0443439NGNG
「10マソ同時アクセス」じゃなくて「ユーザが10万人」だったら可能だね(笑)
0444デフォルトの名無しさんNGNG
>10万以上のソケットを監視したいんですが、一発じゃできないですかね?
…「監視」ってんだから同時アクセスじゃねーの? >>410のしたいことが分からんから
何とも言えないが.
0445デフォルトの名無しさんNGNG
ごめん、sage忘れた….
0446410NGNG
うぃ。16kコネクション程で分散する方針で話はつきました。
10万コネクションは最大数ですが、同時です。
ソケットの監視はメンドイんで、定期的に直接眺めることにしました。
select()によるタイムアウト処理はしません。
0447デフォルトの名無しさんNGNG
で、結局SRC_PORTはダブってもいいの? よくないの?
0448デフォルトの名無しさんNGNG
SRCはダメだってば
0449デフォルトの名無しさんNGNG
>>447
マスタリングTCP/IP・入門編でも読め. 基礎がなってない.
0450デフォルトの名無しさんNGNG
誰か限界について試した人いる?
0451デフォルトの名無しさんNGNG
パケットがすげえたまにしか来ないんなら10万ぐらいできそうな気がする
0452デフォルトの名無しさんNGNG
>>451
パケットじゃなくてソケット監視なのよね。

今考えると激しく意味不明。
0453デフォルトの名無しさんNGNG
つうかデータの流量抜きに設計できるわけないわな。
0454デフォルトの名無しさんNGNG
マルチスレッドじゃだめなの?
0455デフォルトの名無しさんNGNG
スレッドを10万も起動するの?
0456デフォルトの名無しさんNGNG
>>455
無理なの?
0457デフォルトの名無しさんNGNG
>>456
って言うかそれになんの意味が・・・。
0458デフォルトの名無しさんNGNG
>>457
スレッドならselectする必要ないんじゃない?
0459デフォルトの名無しさんNGNG
そもそも、1proc で 10万も file や socket を開けるもの?
0460デフォルトの名無しさんNGNG
>>459
できるよ。unix方面ではカーネルコンフィグやrlimitの設定が必要だったりするけど。
0461デフォルトの名無しさんNGNG
Javaならスレッドで実現するのが美しいですね。
最近はパフォーマンスも上がってきたことだし、
Javaで10万本スレッド立てれば余裕なんじゃないかな。
0462デフォルトの名無しさんNGNG
>>461
どの道、>>460は必要だろ。
0463デフォルトの名無しさんNGNG
「たった」4GBじゃ10万もスレッド作ったら
スタックのための空間が枯渇しませんか?
0464デフォルトの名無しさんNGNG
4000M/100K=40K...

javaならjava.nio使え。
0465デフォルトの名無しさんNGNG
>>464
同感。

スレッドを無限に生やしても負荷が低いなんて夢見るなよ。>>461
0466デフォルトの名無しさんNGNG
10万なんてオーダなら、やっぱ、負荷分散装置使って、
複数のマシンに処理を振り分けるのが普通だよね。

大規模なwebサービスやってるところのほとんどはそんな感じでしょ。
0467デフォルトの名無しさんNGNG
Irvineなどでは分割ダウンロードをサポートしてますが、
非分割DLよりも分割DLのほうが転送量を稼げるのは何故なんですか?
0468デフォルトの名無しさんNGNG
サーバの1コネクションに対する転送量かな
0469デフォルトの名無しさんNGNG
たとえば、10Mbpsの口をもってて、フルスピードだせる鯖があるとしよう。
ここに、100の高速なクライアントが同時接続するとする。おっと、QoSは無しだぜ。

素直に計算すると、一接続あたり100Kbpsだわな。

で、ここで、分割DLと称して、同時接続数を101に増やすクライアントが
1つあるとしようか。 このとき、合計200接続で、1接続あたり50Kbpsだ。
101個の同時接続を果たしたクライアントは、十分時間がたつと、
5050Kbpsの帯域を得ることができる。

本当はもっと多くの要素が絡んでくるが、つまりはそういうことだ。
0470467NGNG
>>468-469
早速のレス、ありがとうございます。

キーポイントは「1コネクションあたりの転送量」だと思うのですが、
これは、どのように決定されるのでしょうか?

「1コネクションあたりの転送量」を計算で求めることが可能であれば、
例えば、2台のPC間で、100MBのデータを T秒で転送したいときに
必要なコネクションの数を計算することが出来ますよね?
あくまでも理論値かもしれませんが。

(私にとって)多少内容が難しくても構わないので、
文献等があれば教えていただけませんか?

ずっとぐぐってるんですが、キーワードが絞れなくて
ファイル共有やレンタル鯖情報ばかり引っかかってます・・。
とりあえず、さっき見つけた↓の論文を見つけたので読んでみます。
ttp://www.internetconference.org/ic99/papers/s02p03.pdf
0471デフォルトの名無しさんNGNG
>>470
文献も何も簡単な計算で求められるだろうが。ちょっとは考えれ。
0472デフォルトの名無しさんNGNG
2台のPC間に何も無ければ、コネクション結ぶだけオーバーヘッド食って遅くなる。
オーバーヘッドを除けば、何本張ってもあまり変わらない。
転送時間を制御したいなら、コネクションの数で行うのはナンセンス。
単に送り側がタイマで制御すればよい。
0473467NGNG
>>471
すみません、考えます。

>>472
転送量を絞る制御ならタイマで行えますが、
「1コネクションの最大転送量」を超える量を転送したい場合も
コネクション数を増やさずに、タイマで行えるのですか??
# 私は、大きなデータを短時間で転送したいんです…。

ちょっと頭冷やして考えてきます・・・。
ありがとうございました。
0474デフォルトの名無しさんNGNG
ソケットバッファをなるべく広げて、大きな単位で send/recv すればかなり速くなるよ。
それから、diskI/O が入るなら、スレッド使って、ダブルバッファリングでの転送も有効。

あと、TCPがなんとかオプション(わすれた)ってのをサポートしてれば、パケットロスで
差分転送だけで済む。Solarisなら、7ぐらいからサポートはじめたやつ。
0475デフォルトの名無しさんNGNG
nioとか言ってるバカがいるのか
0476デフォルトの名無しさんNGNG
nioそんなにひどいですか?
いくらなんでもスレッド10万とかいうアイデアよりは
マシだと思いますが
0477デフォルトの名無しさんNGNG
nio以前はスレッド10万しかありませんでした...
ところでnioはバグバグだったようですが安定したんですかね
0478デフォルトの名無しさんNGNG
rs232c通信からwinsock2でのtcpic通信に変えようとしてるんだけど
rs232cだとPurgeCommで入力バッファをクリアできたけど
winsockだとどうするのん?
0479デフォルトの名無しさんNGNG
>>478
TCPが勝手にやるベ
0480デフォルトの名無しさんNGNG
スレッド10万って何?
スレッドを10万個作るってこと?
0481デフォルトの名無しさんNGNG
>>480
何を今更・・・。

0482デフォルトの名無しさんNGNG
以前あったスレだが、recvfromしつつsendtoって
できるものなのか?
マルチスレッド使わなくても。
0483デフォルトの名無しさんNGNG
>>482
フォンノイマン型コンピュータの性質。

それは置いといて非同期IOってできるの?
0484デフォルトの名無しさんNGNG
>>482
非同期IOすればできるんでない?やったことないけど。
0485482NGNG
>>484
やっぱ非同期IOとかでないと無理なんかねぇ?
それってwinsock2.0だろ?
知識ないっす。
recvfromとsendtoを交互で呼び出しても、sendtoしてる間は
recvfromが実行されてないわけだからなぁ。
なんかうまいアンド簡単な解決策はないものだろうか・・・。
0486デフォルトの名無しさんNGNG
> 知識ないっす。

調べたり、身に付けたりする能力がないなら手を引いたほうがいいと思うよ。
0487デフォルトの名無しさんNGNG
>>485
>それってwinsock2.0だろ?

知るかボケ。と。
0488C ◆7j4tWa.I NGNG
すいませんC#のTcpClient & NetworkStreamクラスを利用した場合の
質問なのですが、どなたか、下記の一連のレスについて分かる方が
いましたら、ご教授願いたいのですが。。。
http://pc3.2ch.net/test/read.cgi/tech/1027531796/586-594

よろしくお願いします。
0489ななーしさん@接続しっぱなしNGNG
>>485
> それってwinsock2.0だろ?
> 知識ないっす。(略)
> なんかうまいアンド簡単な解決策はないものだろうか・・・。

お前の使うOSをここに晒せ。
0490デフォルトの名無しさんNGNG
窓の方にメッセージが送られてくるAsyncSocketは
WinSock1.xの時代からあるんでは?
#だって、スレッドのないWin3.1の解決策だったから。
0491デフォルトの名無しさんNGNG
スレッド10万age
0492デフォルトの名無しさんNGNG
パケットキャプチャプログラムってJavaで
かけますか?
0493デフォルトの名無しさんNGNG
>>492
自分に飛んでくるのはもちろん受け取れるぞ。よかったな。
0494デフォルトの名無しさんNGNG
>>485
下手は考えるまえに適当なソースでも読め。

select して書き込み可能状態なら sendto は block しないで即かえってくる。
select して読み出し可能な状態なら、recvfrom は block しないで即かえってくる。
そゆことになってるからあまり心配すな。

下手に winsock の非同期 API なんか使うと将来 linux にポートするとき困る。
0495494NGNG
失礼しました m(_ _)m
UDP の話だったんですか?
なら thread 使うのが良いと思う。
0496デフォルトの名無しさんNGNG
ちょっと質問です。
UDPでパケットを送信する際に一定の間隔を空けなければいけない
なんていう状態ってありますでしょうか?

簡単な送信&受信プログラム(指定サイズのパケットを送信&受信)を作成して
パケットが正しく届くか確認したんですがどうもパケットがロストしてしまうんですよね。

最初はノーウェイトでぶん回してたのが原因かと思い、20パケット送ったら10msスリープ
するとかしてみたんですが、それでもロストパケットが発生するんです。
512バイトのパケットを送ったとしても上記の設定では実質4Mbps程度なので問題ないとは
思うのですが…ドライバとかカードの性能なのか、はたまた他に原因があるのか。

こういった現象について何か知ってる方がいらっしゃったら解決策等を教えていただけませんか?
0497496NGNG
なんかえらい長文になってた…すみません
0498デフォルトの名無しさんNGNG
UDPパケットを落とすかどうかの判断は双方のOSがそれぞれやってっから
しんどいぞえ
0499496NGNG
>498
う〜ん、OSとかになるとプログラムの作りでは無理やり回避させるしかないのかなぁ。

ちなみに、1パケット毎に1msなら問題なしなんで、やはりノーウェイトで
の送信にある程度の限界があるのかも…いや、そんなはずは…でもなぁ。

0500ななーしさん@接続しっぱなしNGNG
>>496,497,499
つーか、お前はTCP/IPを一から勉強し直せ。
早めにやっておくと、programがこんがらがる前に取り返しがつく。

packet lossを防ぐのは、TCP moduleの方が君よりずーと得意だと思うぞ。
0501デフォルトの名無しさんNGNG
>>499
ノーウエイトで送れば、送信側より受信側のほうの処理が遅ければ
ロストするかもよ?もしくは間に入ってるルーターの速度とかは大丈夫?
0502デフォルトの名無しさんNGNG
つうか、いくらUDPだからってそう頻繁にロストするとは考えにくいんだがなぁ。
その回線やPC、他にイロイロ動いてんの?
0503496NGNG
>500
いや、TCPの送出モジュールは既にあって今UDPの送出モジュールを作らなければ
いけないのですよ。

>501
受信側ですか…なるほど、送信側ばかり気にしていた感があるので
受信側の受け方も少し見てみます。
0504496NGNG
>502
他に動いているものはウィルスバスターくらいかと。
回線は完全にローカル環境(PC-HUB-PC)で試験してます。
0505デフォルトの名無しさんNGNG
>>504ウイルスバスターは思いと重います。
0506デフォルトの名無しさんNGNG
特定のアプリのソケット通信の内容を傍受するには、どのようにすれば良いのでしょうか?
誰かご存知の方はおられませんか。

デバッグモードで立ち上げてsockの関数エントリを書き換えるといったものではなく、ただ
単に何を受信し、何を送ったかわかれば良いのですが。
0507505NGNG
最近ウイルスバスターつかってないのでわかりませんが、
受信データをチェックする機能を簡単にoffできたと思います。
それによってPCが相当軽くなった記憶があります。
0508デフォルトの名無しさんNGNG
ethrealとか使えよ。
プログラム側の話なら、WinPCap。
0509ななーしさん@接続しっぱなしNGNG
>>502
> つうか、いくらUDPだからってそう頻繁にロストするとは考えにくいんだがなぁ。

そういう仮定自体、全くインターネット的ではないのだが…

>>503
> 受信側ですか…なるほど、送信側ばかり気にしていた感があるので
> 受信側の受け方も少し見てみます。

特定の環境だけで(快適に)動くsoftwareを作っているわけ?
0510デフォルトの名無しさんNGNG
http://www.kt.rim.or.jp/~ksk/sock-faq/unix-socket-faq-ja-5.html#ss5.9
これはどうよ?
0511496NGNG
>509
特定環境というわけではないですが、まずは他に影響のないような環境で
動作を確認してからと考えています。
0512ななーしさん@接続しっぱなしNGNG
>>511
実装で確認する前に勉強した方がいいよ。

> 特定環境というわけではないですが、

なら無駄な試行錯誤になることが確実だから。

頭がネットワークプログラミングに切り替わってない。
0513デフォルトの名無しさんNGNG
>>508
いや、解析ダンプしたいわけではなくて、MMORPGの地図ナビゲートツールを作りたい
ので、サーバーから送られてくる現在の座標を得たいのです。
0514ななーしさん@接続しっぱなしNGNG
>>513
それやりたきゃ>>508のWinpcapでしょ。
「特定のアプリの」はsource port番号指定で出来ない?
0515デフォルトの名無しさんNGNG
>>514
Winpcapを使いますと、Winpcapをインストールしないといけなくなるので
一般配布する事を考慮して独自にキャプチャしたいと考えています。

あとrawモードでキャプチャする方式だとすると、ネットワークカードが入
っていない環境では問題があるのではないかと。
0516デフォルトの名無しさんNGNG
>>515
VBスレにいた厨房だな。
Windows自体がそういうAPIを提供していない以上
自分でデバドラ書くかWinpcapとかいうの使うしかないでしょ。
あとネットワークカードが入っていない環境でなんの問題があるの?
素直にWinsock2.2を使えよ
0517デフォルトの名無しさんNGNG
>516
ダイヤルアップのことを想定しているのでわ?
0518デフォルトの名無しさんNGNG
>>517
Winsock2.2はダイアルアップのも取れるよ
0519デフォルトの名無しさんNGNG
>>516
そのVBスレの厨房は誰だか知りませんが、もちろんSockのAPIでどうにかするという
発想では無理でしょう。またネットワーク全体をワッチしたいわけではないので、デバ
ドラを書く必要は無いでしょう。

現にデバドラどころかDLLも使わず、後から起動して自由に特定アプりのパケットを
監視、フィルタリングできるツールというのが出回っているので、本質的には可能な
のでしょうが、考えていたらこれはソケットの知識じゃなく、別の知識が無ければ書
けないような気がしてきました。


>>517
その通りです。
0520デフォルトの名無しさんNGNG
>>519
理路整然としているが結局のところは何も語っていないというのがおもしろい。
0521デフォルトの名無しさんNGNG
>現にデバドラどころかDLLも使わず、後から起動して自由に特定アプりのパケットを
>監視、フィルタリングできるツールというのが出回っている

ツール名教えれ。
0522デフォルトの名無しさんNGNG
>>520
詰まっているんですよ。結局、大体の方向性はこれだろうなというのが分かっていま
すが、突破口が見つからないという。しかし他の人がすんなりやっているからには、
何か知らない出口があるのかも知れないと。それで相談をと。

下にあったVBのスレを探してみますと、似たような事をしたい人が質問をしていました。
すると653で

Winsock2.2を使えばCでちゃちゃっとできるが
VBでもAPIさえ定義すればちゃちゃっとできると思う。

というアンサーが。本当にちゃちゃっと出来る事でしょうか。
0523デフォルトの名無しさんNGNG
Linuxのソケットで質問です。
acceptしたソケットに応答するためsendするときに、すでにクライアント側でshutdown/closeされている場合、
sendすると例外が発生してプログラムが終了してしまいます。
これを回避するには

・応答するためのsocketがすでに閉じられていないか判定する
・sendで例外が発生しても終了しないようにする

のどちらかだと思うのですが、どちらでもいいので対処法を教えて下さい。
0524デフォルトの名無しさんNGNG
>>521
例えばWPEです。他にはhttp://treds.co.uk/ragfiles/あたりなどからも何か手に入る
かと思います。
0525505NGNG
>>523例外をcatchすればいいだけでは・・・・・・。
0526デフォルトの名無しさんNGNG
>512
Windows Packet Editor 1.3なるものを落としてみたが、
"WSKGSPY.VXD" なるファイルがついてるし、
>This tool work under w95 and w98 only.
ってかいてあって、WindowsXPでは起動しねーし。

つか、vxdの役割はわかっているのか?>524
0527デフォルトの名無しさんNGNG
>>526
WPEは確かにVXDがついていますが、これで組んだ実行形式のフィルタはVXD無し
で動くようです。
NT系でやるには、WPE Proの方を使います。これにはDLLがついていますが。
0528デフォルトの名無しさんNGNG
>>522
Winsock2.2でぐぐってみろ、そのまんまが見つかるから
0529デフォルトの名無しさんNGNG
>>523,525
SIGPIPE喰らってんじゃないの?
signal(SIGPIPE, SIG_IGN)しときな。
0530デフォルトの名無しさんNGNG
>>525
すんまそん、素のCなんです。
0531デフォルトの名無しさんNGNG
>>529
あ、PIPEですか。やってみます。
0532496NGNG
え〜と、パケットロストの件ですが解決できました。
直接の原因なんですが、socketの受信バッファが足りてませんでした。

WinPCapにて送信側、受信側のパケットを監視したところパケットはロストせずに
届いてたので、その辺から510のページ見て受信バッファの設定して…
って感じでした。

皆さんありがとうございました。ほんと、助かりました。
0533デフォルトの名無しさんNGNG
>>529
できますた。ありがとうございます。
0534デフォルトの名無しさんNGNG
>>528
もしこれの事でしたら、もう何ヶ月か前に見たのですが、ちょっと違うのです。
というのは、パケットを見るだけなら良いのですが、フィルタができないものでして。

http://homepage2.nifty.com/spw/hint/PacketDump.html
0535デフォルトの名無しさんNGNG
IPアドレスなりPortなりで、自分でフィルタリングすればいいんじゃねぇの?
0536デフォルトの名無しさんNGNG
>>534
おいおい。フィルタってIPやポートでするんだろ。
だったら受信したパケットにIPやポート番号が入ってるんだから
それを見るってことだよ。
君はCOBOLerか?
0537デフォルトの名無しさんNGNG
すにっふぁーな文脈で使われるフィルタとは、たとえば
TCPの**番ポートだけをキャプチャし、それ以外は捨てる、
と言うような意味。

おそらく、どこかの板の方言で、横取ったパケットを、ルールに従い
書き換えて元々の通信しているホストにつかますことを、
「フィルタ」と呼ぶのではないでしょうか。

いずれにしても、506はコテハンにして、用語を慎重に選択すべきだとおもふ。
0538デフォルトの名無しさんNGNG
>>537
混乱させないでくれよ。
>>506の言ってるのは前者でいいだろ
0539漏れはコテハソNGNG
>>537
これは失礼しました。
おっしゃる通り、この場合のフィルタとはチート用語の意味のフィルタでして。
一般用語のフィルタリングとは全く意味が違います。
用語には気を付けます。

>>538
後者なのです。
0540デフォルトの名無しさんNGNG
どうして>>537が後者だとわかったのか不思議だ
0541デフォルトの名無しさんNGNG
手がかりは>>513なのか?
MMORPGっての知らないからわからないのかな。うーん。
0542デフォルトの名無しさんNGNG
不思議だね。後者をフィルタと呼ぶなんて初めて知ったよ。考えもしなかった。
0543デフォルトの名無しさんNGNG
でも、>>513の要求は、普通に監視すればよいと思うのだが。
0544デフォルトの名無しさんNGNG
>>543
そうだよねー。そう、思うよね。
0545漏れはコテハソNGNG
>>540
場合によっては余計な刺激となる部分を隠している事に気付かれたのでしょう。

>>542
チーターの世界の隠語だと思います。


何でフィルタもとい、パケットの編集を要するかと言うと、いや別に編集はできな
くても良く、送信できる必要があるだけですが、こちらからコマンドを送ると座標
が返ってきたり、周囲にある障害物の情報が返ったりするので、ナビツールとし
て成り立たせるためにはパケットを送信する必要があるためです。
0546(・∀・)NGNG
質問します。UDPでソケット作って送受信をおこなうクライアントおよびサーバ
のPGやってるんですが、UDPソケットでクライアントがconnectして、readおよび
writeを使った送受信ってどうやるんですか。

サーバ→read
クライアント→write

ではじめのやり取りはできるのですが、そのあと

サーバ→write
クライアント→read

とやっても、サーバ側に、相手がわからんというエラーで
落ちちゃいます。

UDPでサーバ側のwriteはできないのでしょうか?
もしできるのなら、例をみたいのですが。

環境はRH7.2のLinux環境です。
0547デフォルトの名無しさんNGNG
>>546
UDPでConnectはしませんが、何か?
0548デフォルトの名無しさんNGNG
>サーバ→read
>クライアント→write
>ではじめのやり取りはできるのですが、

マジですか!?
0549デフォルトの名無しさんNGNG
>>546
UDPとTCPの違いを勉強しなおしてから出直してください。
0550デフォルトの名無しさんNGNG
なぜTCPの前にUDPをやりたがるのかが正直分らん
0551(・∀・)NGNG
しゃーないんです。UDPでconnectしないことぐらいしってますし。
テストしてるんですが、どうしてもUDPでwrite、readの送受信が
やりたいんです。
0552デフォルトの名無しさんNGNG
しゃーないんです。UDPでconnectしないことぐらいしってますか。
テストしてるんですか?どうしてもUDPでwrite、readの送受信は
できないんです。
0553デフォルトの名無しさんNGNG
しゃーないんです。UDPでconnectしないことぐらいしってますか。
テストしてるんですか?どうしてもUDPでwrite、readの送受信は
できないんです。
 
0554デフォルトの名無しさんNGNG
しゃーないんです。UDPでconnectしないことぐらいしってますか。
テストしてるんですか?どうしてもUDPでwrite、readの送受信は
できないんです。
0555デフォルトの名無しさんNGNG
>>551
なんか、ここで聞くやつは、わかってないくせに生意気な態度のやつが多いな。
0556デフォルトの名無しさんNGNG
connectしないってことは、送信するときは相手を指定して送らないといけないんだぞ
要はクライアントもサーバーにしなきゃいかんのだぞ
接続って概念がないんだぞ
ただ送るだけなんだぞ、ただ来たパケットを受信するだけなんだぞ
0557(・∀・)NGNG
しらないんだったら、しらないっていえば?
ばかみたい。

ちなみに、UDPでもクライアントがconnectすればサーバ側のreadにたいして
writeでデータおくれます。

逆ができなくてこまっていたんですけど。聞いてもむだみたい。
0558デフォルトの名無しさんNGNG
>>557
そうですね。無駄です。さようなら。
0559デフォルトの名無しさんNGNG
>>557
ソース晒してみろ。オレが添削してやるよ。
0560デフォルトの名無しさんNGNG
>>557
なんで、sendto や recvfrom 使わないの?
0561学生NGNG
gethostbynameからhostentの構造体のポインタをとってきて、そのメンバの
h_addr_list[0]をに格納されているアドレスを10進数方式で表示するプログラ
ムをつくっているんですけど、アドレスがうまく表示されません。

ちなみに環境はRedHat7.3+gcc2.96です。

#include <netdb.h>
#include <stdio.h>

main() {

struct hostent *ht;
char *host = "www.2ch.net";

if (ht = gethostbyname(host))
printf("The address of %s is %s\n", host, inet_ntoa(ht->h_addr_list[0]));
else
printf("error\n");

exit(0);
}
0562デフォルトの名無しさんNGNG
> inet_ntoa(ht->h_addr_list[0])
が文字列へのポインタとはとても思えない。
それにたいして、%sを使用しているところ。
0563デフォルトの名無しさんNGNG
IPプロトコルの仕組み全然知らないんですが、
UDPでsendtoしてパケットを送信すると、いちいちIPアドレスから
相手のMACアドレスを引いて送信することになるんですよね?
かなりのタイムロスになる気がするんですが、コネクションを張れば解消されるのでしょうか?
0564学生NGNG
>562
>> inet_ntoa(ht->h_addr_list[0])
>が文字列へのポインタとはとても思えない。

manで調べたら、
char *inet_ntoa(struct in_addr in);
と出ましたが、これって文字列のポインタじゃないんですか?


あと関係ないかもしれませんが、ht->h_addr_list[0]をstruct in_addrのポイ
ンタにキャストしてみたんですけど、結果は同じでした。。。

ちなみに実行結果は
The address of www.2ch.net is 24.152.4.8
となります。(本当は64.71.145.43)
0565デフォルトの名無しさんNGNG
>>563
一度IPアドレス→MACアドレス変換をした結果はarpキャッシュに入るから、
毎回MACアドレスを引きにいったりはしないよ。

「コネクションを張れば」って、UDPにそんなものはないです。
UDPに対してconnect()ができるのは、sendto()で毎回宛先アドレスを指定
するかわりにあらかじめ宛先を決めておける、程度の意味しかない。
connect()してプロトコル上何か違いがあるわけじゃないです。
0566デフォルトの名無しさんNGNG
>>562

inet_ntoa()は文字列へのポインタを返す。だからそれに対しての %s
は間違ってはいない。

=== freebsd の man より ===
The routine inet_ntoa() takes an Internet address and returns
an ASCII string representing the address in `.' notation.
  ^^^^^^^^^^^^
===========================

問題なのは、inet_ntoa()渡している引数の方だろう。

>>564よ
struct in_addr tmp;
memcpy(&tmp, ht->h_addr_list[0], sizeof(tmp));
printf("%s\n", inet_ntoa(tmp));

やってみ。
0567デフォルトの名無しさんNGNG
>>561
h_addr_list[0]はアドレスそのものが格納されてるわけじゃなくて、
アドレスへのポインタが入ってる。

inet_ntoa()にはstruct in_addrへのポインタじゃなくて実体を渡すように
なってるので、inet_ntoa(*(struct in_addr *)ht->h_addr_list[0])
にするとちゃんと表示されたよ。
0568 NGNG
細かい事ですが、ポートやソケットディスクリプタ用に用意した変数の
初期化(無効な初期値の設定)は何を代入すべきでしょうか?

int port = 0;
int sockfd = 0;

とかでいいのかな?
0569デフォルトの名無しさんNGNG
socket()の戻り値は-1でエラーだから-1がいいだろうね
いわゆるunixでは、0は少なくともfdとして有効な値だから避けたほうがいい

portは0は使われないという保証があったっけ?
0570デフォルトの名無しさんNGNG
sockfd は俺は -1 にしてるな。
port は別に初期化しておく必要はあまりないな。
作るソフト次第でデフォルトポートを設定する。
0571 NGNG
ということは、一応 port も-1にしておく方がいいのかな
0572デフォルトの名無しさんNGNG
port0はウェルノウンポートとして予約済み。
0573学生NGNG
>>566,>>567
うまくいきました!ありがとうございます。

ポインタでつっかかるなんて、まだまだ厨房ですね...
0574デフォルトの名無しさんNGNG
厨房もいいとこだ。
0575デフォルトの名無しさんNGNG
>>571しかしportを入れる変数をshortにしてしまい、-1を入れたらport 65535と間違える罠。
0576デフォルトの名無しさんNGNG
>>575 の言う通りの間違いをやらかしそうだな。

>>568 はいったいどんなプログラムを作りたいのよ?
0577デフォルトの名無しさんNGNG
>>575
shortがデフォルトてunsignedな処理系って見たことないぞ
0578ななーしさん@接続しっぱなしNGNG
>>546
ちゃんとサーバ側でもconnect(2)しているの?

UDPのconnect(2)って、kernel内のsocket構造体に、
「このUDP socketの宛先はここなのよん」と書き込むだけ。

>>546
> サーバ→write
> クライアント→read
>
> とやっても、サーバ側に、相手がわからんというエラーで
> 落ちちゃいます。

やってないから、「サーバ側『で』」エラーが起きちゃうんじゃねーの?
0579デフォルトの名無しさんNGNG
>>577
そりゃchar以外の無印整数型がunsignedだったら規格違反だし
0580デフォルトの名無しさんNGNG
アナログ回線だとノイズが乗ってしまうのですが、
HTTP等のプロトコルでノイズの対処はどのようにすればいいのでしょうか。
0581デフォルトの名無しさんNGNG
下層でやってくれる
0582デフォルトの名無しさんNGNG
>>580みたいなのを諺でなんていうんだっけ?
0583 NGNG
灯台モト冬樹
0584デフォルトの名無しさんNGNG
捕らぬ狸の皮算用?
0585デフォルトの名無しさんNGNG
正直者が馬鹿を見る?
0586デフォルトの名無しさんNGNG
旅は道連れ世は情け
0587デフォルトの名無しさんNGNG
泣いて馬謖を斬る?
 
0588デフォルトの名無しさんNGNG
氏して屍拾うものなし?
0589デフォルトの名無しさんNGNG
渡る世間は兎ばかり 
0590デフォルトの名無しさんNGNG
ウサギばっかり! ステキ! 萌え!
 
0591デフォルトの名無しさんNGNG
多分>>590が考えてるような兎はいない
0592デフォルトの名無しさんNGNG
>582
石橋を叩きて渡る?
羮に懲りて膾を吹く?
0593デフォルトの名無しさんNGNG
馬鹿に付ける薬なし
0594デフォルトの名無しさんNGNG
振り向くとしょーえい
0595デフォルトの名無しさんNGNG
振り向けばショーエイ 
0596 NGNG
振り向けば孫の禿げ
0597デフォルトの名無しさんNGNG
  
0598デフォルトの名無しさんNGNG
あの、、、そろそろスレにもどりませぬか?(w
0599デフォルトの名無しさんNGNG
ネットにダイヤルアップでつながっているか否かを調べる方法はありますか?
0600デフォルトの名無しさんNGNG
杞憂?
0601デフォルトの名無しさんNGNG
>>599
win32環境?
0602デフォルトの名無しさんNGNG
>>599
リンクの種類を知りたいのなら OS 依存。
IP reachability を知りたいのなら適当なホストへの到達性を調べる。
0603599NGNG
すいません、Win32環境です。
0604デフォルトの名無しさんNGNG
>>603
だったらwininetでMSDL調べるべし。
0605599NGNG
わかりました。
RasEnumConnectionsで出来ました。
でもこれってADSLなどの環境でもRASPPPoE使われたら、ダイヤルアップと判断しちゃいますよね。
それはどうしようもないか・・・。
0606デフォルトの名無しさんNGNG
>>605
Ras系のAPIで接続に使われてる回線の種類を取得できない?
0607デフォルトの名無しさんNGNG
具体的にはRASENTRY構造体のszDeviceTypeメンバー
RASDT_PPPoEになるのはXPのPPPoEを使った場合だけみたいだけど
RASPPPoEではどうなるのかむしろ報告きぼんぬ
0608デフォルトの名無しさんNGNG
おまいらスレ違いなのでwin32APIスレ等に行きたまへ
0609デフォルトの名無しさんNGNG
移動したので以後はあっちで。
http://pc3.2ch.net/test/read.cgi/tech/1028580373/530-
0610デフォルトの名無しさんNGNG
すびばせん、ちょっとすれ違いかも知れませんが、たっているスレの中で一番近い内容だったので、質問させてください。
現在、OpenSSLを実装して、通信しようとしていますが、SSL_connectでこけます。開発は、C言語でWinsockです。
SSL_library_init()
SSL_load_error_strings()
SSL_CTX_new()
     connect()
SSL_new()
SSL_set_fd()
SSL_connect()
の順序にて、関数を実行していますが、他に必要なイニシャル(SSL_connect前にすべき事)はありますか?
本もWebも調べたのですが、ほとんどのサンプルは、これと同じように書いてあります。
(もちろんconnect()は完了してから、後の処理を行ってます)
0611610NGNG
sageちっち。もちろんAGE
0612デフォルトの名無しさんNGNG
あー、なんか記憶あるなー、なんだったっけ
0613デフォルトの名無しさんNGNG
よくわからんから手元にあるソースを貼り付け

int sd;
SSL_CTX *ctx;
SSL *ssl;

sd = socket(AF_INET, SOCK_STREAM, 0);
connect(sd, (struct sockaddr*)&server, sizeof(server));

SSL_load_error_strings();
SSL_library_init();
ctx = SSL_CTX_new(SSLv2_client_method());
ssl = SSL_new(ctx);
SSL_set_fd(ssl, sd);
SSL_connect(ssl);
0614610NGNG
>>613
サンクス。
んんー。同じ事やっているんですが動かないです。
なんでだろう?
0615デフォルトの名無しさんNGNG
動かない、ってだけでは殆ど何もわからん。
どこそこの部分でXXなエラーがでるとかなんとか言えよ。
それと通信相手のこともな。(HTTPS鯖か?)
0616610NGNG
>>615
>>610のSSL_connectの戻り値が、0で終わります。
それ以前の関数は、全て正常に実行されますので、他にイニシャルが足りないのかなとか思っちゃいました。
相手先は、HTTPS鯖です。
0617デフォルトの名無しさんNGNG
SSL_get_error()で原因をば
0618デフォルトの名無しさんNGNG
linuxのTCP/IPのソケットで、setsockoptでLINGERを指定しています。
l_onoff=1;
l_linger=0;
この設定でshutdwon/closeをしてもTIME_WAITになるときとならないときがあるんですが、
原因と対処方法が分かる方がいれば、教えて下さい。
0619デフォルトの名無しさんNGNG
VBでwininet.dllを使ってプログラムを組んでいます。
httpでユーザー名とパスワードを設定したいのですがどうすればいいでしょうか?
今のところInternetSetOptionを使うのだと言う事はわかっているんですがうまくいっていません。

InternetOpen->InternetOpenUrl->InternetSetOption->InternetReadFile
の順でやってみていますが今のところ
401 Authorization Required
です。

0620デフォルトの名無しさんNGNG
JavaでURLクラスとHttpURLConnectionクラスで接続すると
User_AgentがJava1.3.1_02になるんですが、
これを変更するにはどうしたらいいですか?
0621デフォルトの名無しさんNGNG
VBなんですけど、IPアドレスを指定してそのネットワークカードのMACアドレスを取得する方法や関数は、ありませんか?
0622デフォルトの名無しさんNGNG
>>621
パケットを解析すれば良いのでは?と思うんですけど。
間違ってたらごめん。
0623デフォルトの名無しさんNGNG
自PCの?それとも他の?
0624デフォルトの名無しさんNGNG
>>620
http://www.google.com/search?hl=ja&inlang=ja&ie=Shift_JIS&q=HttpURLConnection+user+agent&btnG=Google+%8C%9F%8D%F5&lr=lang_ja
とりあえず、Googleぐらい使ってから来い、ボケが。
0625621NGNG
>>622 え、どうやるんですか?厨な質問すいません。。これでも専門学校生です
>>623 他のマシンのMACアドレスです
0626デフォルトの名無しさんNGNG
>>624
とりあえず調べたことある。そのときに
HttpURLConnection.setRequestProperty( "User_Agent","agent");
ってあったんだが、そうすると
User_Agent: Java1.3.1_02
User_Agent: agent
の二つ出てくるんですが
0627デフォルトの名無しさんNGNG
>>626
1.4.1で試した?
0628デフォルトの名無しさんNGNG
>>626
というよりも自分の環境を列挙しないと
誰も答えてくれないよ。
0629デフォルトの名無しさんNGNG
>>621
VBにはねーだろ。arpコマンドの出力を加工すれば?
同じサブネットのやつしか取れないけどな。
0630デフォルトの名無しさんNGNG
>>621
API 呼ぶしかない。Windows98 以降 or WindowsNT 4.0 (SP4) 以降な
ら...
http://www.mitene.or.jp/~sugisita/family/papa/vb/index.html
を参照すればいいらしい。
0631621NGNG
>>629-630
ありがとうございます!ありそうな感じです。いろいろと調べてみます。
0632デフォルトの名無しさんNGNG
Winsockで非同期でスレッドを使ったマルチクライアントに対応した
サーバープログラムのサンプルってないですか?
0633デフォルトの名無しさんNGNG
青い背表紙のゴツい本があったきがする
win32 ネットワークプログラミング
みたいな
0634デフォルトの名無しさんNGNG
samples\netds\WinSock\iocp
とかではいかんのか?
0635デフォルトの名無しさんNGNG
WindowsPCにLANカード二枚さしてローカルルータにしたいのですが
どのようなソフトがあるでしょうか?
0636デフォルトの名無しさんNGNG
このスレ的には
「そういうソフトをつくれ」
になるわけだが。
0637デフォルトの名無しさんNGNG
>>636
そこのところを、なにとぞよろしゅうお願いします。
0638デフォルトの名無しさんNGNG
ttp://msyk.locus.co.jp/cabletv/win98/win_router.html
よくワカランが、多分似たようなモン。
でも本当に板違いなんで、回線切って首吊って氏んでね☆
0639デフォルトの名無しさんNGNG
>>638
さすがです。さんくす。氏ぬのはかんべんしてね☆
0640デフォルトの名無しさんNGNG
netstatに加えてアプリケーション名まで表示するプログラムを作ろうとしています。
(TCPViewのようなもの:http://www.sysinternals.com/ntw2k/source/tcpview.shtml)
LocalAddress/Port、RemoteAddress/Portまで取得できています。
このコネクションを確保しているアプリケーションを特定する方法はあるでしょうか?
ターゲットはWindows2000です。
(WindowsXPのAllocateAndGetTcpExTableFromStackみたいなのが欲しいのですが……)
0641デフォルトの名無しさんNGNG
Winsockで、あるスレッドがgethosybyname()を呼び出しているとします。
この呼び出しをほかのスレッドから強制終了させることはできないでしょうか?

やはり、TerminateThreadとか使わないといけないんでしょうか?
0642デフォルトの名無しさんNGNG
ありませぬ
gethosybyname
そんな関数はありませぬぞ
0643デフォルトの名無しさんNGNG
おたわむれを
0644641NGNG
gethostbynameが正しいです
0645デフォルトの名無しさんNGNG
よいでわないかよいでわないか

あの、長ったらしい非同期の方をつかいなはれ
WSAなんとかの方。
WSAAsyncGetHostByNameぞなもし?
0646デフォルトの名無しさんNGNG
UNIX ネットワークプログラミング Vol.3はもう出ないんですかね
0647デフォルトの名無しさんNGNG
Richard Stevens死んだよ。だからVol.3は出ないし、改訂もされない。
http://www.kohala.com/start
http://www.hackcanada.com/hackcanada/media/hnn090899.html
0648デフォルトの名無しさんNGNG
せめて遺稿だけでも
だめ?
0649デフォルトの名無しさんNGNG
自分のホスト(ADSL)のグローバルIPアドレスを取得したいんですが、
簡単な方法ありませんか?
(正攻法だとローカルIPアドレス(192.168.〜とか)しか取得できないみたいなんで)
TAの設定見に行くしかないでしょうか?
0650デフォルトの名無しさんNGNG
そんなん、つながったIP返してもらうような鯖に
つないでみて、教えてもらうしなないでしょう。
0651649NGNG
>>650
ありがとうございます。
検索してもその方法か、TAの設定ページ見に行く方法しかありませんでした。
(後者は機種限定の様で。)
どっちにしてもプログラムで扱える様に加工しないといけない様です。
めんどっちいのでまたの機会にします。
0652名無しさん@接続しっぱなしNGNG
>>649
# traceroute -m 2 www.2ch.net
の結果を加工。
0653デフォルトの名無しさんNGNG
win上でC言語でTCPを使ってデータの受け渡しをしたいんですが
send()やrecv()って文字列で送受信するように決められてるらしいのですが
それ以外はintとかおくるにはどうすればいいのでしょうか?
intでしていてcharでキャストとかやってみたんですがどうもできないみたいで・・
0654デフォルトの名無しさんNGNG
> send()やrecv()って文字列で送受信するように決められてるらしいのですが

歴史的事情からchar*になってるけど、実際はバイト列と思ったほうがいいです
0655デフォルトの名無しさんNGNG
実際の値を指定しているに
0656デフォルトの名無しさんNGNG
>>653
文字列じゃねぇよ。バイト列だ。
int value=123;
send(socket, (char*)&value, sizeof(value), 0);

でやれ。
0657656NGNG
被ったスマソ
0658デフォルトの名無しさんNGNG
htonl等、ネットワークバイトオーダーの考慮も忘れずに。
0659デフォルトの名無しさんNGNG
>>658
ホストバイトオーダーが同じホスト同士だったらいらんよね?(一応確認
0660653NGNG
>>654-659
みなさんレスありがとう!!

int brf[100]

send(socket, (char*)&buf, sizeof(value), 0);

でいけるでしょうか?ためす環境がなくて・・・。前このようなかんじでやってできなかったもので




0661653NGNG
int brf[100]じゃなくて
int buf[100]でした;;

超ド級初心者でごめんなさい・・・
0662デフォルトの名無しさんNGNG
受け取る方がちゃんとしてれば多分いける。
つっかsizeof(value)じゃなくてsizeof(buf)だな
0663デフォルトの名無しさんNGNG
>>660
&が余分なんじゃない?
0664653NGNG
受け取る方も

int buf[100]

send(socket, (char*)&buf, sizeof(buf)0);

みたいなのでいいんでしょうか?

かなりばかなしつもんかもしれないんですがcharは8バイトでintは32バイトぐらいで違うと思うんですが
大丈夫なんでしょうか?
0665デフォルトの名無しさんNGNG
まず、アドレスやポインタの概念を勉強したほうが良いと思われ
0666デフォルトの名無しさんNGNG
>>664
あ,>>663も見れ。

>charは8バイトでintは32バイトぐらいで
?????????????????????????
0667デフォルトの名無しさんNGNG
>>665
>>664は単位の勉強も必要と思われ
0668デフォルトの名無しさんNGNG
解説

int a[2] があったら,内部では
______________
|0123|0123|
~~~~~~~~~~~
↑a[0] ↑a[1]
となっていると考えれ。そんで, (char*) aとすると,
__________________
|0|1|2|3|0|1|2|3|
~~~~~~~~~~~~~~~
となると考えよ。
0669653NGNG
>>662-668
みなさんこんな僕にレスありがとう!!

668さん丁寧な説明ありがとう、じゃーデータの損失とかはなく、気にしなくていいってことですね!
勉強してるんですがおいつかなくて;;;
0670デフォルトの名無しさんNGNG
>>669
ネタにマジレスカコイイ
0671デフォルトの名無しさんNGNG
>>669
>データの損失とかはなく、気にしなくていいってことですね
そうだ。値のキャストとポインタのキャストは違うと思え。

値のキャスト: キャスト先のバイト数に合わせられる
ポインタのキャスト: キャスト先のポインタ型であると”見なす”
0672デフォルトの名無しさんNGNG
>>668
その図は・・・ネタ?
0673デフォルトの名無しさんNGNG
>>672
初心者に教えるには最適だと思うが,何か?
0674デフォルトの名無しさんNGNG
-
0675デフォルトの名無しさんNGNG
>>669
TCP ならデータの損失 (欠落が正しい) は無いと思っていいが、送信元が
10バイト送っても、受信側で 9バイトしか受信できない時があるから気をつけて
ね。残りの1バイトは、もう一回受信すると読める。当然逆 (送信元が 10バイト
2回送ってるのに、受信側で 20バイト読める) もあるからね。

昔、ちょっとはまった事あり。
0676デフォルトの名無しさんNGNG
>>675
たぶん>>669で言ってるのは話の流れからしてキャストによるデータ損失のことだと思われ。
0677デフォルトの名無しさんNGNG
あ,でも>>675の言ってることは大事なことなので言うのは良い。
>>669へのレスではなく653さんへのレスなら正しいのだとおもう
0678653NGNG
本をみてたのですが送受信のサイズのところで
send()ではstrlen()
をつかっていて
recv()ではsizeof()
をつかってるみたいなんですがこれってどういうことなんでしょう?
0679デフォルトの名無しさんNGNG
>>675
そうゆう場合はMSG_WAITALLを指定するというのも有なのでは?
ブロックしていいなら
0680デフォルトの名無しさんNGNG
>>678
単に受信データのサイズが可変長だからバッファのサイズを指定してる
だけなのでは?
0681デフォルトの名無しさんNGNG
どうもこうも。通信仕様で決めたオフセットにあるデータサイズを受信しないとだめだよ。
その本のsizeof()は恐らくC/Sが完全に同期をとってやりとりしてんだろうけど。
0682653NGNG
両方sizeof()じゃーだめなんでしょうか?
0683デフォルトの名無しさんNGNG
strlen()だと \0 までのサイズだろう?
バイナリデータだと途中に \0 が入ってるかもしれないだろう?
そういうこった。
0684デフォルトの名無しさんNGNG
send()は送信データのサイズを指定
でrecv()は受信データを書き込むメモリのサイズを指定
だからrecv()のとこでオーバーフローしなければいいんで
ないかな?
でもなんでsizeof()にこだわる必要があるのですか
0685デフォルトの名無しさんNGNG
sendにstrlenを使うのは、実際に送る長さを求めるため。
recvにsizeofを使うのは、受け取れる最大長を指定するため。

freadやfwrite使った事ある?
0686デフォルトの名無しさんNGNG
>>682
char str[1000];
strcpy(str,"12345");
の時,
send(socket,str,strlen(str),0) // 5バイト送る
send(socket,str,sizeof(str),0) // 1000バイト送る
だ。
sendにsizeof()使ったでも構わんが,それは意図した動作かどうか良く考え。
0687686NGNG
何か最後日本語めちゃくちゃでスマソ
結局send()には実際に何バイト送りたいかを指定するのだ。
>>686の例で,実はstrがバイナリデータで,1000バイト送りたいのならsizeof(str)だ。
0688デフォルトの名無しさんNGNG
だからさー。
char str[1000];
strcpy(str,"12345");
int len = strlen(str);
send( sd, &len, sizeof(int), 0 );
send( sd, str, strlen(str), 0 );
だってばさー。ウケ側は
recv( sd, &len, sizeof(int), 0 );
recv( sd, str, len, 0 );
だっつーの。
0689デフォルトの名無しさんNGNG
>>688
送られてくるサイズ分かってたらいいでしょ?
653を混乱させたいわけ?
0690デフォルトの名無しさんNGNG
いや、別に混乱させたいワケじゃなくって。
送信時にstrlenっつーことは固定長じゃないでしょ?
それに
send( sd, str1, strlen(str1), 0 );
send( sd, str2, strlen(str2), 0 );
ってやられたらどーすんの?
0691デフォルトの名無しさんNGNG
653さんはなんとなくrecv()の方で混乱しているのでは?
0692653NGNG
>>683-688
みなさんありがとうございます。おかげで理解できました。
たとえば
int buf[1000]

で1から1000まで順番にいれてそれをおくりたいんですが
send(socket, (char*)&buf, strlen((char*)buf),0);

受信側では

int buf[1000]

recv(socket, (char*)&buf, sizeof(buf)0);


でいけるんでしょうか?今ためせなくて・・・
まちがってるところあるでしょうか?

0693653NGNG
あ、すいません&は抜きでおねがいします
0694デフォルトの名無しさんNGNG
バイナリでintの値を送るなら全部(sizeof(buf)分)sendしろ。
intの値に256とかが含まれてたらstrlenじゃだめ

だから、write/readとおなじなの。
0695653NGNG
本では文字列を打ち込んで送るというプログラムでした。
それを計算して数値を送るというのに変えたいと思っています。

本では文字列を打ち込むので長さがわからないということでstrlenをつかってたみたいですね。

数値を送る場合はstrlenは使わないほうがいいでしょうか?strlenはNULLまでのサイズということなら。
日本語おかしくてすいません;;;


0696デフォルトの名無しさんNGNG
んー、まぁ、今の練習(だと思う)の場合はソレでもいいよ。
でも、>>690で書いたように連続でなんか送ってきたり、
一回のrecvで到達/受信しきれないデータがきたりするんで、
早いトコ慣れて、通信仕様(今の場合先頭のsizeof(int)に電文長が収まってる)を決めて
やり取りすることを憶えた方がいいよ、絶対。
0697デフォルトの名無しさんNGNG
もっとさ、基本的なファイル入出力とかそういうの、わかってる?
ネットワークの送受信もその応用なんだけど、そこまでいってないような。
0698デフォルトの名無しさんNGNG
うお。>>696は>>692へのレスですよ。
>>695は当然バイナリを送るんだからstrlenなんて*使ったらダメ*。
0699デフォルトの名無しさんNGNG
send()したデータが一回のrecv()コールで読み出せないこともある
>>675さんがもういってるけど
0700デフォルトの名無しさんNGNG
>>690
あ,マジレスだったのね。スマソ。
>send( sd, str1, strlen(str1), 0 );
>send( sd, str2, strlen(str2), 0 );
>ってやられたらどーすんの?
いや,十分分かってますよ。
でも,プロトコルが区切りを含んでいるやつなら別に構わんでしょう?
例えばHTTP。
0701653NGNG
>>694-700
ありがとうございます。ほんと助かります。今周りに聞く人がいなくて;;;

通信仕様覚えた方がいいですね。一回で送れたりできたないってのが僕にとってはかなり壁になりそう;;;
がんばってみます。ありがとうございました
0702デフォルトの名無しさんNGNG
>>690
> send( sd, str1, strlen(str1), 0 );
> send( sd, str2, strlen(str2), 0 );
> ってやられたらどーすんの?
どーすんのって、どうしようもないよ。
0703デフォルトの名無しさんNGNG
>>702
>>700
0704デフォルトの名無しさんNGNG
HTTPでもContentLengthまでは無理矢理読んで、
\n\n以降はContentLength長読む、ってカンジだよね。
もちろん、プロトコルが区切りってのも分かる。
0705デフォルトの名無しさんNGNG
一回で送れないとか、まとめて読み出してしまうとかは
まだ気にしなくてもいいかもしれない
0706デフォルトの名無しさんNGNG
>>705
そうだね。
多分そのうち653から
「○○バイト送ったはずなのに届いたデータが足りないんですぅぅぅ!!」
という質問が来るに1000パケット。
0707デフォルトの名無しさんNGNG
意味がわからない
意味がわからない
0708デフォルトの名無しさんNGNG
「意味がわからない」と泣き出すのに10000トランザクション
0709デフォルトの名無しさんNGNG
漏れの方が泣きたいです
0710デフォルトの名無しさんNGNG
結局ネットワークプログラミングの話題ってこればっかりなんだよなー
奥が浅いよなー
0711デフォルトの名無しさんNGNG
スレッドの同期も絡めた話まで発展させりゃいいんだろうけど、
マルチスレッドのスレッドが別にある罠
0712デフォルトの名無しさんNGNG
低層の技術としてはこんなもん。
重要なのはセッション層より上の手順。
0713デフォルトの名無しさんNGNG
OSIモデルって違和感あるんですけど
0714デフォルトの名無しさんNGNG
>>713
OSIは忘れていいです。
0715デフォルトの名無しさんNGNG
TCP_KEEPLIVEオプションがインプリしてあるシステムってあります?
相手からのcloseではなく途中の障害で切断された場合の検出に
SO_KEEPALIVE使用するんですけど、検出に2時間っていうのが

一般的にTCPのコネクション切断を知る手段って?
0716デフォルトの名無しさんNGNG
自分で勝手に「2分間応答がなければ切断されたものと
見なす」みたいなルール決める。
0717デフォルトの名無しさんNGNG
TCP_KEEPALIVEの間違いですた
tcp_keepidleの値を変更すると、システム全部に影響が出るんで
それは避けたいなっと
0718名無しさん@接続しっぱなしNGNG
>>701
> 一回で送れたりできたないってのが僕にとってはかなり壁になりそう;;;

んな奴がTCPでsend/recv使うんじゃね─よ。
シングルタスク、同期通信なら、fwrite/freadで十分だろ。

> 通信仕様覚えた方がいいですね。

全世界共通規格としてのプロトコルと、
あんたのアプリ間通信の局所的取り決めを区別出来るようになりな。

>>713
TCP/IPプロトコル群のレイヤー構成にピッタリマッチしなくても、
>>653は一度レイヤーに付いて学んでおく必要があると思うけど、どない?
0719デフォルトの名無しさんNGNG
つか通信プログラムに手をつけるのが早いような気がする・・・
0720デフォルトの名無しさんNGNG
外出だが,通信より先にI/O関係を覚えたほうがいいね。
#っていうか通信って結局I/Oだし。ソケット使えばファイル操作とほとんど同じだし
0721デフォルトの名無しさんNGNG
>>718さんのいうことは>>653さんに限らずという気がします。

それとは別の話としてまずUDP使ったサンプルとか、
エコークライアントとかでTCPダンプしたほうが理解が早い。
きっと。
0722デフォルトの名無しさんNGNG
一度のwriteで全部書けない、というのが現実にバンバン起こるのは
socketが初めての人が多いきがする。
0723デフォルトの名無しさんNGNG
writeは全部書けるっつーの。
0724デフォルトの名無しさんNGNG
相手がファイルでも、書ける事は保証されてないでしょ。
相手がソケットなら確実に保証されてない。(Win系はWriteFileね)
0725デフォルトの名無しさんNGNG
ま、つまり>>722は「>>723みたいな人が多い」と言いたかったんだろうな
0726デフォルトの名無しさんNGNG
正直write()で指定したサイズ以下の書き込みができないのは
FIONBIO指定&ネットワーク上に負荷かけたとき位なのでは?
0727デフォルトの名無しさんNGNG
sendもwriteも送るっつーの。
エラーのことをいってんのか?
0728デフォルトの名無しさんNGNG
・・・サイズ以下の書き込みしかできないのは・・・

ですた
0729デフォルトの名無しさんNGNG
ディスクフルとかの時は一度限界まで書き込んで(指定以下のサイズを書きこんで)
次のwriteでエラー(-1)が返るんじゃないの?知らんけど。
0730デフォルトの名無しさんNGNG
ソケットに割り当てられているバッファが限界になると起こります。
0731デフォルトの名無しさんNGNG
send()において「全部は書きこめなかった」が起こるのは間違いない。
でも、write()は動作が違うのかね?
0732デフォルトの名無しさんNGNG
-1が返る
0733デフォルトの名無しさんNGNG
当然write()でも全部書き込めるとは限りません。
指定サイズがかけなくても1byteでも書き込めた場合は-1にはならない
です。
0734デフォルトの名無しさんNGNG
結局、>>722-の流れで、653を笑えない奴等がいかに多いか分かったよ。
0735デフォルトの名無しさんNGNG
いつからこんなにレベルの低いスレに(w
0736デフォルトの名無しさんNGNG
>>716
できるなら、障害によるものか単にデータの送受信が無いだけなのか
で処理を分けたいのです。
かといってアプリケーションが周期的にデータを送信してみるというのも
ちょっと違う気がしています。

4096byte以上を書き込むと発生する気がします
0737デフォルトの名無しさんNGNG
>>736
select()で調べないのかい?

select()==-1 通信エラー
FD_ISSET(sd)==false 届いてない
FD_ISSET(sd)==true 届いてる
→recv() == -1 なにがしかのエラー
→recv() == 0 切断された
→recv() > 0 正常読みこみ
0738デフォルトの名無しさんNGNG
初心者が見るとわけが分からないだろうから書いておく。

>>723,>>727はアフォ
>>722は言いたいことが良く分からない。programmingに依ると言いたいのか?
>>731の二行目の文は曖昧。
>>731はどういう時に起きると言っているのか不明。それについて>>733は正しい。

ちなみに>>726のようなシステム仕様を勝手に想定するのも良くない。
もちろんマニュアルにそう書いてあれば良い。
0739デフォルトの名無しさんNGNG
>>737
相手のプロセスが異常終了した場合はTCPがFINを投げてくれるので
select()で判断できます。
ネットワークの障害でデータが送られてこないのか、クライアントが
ぼけっとしてるだけなのか分けて処理したいのです。
ネットワークの障害ならコネクションの切断とサーバのリソース開放に
もっていって、それ以外ならつなぎっぱなし。
それをアプリケーションが監視しないで済ませようと。
0740デフォルトの名無しさんNGNG
>>739
それはちょと無理じゃないか?
普通はタイムアウトで検出じゃない?
0741デフォルトの名無しさんNGNG
>>740
そのタイムアウトというのが問題でして、SO_KEEPALIVEオプションで設定
すると、2時間かかるのです。
この2時間を短くするのは可能なんですけど、システム全ソケットに影響が出て
しまうという。
で、これをソケット単位で設定するTCP_KEEPALIVEというオプションをサポート
している処理系を探しているのです。
0742デフォルトの名無しさんNGNG
>>740
すみません。
いってること勘違いしました。
アプリでタイマを持つのではなくTCPのレイヤでってことで。
0743デフォルトの名無しさんNGNG
http://developer.apple.com/ja/qa/nw/nw62.html
こういうやつ?(これは林檎さんだけど)
0744デフォルトの名無しさんNGNG
http://search.luky.org/linux-users.3/msg01165.html
このあたりのスレッドで役に立つのない?
0745デフォルトの名無しさんNGNG
>>743さん
そゆうのです。

>>744さん
役に立ちました。
なぜかlinuxは実装してないと思い込んでました。

0746デフォルトの名無しさんNGNG
取り敢えず良かったです。
Winsock(Windows)には実装されてないですねぇ。
0747デフォルトの名無しさんNGNG
>>746
winsockって使ったこと無いんですが、大きく違うものなのですか?
0748デフォルトの名無しさんNGNG
>>747
いや,基本的にBerkeleySocketそのまま。
だけどオプションとか関数とか色々削減されてる。
まあ普通(?)に使う分には大丈夫。

で,WSA*()っていうWindows独自の関数がたっぷり。
0749デフォルトの名無しさんNGNG
別にSO_KEEPALIVE使わなくてもselectでタイムアウト判定すればいいじゃん
0750デフォルトの名無しさんNGNG
>>640わかる人いる?
なんか最近公開されたAPIでできたようなできなかったような…記憶が微妙。
0751名無しさん@接続しっぱなしNGNG
>>748
いや、SO_RCVTIMEOとかWinとSolarisくらいしかない(当時w)のもある。
2000+Winsock2だと、PC-UNIXよりも非同期等が豊富。

>>741は、KEEPALIVEってどういうものか分かってるのかなぁ?
>>749のやり方との違い…説明できるだろうか…

>>739
> ネットワークの障害でデータが送られてこないのか、クライアントが
> ぼけっとしてるだけなのか分けて処理したいのです。

超能力があるのなら、ネットワークもコンピュータもいらないじゃん。
0752名無しさん@接続しっぱなしNGNG
>>750
そもそもAllocateAndGetTcpExTableFromStack自体がUndocumented APIでしょ。
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/iphlp/iphlp/ip_helper_start_page.asp
にも載ってないしねぇ。

2000のiphlpapi.dllに実装されるのを待つしかないのでは? (想像 ハート)
AllocateAndGetTcpTableFromStack→GetTcpTable
AllocateAndGetTcpExTableFromStack→GetExTcpTable
な感じになるかなぁ
0753デフォルトの名無しさんNGNG
>>751
>いや、SO_RCVTIMEOとかWinとSolarisくらいしかない(当時w)のもある。
>2000+Winsock2だと、PC-UNIXよりも非同期等が豊富。
あ,そうだったのか。知ったかぶりしてスマソ(恥
0754名無しさん@接続しっぱなしNGNG
>>753
いや、95+Winsock1だと>>748のような感じだからいい(w
Winsockといってもピンキリな状況。

しかしより問題なのは、
同じ関数でもWinとWinsockの組合わせで振る舞いの仕様が違うこと!
互換ライブラリなし。アプリごと、マイミドルウェアごとに互換部実装!
version upごとに単調に機能が増えるだけならいいのだが…非連続性が…
0755722NGNG
この話題は理解度を知るのに便利だね〜
「ソケットへのwriteは送信バッファへの書き込み」
ということに気づけばそんなに難しい話じゃないんだけども。

733の言うようにwriteの戻り値は書き込んだバイト数になります
これはファイルでも同じなんですがね・・・

ただし、Javaとかいうタワケた環境では取得不可能(1.4から可能らしい)
Javaでネットワークプログラミングを覚えました、なんてもう見てらんない。
0756デフォルトの名無しさんNGNG
>>752
けど、TcpViewや多くのFireWallSoftwareは実現してるから何か方法があるはず……
0757デフォルトの名無しさんNGNG
>>756
んじゃあ、Win2k持ってる奴は、GetProcAddress(LoadLibrary("iphlpapi.dll"),
"AllocateAndGetTcpExTableFromStack" )してみれ
0758デフォルトの名無しさんNGNG
長い名前だなぁ
0759デフォルトの名無しさんNGNG
>>755
>ただし、Javaとかいうタワケた環境では取得不可能(1.4から可能らしい)

単に取得不可能なんじゃなくて、全部書き込むか失敗するまで復帰しない。
普通はJavaの仕様の方が扱いやすいが、シビアな状況では困るかもね。
0760デフォルトの名無しさんNGNG
> 1.4から可能らしい
NIO
http://java.sun.com/j2se/1.4/docs/guide/nio/index.html の
* A multiplexed, non-blocking I/O facility for writing scalable servers ね。
http://jcp.org/jsr/detail/051.jsp に必要な理由は書いてある。

「シビアな状況」な人は、
http://www.cs.berkeley.edu/~mdw/proj/java-nbio/
http://www.cs.berkeley.edu/~mdw/proj/sandstorm/iocore-bench/
http://www.javaperformancetuning.com/tips/nio.shtml
辺りが面白い。底辺プログラマには今後一切関係ない話だけど。
0761デフォルトの名無しさんNGNG
>>757
Win2kのiphlpapi.dllがexportしてる関数くらい調べてから書いてるさ
0762デフォルトの名無しさんNGNG
Javaのタワケっぷりに笑った
センス悪すぎ
0763デフォルトの名無しさんNGNG
あげあげ
0764デフォルトの名無しさんNGNG
>>751
>>741は、KEEPALIVEってどういうものか分かってるのかなぁ?
>>749のやり方との違い…説明できるだろうか…

わかっていないのは、あんたの方。要は、データのやり取りが非常にまれにしか
ない状況で、例えばケーブルが切れたことを即座に検出したいんだと思う。
>>749 の方法だと、例えば1日一回しかデータのやり取りがないと最悪丸一日
そう言う障害に気付かない。そう言うのが困るって言う状況もあるよ。

>>739
>> ネットワークの障害でデータが送られてこないのか、クライアントが
>> ぼけっとしてるだけなのか分けて処理したいのです。
>超能力があるのなら、ネットワークもコンピュータもいらないじゃん。
相手マシンでプロセスがバンバン動いている時なんかは、クライアントはあまり
動けないけど、TCP スタックは動けることが多い。(もちろん実装によるけどね。)
だから、超能力なんか使わなくても回線が切れているか、クライアントの応答が
ない事ぐらいはわかることが多い。
... ぐらいのことは、普通のサーバー管理者なら常識。サーバーの負荷が結構高く
ても、ping には応答すれば TCP層までははまず大丈夫と判断できる。
と、言うことでプログラムで、繋いでいる相手に ICMP Echo パケットでも投げる
のがいいかと...。
0765not 751NGNG
>>764
は?
わかってないだろ。
そもそもKEEPALIVEはアプリケーションのTIMEOUT用に使うものではないし。
アプリケーションは好き勝手にポーリングシレ

ちなみに後半の管理者の常識とやら始めて知りました。
世の中便利になりましたね。(w
0766751NGNG
都合良くトラブルの原因が分かる場合ばかり考えるのではなく、
何の音沙汰もなく何が何やら分からないって状況が起きる可能性が
ネットワークでは常にあり、それに対する対処方法(*1)が、
個別にやっていた「都合の良い場合」ほとんど全てを
同時に解決してしまうことに気づくことが、
ネットワークプログラマへの第一歩です。頭の転回が必要になります。

また*1)を行なわないのは、どんなに「特別な場合に」良い振る舞いであっても、
最悪の時が酷すぎるという意味で、『糞』ネットワークアプリケーションです。

局面ごとに適当なtimeoutを用意すること、socketのEOF, errorを見張ること、
application layer heartbeat packetを撃つこと、などなどが肝要で、
また基本中の基本です。
0767デフォルトの名無しさんNGNG
ICMP PacketはFirewallでdropされてしまいますた。
0768デフォルトの名無しさんNGNG
HTTPがコネクションレスなおかげか、そのへんのノウハウは失われつつあるなー
0769デフォルトの名無しさんNGNG
HTTPでもKEEPALIVEあるよ
0770デフォルトの名無しさんNGNG
あ、コネクションレスじゃなくてステートレスだった
ごめん
0771デフォルトの名無しさんNGNG
とりあえず後始末しときます。
SO_KEEPALIVEで全部が救えるわけではない。
ハーフオープンコネクションが残るのを避けることができるだけが
正解なので>>739の発言は間違い。
また、クライアントのポーリングをアプリでやるか、KEEPALIVEを
使うかは好みの問題とかそんなレベル。
>>739はTCPのコネクションの監視はTCPでやりたいだけ。

ただ、>>764の
>そもそもKEEPALIVEはアプリケーションのTIMEOUT用に使うもの
>ではないし。
に関しては意味不明
0772デフォルトの名無しさんNGNG
> また、クライアントのポーリングをアプリでやるか、KEEPALIVEを
> 使うかは好みの問題とかそんなレベル。

うーむ、そうなんですか。時代は変わった…

> >そもそもKEEPALIVEはアプリケーションのTIMEOUT用に使うもの
> >ではないし。
> に関しては意味不明

意味不明も何もそのままの意味では。
keepalive がアプリケーションの timeout に使えるようになったのは
timeout 時間が変更可能、しかもコネクションごとに設定できるようになってからでそ。
0773751NGNG
TCP Keep-Aliveだけじゃあ、peerのアプリケーションが、
socketを捕まえたままハングアップしているのを、検知できないです。
対応できる状況が「より包括的」で、健全な仕様を設計できるのは、
アプリケーション層でのタイムアウトやハートビートです。
実際シリアスなプロトコルは良くNULL requestを用います。(e.g. NFS等)

TCP Keep-Alive方式は、poorな分コーディングも楽ですが、(特に決め打ち時)
局面ごとに違う後始末が必要なアプリケーションで、
SIGPIPEのhandlerの設計が難しくなります。(マルチスレッドだと悲惨)
# Winsockでは、直後のsocket操作でWSAENETRESETが返ります。
# このインターフェースもよりpoorな分だけ、コーディングが楽ですね。

また、Keep-aliveはTCPに必須ではありませんし、有害という議論もあります。
(RFC 1122[HR RFC], RFC 1127)

最初からアプリケーション層でやれば、
socket FAQ, Stevens本、RFC 1122,1127のややこしい議論を読まずに済みます。
結局TCP Keep-Aliveは銀の弾じゃない、初級者にはそう見えるようですが。
リモートの様子は全然分からないけどタイムアウト起きちゃった、
この事態と考えを「完全に」受け入れましょう。それが近道です。
0774デフォルトの名無しさんNGNG
> 結局TCP Keep-Aliveは銀の弾じゃない

keepalive/timeoutに依存するコードは書かないなあ
OSによっては変更不可能だったりするし
0775デフォルトの名無しさんNGNG
>>760
おれ、そろそろ「シビア」なことを理解しなきゃならんかも。
Publish/SubscribeなC/SをJavaで設計することになるかもしれない。

大規模になったときに発生しやすい障害とか、そういう勘所がぜんぜん予想できない。
Pub/Subの管理なりパケットの設計なんてのはいいとして、
例外のクラス構成や障害対策をどのように考えておけばよいかがサパーリ。

基本として最低限対応しておくべき事項って何だろう。
0776デフォルトの名無しさんNGNG
>>772
> keepalive がアプリケーションの timeout に使えるようになったのは
> timeout 時間が変更可能、しかもコネクションごとに設定できるようになって
> からでそ。

アフォですか ? 相手アプリケーションが無限ループなんかでハングアップしてて
も、Keepalive はタイムアウトしないことは知ってるのか ? そもそも、Keepalive
って誰が返すかも知らんのか ?
アプリケーションのタイムアウト監視と Keepalive じゃ目的が違うぞ。
0777名無しさん@接続しっぱなしNGNG
>>775
http://www.shoeisha.com/book/Detail.asp?bid=9
はヘビーマルチスレッドなサーバを設計する前に必ず読んでおくべきだと思う。

使うフレームワーク選択の話はJavaスレの方がいいかも。
0778775NGNG
>>777
『Javaマルチスレッドプログラミング』は既読なんですが、読めばまた発見ありそうですね。
もいちど読んでみます。
0779デフォルトの名無しさんNGNG
>>775
> Publish/SubscribeなC/SをJavaで設計することになるかもしれない。

冗談だろ?やめとけ
0780デフォルトの名無しさんNGNG
承知の上で、キープアライブ機能はTCPに属すると考えてる派なので
KEEPALIVEを使用します。
当然、アプリでも処理してます。
ご意見どうもでした。
0781デフォルトの名無しさんNGNG
たしかFreeBSDではKEEPALIVEの設定が無視されるよね
0782デフォルトの名無しさんNGNG
設定するとエラーが返ってくる?
0783デフォルトの名無しさんNGNG
>>781
あんた誰?
>>739(=736=715)じゃないよね?
0784デフォルトの名無しさんNGNG
>>781
指定に関わらず常にKeepAliveはONだよ
0785デフォルトの名無しさんNGNG
>>784
本当? それ、RFC1122に違反してるね。
FreeBSD、インターネットに繋げないや…
0786デフォルトの名無しさんNGNG
結論:FreeBSDはゴミ
0787デフォルトの名無しさんNGNG
>>784
> 指定に関わらず常にKeepAliveはONだよ

情報ソースは ?
0788デフォルトの名無しさんNGNG
Winsockの質問です。

Winsockを使って、インターネットからHTMLファイルをダウンロードするソフトを作っています。
全体的に実装の方法は分かりました。
で、実際、作って動かした所、自宅のネットからは動くようになりましたが、
会社のLANを伝って、インターネットに接続する場合は、最初の方でGetHostByNameで失敗します。
LAN内のサーバにあるページをダウンロードはできるのですが、どうしてもインターネットからは
できません。

おそらく、LAN内にあるProxyサーバが原因だと思いますが、Winsockを使う場合、どうしたらいいのでしょうか?
また、何が原因なのでしょうか?

(Wininetも使って実験してみた所、こちらの方では、LAN内でも動くことが分かりましたが、
後のことを考えて、どうしてもWinsockを使いたいのです。)





0789デフォルトの名無しさんNGNG
>>788
Proxy通すんだったら,
まず目的URIに接続するのではなく,Proxyに接続する。
で,Proxyに対して

GET 目的URI HTTP…

を送信する。のだ。
0790788NGNG
>789
レス、ありがとうございます。

概要としては分かりましたが、実際の方法としては、?という感じです。

一応、流れとしては、今、

WSAStartUp()->Socket()->Connect()->Send()...
という感じなのですが、
Connect()の前に、Host名をIPアドレスに変換する必要があるわけですが、
その時に失敗するのです。
仰ることは、Host名→IPアドレスの時に、Host名にProxy名を入れればよいということ
なのでしょうか?
そして、Send()の時にGETすればいいということなのでしょうか?

参考となるページを教えてくだされば光栄なのですが。。。
0791デフォルトの名無しさんNGNG
>>790
>Host名にProxy名を入れればよいということ なのでしょうか?
そういうことです。
結局,目的地のことは何も知らなくていいです。
ProxyServerにさえ接続できればあとは丸投げです。

参考になるページは・・
http://www.google.co.jp
この辺で適当に・・(苦笑
0792788NGNG
なるほど。
なんとなく、わかりました。

適当に探してみます。(ワラ

ありがとうございました。
0793デフォルトの名無しさんNGNG
便乗で質問。
socketで多段串で送信したいんだけど、どうやるの?
0794デフォルトの名無しさんNGNG
ちょっと遅くなりましたが

ttp://x68000.startshop.co.jp/~68user/net/http-3.html
「Proxy に対応する」
ってのがあるんで,それを見ればなんとなく分かるかと思います。

ちなみにこのサイトはぼくがネットワークプログラミングを初めて触るときにお世話になりました。
0795デフォルトの名無しさんNGNG
>>793
多段プロキシに対応したプロキシサーバに向かって
それ用の記述でリクエストを送りつければいいのでは
0796デフォルトの名無しさんNGNG
delegateだったら
http://ほげほげ1/-_-http://ほげほげ2
かな。
0797デフォルトの名無しさんNGNG
予想1
次に「delegate以外のproxyでも通じるやり方ってある?」という質問が来る。
0798デフォルトの名無しさんNGNG
>>797
その質問が来たら

http://www.google.com

と答える。
0799デフォルトの名無しさんNGNG
しかし、delegateの連結キャラクタがウンザリしてる顔文字に見えるのは俺だけですか
0800デフォルトの名無しさんNGNG
>>799
おれもだ。

間にutuが入り込んでおる
0801デフォルトの名無しさんNGNG
資格板に以下の質問がありました。PGの方ならわかるかなと
思い質問します。これって可能でしょうか?

843 名前:名無し検定1級さん 投稿日:02/09/22 02:47
またこんなこと聞いたら絶対合格無理とか言われそうですが・・・
もし自分のIPを偽れるようなブラウザを自作してfusianasanで2chにアクセスすれば偽のIP表示できたりするんでしょうか?

847 名前:名無し検定1級さん 投稿日:02/09/22 10:46
>>845
いいえ、自分のPCから送信されるIPデータグラムの送信元IPアドレスを偽るようなソフトです。ついでに送信元MACアドレスも。
まだTCP/IP仕組みを完全に理解して無いので、そんな単純なことじゃないかもしれませんが。
0802デフォルトの名無しさんNGNG
TCPは双方向に通信しているので、IPアドレス自体を偽装すると応答パケットが届かなくなり、
その結果connectに失敗して書きこめません。
半年程前にはやったSYN-flood攻撃ツールは実際にこれを行っています。

で、fusianasanで表示されるのはIPアドレスではなくリモートホストなので、
DNSの逆引きに対して(サーバーを自分でたてて)リモホを騙れば出来ないこともないでしょうが、
簡単ではないし、マナー的にもやってはいけないことではないでしょうかね。
0803デフォルトの名無しさんNGNG
>>802
なるほどです。
素人考えですが、Connectだけ正常なIPアドレスで行って
書き込み時のみ偽装IPアドレスで行うなんてことは
できるのでしょうか?
0804デフォルトの名無しさんNGNG
>>802 (802かよ!)
しかも、IPアドレスは保存されてるでしょうから、
問題になった時に追跡できますね。
0805デフォルトの名無しさんNGNG
>>803
出来ないです。つーか勉強足りなさ過ぎ。10年早い。帰れ
0806デフォルトの名無しさんNGNG
>>805
私もできないと思っているのですが資格板にできるって人がいるので
詳しい人がいそうなのでここにきました。
0807デフォルトの名無しさんNGNG
ここの894とかの言ってることがわからないんです
http://school.2ch.net/test/read.cgi/lic/1030209098/

0808デフォルトの名無しさんNGNG
>>807
> ここの894とかの言ってることがわからないんです
> http://school.2ch.net/test/read.cgi/lic/1030209098/

> TCP/IPのオプションでIPアドレス偽って通信することはできるぞ。

まあ、できるといえばできる。つーか、IP アドレスなんてソフト的に割り当ててあるもんだから、いくらでも変えられる。更に言うと、複数の IP アドレスをひとつの NIC に割り振ることもできる。(WindowsNT系なら5個まで標準でサポートしている。)
MAC アドレスについてもドライバさえ (書け or Hack でき) ればいくらでも偽造は可能。技術的には、複数の MAC アドレスを割り振ることもできる。(ごく一部の NIC を除く。)

ただ上記の TCP/IP のオプションと言うのは意味不明。

また、同一ネットワーク内であれば上記のように偽って通信することはできるが、間にルーターが入っているとネットアドレスの所を変更してしまうとルーターが指定したところにパケットを送ってしまうので、通信はできない。
0809デフォルトの名無しさんNGNG
>>808
それはわかります。自分もクラスタ組んだマシンでIPアドレス書き換えた
通信したことありますから。
でも、今回のは2ちゃんに書き込む話なので間にルータが入るのは
当然といっても過言ではないわけで。
やっぱりできないって結論でよいですよね。
0810デフォルトの名無しさんNGNG
>>809
> やっぱりできないって結論でよいですよね。

そりゃ知らんよ。そいつが、2ch の鯖管かも知れんしね。

ただ、http://school.2ch.net/test/read.cgi/lic/1030209098/894 は...

> ここにいる香具師はFW立てないのか?
> そういう怪しいパケットをはじくのは基本だから2chもはじいてると思うが。

なんて言ってるぐらいだから、信用できるかどうかぐらいすぐわかると思うけど...。
0811デフォルトの名無しさんNGNG
>>810
>そりゃ知らんよ。そいつが、2ch の鯖管かも知れんしね。
むぅ。確かに。

>なんて言ってるぐらいだから、信用できるかどうかぐらいすぐわかると思うけど...。
まだネスペ取得できていない素人なので自信がないのです。
0812デフォルトの名無しさんNGNG
901 名前:894 投稿日:02/09/23 14:04
>>896 >>898 >>899 >>900
偽りたいIPアドレスをAとする
自分のIPアドレスをBとする
相手のIPアドレスをCとする

Bが「Aが送出したパケットをルータBを経由してCに届く」ように設定したパケットをCに送出。
CにとってはAからきたパケットだと認識し、「CからルータBを経由してAに届く」ようなパケットをA宛に出す。
が、実際はルータBを経由しているのでルータBに届く。

これでBがAを装うことができる。
ただし、この機能を使ったパケットは弾かれるのが常識。悪用したくても無理だと思われ。
0813793NGNG
ありがとうございました。
調べたら-_-はdelegateというサーバでしか機能しない様でした。
0814デフォルトの名無しさんNGNG
>812
ttp://isweb16.infoseek.co.jp/diary/hedge/ipspoof.htm
のSource Routingの項目をみろ。

大抵ISPのルータでSource Routing付きIPは破棄される
ようになっていると思うので、事実上使えないわけだが。
0815デフォルトの名無しさんNGNG
ネットワーキングプログラム
0816デフォルトの名無しさんNGNG
ネットワーキングプログラミング
0817デフォルトの名無しさんNGNG
ネッティングワーキングプログラミング
0818デフォルトの名無しさんNGNG
ネットワークゴキブリw
0819デフォルトの名無しさんNGNG
やっぱりダメか・・
0820デフォルトの名無しさんNGNG
>>814
すごいっす。さんくす。資格板に張ってくるっす。
0821デフォルトの名無しさんNGNG
FTP サーバにあるファイルの日付を秒単位で取得するにはどうすれば
いいんですか。

普通にコマンド打って取ってくるだけでは、分までしか出てこない。(たまに、時まで。リモート側のファイルの年が今年でなかった場合)
0822デフォルトの名無しさんNGNG
ンなもんサーバーの実装による
0823名無しさん@接続しっぱなしNGNG
>>821
> 普通に

とは? modtime(protocol的にはMDTM)使ってるの?
0824デフォルトの名無しさんNGNG
ふと疑問に思ったんだが、処理速度より受信速度が上回ったとき、
溢れたデータってどうなるの?
C言語やJAVAだと、入出力系はライブラリがバッファを作るみたいだけど
バッファに入る程度ならいい感じに受信してくれるのでしょうか?
0825デフォルトの名無しさんNGNG
>>824
> ふと疑問に思ったんだが、処理速度より受信速度が上回ったとき、
> 溢れたデータってどうなるの?

捨てるしかない。普通は、そうならないように...

1. バッファリングする。
2. 処理速度を向上させる。
3. あふれそうになったら相手にちょっと待て、というような仕組み (プロトコル) をもつ。

のどれかで、対処する。もちろん、1. は、一時的な対処だから、全体的に「処理速度より受信速度が上回る」状況では、結局バッファーがオーバーフローてしまう。
0826デフォルトの名無しさんNGNG
> 溢れたデータってどうなるの?

TCPと仮定して:
送り側から見ると、送信キューが詰まる。
そのときselectはwritableを返さない。
あるいは非ブロックソケットならsendが0バイト送信しますたと返す。

だからあふれることはないよ。

Javaのjava.net.Socketは仕様がバグってるからうまく処理するのは
難しいかも。

825はアプリの作り方の話?
だったらそのとおりだあね
0827825NGNG
>>826
> 825はアプリの作り方の話?
> だったらそのとおりだあね

はぁ ? TCP/IP は、>>825 の 3. で処理してますが...。俺には、>>826 の方がずっとアプリ寄りの話に見えるが...。(select/send なんて、もろソケットを仮定してるみたいだし..。)
0828デフォルトの名無しさんNGNG
825がアプリでのフロー制御の話に見えるか、
UDPでTCPのエミュレートとかいう痛い話に見えるか、
そこの違いか?
0829824NGNG
ごめんね質問が曖昧で。
TCP/IPの話なんだけど、>>825と>>826で
とりあえずイメージが掴めました。さんくす
0830名無しさん@接続しっぱなしNGNG
とにかく>>824に言えるのは、
・TCPの仕組みの勉強をしろ。
・IPネットワークの最大努力配送について勉強をしろ。
それがイヤなら、UDPを使ったプログラムを書かないと誓って
ただTCP&socketを信じろ。「いい感じ」にやってくれるから。

ただし古いWinsockでSO_RCVTIMEOを使う時はsocketを信じてはいけない。
0831653NGNG
以前しつもんさせてもらった者です。

みなさんの指摘どおりつまずいてしまいまして;;;
恥じを承知で質問させていただきます。

クライアントからint型で2000送ろうとしたのですが、一回ではおくれないみたいで
1000ぐらいでとまってしまいます。
以前指摘してもらったことから、もう一度送ればいいとやってみたのですがうまくいかず、どうすればいいのか
困ってます。



0832デフォルトの名無しさんNGNG
send()やrecv()のリターンはどうなってんの?
-1の場合、errorはいくつになってんの?
0833デフォルトの名無しさんNGNG
>>831
意味不明。もう少し詳しく書かないと答えようが無い。
・・・多分こんなんでいいんだろうけど。

int sendall(int sock, void *buf, int len)
{
 int sent = 0;
 while (sent < len) {
  int cur = send(sock, (char *)buf + sent, len - sent, 0);
  if (cur <= 0) {
   return (sent > 0) ? sent : -1;
  }
  sent += cur;
 }
 return sent;
}
0834デフォルトの名無しさんNGNG
っと、それ以前の基本的な問題な気がしてきた。
もう一度送ればって、intのバッファを先頭から再送してたりしないよね?
0835デフォルトの名無しさんNGNG
ぐーるぐる。同じ話を何度も何度も。ぐーるぐる。
0836653NGNG
>>832-834
詳しく書かなくて申し訳ないです;;
833さんのでずばり解決できそうです。recvでも同じようにすればいいんですよね?
一度やってみます。
それから返事遅くなってすいません;;
0837デフォルトの名無しさんNGNG
えーと、最近仕事で出た問題なんだけど、send()の直後にclose()すると、
送りきる前に電文が欠けたりするよ。
>>833で上手く逝かなかったらその辺も疑ってくだちぃ。
0838デフォルトの名無しさんNGNG
> えーと、最近仕事で出た問題なんだけど、send()の直後にclose()すると、
> 送りきる前に電文が欠けたりするよ。

Apacheは返事のsendの後、相手がcloseするまで30秒ぐらい放置してますね
ところで参考までにOSなんか教えてもらえるとうれしいッス
0839デフォルトの名無しさんNGNG
Linux。細かいビルドは忘れた。
相手のcloseをselectなりrecvなりで待つってのが正しいとは思います。
ただ、その仕事での問題として、ソケットライブラリでは、
そーゆーアプリケーション側の問題までは関知してなかったんで、
困ったなぁ、となりました。
0840デフォルトの名無しさんNGNG
ApacheがcloseしないのはHTTP/1.1 or HTTP/1.0+KeepAliveだからだと思うのだけど。

send直後にcloseすべきじゃないってのはそうだと思うけど、
そのためにshutdownがあるのでは。
0841デフォルトの名無しさんNGNG
shutdownしてもダメだったんだよねぇ、そのときは。
0842デフォルトの名無しさんNGNG
む、そうか、すまん。
というか、close時にflushしてくれないってのはやっぱおかしいな。
俺も「そういうこと(環境)もある」とだけは覚えておこう。
0843デフォルトの名無しさんNGNG
そういう環境があるから、Apacheはそれを考慮してるわけだ。
0844デフォルトの名無しさんNGNG
>>843
お前さん、>>840の一行目読んでも意味分からないの?
0845デフォルトの名無しさんNGNG
>>842
> というか、close時にflushしてくれないってのはやっぱおかしいな。

そりゃおかしいよ。
SOCK_STREAMのセマンティクスを守るために、
TCP socketにはTIME_WAITって状態があるんだから。だから、

>>840
> send直後にcloseすべきじゃないってのはそうだと思うけど、

なんてことはない。引き続く送受がなければいきなりcloseしてよい。

> そのためにshutdownがあるのでは。

違う。> 「そのために」
Socket FAQを読むべし。いじょ
0846デフォルトの名無しさんNGNG
今windowsでC言語でTCPプログラミングしています。

接続できたあと、スレッドをつくり、一つのソケットで送信、受信を同時にしても大丈夫なのでしょうか?
やっぱりまずいんでしょうか?
0847デフォルトの名無しさんNGNG
まずい
0848デフォルトの名無しさんNGNG
>>846
ファイルハンドルやコンソール出力に同じことをしたらどうなるか
想像してみれ。
0849デフォルトの名無しさんNGNG
ファイルハンドルへの読み書きは問題ないだろ…
コンソール出力からの受信って何だろう…

>>846
とくに問題は無い。
が、ノンブロックモードにする必要があるから、
別のソケットにしたほうが楽だと思う。
あとサーバーから送信する先のポートの問題とかもあるかも。
0850デフォルトの名無しさんNGNG
>>844
>>840の一行目はウソ。
0851デフォルトの名無しさんNGNG
>>846
スレッド1が受信専用でスレッド2が送信専用ならおそらく問題ない
0852デフォルトの名無しさんNGNG
ちょっと聞きたいことがあるのですが、
winMXってP2Pですよね。でも最初検索するときの、
「誰がどのファイル持ってる」という情報だけは、一箇所に集めてて、
最初にそこを参照して、持ってる人見つけて、あとはP2Pでやる、
って感じでいいですか?
なんかP2Pで通信する仕組みを考える時って、それが一番問題な気がします
名簿なし、手探りで不特定多数の相手を見つける、って無理な気が
0853デフォルトの名無しさんNGNG
>>852
新手のWinMXを作るんですか?
0854デフォルトの名無しさんNGNG
>>853
いやオンラインゲームに使えないかなと思って。
自分にはサーバ立てるのは負担なので、P2Pだけでネットワーク対戦
できたらいいなと。
LAN環境とかでやるなら、ブロードキャストで
全部当たればいいと思うんだけど、
大規模、不特定多数になるとそれだと無理じゃないかと思ったので
0855デフォルトの名無しさんNGNG
winmxっつーかOpenNapプロトコルはそんな感じだが。
winmxのWPNとかはそういう仕組みじゃないぞ。
0856デフォルトの名無しさんNGNG
>>848>>849>>851
レスありがとうございます。
送信と受信をまったく同時にしたらソケットの中で衝突がおきるのかなー?と初心者ながら思ってました。

ソケット2つ作ってそれを同じ相手につなげて送信と受信分けたほうがいいのかなー?
0857デフォルトの名無しさんNGNG
recv関数って、相手がsendするまでずっとまってるんでしょうか?
0858デフォルトの名無しさんNGNG
>>857
うん。
ノンブロッキングにしたらすぐ返ってくるけど。
0859857NGNG
>>858
ありがとう!感謝感謝です
0860デフォルトの名無しさんNGNG
>>856
つーか、君勉強足りなすぎ。ちゃんと本読みなさい。

SOCK_STREAMは双方向全二重の信頼性のある通信を提供します。
同じ方向に利用するスレッド間の同期/排他は忘れないでください。

以上の言葉の意味が分かるまでは勉強しないと先でつまずきます。
0861デフォルトの名無しさんNGNG
>>850
じゃあ、>>843のコードがどこか示してくれや。
どんな時にそうなっているんだ? その状況は>>843の主張と整合するか?
0862デフォルトの名無しさんNGNG
>>847-848

お前等、まともなネットワークプログラミングなんかしたことないだろ ?

> ノンブロックモードにする必要があるから

馬鹿、そんなことしたくないから「マルチスレッド」にするんだよ。

> あとサーバーから送信する先のポートの問題とかもあるかも。

意味不明だ。具体的に書いてみれ。
0863デフォルトの名無しさんNGNG
ゲーム製作技術板の「ネットゲー作る技術持ってるやついる?」スレ
で暴れてたアフォか?

> 馬鹿、そんなことしたくないから「マルチスレッド」にするんだよ。

馬鹿、そんな理由でマルチスレッドなんか使わないんだよ。
素人ほどスレッドを使いたがるのはホントだな。

まさか java.net.Socket とかいう欠陥クラス使ってないだろうな。
0864856NGNG
>>SOCK_STREAMは双方向全二重の信頼性のある通信を提供します。
回線は全二重というのはわかるのですが、送信や受信するときいったんソケットにためてるのかなー?とおもっていまして、
それだと送信パケットと受信パケットが混ざるとだめかなー?と思ってました。
もし一つのソケットでできる場合2つのソケットで送信と受信をする場合と比べてスピードは遅くなるのでしょうか?

>>同じ方向に利用するスレッド間の同期/排他は忘れないでください。
これはクリティカルセクションとか、親スレッドが終了するまで子スレッドは終了させないようにするとかということでしょうか?

質問ばかりですいません

0865デフォルトの名無しさんNGNG
>>863
> 馬鹿、そんな理由でマルチスレッドなんか使わないんだよ。

送受信がほとんど絡まないような場合だと、スレッドの方が全然楽。
ノンブロックでポーリングしまくる方がよほど素人だよ。

スレッドもまともに使えねー奴と言うオチか ?
0866デフォルトの名無しさんNGNG
>>864
> もし一つのソケットでできる場合2つのソケットで送信と受信をする場合と比べてスピードは遅くなるのでしょうか?

もちろん状況によるが、普通は物理層がネックになるだろうからあまり変わらないと思う。(Gbit ぐらいになるとよくわからんけどね。)

>>同じ方向に利用するスレッド間の同期/排他は忘れないでください。
> これはクリティカルセクションとか、親スレッドが終了するまで子スレッドは終了させないようにするとかということでしょうか?

クリティカルセクションと言う言葉は関連するけど、「親スレッドが終了するまで子スレッドは終了させないようにする」とか言うのは、全然関係ない。

要は、2つのスレッドが同時に両方とも書き込んだりしないようにしないとダメってこと。これは、別にソケットだからと言うわけじゃなくてファイルだろうがプリンタだろうが同じ。
0867デフォルトの名無しさんNGNG
ああ、やっぱりあっちで暴れてたアフォだったのか。
お願いだから素人はスレッドなんか使うのやめてくれ。
ややこしくなるから。
0868デフォルトの名無しさんNGNG
>>867
> ややこしくなるから。

心配するな、ややこしいと思ってるのはお前だけだから。

ぐちゃぐちゃ書くなら、「何がおかしい」かぐらい書いたらどう ? (まあ、書・け・た・ら の話だけどね)
0869856NGNG
>>866
>>要は、2つのスレッドが同時に両方とも書き込んだりしないようにしないとダメってこと。これは、別にソケットだからと言うわけじゃなくて・・・

え?これは別々のスレッドで同じメモリへ同時に書き込みはだめってことですよね?それさえ気をつければソケットにはまったく同時に送信、受信できるんですよね?
0870デフォルトの名無しさんNGNG
>>869
> え?これは別々のスレッドで同じメモリへ同時に書き込みはだめってことですよね?それさえ気をつければソケットにはまったく同時に送信、受信できるんですよね?

う〜〜〜ん、なんか微妙に違ってる気がするなぁ。
複数スレッドが同じメモリーを同時に読み出すのは OK だけど、だからと言ってソケットから同時に受信できるわけじゃない。
例えば、2つのスレッドが同時にソケットから読み出す時に、ネットワークら "ABCD" と来たら、
"A", "BCD" とスレッドに渡るかもしれないし、"AC", "BD" と渡るかもしれない。
と言うような話だよ。

送信と受信を同時に行うのは特に問題はない。(ヴァカな、>>867 には、ややこしいらしいから勧めないけどね。)
0871デフォルトの名無しさんNGNG
>>869
ソケットの送信と受信は別々のものと考えて差し支えないよ。
たいがいのTCPスタックの実装は内部できちんと排他処理してくれてる。
とはいえ実装依存だから、ドキュメントで確認したほうがいい。

あるスレッドが受信待ちしてるときに、
別のスレッドがそのソケットの受信関連のフラグを操作したときの動作は
未定義かもしれない。

普通そんなことしないけど、素人はやりかねないね。
0872デフォルトの名無しさんNGNG
小さい犬ほど良く吠える
0873デフォルトの名無しさんNGNG
>>864
> 送信や受信するときいったんソケットにためてるのかなー?とおもっていまして、
> それだと送信パケットと受信パケットが混ざるとだめかなー?と思ってました。

そんな、わけのわからんことには、なりません。送信バッファと受信バッファは別になってるんで、1つのソケットでちゃんと送信も受信も出来ます。

ただ、ブロッキングモードだと、受信するとき相手から何か送られて来るまで recv で止まってしまうから、止まってしまってたら送信出来ないだろ? だからノンブロッキングモードにするか、送信用のスレッドと受信用のスレッドを分けるか。

って話なんだと思うけど。・・・なんで2つのスレッドが同時に書き込む話になってるので?
0874856NGNG
>>870>>871>>873
レスありがとうございます。ソケット内部で送信バッファと受信バッファが別になっているとは勉強になりました。

今回あるスレッドで送信、あるスレッドで受信というようにしようと思ってました。一つのソケットでいけそうだということがわかりました。

あと、ソケットが一つでする送信、受信場合と2つで別々に送信受信する場合スピードはかわらないのでしょうか?変わっても気にしなくていい程度なのでしょうか?
ソケット内部での送信バッファと受信バッファが可変の場合変わるかなーと・・・かなり想像でしゃべってもうしわけないです。

あとsendで送るとき一定以上の量になると何回かに分けて送らなければいけないと思うのですが、この一回の容量というのはパケットのサイズなのでしょうか?
それともソケットのバッファがいっぱいになったからなのでしょうか?


0875デフォルトの名無しさんNGNG
>>873
> ただ、ブロッキングモードだと、受信するとき相手から何か送られて来るまで recv で止まってしまうから、止まってしまってたら送信出来ないだろ?

こんな知識で、「素人ほどスレッドを使いたがるのはホントだな。」とか言ってたのか、あきれて物も言えんわ。
0876デフォルトの名無しさんNGNG
> 素人ほどスレッドを使いたがるのはホントだな

ソケットに限らずこれはあってる。

ソケット方面で言うと、ノンブロッキングモードを知らない奴(Java厨)とか
select/pollを使ったイベントドリブンなプログラミングに慣れてない奴とかが
こぞって使いたがるんだよね。
0877デフォルトの名無しさんNGNG
Javaのrecvとかって、ノンブロッキングモードないの? ホント?
0878デフォルトの名無しさんNGNG
>>877
ない。マルチスレッドマンセーなので不要、という思想だそうだ。
さすがにその愚かさに気づいたのか、JDK1.4からはnioというのが付いてる。
頭悪いよね。
0879デフォルトの名無しさんNGNG
頭悪いっつーか、正直信じられん。騙そうとしてたりする?
0880873NGNG
>>875
>こんな知識で、「素人ほどスレッドを使いたがるのはホントだな。」とか言ってたのか、あきれて物も言えんわ。

いや・・・私はそんなこと言ってませんけど。勝手に結びつけないで頂戴って言っても無駄かな。
とりあえずこんな知識で発言してごめんよ。
でも間違ってたら指摘してくれると勉強になって有り難い。

>>877

なかった気がする。でも調べ足りないだけかもしんない。nioは見てないし。

>>874

> あとsendで送るとき一定以上の量になると何回かに分けて送らなければいけないと思うのですが、この一回の容量というのはパケットのサイズなのでしょうか?
> それともソケットのバッファがいっぱいになったからなのでしょうか?

バッファ。
でもブロッキングモードだったら、指定したバイト数を全部バッファに入れるまでブロッキングするから大丈夫。
いや、ブロッキングされるとマズイ場合も多々あるけど。そゆときはノンブロッキングにするかスレッド分ける。
0881デフォルトの名無しさんNGNG
>>874
> あと、ソケットが一つでする送信、受信場合と
> 2つで別々に送信受信する場合スピードはかわらないのでしょうか?
> 変わっても気にしなくていい程度なのでしょうか?

送受信のバッファはそれぞれ別個のものとして扱われるから、
速度の差はないんじゃないかなあ。
最終的にはTCPスタックの実装で決まることだけど、
送受信のバッファの扱いはOSごとに激しく異なってたきがする。

ところで素人素人連呼してるヴァカが一匹居るけど、
いろいろ試すことに価値はあると思うから気にしないでね。
0882デフォルトの名無しさんNGNG
>>879
当然だがselectもpollもないぞ。理由は878と同じらしい。
すべてはnio様の登場でチャラになったことになってる。
0883デフォルトの名無しさんNGNG
>>876
> > 素人ほどスレッドを使いたがるのはホントだな
> ソケットに限らずこれはあってる。

スレッドが適しているところにはスレッド使えばいいし、そうでないところには select とかでいいと思うよ。

もしかして、スレッド使えない方ですか ?
0884デフォルトの名無しさんNGNG
>>883
「使いたがる」と「適材適所」は激しく異なると思われ
0885デフォルトの名無しさんNGNG
>>879
いちおう、ブロックせずに読めるバイト数を返す available() ってのがあるから、(試したことないけど)入力に関してはノンブロッキングもどきが出来るのかもしんない。
0886デフォルトの名無しさんNGNG
>>883
真性アフォ発見!
0887デフォルトの名無しさんNGNG
>>864
> >>SOCK_STREAMは双方向全二重の信頼性のある通信を提供します。
>
> 回線は全二重というのはわかるのですが、
> 送信や受信するときいったんソケットにためてるのかなー?とおもっていまして、

socketと標準入出力ライブラリのハンドルは別です。
前者は全二重だけど、後者は仕様上半二重で構わないです。

そこのところを気をつけてください。(fdopenなどする場合)
0888デフォルトの名無しさんNGNG
>>863
> 素人ほどスレッドを使いたがるのはホントだな。

ちょっと分かってきた時に、無駄にpollingや非同期使いたがる奴もいるね。
どれを使うかはバランス感覚の問題だから、人に教えるのは難しいね。

しかし、一昔前に比べると、systemが成熟してきたので、
multi threadによる解決が自然な場合が多い。
初めからthreadの増大が問題になる事が分かっている場合以外は、
multi threadから始めるという方針も悪くないと思う。
0889デフォルトの名無しさんNGNG
> ちょっと分かってきた時に、無駄にpollingや非同期使いたがる奴もいるね。

うんうん、スレッドは本質的には非同期処理だからねえ。無駄だよねえ。
非同期ソケットとノンブロックソケットはまったく別物だから注意しようね。

> 初めからthreadの増大が問題になる事が分かっている場合以外は、
> multi threadから始めるという方針も悪くないと思う。

少なくとも、IOのためだけにthreadを使うのは間違ってるね。
Javaしか知らない困った人は解らないかもしれないが・・・
0890デフォルトの名無しさんNGNG
>>884
>「使いたがる」と「適材適所」は激しく異なると思われ

この発言はあってるけど、それがどうかしましたか ?
俺は、>>876 がやけにマルチスレッドを気にしてるみたいだから、マルチスレッドの方が書きやすいこともあるよって言ってるだけだよ。

>>886
どこが「アフォ」か書いてみな。あんた見てると、>>872 が正しいこと言ってるのがよくわかるよ。

>>887
> socketと標準入出力ライブラリのハンドルは別です。
> 前者は全二重だけど、後者は仕様上半二重で構わないです。

正確には、ファイル入出力は半二重 (ファイルポインタは1個しかないからね) だけど、COM ポートなんかだと全二重のシステムもあるよ。

>>888
ほぼ同意。

>>889
意味不明。
0891デフォルトの名無しさんNGNG
>>880
> いや・・・私はそんなこと言ってませんけど。勝手に結びつけないで頂戴って言っても無駄かな。

人違いか ? なら、ごめんよ。ただ、

> ブロッキングモードだと、受信するとき相手から何か送られて来るまで recv で止まってしまうから、止まってしまってたら送信出来ないだろ? だからノンブロッキングモードにするか、送信用のスレッドと受信用のスレッドを分けるか。

の文章は完全に誤解してると思うから、もう少し勉強してね。
0892デフォルトの名無しさんNGNG
必死な奴だなあ
0893デフォルトの名無しさんNGNG
Win2k VC6.0で、
CSocketクラスを使用してサーバアプリを作成しています。

accept後に一定時間通信がない場合、そのSocketをcloseしたいのですが
どのようにtimeout等を考えればよいのでしょうか?
0894デフォルトの名無しさんNGNG
スレッドを使いなさい
そうすれば救われます
0895デフォルトの名無しさんNGNG
>>892
> 必死な奴だなあ

それしか書けないなら、書かない方がいいよ。アフォみたいだからね。

>>893
> accept後に一定時間通信がない場合

クライアント/サーバー間のプロトコルがわからない (TCP/IP とか言うなよ、そうじゃなくてアプリケーションレイヤーの話だからね) のでなんとも言え。
まあ、普通のクライアントのコマンドに対してサーバーから応答を返すような場合だったら、サーバーが Receive() で待ってる時にタイマー掛けといてタイムアウトしたら切断しちゃえばいいんじゃないの ?
0896デフォルトの名無しさんNGNG
>>895
>まあ、普通のクライアントのコマンドに対してサーバーから応答を返すような
>場合だったら、サーバーが Receive() で待ってる時にタイマー掛けといて
>タイムアウトしたら切断しちゃえばいいんじゃないの ?
レスありがとうございます。
まさにそのとおりです。
accept→Recieve→Sendといくのですが、
acceptしたあとどうタイマーをかけていいのかわからなかったもので。
やっぱりCSocketよりWinSock直でやったほうがいいんですかね
0897デフォルトの名無しさんNGNG
>>896
> accept→Recieve→Sendといくのですが、
> acceptしたあとどうタイマーをかけていいのかわからなかったもので。

もっとちゃんと状態遷移を理解してないとダメだよ。

1. Listen
2.     ← Connect
3. Accept
4. Receive
5.     ← Send
6.       Receive
7. Send  →
8. 4. へ戻る...

クライアントのから待ちになるのは、4〜5 だから 4 (=Receive 開始時) にタイマー掛けて、5. (=クライアントからのデータ到着) がタイムアウトしないかみるだけだよ。

> やっぱりCSocketよりWinSock直でやったほうがいいんですかね

ここら辺の話は、CSocket とか WinSock に依存した話じゃないよ。
0898デフォルトの名無しさんNGNG
普通にselectなりpollなりで待てばいいと思うのだが。
0899デフォルトの名無しさんNGNG
>>897
状態繊維まで書いていただいてすいません…。
たしかにそのとおりだとは思います。

CSocketではacceptしたあと、受信可能状態になればOnRecieve()がよばれると思っています。

ですので、OnRecieve()がよばれるまえ(acceptした直後)にタイマーかけておいて
OnReceive()/OnSend()が呼ばれたらそれぞれ処理してタイマーかけなおし
すればよいのでしょうか?
0900デフォルトの名無しさんNGNG
>>899
> CSocketではacceptしたあと、受信可能状態になればOnRecieve()がよばれると思っています。
> ですので、OnRecieve()がよばれるまえ(acceptした直後)にタイマーかけておいて
> OnReceive()/OnSend()が呼ばれたらそれぞれ処理してタイマーかけなおし
> すればよいのでしょうか?

そう言う意味では、MFC 固有だな。スマソ。
とりあえず、接続されたら OnAccept() が呼ばれるから、タイマー掛けて、OnReceive() 毎に再設定でいいと思うよ。
0901デフォルトの名無しさんNGNG
>>900
>そう言う意味では、MFC 固有だな。スマソ。
やっぱそうなんですね。
>接続されたら OnAccept() が呼ばれるから、タイマー掛けて、OnReceive() 毎に再設定
本当にいろいろとありがとうございます。
とりあえずこれでやってみます。

0902デフォルトの名無しさんNGNG
>>895
自分のことだって分かってるんですね(プ
0903デフォルトの名無しさんNGNG
>>901
正直、>>898のやり方の方が、
非同期イベント処理の健全性を考えないで済むから楽。

非同期型のプログラムを書くには根本的な頭の切り替えが必要。
特に例外処理や後始末やハンドラの登録/抹消において。
最悪なのは手なりの同期/非同期混合型プログラム。地獄を見ることになる。

これはMFCのCSocket or CAsyncSocketとは直接関係ない話な。
0904903NGNG
>>903
あ、イベント駆動型プログラム、って書いた方が良かったかな。
0905デフォルトの名無しさんNGNG
Windowsに毒されてる痛いヤシがいるようだが、WindwosCE2.12ではマルチスレッドで
書くしかないわな。(もちろんVC++でだけど)
0906デフォルトの名無しさんNGNG
>>905
わけわからん
0907903NGNG
>>906
語りたい年頃なんでしょう
0908デフォルトの名無しさんNGNG
>>902
> 自分のことだって分かってるんですね(プ

やっぱりこの程度のことしか書けないのね。まあ、2ch だからいいけどさ。

マ板に逝けば、仲間がイパーイいるよ。ププッ。

>>903
お説ごもっともだけど、全然有用な情報がないよ。
知識もってるってひけらかしたいだけ ?

こんなことしてはまったとか、具体的に書いてもらえればいいけどさ。
0909 ◆4I/Yf.lDws NGNG
Winsockを使用して、sendで、次のような送信を試みたのですが、少しおかしくなってしまいます。
for(i=0; i<100; i++) {
sprintf(toSendText,"%d",i);
send(dstSocket, toSendText, strlen(toSendText)+1, 0);
Sleep(100);
}
それぞれのパケットに1組の数字(文字列)のみを入れて送信したいのですが、
受信したものは、「1\02\03\04\0」というように何個かがくっついてしまったのです。
どうすれば、1パケットに1つの数字を送信できるのでしょうか。
どなたか教えてください。
0910デフォルトの名無しさんNGNG
新キャラ登場だね。コテハンにすればいいのに。
0911デフォルトの名無しさんNGNG
何か一人で熱くなってる痛い奴がいるな。
煽りはほっとけよ。

>>909
普通にやるとくっついたり分断されたりします。
for(i=0; i<100; i++) {
  sprintf(toSendText,"%d",i);
  len = strlen(toSendText);
  send(dstSocket, &len, sizeof(len), 0);
  send(dstSocket, toSendText, len, 0);
  Sleep(100);
}
でどうよ?
そもそも i を文字列に変換する意味はあるのか?特にないのなら

  send(dstSocket, i, sizeof(i), 0);
でどうよ?
0912デフォルトの名無しさんNGNG
>>909
> どうすれば、1パケットに1つの数字を送信できるのでしょうか。

無理。自分で、'\0' 見つけて分解するしかない。
逆に、1 と '\0' が2回に分けて送られることもありうるので注意すること。

あと、
> 受信したものは、「1\02\03\04\0」というように
と書くな、0x31, 0x02, 0x03, 0x04, 0x00 と誤解されるぞ。(と言うか、コンパイラはそう言う風に解釈する。)
ちゃんと、1 \0 2 \0 3 \0 4 \0 のように書け。
0913デフォルトの名無しさんNGNG
>>909
TCPなんですよね?
if (TCPです) {
 出来ません。
 TCPはバイトストリームです。
 だからパケットを扱えません。// TCPではセグメントと呼びます。
}
それから、sendの返り値をちゃんと見なさいな。
0914デフォルトの名無しさんNGNG
>>911
最後のは
  send(dstSocket, &i, sizeof(i), 0);
でつ…。
0915デフォルトの名無しさんNGNG
>>914
「バイトオーダに注意(MSB or LSB)」は追加しないでいいの?
>>909はカナーリ初心者プログラマだぞ。
0916デフォルトの名無しさんNGNG
>>915
俺もカナーリ初心者プログラマなのですが…。
バイトオーダーは送信元と受信元が同じエンディアンなら
気にしなくてもいいというのは誤った認識でしょうか?
#初心者なら送信元と受信元は同じ環境だと思ったので…。

バイトオーダーを考慮するなら
long hoge = htonl((long)i);
send(dstSocket, &hoge, sizeof(hoge), 0);
ですかね。
0917デフォルトの名無しさんNGNG
バイトオーダーの遥か以前の段階だし、いいんでねぇの?

【方法1】
電文サイズと電文の実体を送信し、受信側でサイズ分受信する
【方法2】
受信側で\0をデリミタとする

以外に方法ってあるかな? つなげなおすとかでなくて。
0918909 ◆4I/Yf.lDws NGNG
やはり無理ですか。
やろうとしているモノは、送信側ソフトのスクロールバーを動かすと、
受信側ソフトのスクロールバーがそれにつられて動くという実験をやろうとしていたのです。
実際に動かしてみると、カクカクするので、909で書いたものを実行してみたところ、
値がくっついてしまっていることが分かったのです。

送られてきたモノを分解したら一応はできるのですが、カクカクするんです。
ちなみに、ローカルエリア内です。

VNCという遠隔操作ソフトをご存知でしょうか?
あのソフトもTCPを使用しているようなのですが、
上と同じ環境でマウスは非常に滑らかに動きます。
なにか違うのでしょうか。
勘違いなどしているかもしれませんが、教えていただけないでしょうか。
0919デフォルトの名無しさんNGNG
>>917
\0をデリミタにすると,数値そのまま送った時はまずいよね?
0の時デリミタになっちゃう。
>>911のようにテキストに変換するならいいけど。
0920デフォルトの名無しさんNGNG
分解しないでも分解してもカクカクするなら、別の原因じゃねぇの?
まぁ、前者は明らかにマズイんだが。
0921デフォルトの名無しさんNGNG
>>918
明示的にフラッシュすればいいんでないの?
0922デフォルトの名無しさんNGNG
>>919
そらもちろんテキストが前提です。
バイナリ可変長ならサイズ指定が必須でしょう。
0923デフォルトの名無しさんNGNG
>>922
すいません。あなたを侮ってました。
すんません。すんません。(ぺこぺこ
0924デフォルトの名無しさんNGNG
いやそんなあやまられても困るんでばっくれて下さい
0925デフォルトの名無しさんNGNG
アレでないの。
TCP_NODELAY
0926デフォルトの名無しさんNGNG
TCP_NODELAYとrecvでまとめて受信するのはあまり関係ないと思うけど。
DELAYしようがしまいが、受信ソケットには電文は溜まっていく。
0927デフォルトの名無しさんNGNG
?
>送られてきたモノを分解したら一応はできるのですが、カクカクするんです。
>ちなみに、ローカルエリア内です。
これの話だけど。
0928デフォルトの名無しさんNGNG
>>916
> #初心者なら送信元と受信元は同じ環境だと思ったので…。

ビクーリな推測に基づく仮定だな。
君の書くプログラムは大丈夫なのか?
0929デフォルトの名無しさんNGNG
っていうかバイトオーダはなるべくネットワークバイトオーダにするのが
理想なんじゃないかな。
0930デフォルトの名無しさんNGNG
>>929
NDRやCDRみたいなのもあるから、それが理想とは限らんだろ。
0931デフォルトの名無しさんNGNG
>>928
なんでやねん。x86Windoesで送信したら受信する方はx86Windowsやないか。
0932デフォルトの名無しさんNGNG
>>930
何それ?
0933909 ◆4I/Yf.lDws NGNG
>>925
そうです!
TCP_NODELAYがミソでした!
無事解決しました。
皆さんどうもありがとうございます。
0934デフォルトの名無しさんNGNG
>>931
eで送信して、wで受信するんですね。
0935名無しさん@接続しっぱなしNGNG
>>932
http://www.cs.utk.edu/~raman/soap/soap.ppt
0936デフォルトの名無しさんNGNG
シリアル通信用の
便利なライブラリご存じないでしょうか?
0937デフォルトの名無しさんNGNG
>>933
ミソじゃねえよ。偶然くっつかなくなっただけだ。
少しは過去ログ見ろぼけ。
0938デフォルトの名無しさんNGNG
もう◆4I/Yf.lDwsが来てもレスする気がなくなった
0939◇4I/Yf.lDwsNGNG
>>937
コンピュータの世界に偶然なんてあるのかい?

そもそも、スクロールを実現すんなら、全データの信頼性よりもパフォーマンスが上がればいいんだろ
NODELAYつかって、パフォーマンスが上がったって事は、成功といってイイんじゃない?
ネトゲでデータの信頼性よりもパフォーマンスを重視するのと同じだよ

それにこの場合は送信元も受信元も同じって決まってるんだしさ
0940デフォルトの名無しさんNGNG
>>939
UDPのがいいんじゃない?
0941デフォルトの名無しさんNGNG
>>939
「パフォーマンス」???
0942デフォルトの名無しさんNGNG
>>940-941
もうほっといたら ? 本人満足してんだしさ。
そのうち痛い目見りゃわかるだろ。
0943デフォルトの名無しさんNGNG
なんか、このスレ、あほうが2人でとんちんかんなこと言ってる感じだな。
0944デフォルトの名無しさんNGNG
なぜ本人だと?
0945名無しさん@接続しっぱなしNGNG
>>939はトリップじゃないから、たぶん第三者の煽りだよね。
この文章に騙される人は、健全性と完全性の区別が出来ない人だね。

>>943
とりあえず、しばらく放置じゃないかな?
0946デフォルトの名無しさんNGNG
>>944
>>933
0947デフォルトの名無しさんNGNG
UNIX板のapacheスレで質問したらこっちの方が良いんじゃないのって言われたのでここで質問します。

SSLの通信をProxyに通す場合の手順がいまいち分かりません。
現在以下までは分かっています。

1.クライアントが、プロクシーサーバにCONNECTメソッドでリクエスト
2.プロクシーサーバは、200をクライアントに返す
3.プロクシーサーバは、1.で送られてきたリモートサーバにコネクションを張る

この後が分かりません・・・。
クライアントが何か出力しているのは分かるのですが、
それが合計何バイト出力してるのかが分からず、どこの時点でリモートサーバにデータを
送ればいいのかが分からないとか、そういうところで困ってます。

何か分かる方がいましたらひとつ願います。

RFC2616読んだのですが、これに関してあまり書いてなかった・・・。
HTTPプロクシーのRFCは2616じゃないのでしょうか。
0948デフォルトの名無しさんNGNG
proxyを作ってるのか?
0949デフォルトの名無しさんNGNG
クライアント作ってるのか>>948なのかワカラン。
0950947NGNG
情報不足ですんません。
Proxyつくってます。
0951デフォルトの名無しさんNGNG
select等で、ClientからとServerからの書き込みをまって、
書き込みがきたら、その分だけ転送すればいいんでわ?
0952デフォルトの名無しさんNGNG
じゃあ。
SSLで送信されてるなら、それを受信して解析しないと。
それに、その後再びエンコードしてHTTPサーバにリクエスト。
SSL crypto HTTPあたりでググってみれ。
0953デフォルトの名無しさんNGNG
>>947
CONNECTでコネクションが確立したら、あとは
クライアントが送信してきた内容をそのままサーバに垂れ流す。
サーバが送ってきた内容も同様にそのままクライアントに転送。
どっちがいつ送ってくるかは分からないからいつ送ってきても
いいように待つ。
ようするにsocksと同じで汎用のポートフォワーディングの
手段として使えるからちゃんとアクセス制限しないと
セキュリティホールになる。

>>952
SSL Proxyは通信内容に一切関知しない。
Proxyが暗号化を解除できたらSSLの意味がないだろ。
0954947NGNG
>>951

すんません。
もう少し詳しくと言うかなんか参考文献あったら教えてください。
0955947NGNG
>>953

あぁ、やっぱいつ送ってきても良いように待つのですか。
一般的なやり方ってどんなのがあるんでしょうか?
スレッドを使うとか?
0956デフォルトの名無しさんNGNG
だからー >>951 が言ってるとおりselect等で待つ。
ソケットの使い方はUNIXネットワークプログラミングVol.1でも読めや。
0957デフォルトの名無しさんNGNG
>>926 TCP_NODELAY を使いつつ、send() 側も recv() 側も、バッファ(第 3 引数)を 1 byte にすりゃいいだろ。 いまさらだけど。
0958デフォルトの名無しさんNGNG
>>926
TCP_NODELAY を使いつつ、send() 側も recv() 側も、バッファ(第 3 引数)を
1 byte にすりゃいいだろ。

いまさらだけど。
0959デフォルトの名無しさんNGNG
>>956

Javaで、selectするにはどうすれば良いんでしょうか。
0960デフォルトの名無しさんNGNG

スレッドとTCPのソケット通信について…

TCP/IPがマルチスレッドで動いてくれるとでも思っているヤツはバカ!
0961デフォルトの名無しさんNGNG
>>960 OS によっては、ちゃんとカーネル内でパラレルに動作するようになってます けど、バカですか?
0962デフォルトの名無しさんNGNG
947はJavaで作ってるの?
0963デフォルトの名無しさんNGNG
>>947にはJavaなんて一言も書いてなかったな。
まあそれはともかくJavaのJDK 1.3まではスレッド使うしかない。
JDK 1.4ならnio使え。
0964デフォルトの名無しさんNGNG
SSL Proxyを通してアクセス制限を回避して任意のホストに
接続できるという話
http://www.kb.cert.org/vuls/id/150227
SSL Proxyを作る人は同じ轍を踏まないように。
0965デフォルトの名無しさんNGNG
おい >>960、>>961 に応えろよ。 カーネルのソースも読めねー厨房。
0966デフォルトの名無しさんNGNG
WindowsのTCP/IPドライバのソースを
屏風から追い出してくれたら答えます
0967デフォルトの名無しさんNGNG
そういえば、winsock って、WSAAsyncSelect()を使うと、勝手にスレッドを作るね。
タスクマネージャで確認した程度だから、間違ってるかもしれないけれど。
0968デフォルトの名無しさんNGNG
>>963

いや、Javaではないんですが、selectが無い場合はどうやるのかと思って質問しました。

実際は、C#でやっています。
C#では、Selectというメソッドはあるのですが、いまいち使い方が分かりません。
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemnetsocketssocketclassselecttopic.asp

要は、ポートフォワーディングをすれば良いんだとは思いますが
どうやって実装すればいいのかに悩んでいたり。
0969デフォルトの名無しさんNGNG
>>968

> ポートフォワーディングすれば

間違えた。

> ポートフォワーディングみたいなこと

に訂正。
ポートフォワーディングって言うよりはトンネリングって言う方が正しいのかな。
0970デフォルトの名無しさんNGNG
そろそろ新スレ建てようかと思うけど、こんな感じでいい?

主にソケットに関しての質疑応答スレです。

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

Winsock Programmer's FAQ
http://tangentsoft.net/wskfaq/

過去スレ:
ネットワークプログラミング相談室
  http://pc.2ch.net/tech/kako/970/970344582.html
ネットワークプログラミング相談室 Port2
  http://pc.2ch.net/tech/kako/1006/10062/1006258198.html
ネットワークプログラミング相談室 Port3
  http://pc3.2ch.net/test/read.cgi/tech/1023359282/
0971デフォルトの名無しさんNGNG
OK。Go!
0972デフォルトの名無しさんNGNG
>>968
使い方が分からんってそのまんまじゃん。
もしかしてCのselectの使い方も分からない?
だったらFAQでも読め。URLはちょうどテンプレが
貼られてる。
0973デフォルトの名無しさんNGNG
建てますた。

ネットワークプログラミング相談室 Port4
http://pc3.2ch.net/test/read.cgi/tech/1034236536/
0974デフォルトの名無しさんNGNG
>>961
へぇプロトコルがマルチスレッドに対応しているのか…どこの世界の話かよかったら聞かせろ。

おまえは、複数の人間がしゃべっているのを同時に聞ける天才か?
0975デフォルトの名無しさんNGNG
>>961,960,974
プロトコルとOS話が…は別だわな…
0976デフォルトの名無しさんNGNG
>>974
実装の話だよ。>>960 も「動く」って書いてる。
0977デフォルトの名無しさんNGNG
>>974

961はOS の TCP/IPプロトコルスタック部分が並列動作するってことを
簡略な表現で言っただけでしょ。

その程度の省略が自動補完できない時点で、知識レベルが論外って気がするが...
0978デフォルトの名無しさんNGNG
並列動作する実装もありうると想像はできるけど、
実際のとこどうなんだろ。

linuxとか*BSDとかの実装を見た人います?
0979名無しさん@接続しっぱなしNGNG
>>978
IP→TCPのDeMultiplexingを担っているところが、
TCPプロトコルスタック部分の(接続単位から見た)並列動作を実現しているところ。

と言われただけで、かなり具体的なイメージが湧かないと、
ソースの場所示されても分からないと思う。イベント駆動型だし。

ちなみに接続単位から見た並列動作が実現できてないのが、
一昔前のいわゆるパソコン通信です。(接続の多重化が行なわれてない)
0980デフォルトの名無しさんNGNG
いや、実際に複数のコンテキストが"同時に"TCP/IPスタックをまわせる
ようになってるのかなあ、と。
実際は排他制御されてたりしない?
0981名無しさん@接続しっぱなしNGNG
>>980
君が書いたら、大域変数バリバリでそうなるのかもしれないけど、
tcp_input.c(の関数群)は、「接続単位」に対してパラメタライズされてます。

> 実際は排他制御されてたりしない?
tcp_input.cの#ifdef CONFIG_SMP調べればすぐ分かるでしょ?
ジャイアントロックないでしょ?

そもそも多重化って意味分かりますか?
全然意味分からないならport 4の図書コーナーにGO!
0982デフォルトの名無しさんNGNG
>>981
どこの実装?CONFIG_SMPってことはlinuxかな。
何にせよ読んでる人がいることに驚いた...

接続単位ってことですが、送受信は分かれますか?
もし分かれるなら、
TCPの送受信で共有しているパラメータ(ブロッキングモードなど)
へのアクセスは正しく排他されますか?
0983名無しさん@接続しっぱなしNGNG
>>982
> 接続単位ってことですが、送受信は分かれますか?

送受がパラに動くようコンテキストが分かれてる、って意味?
TCPは全二重だから、送受で干渉ないように作ってあるわな。
しかもイベント駆動だから、素直にハンドラ書けば並列に動く。
もちろん必要最小限の排他は行なってるわね。

> どこの実装?CONFIG_SMPってことはlinuxかな。

BSDなんかでもnetwork関係は#ifdef SMP全くないでしょ。
NET4自体が、i386がメインじゃない大昔からSMPを考慮してるからね。
(386BSD自体はSMP駄目だったけど)

つーか、読め。人に聞いたsurveyは身に付かん。
http://pc3.2ch.net/test/read.cgi/tech/1034236536/6
The Implementation (TCP/IP Illustrated, Volume 2)
http://www.amazon.co.jp/exec/obidos/ASIN/020163354X/ref=pd_sim_dp_4/249-2677107-1089124

いじょしゅうりょ 1000取り合戦どうぞ→
0984デフォルトの名無しさんNGNG
1000Get!!
0985デフォルトの名無しさんNGNG
> もちろん必要最小限の排他は行なってるわね。

そのへんは送受信で共有されてるパラメータによっては
複雑な処理になりそうですね。バグも入りそうだけど、
まあ腕の見せ所なんでしょう。

ところで本当に並列に動作していることを確認した人はいますか?
だれも「すると思う」レベルの話しかしてませんし。
難しいのかな。
0986次スレ案内NGNG
ネットワークプログラミング相談室 Port4
http://pc3.2ch.net/test/read.cgi/tech/1034236536/l50
0987名無しさん@接続しっぱなしNGNG
>>985
> ところで本当に並列に動作していることを確認した人はいますか?

あなたが説明聞いても分からないだけだよ?
本当に並列に動作しているもの。
0988デフォルトの名無しさんNGNG
>>987
> 本当に並列に動作しているもの。

確認方法は ?
0989デフォルトの名無しさんNGNG
横槍ですまんが,並列に動作していないことについての確認方法は?
0990デフォルトの名無しさんNGNG
|  |ノノハ
|_| 。‘人
|文|⊂)
| ̄|∧|
 ̄ ̄ ̄ ̄ ̄

|  |
|_|
|文| ノノ  サッ
| ̄|
 ̄ ̄ ̄ ̄ ̄
0991デフォルトの名無しさんNGNG
|  |
|_|
|文| ノノ  サッ
| ̄|
 ̄ ̄ ̄ ̄
0992fangNGNG
梅
0993fangNGNG
ume
0994fangNGNG
ume
0995fangNGNG
ume
0996fangNGNG
ume
0997fangNGNG
ume
0998デフォルトの名無しさんNGNG
あ
0999デフォルトの名無しさんNGNG
      __     
     l⊆⊇`ヽ ≡  ヤホーイ
     (´�D`Lノ ≡
    m=○=mノ) ≡
    _/_/(「_ノニコ ≡
     ( (0)=(__)0) ≡(´⌒(´⌒;;
1000デフォルトの名無しさんNGNG
      〜oノハヽo〜 ミ _ ドスッ
       ( ^▽^) ─┴┴─┐
       /   つ.  1000 │    
      /_____|└─┬┬─┘
        ∪ ∪    ││ _ε3
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。