トップページ⇒tech
956コメント340KB

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

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001名無しさん@お腹いっぱい。 NGNG
主にソケットに関してのFAQ
0002名無しさん@お腹いっぱい。 NGNG
なにが聞きたいんじゃ?
00031>2 NGNG
ゲームプログラミング相談室ほパクったものなのて私は特に何を聞きたいというわけではないです。
0004名無しさん@お腹いっぱい。 NGNG
>ほパクったものなのて
(゚Д゚)ハァ?
00051=3>4 NGNG
ほパクった → をパクった
0006名無しさん@お腹いっぱい。 NGNG
RMI使えばソケットの知識必要なし。
0007名無しさん@お腹いっぱい。 NGNG
>>3
プラットフォームはなんでもあり?
00081=3>7 NGNG
OKです。答えが返ってくるとは限りませんが。
0009名無しさん@お腹いっぱい。 NGNG
>>4 爆笑した。
0010名無しさん@お腹いっぱい。 NGNG
勉強したいのですが
いい本教えて下さい
0011優しい君 NGNG
>>10 http://mentai.2ch.net/test/read.cgi?bbs=prog&key=960830594
0012>11 NGNG
う、同じスレをリンクしようとして開いていた。
リロードしてよかった・・・
0013初心者 NGNG
ソケットとOSI参照モデルの7層との関係を教えてください
0014名無しさん@お腹いっぱい。 NGNG
>>13
あんま関係ない。
強いていえばセッション層に含まれる手順だけど、
OSIモデルを意識してソケット使うことって、あんましないよね。
0015名無しさん@お腹いっぱい。 NGNG
OSIモデルよりソケットライブラリのほうが歴史があるんだっけ?
0016名無しさん@お腹いっぱい。 NGNG
OSIは、簡単に言うと標準化団体の学者馬鹿によるフライング。
部屋にこもってる世間知らずのじいさんたちの世迷言。

CMIPは誰も使わないし、TCP/IPはOSIと関係ない。
0017ういろう NGNG
Perlでソケット使える無料Webスペースがないので実験できないです
0018名無しさん@お腹いっぱい。 NGNG
OSIは、お勉強として参考にするには良いって聞いたけど
本当ですか?
0019cafe NGNG
OSIか。わけのわからん標準だったな。各層でダブりが多かったし、
実際に7層あるプロトコル無いし。
解説書書いてる人も、訳分からなかったんだろうな。
0020名無しさん@お腹いっぱい。 NGNG
>>17
もし Windows を使っているならば、
ActivePerl という無料の Perl 実行環境があるので、
それを使いましょう。

[ 参考 ] Windows 95/NTでPerl&CGIのページ
http://www.att.or.jp/perl/win/nt_cgi2.html
0021>16 NGNG
しかし、TCP/IP本は必ずといっていいほどOSIも載せるから勘違いしている人も多いんだよな・・・
0022ソケットと NGNG
http,ftp,smtpなどとの関係はどのようになっているのでしょうか?
0023>22 NGNG
ソケットは入出力の口にすぎんので、アプリケーションプロトコルは、
プログラムで実装してください。
0024名無しさん@お腹いっぱい。 NGNG
広告バナーを先にクリックしないと、
目的とする別のURLを開けられないようにするには
どうしたらよいのでしょうか?
0025ウッハウハ NGNG
広告のイメージに onClick 属性をつけて、
JavaScript でほにゃららってのはどう?

<html>
<head>
<script Language="JavaScript"><!--
function inst(){ alert("アドレスはhogehoge"); return false; }
// -->
</script>
</head>
<body>
0026ソケット入門中 NGNG
>>22
ソケット
  IPアドレスとポート番号を用いて通信するインターフェース
HTTP,FTP等
  ぶっちゃけて言えば、特定のポート番号の別名(HTTPは80等)
〃プロトコル
  サーバーとクライアントの間でコマンドやデータのやり取りをするとき、
  どういうリクエストを送り、どういう応答を返すかの取り決め。
0027初心者 NGNG
>ソケット
>IPアドレスとポート番号を用いて通信するインターフェース
ということは、ソケットとは、TCPプロトコルとIPプロトコルのコネクションを
確立するためのもので、これらのプロトコルとは深く関わっているが、
アプリケーションプロトコルはまた別物で、他に自分で用意しなければならない

という解釈であっていますでしょうか?
0028無名 NGNG
>27 You are right!
002926@あまり自信ない NGNG
>ソケットとは、TCPプロトコルとIPプロトコルのコネクションを
>確立するためのもので、これらのプロトコルとは深く関わっているが、
TCPやIPのヘッダやパケットを覆い隠すという感じ?

>アプリケーションプロトコルはまた別物で、他に自分で用意しなければならない
アプリケーション毎に送る内容が違うから。

俺の勝手な解釈
IP:ルーティング(送りっぱなし)
TCP:転送の確実性の確保(含エラーチェック)
ソケット:TCPやIPのヘッダを意識せず、データを用意するだけでパケットを送れる
  サーバーソケットとクライアントソケットを結ぶファイル記述子のようなもの
アプリケーションプロトコル:通信の方法
  送るデータの形式("GET xxx"や"POST xxx")
  BMPファイルのヘッダ形式のようなもの
0030名無しさん@お腹いっぱい。 NGNG
ソケットを作るときにアドレスファミリとソケットタイプを指定できるので、
必ずしも
>ソケット
>  IPアドレスとポート番号を用いて通信するインターフェース
とは限らないヨ。

>HTTP,FTP等
>  ぶっちゃけて言えば、特定のポート番号の別名(HTTPは80等)
ポート番号は変えられるので、こうとは限らないヨ。

>〃プロトコル
「HTTP」の「P」は「Protocol」のことだヨ。
0031無名選手@投げたらアカん! NGNG
アプリケーション(プログラム)からTCP,UDP等を利用して通信するためのAPI(関数郡)がソケットという理解なんだけど違う?
0032名無しさん@お腹いっぱい。 NGNG
細かいね。。。
0033名無しさん@お腹いっぱい。 NGNG
Windowsでの話ですが。
いまはもうWinSock2を標準にしてプログラミング
してよくなった?
まだ1.1を前提にしなきゃいけないの?
0034名無しさん@お腹いっぱい。 NGNG
>33
Win95にwinsock2を安全に入れる方法を発見すればおっけー
0035名無しさん@お腹いっぱい。 NGNG
IPの偽造ってどこまで出来るものなんですか?
0036名無しさん@お腹いっぱい。 NGNG
>35
はあ?
0037名無しさん@お腹いっぱい。 NGNG
IP MasqueradeとかのNAT技術ってIPパケットの偽造っちゃ偽造だよね。
0038名無しさん@お腹いっぱい。 NGNG
>>22
どうも、アクティブパールって、その為に有ったんですね。
Jパールと両方いれてみようかな?
003936 NGNG
>35
37みたいな意味なら、データグラムのIPヘッダ適当に書きかえれば
いくらでもできるが。そういうことなのか?
0040>34 NGNG
いっしょに日本語版のダイヤルアップ ネットワーク 1.3 (以下 DUN 1.3) をセットアップするという手はダメ?

関連内容
http://www.microsoft.com/JAPAN/support/kb/articles/J046/0/83.htm

日本語版ダイヤルアップネットワーク1.3
http://www.asia.microsoft.com/japan/windows/dun1_3/
0041名無しさん@お腹いっぱい。 NGNG
ソケットには2種類あって、
一つは同一マシンのプロセス間通信用、
もう一つは外部マシンとの通信用ということらしいですが、
どうしてこの二つともが「ソケット」と呼ばれているのでしょうか?
TCPやIPでの外部通信とマシン内部のプロセス同士の通信は
まったく別物のような気がするのですが。
0042名無しさん@お腹いっぱい。 NGNG
>ソケットには2種類あって、
?
0043名無しさん@お腹いっぱい。 NGNG
>ソケットには2種類あって、
おんなじだよ〜。ソケットってのはデータの出入り口の事だから、
データがネットワークを経由して別のマシンに逝こうが、同じマ
シンの別のプロセスに逝こうが、関係ないよ。
0044名無しさん@お腹いっぱい。 NGNG
ストリームとデータグラムの違いね。
0045>>41 NGNG
> TCPやIPでの外部通信とマシン内部のプロセス同士の通信は
> まったく別物のような気がするのですが。
違ったり同じだったり。
とりあえず内部用に127.0.0.1のIPアドレスが予約されてたり。
スタンドアロンのIPCでストリーム通信だってできたり。
0046> NGNG
その別物をなるべく同じようにしようという意図も
少しはあるんじゃないか?
0047> 44 NGNG
> ストリームとデータグラムの違いね。
これは「同一マシン」「ネットワーク経由」の違いとは関係ないゾ。
ネタ?
0048名無しさん@お腹いっぱい。 NGNG
unixの内部プロトコルとIPのことじゃないの?
0049つまり NGNG
同一マシンの違うプロセスと通信するにも
TCP/IPスタック(?)を借りてやらなけらばならないということですか?
0050名無しさん@お腹いっぱい。 NGNG
socket( AF_INET, SOCK_DGRAM, 0 );
IPv4でデータグラム型。つまりUDP。外部と通信可。

socket( AF_INET, SOCK_STREAM, 0 );
IPv4でストリーム型。つまりTCP。外部と通信可。

socket( AF_LOCAL, SOCK_DGRAM, 0 );
Unixドメインプロトコルでデータグラム型。名称なし。同一マシンのみ。

socket( AF_LOCAL, SOCK_STREAM, 0 );
Unixドメインプロトコルでストリーム型。名称なし。同一マシンのみ。

ただ、45のように127.0.0.1をローカルマシンのIPアドレスとして
TCPやUDPで通信することもできるヨ。
0051名無しさん@お腹いっぱい。 NGNG
>49
パイプでもいいよ
0052名無しさん@お腹いっぱい。 NGNG
>49
バイブは違うよ
0053名無しさん@お腹いっぱい。 NGNG
>>52
SVR4だとパイプだろうがソケットだろうが、結局STREAMS配下だから
同じようなもんじゃなかったっけ?
# いや、最近やってないからもはやうろ覚えなんだが
0054名無しさん@お腹いっぱい。 NGNG
>>53
良く読め(藁
0055つーか NGNG
>>53
良く見ろ(藁
0056名無しさん@お腹いっぱい。 NGNG
やっぱり生が一番だよ
0057名無しさん@お腹いっぱい。 NGNG
あげ
0058名無しさん@お腹いっぱい。 NGNG
>>57 なんかききたいの?
0059名無しさん@お腹いっぱい。 NGNG
libpcap.a があると良いですよ。なんつて。
0060名無しさん@お腹いっぱい。 NGNG
私のおすすめはこれ。

UNIXネットワークプログラミング〈Vol.1〉ネットワークAPI・ソケットとXTI
[原書名:UNIX NETWORK PROGRAMMING,Volume 1,Networking APIs:Sockets and XTI〈Stevens,W.Richard〉 ]
ISBN4-8101-8612-1

でも本体価格8,000円です。でもって分厚いです。
(学生の人は図書館行って探した方が良いかも)。
0061名無しさん@お腹いっぱい。 NGNG
定期あげ
0062名無しさん@お腹いっぱい。 NGNG
Vol2出てたね。RPCだって
0063名無しさん@お腹いっぱい。 NGNG
Winsock2.0プログラミングに
「多数の接続を同時に処理しなければならないサーバーでは
WindowsNTとI/O完了ポートを使用する必要があります」(P388)
と書いてるんだけどI/O完了ポートについて日本語で詳しく書かれてる
webサイトを知らないでしょうか?
MSDNやサンプルを眺めてもさっぱりわからなかったもので・・・
0064名無しさん@お腹いっぱい。 NGNG
定期あげ
0065名無しさん@お腹いっぱい。 NGNG
スティーブンスの本もうなかった・・・
0066名無しさん@お腹いっぱい。 NGNG
>63
ちょい前にI/Oコンプリーションポート使って、TCPでの同時接続1000台程度のサーバを組んだ。
マルチCPUを生かしやすいし、サーバの負荷も軽減する。
よくあるパターンで、クライアント接続時にスレッドやプロセスを起動して
処理させるのではコストが高く、主にselect〜recvがネックになる。

とくによいサイトや本は内容に思える。
自分は、Win32マルチスレッドプログラミングとMSDNで理解。
ちなみに、同プロジェクトの人に何度も説明したが、
誰も理解してくれなかった覚えがあり。
0067名無しさん@お腹いっぱい。 NGNG
うむ、俺もCreateIoCompletionPortやGetQueuedCompletionStatusを調べて
理解できる範囲の事しかわからん。
006863 NGNG
>自分は、Win32マルチスレッドプログラミングとMSDNで理解。

Win32マルチスレッドプログラミング買いました。
I/O完了ポートを使ったサーバーのサンプルがそのままついているのはありがたかったです。
本をサンプルソースを眺めてなんとなくですが仕組みは理解することが出来ました。
ありがとうございました。

0069問題提起 NGNG
ダイアルアップソフトのつくり方わかるプログラマ−の人いますか?
�@ISDN回線の2回線をパソコンの画面で制御できる。
�ATAのリダイアル規制をはずして1分間に60回リダイアルできる
�B1つの番号が混んでいたら他の予備に登録した番号をどんどんかけていく
このようなプログラムがわかる人いますか?
わかる人がいたら教えてください


0070>69 NGNG
んなもん作ってどうするんだよ。
0071名無しさん@お腹いっぱい。 NGNG
マルチポスト野郎かい >>69
0072名無しさん@お腹いっぱい。 NGNG
こいつのようなクソのためにリダイアル規制ができたんだよな>>69
氏ね
007371 NGNG
あ、でもこっちには「天才」が付いてない。>>69
0074>70 NGNG
チケット予約とか(藁
0075教えて君 NGNG
HttpでURLに日本語渡すとき、JISコードの前に'%'を付ければ良いのは
分かったのですが、?が%81Hって変換されるのは何故なんですか?
エンコードの方法が良く分からないので教えていただけないでしょうか。

0076名無しさん@いっぱいいっぱい NGNG
ちょっとスレッドの趣旨とずれるかもしれないんですけど、

端末 → NTマシン → UNIXマシン

という構成で中間のNTサーバで複数の端末から送られてくるファイル
を一括して受け取り。その後UNIXに転送しています。
(転送方法は端末→NT、NT→UNIXともFTPです。)

現在はNTサーバに一時フォルダを設けて、そのフォルダの中身を定期的
に覗いてファイルがあれば転送するプログラムを常駐させているのです
が、これをファイルが転送されて来たのをトリガにしてリアルタイムに
転送する方法は無いのでしょうか?
NTサーバでなくUNIXならばftpの設定をいじくって(inetd.confだっけ?)
転送用のバッチを用意すればよかったと思ったけど、NTはさっぱり分かり
ません。何か参考になるURLだけでもいいですから教えてもらえないでしょ
うか?
0077名無しさん@お腹いっぱい。 NGNG
>>76

FindFirstChangeNotification()APIの説明を読んで
適当なプログラムを書くよろし。

俺はスプーラ書くときに必ず使う。
0078名無しさん@お腹いっぱい。 NGNG
>75
1) RFC1738を読め
ftp://ftp.iij.ad.jp/pub/RFC/rfc1738.txt
2)
シフトJISにおける全角?のコードは0x8148で、0x48はASCIIのH。
0079名無しさん@いっぱいいっぱい NGNG
>77さん
ありがとうございます。
早速調べてみます。
0080名無しさん@お腹いっぱい。 NGNG
自分のパソコンにダイアルアップして外からつなぐことはできますか?
可能でしたら方法をおしえてください。
008175 NGNG
>78さん
有り難うございます。どのrfcを読めば良いのか分からず困ってました。
では、もう少し頑張ってみます。
0082名無しさん@お腹いっぱい。 NGNG
単に、シフトJISが2バイトコードである事と
?の文字コードが0x81で始まる事を知らなかっただけのような気が・・
008375 NGNG
>82
いーえ、知ってたのですが一部の2バイト文字の2バイト目がアルファベットに
変わってるが理解できなかったのです。
あ、ひょっとして2バイト目がアルファベットと同じ場合はそのままで
送るのか。。それだったら俺すっげー間抜けだ。。
0084名無しさん@お腹いっぱい。 NGNG
>>83
「アルファベットと同じ場合は」じゃなくて
「ASCII文字だったら」だな。
おっとスラッシュは以下略
008575 NGNG
>78,82,84氏
間抜けな俺に色々有り難う。。あー恥ずかしい。
0086名無しさん@お腹いっぱい。 NGNG
>>80
つまり、屋外からノートとか使って自宅マシンの
ファイルをいじったりてことか?
008780 NGNG
>86さん
そうです。
自宅マシンをずっとネットに続けておけば問題ないのですが、
通信料の問題もあるしずっとつなげつづけることは不可能なんで、
屋外からダイアルアップ接続ができれば便利だなと。
0088名無しさん@お腹いっぱい。 NGNG
>>87 RASとか使えばできたはずなので、調べれ。Network板のほうが
いい答えが得られると思う。
0089名無しさん@お腹いっぱい。 NGNG
フレッツISDNに入ろう
009080 NGNG
>>88さん
どうもです。
RAS…もちょっと勉強が足りんようです。
RAS系のAPI使ったサンプルプログラムさがしてみます。

その前に、家にはモデムしかないけど他に機器を買わないと無理なような…。
0091名無しさん@お腹いっぱい。 NGNG
>>80
今目の前にwin98SEがあるけど、
ダイアルアップサーバなるモノが入ってるから、
多分それじゃねぇかな?
0092名無しさん@お腹いっぱい。 NGNG
>>90
プログラムすることは必要無いと思うぞ。
Windowsにそういう機能があるって。
あと、モデムでも待ち受けできると思う。
009380 NGNG
>91,92
情報ありがとうございます。

残念ながらwin98を持ってないのですぐには試せそうもないです。
なかなか見つからないですが、
win2kでもつかえるダイアルアップサーバーはないでしょうか。
できればソース込みで。

あと、モデムで待ち受けができるのは初めて知りました。
0094初歩的な疑問NGNG
TCPで接続し、send で、例えば100KB のデータを送信した場合、
受信側の recv の返り値は、100KB に満たない場合があるじゃないですか?

こうなる理由はなぜなんでしょうか?
0095名無しさん@お腹いっぱい。NGNG
それだけじゃなんともいえないが・・・
細い線が間に入ってパケットが分割されたとか、
何らかの原因でパケットが損失して再送してもらってる
とかいろいろ考えられる。
0096名無しさん@お腹いっぱい。NGNG
>>94
recv一発で届いたら、ダウンロードの状況表示がいらないことに気がつきませんか?
009794NGNG
>96
いまいち意味がよくわからないんですけど、
それは、送信側が(例えば10MBのファイルなんかを)send一発で出す訳じゃないと思うので、当てはまらないんじゃないかと...
0098名無しさん@お腹いっぱい。NGNG
>>94 普通は何回もrecvするんとちゃうの?
0099名無しさん@お腹いっぱい。NGNG
データが全部そろう前にrecvしてるからでしょ。
0100名無しさん@お腹いっぱい。NGNG
httpでレジュームする場合にはどういったコマンドを送ればいいのでしょうか?
0101名無しさん@お腹いっぱい。NGNG
>>97
回線が混んでいて0.1KB/sしか出ないときも、
それがsendで送った最小単位だと思っているのか・・・
TCPとUDPの仕様を混同してるな
0102しろーとNGNG
send一発発効したあとは、

各パケットはそれぞれ違うルートを通るんだよね?!
そして中には消失しちまう輩も出るんだよね。

TCPは再送要求するが、UDPはそんなもん無視する。

全部送られるか、タイムオーバーとかして、溜まった所でrecvが成立する。

で、よろしいでしょうか?
0103名無しさん@お腹いっぱい。NGNG
>>102
違う。1回の send が1回の recv で取り出せるという保証はない。

例えばさ、2000 バイトのデータを send する。このとき
(Ethernet なら) 1500 バイトと 500 バイトの 2つの IP
データグラムに分割されて送信されるわけさ。キーワードは MTU。

あと、TCP がいつデータを送信するかは TCP 層が勝手に
決めるのね。1バイトのデータを2回続けて send したら、
2回 IP データグラムが送られるときもあるし、1回に
まとめられる場合もある。

ちうか、W.R.スティーブンスの「ネットワークプログラミング
第2版 vol.1」買え。

>>100
Content-Range.
0104名無しさん@お腹いっぱい。NGNG
TCPってパケット一個ごとに
「届いたよー、次のパケットよろしく」
「あれ?こないよ(変だよ)?、もう一回送ってー」
とかいうやりとりをやってるんじゃなかったっけ?
0105名無しさんi486NGNG
>104
プログラムからはその動作は見えない
パケットサイズ関係なしに連続したデータに見える
0106名無しさん@お腹いっぱい。NGNG
>>104
パケット一個ごとにそんなことをやっていたら致命的に遅くなるぞ
再送要求はシーケンスが連続していなかったときだけ
いい加減なことを言う前にきちんとTCP/IP本を読め
0107名無しさん@お腹いっぱい。NGNG
>106
おまえもよく読め
0108名無しさん@お腹いっぱい。NGNG
LinuxやNT って、最大いくつまでTCPで同時接続できるのでしょうか?
(LinuxやNTがAcceptする場合の話し)
0109名無しさん@お腹いっぱい。NGNG
short型のポートを食いつぶすまで
0110名無しさん@お腹いっぱい。NGNG
>109

理屈はそうだけど、実際問題そんなにつないで動くんでしょうか?
Javaのソケットだと500ポートくらいでいかれ始めるらしいけど。
0111新米ギコ@すぐ出て逝きますNGNG
| ∧ チラリ
|Д゚)<ポート食潰すより、衝突の方が困るッス
|⊂  10000より大でユニークなの選んだはずなんだけどなぁ
|  |
| U
0112名無しさん@お腹いっぱい。NGNG
acceptの場合は、空いているポートを自動的に割り当てるので、
予約ポート以外を食いつぶすまでは大丈夫
acceptで生成されたソケットのポートを表示するプログラムを作れば分かります
0113名無しさん@お腹いっぱい。NGNG
・・・それはクライアント側のポート番号では?
0114名無しさん@お腹いっぱい。NGNG
acceptで新しいポートが割り当てられると思っている人がいるらしい。
TCP/IPの入門書を読んでみよう。
0115名無しさん@お腹いっぱい。NGNG
>>112
それはそーなんでしょうけど、
実際問題として、accept したらプロセスなり、スレッドなり起こして処理する場合は、
プロセスやスレッドの限界が先に来そうな気がします。
0116名無しさん@お腹いっぱい。NGNG
>>113
acceptは受付ソケットが固定のポートを必要とするだけで、
接続が確立されるごとにソケットを作って新しくポートを割り当てています
0117名無しさん@お腹いっぱい。NGNG
「WinSock2.0プログラミング」(ソフトバンク)によると、非同期モ
ードとマルチスレッドを比較した場合、マルチスレッドはスレッド
の数が増えすぎると、非常に遅くなることがある、と指摘していま
す。
 スケーラブルなWinSockサーバーアプリケーションを作成する場合、
非同期処理にするかマルチスレッドにするかの適切な指針というの
はあるのでしょうか?
0118名無しさん@お腹いっぱい。NGNG
> マルチスレッドはスレッドの数が増えすぎると、非常に遅くなることがある、
と、書いてる通り。
だから、コネクションが二桁以上になるようなサーバに関しては、
基本的に非同期にして、ボトルネックになるような重い処理が存在する場合は、
ワーカースレッドをいくつか用意して、リクエスト毎にキューにつめて、
そのスレッド達に処理をさせるような形にすると負荷が分散されて良いと思う。
0119名無しさん@お腹いっぱい。NGNG
OSによっては、ポート食いつぶす前にソケット食いつぶさないか?
0120名無しさん@お腹いっぱい。NGNG
>>108さんへ
どうも、ありがとうございます。
二桁以上ということは、10以上ということですから、スケーラビリティが必要な場合は、
事実上、非同期処理が必須ということですね。

Windows NT/2000での並行処理には、マルチスレッドが高速というイメージがあったので
すが、そんな単純なものではないことがわかりました。

他のレスにもあったI/O完了ポートについても、調べてみます。この場合は、マルチスレ
ッドの同期処理ということになるのでしょうか。ワーカースレッドのキューイングメカ
ニズムを実装するか、I/O完了ポートを使用するべきか、迷うところです。
0121名無しさん@お腹いっぱい。NGNG
>>118
スレッドプールって奴だね。

>>119
ちょっと表現が不適切。ファイルディスクリプタのmaxに引っかかる場合
もあるぞって事ね。limitで拡張できる事もあるが。
Win32はいくつまでだったっけか。
0122名無しさん@お腹いっぱい。NGNG
Winsockを使用してIRCクライアントを作っているのですが
非同期モードにしてると、ひとつのメッセージの処理(JIS<>SJIS変換など)を
している間に、サーバから大量のメッセージが送られてきた場合
処理が終わる前に次のメッセージによってバッファが上書きされて
上手く行かないのですが、どうしたら良いでしょう?
とりあえず、4kバイトくらいのバッファを用意して、そこに転送してから
JIS<>SJIS変換などの処理を行っているんですけど、それでもバッファが
全て埋まってしまう可能性があるわけで・・・。
チャットプログラムについて詳しく解説してあるホームページや
書籍などはないでしょうか?
0123名無しさん@お腹いっぱい。NGNG
>>122
> 処理が終わる前に次のメッセージによってバッファが上書きされて
> 上手く行かないのですが、どうしたら良いでしょう?
TCPなんだったら、処理が終わるまでrecv()しなければ良いと思うんだが…
UDPだったらとりあえず、データをバッファにプールすればいいんじゃないの?
いくら何でも、処理がおっつかないほど大量にデータがくるとは思えないし、
こういう方法でダメなら、構造的に無理だと思うけど。

> チャットプログラムについて詳しく解説してあるホームページや
> 書籍などはないでしょうか?
注文がニッチなので、122がそれを行え。
0124名無しさん@お腹いっぱい。NGNG
123さん、Resどうもです。

>TCPなんだったら、処理が終わるまでrecv()しなければ良いと思うんだが…
私の理解不足かも知れませんが、非同期の場合、サーバからデータが送られてきたら
現在行われている処理とは別のスレッドのようなものが自動的に作成されて
FD_READ以下の処理が行われてしまう気がするのですが、違いますでしょうか?
プログラムの動作を見ていると、ひとつのメッセージ処理を行っている間に
サーバから他のデータが送られてきた場合、FD_READ以降の処理(recv()など)が
行われているので、自動的にrecv()してしまうのですが・・・。
私自身のプログラムでは、スレッドは作成していないので、WSAAsyncSelectによって
自動的に複数のスレッド(?)が作成されて実行されているように思えます。
かといって、同期処理にしてしまうと、瞬時的に固まってしまって実用的では
ないのです。
0125名無しさん@お腹いっぱい。NGNG
>>124
123じゃないが...
> 現在行われている処理とは別のスレッドのようなものが
> 自動的に作成されて

そんなことはないよ。気になるんなら、それぐらい自分で調べれ。
気になる箇所でGetCurrentThreadIdでも使えばいいだろ。

本当にPrimaryThreadしか動いていないのなら....
>>122
における
> ひとつのメッセージの処理
の中で GetMessage/PeekMessage相当のものが呼ばれるようなことを
やっていないか?要はVisual BasicにおけるDoEvents相当の処理だな。

後は、「自動的にrecvしてしまう」も何も、 recvを呼んでいるのは
どっかの小人さんじゃなくて自分だろ?
ソケットに対応するデータ構造ぐらい用意してるんだろうから、それに
「処理中」のフラグでも加えてやればいいわな。
0126名無しさん@お腹いっぱい。NGNG
>>34
>Win95にwinsock2を安全に入れる方法を発見すればおっけー
これは、発見されていないですよね。
もしかしたら、ムー大陸のように、最初から存在しないのかもしれません。
0127名無しさんNGNG
>126
あなたは根本的に最初から間違ってます。
勘違いしていると言った方が正確でしょう。
無理です。
0128名無しさん@お腹いっぱい。NGNG
>125
バッファをスタック(ローカル変数)にとってないでしょ?
0129125NGNG
>>128
何が言いたい?
お爺さんにも分かるように言ってくれ。
0130名無しさん@お腹いっぱい。NGNG
>125
じゃなくて124だ。藁>オレ
バッファをスタックにとれば、バッファの上書きはさけられるだろう。
ちょっとだけ工夫しないとさかさまの順番にメッセージが届いているように
見えるかもしれないけど。
0131名無しさん@お腹いっぱい。NGNG
>>130
そんなことをしなくても受け取らなければ上書きされることはない
013240NGNG
>>126

>>40に書いたのですがこれではダメなんですか?
だめならその理由も教えてください。
0133名無しさん@お腹いっぱい。NGNG
>>130

なんでスタックなのか知らんが、普通にリストなり標準C++のstringを使えばいいじゃん。
0134名無しさん@お腹いっぱい。NGNG
途中までいい感じだったのが、とんでもなく低レベルになってる気がする。
バッファ管理、非同期I/O、マルチスレッド、メッセージループ、ウインドウプロシージャ
の関係が理解できていないからうまく作れないのです。>124
0135名無しさん@お腹いっぱい。NGNG
>128
>バッファをスタック(ローカル変数)にとってないでしょ?
ええ、その通りです。なぜ分かったのですか?
バッファをローカル変数にしてやってみます。助言ありがとうございました。

>134
>途中までいい感じだったのが、とんでもなく低レベルになってる気がする。
申し訳ありません、私のせいですか?^^;
134さんの言う通り、
>バッファ管理、非同期I/O、マルチスレッド、メッセージループ、ウインドウプロシージャ
の概念が理解出来ていないのかもしれません。
実は、C/C++とWindows環境でプログラムを組むのはこれが始めてで
以前は、ザイログニーモニックのアセンブラとBASICでプログラムを
組んでいました。
根本的な部分での理解が不足しているのかも知れません。実際、理解に苦しむ部分が多いです。
ただ、昔なら音楽をひとつ鳴らすにも、BGMドライバを作成して、ドライバ専用のデータを
作成するMMLエディタ&コンパイラを作って・・・と大変でしたが
Windows環境では、ほとんどの機能がAPIなどで用意されているので
楽だなあと感じています。始めに覚えることは多くて、慣れませんが。
0136>135NGNG
>楽だなあと感じています。
それなら、楽にこなしてくれ。
組み込み関連やってるなら、すぐわかる問題点だよ。
ウインドウズのイベントドリブンな構造とバッファ制御は、
割り込み制御よりはるかに簡単なはず。
0137名無しさん@お腹いっぱい。NGNG
ソケット関連に16bit時代の悪しきコードを引きずっている
MFCを使っている時点で逝って良し
0138名無しさん@お腹いっぱい。NGNG
WSAAsyncSelect呼ぶとノンブロックモードになっちゃうから、
sendしたら、FD_WRITEもらうまでバッファ開放しちゃだめだよ〜。
0139138NGNG
スタックにバッファ取ってお亡くなりになる馬鹿プログラムは
書かないようにね〜。
014033NGNG
>>34さんへ
>>127さんへ
>あなたは根本的に最初から間違ってます。
>勘違いしていると言った方が正確でしょう。
>無理です。
勘違いしてるらしいことはわかりました。
34さんのレスには私が理解している以上の含みがあったのでしょう。
恥をしのんで、おたずねしますが、何を勘違いしているのでしょうか?

「無理です」というのは、インストールが無理だということなのでしょ
うか? 全然、わかっていないようです。
0141名無しさん@お腹いっぱい。NGNG
↑
名前:33は126の間違い
0142名無しさん@お腹いっぱい。NGNG
あげ
0143>138=139NGNG
じゃあ、このプログラムはダメってこと?

http://www.nakka.com/lib/inet/httpcex.html
のHTTPSendRequest関数
0144名無しさん@お腹いっぱい。NGNG
>>143
138じゃないが....
そもそも
sendがWSAEWOULDBLOCKになる場合があるのを全く考慮していない。
ダメダメ。
0145132=40NGNG
>>126 = >>140

重ねてお聞きしますが、Windows95にWinsock2をインストールした後の問題を
解決する方法を >>40 に書いたのですが、この方法に何か問題があるのでしょうか?
ぜひ教えてください。
0146143NGNG
まさかと思ってwwwcのソースも見てみたら、
wwwcもsendがWSAEWOULDBLOCKになる場合があるのを全く考慮していなかった。
0147138NGNG
忘れた頃にレスがついてる。
結構馬鹿プログラム多いのね。

特にsendの場合運がいいと適当に動いちゃうし、
仮にUAE起こしても、OSの中で起きるから、
作った奴は、「これだから、Windows or WinSock は!」
とか言ってるかもしれない。恥ずかしいねぇ。
0148名無しさん@お腹いっぱい。NGNG
つーか、WSAEWOULDBLOCKは、エラー扱いにしないだろ、普通は。
だから、チェックが入ってなくても全然おかしくない。

sendで返ってきたぶんだけ、送るバッファのポインタをずらすとかするわけだし。
0149>148NGNG
143のページのsendは、WSAEWOULDBLOCKもエラーにしてるし、
バッファもスタックに取ってる。
NonBlokモードならいつ逝ってもおかしくない。
通常、NonBlockモードでも、socket側のバッファにコピーされるだけだから、
低負荷な状態なら、sendはWSAEWOULDBLOCKを返さない場合も多いだろう。

>だから、チェックが入ってなくても全然おかしくない。
Blokingモードで作ってるつもりなら、別の意味でチェックしたほうがいいだろう。
どこかで、NonBlockに変更されてる可能性がある。
どちらにせよ、WSAEWOULDBLOCKをもらったら、送信が完了するのを待つか、
socketをcloseしない限り、送信バッファも開放できない。

>sendで返ってきたぶんだけ、送るバッファのポインタをずらすとかするわけだし。
ポインタずらして何するのさ。FD_WRITEまで待てよ。
0150>146NGNG
wwwcはNonBlockモード使ってないから別にいいのでは...
0151名無しさん@お腹いっぱい。NGNG
selectで状態を調べれば非ブロッキングって
使う必要性が無いと思うんだけど一般的に何に使うの?
0152名無しさん@お腹いっぱい。NGNG
>>138
漏れはsend成功したらその分のバッファはsocket側が
コピーして勝手に送ってくれるはずなので、即解放してもOKと考えるがどうか?
0153名無しさん@お腹いっぱい。NGNG
>>151 ゲイツ的なメッセージベースのプログラミングに
適合しやすいので使う ヽ(´ー`)ノ
0154148@NonBlockingNGNG
>>149
> >sendで返ってきたぶんだけ、送るバッファのポインタをずらすとかするわけだし。
> ポインタずらして何するのさ。FD_WRITEまで待てよ。
だから、今回のsendで送れた分だけずらして、次のFD_WRITEを
待つんだよ。

あと考えてみたが、WSAEWOULDBLOCKをチェックしないと、
sendできなかったのがfatalエラーなのか、混んでるだけなのか
わかんないからやっぱチェックせんといかんな。
0155>150NGNG
wwwcとは、143の http://www.nakka.com/lib/inet/httpcex.html の事?

SDKにはこう書いてある。↓
The WSAAsyncSelect function automatically sets socket s to nonblocking mode,

WSAAsyncSelect を使うと自動的にNonBlocking Modeになるようですが。
BlockingModeで使うなら、BlockingModeに戻さないといかんのじゃないの?
0156>152NGNG
>漏れはsend成功したらその分のバッファはsocket側が
>コピーして勝手に送ってくれるはずなので、即解放してもOKと考えるがどうか?
そりゃ、成功したなら即開放していいでしょ。
問題は、WSAEWOULDBLOCKになった場合のことでしょ?
0157名無しさん@お腹いっぱい。NGNG
138じゃないが...

>>152
138はsendがEWOULDBLOCKにより「失敗」した場合のことを書いているように
見えるのだが。
send --> EWOULDBLOCK --> FD_WRITE --> send(再送)

>>154
> 今回のsendで送れた分だけずらして、次のFD_WRITEを待つ
も何も、sendが正常終了したのなら、待ったところでFD_WRITEは来ないぞ。
accept/connect後のFD_WRITEはともかく、それ以外のFD_WRITEは、
一旦pendingの状態になっていたsendに対するものと思え。

> あと考えてみたが
今までどんな恐ろしいモノを顧客に納めてきたかは聞かないことにするよ。
0158157NGNG
かぶっちまった
スマソ
0159名無しさん@お腹いっぱい。NGNG
そういえば、EWOULDBLOCKでソケットが切れるプログラムを納品してきた奴が
いたような記憶が。へたれは多い・・・
0160154NGNG
>>157
>> 今回のsendで送れた分だけずらして、次のFD_WRITEを待つ
> も何も、sendが正常終了したのなら、待ったところでFD_WRITEは来ないぞ。
送るデータがバンバンにあるんだよ。
送りたい分全部おくれたらFD_WRITE待たないよ。

> 今までどんな恐ろしいモノを顧客に納めてきたかは聞かないことにするよ。
随分前にやったことなので、あんまり覚えてなかったんだよ。
sendっが0返したときがいっぱいでそれがブロックだっけ?
っていう風な記憶になってた。

いっぱいだとsend()でSOCKET_ERRORがかえって、
WSAGetLastErrorでWSAEWOULDBLOCKになるのを確認して、
FD_WRITEを待つんだよな。
ちゃんとそう作ったから安心すれ ヽ(´ー`)ノ
0161152NGNG
>>156
そうか、ブロックになったときの話だったのか。
そりゃ、送れてないんだから解放したらだめなのは当たり前だな。
0162>157,160NGNG
send、connectが、pending中以外は、ずーっと、FD_WRITEは、帰ってくる
FD_WRITEは、送信完了じゃなくって、送信可能を示す。
だから、送信成功後に、FD_WRITEを待ってもなんら問題ない。
0163名無しさん@お腹いっぱい。NGNG
しかし、みんな、nonblockingでソケット操作するプログラム
作って事ないじゃないの?
0164160NGNG
>>162
> だから、送信成功後に、FD_WRITEを待ってもなんら問題ない。
漏れが作ってたのはFTPだから、送ったら終いよ。即closeする毛
0165名無しさん@お腹いっぱい。NGNG
> send、connectが、pending中以外は、ずーっと、FD_WRITEは、帰ってくる

んな馬鹿なことがあるか。
acceptやconnect直後か、sendがブロックからsend可能になった
時だけだろ。
0166>165NGNG
すまん書き方が悪かった。
クライアントソケットなら、connect後の送信可能な場合。
サーバーソケットなら、acceptしたソケットが送信可能な場合だな。
selectすれば、すぐにFD_WRITEが返ってくるってことだ。

157,160は
>FD_WRITEは、送信完了じゃなくって、送信可能を示す。
ってところを勘違いしてるようだからな。
0167>164NGNG
>漏れが作ってたのはFTPだから、送ったら終いよ。即closeする毛
コントロールポートはどうしてるんだ?
それに、そのFTP(サーバーか?)は一回のsendですべて送信してしまうのか?
不可解だ。
0168名無しさん@お腹いっぱい。NGNG
>>166
????
WSAAsyncSelectを使っているのにselectを使うのか?
何のために?
0169>168NGNG
selectは、FD_WRITEの発生する例なんだが。
ちなみに、WindowプログラムでもWSAAsyncSelectなんて使わないで、
selectを使用してソケットプログラミングは出来るよ。
というか、WSAAsyncSelect遅延が大きいから、俺は使わないけど。
0170名無しさん@お腹いっぱい。NGNG
はァ???
ずーっとWSAAsyncSelectを使った非同期ソケットプログラミングの
話をやってたのに、自分だけバークレイ方式での非同期ソケットに
関する話を強引にやってた訳ね。で、あんたの言ってるFD_WRITE
とかは、要するにwrite_fdがSETされた、ってことな訳か。
この親父何訳わがんねこと言ってんのかと思ったよ。
0171>170NGNG
WSAAsyncSelectを前提にしても別に構わんのだが、
非同期ソケットだからといって、WSAAsyncSelectは必須ではないんだよ。
WSAAsyncSelectのために非同期ソケットにするわけじゃないんだから。

俺がWSAAsyncSelectを使わないってのは、まったくの余談の付け足しで、
selectを例としたことと関係ないんだけどね。

それに、BSD互換ソケットでも、winsockでもFD_WRITEの考え方は、同じだよ。
selectを例にだしたのは、一番理解しやすいだろうからだが。

>この親父何訳わがんねこと言ってんのかと思ったよ。
それは、あなたの理解力が低いからだね。
困った困った。(藁
0172170NGNG
偉そうなことを言うぐらいなら
そういういい加減な書き方止めろよ。仮にも技術者なんだからな。
そして、理解されないことを他人の理解力のせいにするな。
それで良くこの仕事をやってこれたな。

> 非同期ソケットだからといって、WSAAsyncSelectは必須ではないんだよ。
WSAAsyncSelectの話をしているのに、「非同期ソケット」一般の
話を急に持ち込むな。そうするなら明示しろ。

> BSD互換ソケットでも、winsockでもFD_WRITEの考え方は、同じだよ。
「考え方」が同じだからといって、同じ用語を説明もなしに使うな。
無説明にFD_WRITEと言ったら、普通はWSAASyncSelectのソケットイベント
のことだと思うぞ。お前は本気でBerkeleyの世界で「FD_WRITE」という
という用語を使っているのか?
0173>172NGNG
なんで、そんなことでむきになるの?
かるしうむ不足なんじゃないかなぁ?

私は最初から、WSAAsyncSelectの話に限定なんかしてないんだが。
もともと、nonbockモードでのsendの話だったはずだけどなぁ。

まぁ、言葉足らずだったら、謝るからさ。怒ってないで仲良くやろうよ。

でもね、
>> BSD互換ソケットでも、winsockでもFD_WRITEの考え方は、同じだよ。
>「考え方」が同じだからといって、同じ用語を説明もなしに使うな。
FD_WRITEは、WSAASyncSelectでもselectでもpollでもWSAEventSelectでも
みんな意味は同じなんだけど。
>無説明にFD_WRITEと言ったら、普通はWSAASyncSelectのソケットイベント
>のことだと思うぞ。
普通思わないんじゃないかな。まぁ、話の流れから、あなたがそう思ったなら、
言葉足らずだったのでしょうね。ごめんね。

>お前は本気でBerkeleyの世界で「FD_WRITE」という
>という用語を使っているのか?
うーん、Berkeleyの世界といのが良くわからないんだけど。
BSDより、SVR4ばっかりだったから。BSD互換の世界ばかりだね。
0174名無しさん@お腹いっぱい。NGNG
172ではないけど、Win系知らないUnix屋にFD_WRITEなんて言っても通じない
と思うぞ。WinSock用語なんだから。
0175174NGNG
今読み直したけど、やっぱ173が「FD_WRITE」と書いたせいで話を混乱
させただけに見えるな。まぁタイプ量少なくて書くには便利かもしれん
けど、俺も
>無説明にFD_WRITEと言ったら、普通はWSAASyncSelectのソケットイベント
>のことだと思うぞ。
と思うな。
0176>174NGNG
確かに、そりゃそうだ。
でも、WinSock用語でとりあえず通じてるみたいじゃん。
0177170NGNG
>>173
仲良くなりたいんなら
> それは、あなたの理解力が低いからだね。困った困った。(藁
なんて言わないことだな。
お前自分の非を認められないタイプだな?(苦笑)
本当は、それまでの話の流れでWSAAsyncSelectの話をしていたのに
気づかず間抜けな書込みをしただけだって正直に言えよ。
166ぐらいで「勘違いだった」って言えばそれで話は終わったんだよ。

> FD_WRITEは、WSAASyncSelectでもselectでもpollでもWSAEventSelectでも
> みんな意味は同じなんだけど。
じゃあ、"FD_WRITE"を文字通りに使った例見せてみ。 selectでいいぞ。

>>174
通じてねえから164/165みたいなことになったんだろ。
0178名無しさん@お腹いっぱい。NGNG
すまん最後のは
>>176
だった。
0179名無しさん@お腹いっぱい。NGNG
>175
ああ、そういう事か、言われてみれば、selectとpollにFD_WRITEはないな。
これは、確かに誤解を招くね。

>177
そういうことで噛み付いてるとは、まったく気づかなかったよ
意地悪だねぇ。最初から、そう言えばいいじゃない。


0180170NGNG
>>179
なんかどっと疲れが.....
だったら

> FD_WRITEは、WSAASyncSelectでもselectでもpollでもWSAEventSelectでも
> みんな意味は同じなんだけど。
> >無説明にFD_WRITEと言ったら、普通はWSAASyncSelectのソケットイベント
> >のことだと思うぞ。
> 普通思わないんじゃないかな。まぁ、話の流れから、あなたがそう思ったなら、
> 言葉足らずだったのでしょうね。ごめんね。

とか大嘘書くんじゃねえ。
「言われてみれば」とか言ってる場合じゃねえだろ。
0181名無しさん@お腹いっぱい。NGNG
「誤解をまねく」か… べんりないいようだこと。
0182126=140NGNG
>40=132=145さんへ

40の回答が34に対するものだということを見過ごしていました。
132は数字しかなかったので、自分あてのものだということに気
づかなかったのです。
せっかく、書き込んでくれているのにもうしわけありません。

安全にインストールするという意味で、40=132=145さんの答えで
いいのだと思います。知りませんでした。有益な情報をありがと
うございます。
ただ、アプリケーションを配布する上で、ユーザーに対してモジ
ュールをダウンロードしろといえない場合もあります。そのとき
に自分が提供するインストーラで安定してインストールさせるこ
とができないならば、Winsock2.0を使えないことがあるのです。
ただ、Windows 95はじょじょにマイナーなOSになりつつあり、ま
た、古いのだから、新しいアプリケーションに対応するためにダ
ウンロードしろ、といえる環境になりつつあります。
もっとも、ダイヤルアップ ネットワーク 1.3 が安全にWinsock2.
0をインストールさせることができるならば、インストーラで確実
にインストールさせることはできるはずです。
ただ、うちの場合、ActiveXコントロールと一緒にWebベースでイン
ストールさせないといけない場合も多いので、やはり、むずかしそ
うです。
0183174NGNG
最後まで見苦しい奴だったな>>179
0184名無しさん@お腹いっぱい。NGNG
じゃあ、別の話題に行ってもいいですか?
ソケット(TCP)で通信する場合の通信フォーマット(可変長電文)を決める時って、みなさんどうされてます?
データの最後を判別する場合、
1.バイナリデータで、ヘッダーにサイズを入れる。
2.アスキーコードにして、NULLとか改行コードで電文の最後を判別。
3.その他
あと、ACK(というか応答電文)みたいなものは用意しますか?
0185>184NGNG
>1.バイナリデータで、ヘッダーにサイズを入れる。
ヘッダーと言うか、先頭にデータ長入れるけど。
バイナリデータはこうしないと確実な区切りを識別させるには、
もっと面倒なことするか、ソケット切るしかなくなるから。

>あと、ACK(というか応答電文)みたいなものは用意しますか?
さらに上位のハンドシェークを入れるるのは、なんだかなと・・・
たまに見かけますが。
0186名無しさん@お腹いっぱい。NGNG
プロトコルに関してはその時次第というか。
簡単なのだったらPOP3みたいに全部テキストで\n区切りにするとか。
# telnetでdebugできて便利。security的には駄目だが
ACK/NAKの仕組みは必要でしょ。
0187186NGNG
>>185
おいおい。いくらTCPでパケットロストが無いことが保証されてても、相手が
ちゃんとrecv()して送り側の電文を処理したかどうかは上位(APレベル)
プロトコルで確認するしかないだろ。それが冗長だと言うなら、既存プロト
コル(POP3, NNTP, FTP, and etc...)もみんな冗長かい。
0188186NGNG
あ、もちろん相手が処理してようがしてまいが構わない、というデータの
場合は、必ずしも応答返す必要はないけどね。
# 処理状態報告とか。まぁそれだったらそもそもUDPでいいじゃんて話
# もあるけれど
0189>187NGNG
ACK,NAK見たいな、データ確認手順はいくらなんでもいらんだろってことなんだけど。
>>186の処理状態報告という同じ意味なんだけどね。

pop3,nntpのようなアプリケーションプロトコルは、取り決めしなきゃ、
データのやり取りできないから当然必要ですよね。<いくらなんでも、これなしに通信が成立しない。

参考までに、知ってるとは思うけど、ftpのデータ転送はソケットが繋がったら、
ハンドシェーク無しで転送して送り終わるとソケットを切るだけの仕様になっています。
途中にACK/NAKのようなデータ確認手順はありませんよ。
0190184NGNG
>>185
>>186
日曜日なのにわざわざレス有り難う御座います。m(")m
結局、ACK/NAK(相当?)の必要性は、システムポリシーに依存する訳でしょうね。

テキストかバイナリか、については如何でしょうか?
確かに telnet で debugできるのは良いのですが、データ量があるので辛いかも...
あと、個人的には、改行区切りとかだと改行が来るまで1バイトハンドリングしなきゃならない。っていうのが
COMポートみたいで、なんだかな〜。と思ったりもします。
0191>190NGNG
扱うデータがテキストなら、テキストでもベースで制御しても
いいかもしれませんが、扱うデータにバイナリが含まれる場合は、
テキストベースで制御するのは、それなりに、面倒な処理が必要になります。
汎用な手順を考えていないなら、[データ長][データ]の形式で処理してやる方が、
簡単でしょう。
0192名無しさん@お腹いっぱい。NGNG
>>190
> 改行区切りとかだと改行が来るまで1バイトハンドリングしなきゃならない
UNIXならfdopenしておいてfgetsで読むのが普通では?効率も悪くない。
winsockならMSG_PEEK指定でのrecvで改行位置をチェックしてから本読み込み
やるのが比較的マシと思う。
0193190NGNG
>>191
元はバイナリなので、テキストでやるとしたらなんらかの手段(Base64とか単純にアスキーコードに変換とか)で、
変換する予定でいます。

>>192
>UNIXならfdopenしておいてfgetsで読むのが普通では?効率も悪くない。
ソケットでfgetsって使ったことないんですけど、データ(改行)が到着する以前に、fgets を使っても大丈夫なもんなんですかね?
0194192NGNG
>>193
「大丈夫」とは?
fgetsを使う場合は、ソケットはブロッキングモード、
タイムアウト監視はalarm()で、というのが普通と思う。
無論この場合は、改行前にfgetsを呼んでも単に
ブロックするだけ。

非同期モードの場合には、そもそもfgetsを使うべき
ではないだろう。
0195193NGNG
>>194
>無論この場合は、改行前にfgetsを呼んでも単に
>ブロックするだけ。
ああ、なるほど、そういう方法もあるんですね。実はブロッキングモードって使ったことなかったもんで。
失礼致しました。(ちなみにOSはLinuxです)
0196>193NGNG
>元はバイナリなので、テキストでやるとしたらなんらかの手段(Base64とか単純にアスキーコードに変換とか)で、
>変換する予定でいます。
通信量と要求される性能の問題だと思うけど、
8Bitコードを通せないとか特別な理由が無いなら、
非常に資源の無駄遣いじゃない?
base64でエンコードすると、およそデータ量は1.5倍ぐらいになるよ。
0197名無しさん@お腹いっぱい。NGNG
>>193

コマンドはテキスト。データはバイナリでいいんじゃ
ねーの?俺はそういう作りにしてるけど。って言うか
普通そうするよね?
0198193=184NGNG
>>196
個人的にはバイナリデータ希望なんですけど、(プロジェクト内の)人それぞれ考えが違うので...
(最初の質問= >>184 の意図は)バイナリデータにする為の説得材料を収集したかったといいますか...

>>197
コマンドっていうのは、POP3 で言えば、STAT とかのことですね?
で、返ってくるデータはバイナリ。
という意味ですかね?
0199197NGNG
>>198

俺がサーバー組む時のパターンだと、コマンドと
リザルトはテキスト。POPの某云々の解釈でOK。

で、バイナリデータの送受信は、ファイルのアッ
プロード/ダウンロードで実装するので、そこだ
けがバイナリデータ。例えばアップロードは

→UPLOAD:"パス名",ファイルサイズ
←RESLUT:OK
→バイナリデータ
←RESULT:OK,受信したサイズ

みたいに。バイナリデータは4096バイトずつ
のパケットでぐるぐるループして送る。

構造体みたいなモンをやり取りする場合は、その
構造体をテキストに変換するんだけど、それも可
読可能な方式にエンコードする。time_t型のデー
タなんかもYYYY/MM/DD,hh:mm:ssにするとか、定数
は#defineで定義したまんまの文字列に…とか。
あと、日本語の漢字コードや改行コードの変換も
エンコーダがサーバ上の形式に変換する。

だから、コマンドやエンコーダ/デコーダが構造
体の種類毎に必要なのがちょいとアレかもな。

サーバとクライアントのエンディアンやワード長
が同じなら、バイナリで送ってもいいかもな。
0200198NGNG
>>199
了解致しました。長文有り難う御座いました。m(")m
0201>199NGNG
性能悪そうなだね。
0202名無しさん@お腹いっぱい。NGNG
>>201
199のプロトコルで1日中がんがん回すとかなら、性能的にもうちっと考えた
方がいいだろうけど、ワンショット送る位なら気にするほどでもないんじゃ
ない?
# データ形式やプロトコルは用途に合わせて選択しよー
0203WinSNMPNGNG
WinSNMPについて詳しい資料が見当たらない。
どなたか詳しく解説してある本やホームページがありましたら、
教えてください。
とりあえずTrapが打ちたい…( ゚Д゚)
0204>202NGNG
つーか、198がどんな使い方をしたいのか不明だから、
パフォーマンスを出しにくいことは、触れておくべきだろう。
双方向で、ガシガシ転送するのかも知れんし。
># データ形式やプロトコルは用途に合わせて選択しよー
それは、当然だろう。プロトコルに限らんが。
0205名無しさん@お腹いっぱい。NGNG
構造体の送信はマシンやOSが同じならそのまま送ったほうがいいんだろうけど、
違うなら文字列に変換して送ったほうが無難
0206たおるNGNG
だれかgnutellaのプロトコルを解説した日本語サイト知らない?
あれ、簡単だと思うから、簡単にでもいいから解説のあるとこ
教えて欲しいんだけど。
0207199NGNG
>>205

まさに、異OS、異アーキテクチャ混在なんで
パフォーマンス出ないのは承知でこんな仕様
なんだな。

クライアントだけでなく、サーバも同じく、
異OS、異アーキテクチャ混在だし。
0208>207NGNG
エンディアンが問題であれば、ntohs,htonsで変換すればいいだけじゃん。
つーか、通信上は、ビッグエンディアンに統一するのが常識。
>異OS、異アーキテクチャ
そんこと当然として仕様は決めるもんだ。
バイナリ通信だからアーキテクチャ依存だなんてことはない。
送ったデータがアーキテクチャ依存のデータなら、文字列変換したところで、
元に戻せば、やはりアーキテクチャ依存のデータにしかならんだろ。
0209名無しさん@お腹いっぱい。NGNG
つーか、コマンドラインインターフェース的なやり取りにする理由は、
キャプチャ取ったりした場合に解析しやすいとか、
tnでつついて、デバッグ出来るとか、そんなことだろ。
デバッグしやすい以外の理由はないと思うが。
0210名無しさん@お腹いっぱい。NGNG
>>208
問題になるのはエンディアンだけではないだろう。
構造体を直接送るとなると、当然ワード長の違いやpaddingの問題があるし、
何より浮動小数点数のメンバがあったりすると論外だ。
0211名無しさん@お腹いっぱい。NGNG
今の流行はXMLで数値も文字列に変換して受け渡すやり方です。
0212>210NGNG
>構造体を直接送るとなると、当然ワード長の違いやpaddingの問題があるし、
そんなものそのまんま送るほうが馬鹿。
たまに、こういう事して隙間だらけのパケットを送ってくる奴がありますが、
はっきり言って笑いものにされます。

ちゃんとパケットフォーマット決めて送りなさいって。
逆を言えばただそれだけのことじゃん。
0213????NGNG
Xlibは構造体そのまま送ってるぜ。あれは馬鹿か?
0214>213NGNG
>異OS、異アーキテクチャ
で通信したいのに
>構造体を直接送るとなると、当然ワード長の違いやpaddingの問題があるし、
を
>そんなものそのまんま送るほうが馬鹿。
ってことだろ。
0215名無しさん@お腹いっぱい。NGNG
X プロトコルは
> 異OS、異アーキテクチャ
を前提としているんでないの?

いや、213 の言ってることは初耳なんだけど、ほんと?
詳細解説希望。
0216213NGNG
数年前ソースを調べた限りではそうなっていた。今どうなってるかは知らない。
詳細はソースを見てほしいけど、Xプロトコルのレコードそのものを
構造体に対応させている。アーキテクチャによっては直接実現不可能な
場合があり、その場合はビットフィールドを使って逃げている。
エンディアンが違っている場合は受信後にSWAPする。
非常に苦しい処理だけど、処理速度を最優先するとこうするしかない。
0217>216NGNG
それは、通信上のフォーマットが規定されていないって事になるの?
性能のためアーキテクチャ依存する仕様だと言うことになるのかな?
しかし、異なるアーキテクチャでも変換することによって、通信可能な
訳だよね?どうやって情報を得ているの?
バウンダリする場合の規定とかを事前にネゴしてるんじゃない?
事前の設定でもいいんだけど。そうでもしなきゃ通信不能だよね。
そういう約束で動いてるのなら、構造体送信してもなんら問題ない
事だと思うけど。
212の言ってる馬鹿は、そういう約束事無しにそのまんま構造体を送信した場合のことでしょ。
0218213NGNG
もちろん規定されてる。だから構造体を無理矢理合わせている。
エンディアンだけはどうにもならないが、Xプロトコルでは最初に
エンディアンの種別を通知するようになっている。変換が必要なら
受信側でエンディアンの変換する。サーバーとクライアントが同じ
アーキテクチャなら変換不要なので、エンディアンを規定して
しまう方法よりも効率が良い。
>212の言ってる馬鹿は、そういう約束事無しに...
よく見るとそうだなあ。煽ってすまん。
0219名無しさん@お腹いっぱい。NGNG
ちょっと、関連で質問ですが、
VC++だた、pragmaで構造体のアラインを指定できますよね。
GCCその他のコンパイラでは同なんでしょう?

何年か前に、Solalisでパケットフォーマットの構造体きるのに、
char配列で全部作ったことがあるんだけど、あまりにしんどいから。
0220名無しさん@お腹いっぱい。NGNG
>>219
info gcc
0221名無しさん@お腹いっぱい。NGNG
age
0222名無しさん@お腹いっぱい。NGNG
定期上げ
0223名無しさん@お腹いっぱい。NGNG
IRCクライアント作ろうと思うんだけど、
参考になるようなソースが公開されてるクライアントってあるのかな?
0224名無しさん@localhostNGNG
>>223
Unix向けのものはごく一部を除いて公開されてる。
http://www.irc.org/ あたりが良いのでは。
0225223NGNG
なるほど。ありがとう、見に行ってみます。
もしwindowsのC++とかで書かれてるのがあったらそっちの方がいいけど、
贅沢もいってられないか・・・。
0226名無しさん@お腹いっぱい。NGNG
>何年か前に、Solalisでパケットフォーマットの構造体きるのに、
>char配列で全部作ったことがあるんだけど、あまりにしんどいから。

共用体つかえばどうよ?
0227名無しさん@お腹いっぱい。NGNG
定期あげ
0228>226NGNG
struct packet {
union {
char c[2];
short s;
} u;
long data;
};
とした場合、dataは構造体先頭から3バイト目になりそうな気がしないんだけど。
0229名無しさん@お腹いっぱい。NGNG
>226
そんな簡単な事うだうだ考えるより確かめてみそ。

ただし、structのパディングは環境によって違うらしいから
妙な技使わないように。
0230>NGNG
そういう構造体はcharの配列とアクセスのための関数を作るのが
一番簡単だと思うが‥C++ならクラス化してしまえば安全だろうし‥
なぜにそんなくらいをめんどくさがる?
もしかしてメンバが2万個くらいあるのか?
0231名称未設定NGNG
WinSockについての質問です。
非ブロッキングソケットのconnectをselectで待っていて、
connectできなかったときexceptfdsにそのソケットが入ってきますが、
そのときのエラーコードってどうやって調べるんでしょうか?
WSAGetLastError()では0が返ってきちゃいます…。
0232名無しさん@お腹いっぱい。NGNG
>>231
以下MSDNのselect()のヘルプからの抜粋。

If a socket is processing a connect call (nonblocking),
failure of the connect attempt is indicated in exceptfds
(application must then call getsockopt SO_ERROR to determine
the error value to describe why the failure occurred).
0233232NGNG
ううむ。今ちょっと試してみたけどgetsockoptでも
optvalとして0が返ってくるね。
0234231NGNG
> 232
サンクスです。できました。10061(WSAECONNREFUSED)が
返ってきました。
けど233はなんででしょうね…。
0235232NGNG
>>234
何故かといえば、とある関数に0x101を渡してテストしたからなのであった。
(WinSock2以降でしか↑の方法は使えないってことやね)
0236あげNGNG
>>235
とある関数ってWSAStartupじゃないの?
0237名無しさん@お腹いっぱい。NGNG
非ブロッキングソケットで
複数接続可のサーバープログラム
(プロトコル:TCP、開発環境:VC++6.0、WinSock Versiion1.1、クライアント別の処理はSelect()で切り分け)
を組みたいのですが
接続してきたクライアント毎のタイムアウト設定の方法は
何か決まりきった手法はあるのでしょうか?
また、良いアイデアなどあったらよろしくお願いします

私は下の力技しか思い付きませんでした・・・

Accept()の時点でクライアント毎のタイムアウトのカウンタを生成(300秒とか)して
Selectの直前でタイマはってSelect直後でカウンタから減算
カウンタが0以下になったらshutdown()
データ処理があったらカウンタをリセット

0238名無しさん@お腹いっぱい。NGNG
>>237
selectにタイムアウトの指定がモロにあるだろう
何で使わないんだ?
0239名無しさん@お腹いっぱい。NGNG
>>237
以下は別に「決まりきった方法」という訳じゃないが...

1. connect/入出力発生時に、「次のタイムアウト時刻」を計算してそれを
保持しておき、タイムアウトチェック時は単にそれと現在時刻を比較する
ことにすれば、カウンタ管理などは要らない。

2. タイムアウト管理情報をキューの形で保持し、先頭の方からチェックして
いくことにより、毎回全ソケットに対してタイムアウトのチェックを行う
必要がなくなる。ただしこれは、「任意の場所からの削除」が行えなければ
ならないので、厳密にはキューではない。

>>238
シングルスレッドのサーバで、複数のsocketを1度のselectで同時監視するから
だろ、どう考えても。
0240237NGNG
>>239
早速のレスありがとうございます

今のところクライアント数はそれほど多くは考えていないので
1.の方法で行こうと思います

ただ、クライアント数が増えると厳しいので
2.の方法をキュー管理スレッドを1個立ててやっても良いかな
と思っています(シングルだとselect()のタイムアウト値に絡んでくるから・・・)

ただ、select()、rcve()、send()、shutdown()、close()などの処理中に
別スレッドからshutdown()した時の動作が確実なのか?(タイミングの問題)が
疑問なのでそれらを調べてからやってみます
0241>240NGNG
>別スレッドからshutdown()した時の動作が確実なのか?(タイミングの問題)が
>疑問なのでそれらを調べてからやってみます
そういう時は、クリティカルセクションやミューテックス等で同期を取りましょう。
全ての条件での動作の検証は、現実的に不可能です。
0242名無しさん@お腹いっぱい。NGNG
>>237
Winsock1.1ということだが、
setsockopt SO_SNDTIMEO
setsockopt SO_RCVTIMEO
は使えるのだろうか。これが使えればソケット毎にタイムアウト値を
設定できるので、↑のような苦労は一切不要になる。
試してみては。
0243名無しさん@お腹いっぱい。NGNG
確かSO_SNDTIMEOやSO_RCVTIMEOはWinsock1.1では使えなかったと記憶してるが・・・
0244242NGNG
>>243
うんMSDNのsetsockoptのヘルプには「Version2でサポート」
と書いてあった。
のに、WSAStartupでバージョン1.1を指定しても使えた。
厨房で赤ちゃんでドキュソな僕ちんにはWinsockは良く分かりまへん。
0245242NGNG
>>237
まあでも良く考えたらブロッキングモードでないと意味が無い
ものだから、忘れてくれい。
0246名無しさん@お腹いっぱい。NGNG
Winsock1.1、2.0両方で起こるんだけど、
ノンブロックのクライアントソケットで、
connectしたときに、sinがリトライすると、
サーバー側が遅れてsinを返してもconnectが、
タイムオーバーで失敗するんです。
うまく回避した人いたら、回避方法教えてください。
私は、ブロッキングモードに書き直して納品に間に合わせたんだけど、
なんだか気持ち悪いんで。
0247名無しさん@お腹いっぱい。NGNG
> 246
sinとは3ウェイハンドシェークでいうところのSYNのことですかな?
SYNがリトライするとはどういうこと?
ノンブロッキングソケットでconnectしたらselect()かWSAAsyncSelect()で
完了を待たないとだめっすよ。
0248246>247NGNG
あれ?synだったか?どちらにせよ、
>connectしたらselect()かWSAAsyncSelect()で
は、話が噛み合ってません。
具体的には以下のような動作をした場合TCPプロトコル上は、
接続されてるにも関わらずconnectがエラー(無論selectで)
検知するということです。
Client   Server
1 sin ->
2 sin ->
3 sin ->
4   <- sin

ダイアルアップルーターなどを使用した場合、
最初のsinでダイアル開始する為、この事象が発生します。
0249246>247NGNG
synが正しいですね。
ずっと、sinだと思い込んでいました。(恥
0250名無しさん@お腹いっぱい。NGNG
たしか、connect()はノンブロッキングにしても
タイムアウトを縮めることはできても
伸ばすことはできないと記憶してます
でも、ブロッキングモードで問題が無いならそういうわけでもなさそうですね・・・
0251246NGNG
1から3までのSYNのシーケンス番号は同一で(再送ですから当然ですが)
4のサーバー側からのSYNを受信しても、connectは完了しているはずなんですが、
selectは暫く終わらず、動作としては、SYNを受信できなかったような、
動きにをするんですよ。早い話が、Winsockのバグだと思うんですけどね。
逆にこういうやり方なら問題なかったとか、知りたいんですよ。
0252名無しさん@お腹いっぱい。NGNG
Winsockのselect()はBSDのそれとは違うらしいのでそれが原因では?
WSAAsyncSelect()でもおんなじなんですか?
0253246>252NGNG
プログラム構造上ウインドウを持たないので、
WSAAsyncSelect()は試していません。
隠しウインドウを作ってもよかったのですが、
その時は、うまくいったり駄目だったりで、
(どうもSYNの再送回数と関係が有るようでした)
アナライザ見ながらカットアンドトライした結果、
ブロッキングモードにすることを選んだんです。
もう少し時間があれば、やってみたんですが。
0254名無しさん@お腹いっぱい。NGNG
でも、聞けば聞くほど、connect()の動作が怪しいですが・・・
connect()が本当に成功しているならソケットは必ず読み取り可になるんで
select()の動作自体を疑いたくは無いですね・・・

0255名無しさん@お腹いっぱい。NGNG
ブロッキングモード、非ブロッキングモードでのsend()関数の
失敗する条件を教えてください
大きなデータ(ブロッキングモードで5MB前後)の場合、
エラーになる場合(-1)と送りきれる場合の
区別がつきません(まったく同じ条件で結果が分かれます)
現在、プラットホームを限定しないで情報を集めております
0256しろーとNGNG
大きいデータを送る場合、
1初回のsend(バッファに空きあり)
 成功した大きさが返ってくる(ブロックしない)
2次にポインタをずらしてもう一回sendする(まだ空きがない)
 ブロックする/エラー(WSAEWOULDBLOCK)
3selectで待つ/FD_WRITEが来るので、
 2のsendをもう一回(ブロックしない)
 成功した大きさが返ってくるので、2に戻る

こう考えているんだけど、合ってます?
0257>255NGNG
これこそ、ちゃんとselectで送信完了を待ってるのかどうかの問題のような。
送信データサイズと送信エラーとに直接の相関関係はないでしょ。
相手局の問題や、通信経路(OSのバッファ等を含む)の問題の方が重要だとおもうけど。

win95のwinsockで、ノンブロックのsendで数M送信したら
Winが固まったことはある。
もちろんselectで送信完了を待って順繰りに2Kづつ送信した場合。
同じプログラムで、win98,NT4では問題なかったんだけどね。
0258255NGNG
説明不足があったので条件を限定して詳細を述べます

ブロッキングモード
ストリームソケット
クライアントのポートはconnect()に選ばせる
送信バッファ8KB
送信データ5MB
select()で送信可の確認
プログラム起動直後に1回のsend()で全部送る
受け側でデータ全体の受信を確認後終了(デバッグの意味)

受け側TAIME_WAIT後に同じプログラムを走らせる(受け側も再起動)

この状態で、send()の成否が分かれます
失敗する時には、ほとんど一瞬で帰ってくるのです
送信バッファに対してデータが大きいですが、直接原因になるのでしょうか?

実際には切り分けて送るので問題ないのですが
成否が分かれるのが気持ち悪くて相談したわけです

心当たりはないでしょうか・・・
0259>258NGNG
そもそも、失敗するというのは、どういうエラーになるの?
>受け側TAIME_WAIT後に同じプログラムを走らせる(受け側も再起動)
>この状態で、send()の成否が分かれます
このあたりに問題がありそうな気がするんだけど。
サーバー側のポートは、再起動する時点で本当に開放されてる?
ゾンビになってるとか無いよね?
0260名無しさん@お腹いっぱい。NGNG
sendの戻り値や、errnoなりWSAGetLastErrorなりの値が・・・
0261名無しさん@お腹いっぱい。NGNG
>>259
ポートが解放されていなければ、bindでエラーになるだろう。
setsockoptでSO_REUSEADDRオプションを指定していない限り。
>>258が
「TIME_WAIT後に」と云っているのはそういう意味だと
俺は受け取ったのだが。
0262259>261NGNG
>ポートが解放されていなければ、bindでエラーになるだろう。
実はそうなんではと疑ってるんだけど。
0263261NGNG
>>262
実はbindエラーのせいでサーバ側が起きてねえというオチ?
それならクライアントからのconnectも失敗するだろう。
bindエラーを見逃し、しかもconnectエラーも見逃すということを
やるだろうか。まあ俺ならやりかねんが。

それはともかく、サーバ再起動直後という特殊なタイミングのみに
起きる問題かどうかは切り分けたい。
サーバにずっとrecvさせておくようなパターンでも、
sendのエラーは発生するの? >>255
それと、h_errnoの値は教えてくれな。
0264259>263NGNG
>それならクライアントからのconnectも失敗するだろう。
>bindエラーを見逃し、しかもconnectエラーも見逃すということを
いや、connectが失敗するのも、sendが失敗するのも、
どっちもselectで待ってるものはおんなじだから怪しいなと。
改めて、見直してみると原因はこんなもんって結構おおいじゃない。(爆
クライアントがエラーになるから、必死にクライアント調べてみて、
FD_SETしてるのは、送信の方だから、送信エラーと思ってるとか・・・

つーか、255さん、なんか否定してよ。
0265名無しさん@お腹いっぱい。NGNG
ここで語られているようなことをするには
どんな言語が必要ですか?
0266>265NGNG
たぶん、Cができれば何とかなります。
0267>258NGNG
全然関係ないけど。
>送信バッファ8KB
8Kってあんまり意味ないと思うよ、
普通ウインドウサイズ2Kぐらいだし、
OSのオーバーヘッドを緩和したいなら、もっと大きくした方が良いだろうし。
まぁ、8Kが悪いわけじゃないけど、中途半端だなと。
0268255NGNG
お騒がせしました
サーバー側に問題がありました
サーバーは受取ったデータをファイルに保存するように作られていたのですが
これが、消えてなかったです、ファイルが重複してると接続を切るようにできていたので
connect()直後クライアント側は送信可能を感知して送信し、send()中にサーバーが切断してしまうという状態でした
接続が成功していたので安心しきって見落としてました

Winsock2.0ではsend()の戻り値はSOCKET_ERRORだから-1かな(書いたと思ってましたけど前々スレッドでしたね)
直後のWSAGetLastError()は10057でした(数値ですみません)
関数の存在自体を忘れてました・・・

それと、TIME_WAIT後という意味は261さんのとおりです
TIME_WAIT状態終了後と書くべきでした・・・

送信バッファはWinsock2.0のデフォルトじゃないんですか?
バッファいじってない状態でその値が取得できたのでそのまま使ったのですが・・・

自分の置かれている状態を正確に他人に伝えるのは難しいですね・・・
今回は色々と勉強させてもらいました
0269267>268NGNG
>送信バッファはWinsock2.0のデフォルトじゃないんですか?
>バッファいじってない状態でその値が取得できたのでそのまま使ったのですが・・・
ああ、そういうこと。ソケット内のバッファの事ね。
アプリケーション上のバッファサイズ(送信単位)かと思った
確かWinsockについてはほとんど意味なしだったと思う。
詳しくは、前回号のMSDNに解説を読んでみてくれ。
0270名無しさん@お腹いっぱい。NGNG
WSAGetLastError()で得た値からエラーすとリングみたいなの
を取得する方法はあるのでしょうか?

FormatMessage()見たいなやつです。
0271名無しさん@お腹いっぱい。NGNG
>>270
Winsock特有のエラー以外は、標準的なBSDのエラーコードに
WSABASEERR(=10000)を足した値になっているので、FreeBSD
あたりのsys_errlist定義をパクってくれば大概は事足りる。
もちろん日本語のメッセージにはならないけどね。
0272270NGNG
>271
ありがトン
パクってくる ε≡Ξヽ(´ー`)ノ
0273。>270,271NGNG
というかFormatMessageでWSAGetLastErrorの
エラーメッセージ取得できるんだけど。
駄目だったエラーコードはどれ?
0274270NGNG
WSAENETDOWNでやってみました(*'ー')ノ
FormatMessage()がFALSEを返したのでだめだと思ったのさ。

でも多分僕のやり方が逝けないんだね(●´▽`●)

0275。>274NGNG
FormatMessage()のエラーコードは、なんだったの?
後、環境差異もあると思うんだよね。
私がここんとこ、見てたのは、W2Kだから。
ERROR_FILE_NOT_FOUNDとかの、ネイティブなエラーはメッセージ取れてる?
0276271NGNG
ウーン。気になるので後で試す。
多分環境依存。NT4でもサービスパックN以降はOKとかな。

>>270
いちいちソケットエラーおこさんでも次のようにして試せば良い。

#include <stdio.h>
#include <string.h>
#include <windows.h>

char *squeeze(unsigned char *s, const char *set)
{
  int c;
  unsigned char *d = s;
  char *res = s;

  whle (c = *s++)
    if (!strchr(set, c))
      *d++ = c;
  *d = '\0';
  return res;
}

int main()
{
  int i;
  char buff[1024];

  for (i = 1; i < 12345; ++i) {
    buff[0] = '\0';
    if (!FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL,
i, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
buff, sizeof buff, NULL) || !buff[0])
    {
      continue;
    }
    printf("%5d %s\n", i, squeeze(buff, "\r\n"));
  }
  return 0;
}
0277270NGNG
上のコードで試しました。当方WIN98
最後に表示されたメッセージは
6118 このワークグループのサーバー一覧は、現在使えません。
で、
FormatMessage()がしぱいした回数は
0x2da7 回でした。

0278271NGNG
>>277
俺会社のNT4(Service Pack6)で試したけど同じ結果。
最近のMSDNでは、Win32 Error Codesの中にWSA関係のエラーコード
も含まれているんだけどな。
0279。>NGNG
うーん、W2KServer+SP1で試したけど、10004から11034まで取得できるね。
98、NT4はダメなのかな。
0280名無しさん@お腹いっぱい。NGNG
WSAのエラーは、昔、試してみて駄目だったから、
MSDNのエラーコード表をぱくってエラーメッセージ取得関数を作ったことがある。
そうか最近は取得できるんだ…。
0281名無しさん@お腹いっぱい。NGNG
コネクションを保持することが必要なプロトコルをHTTPトンネリングしようとしているのですが
可能でしょうか?
プロキシサーバからサーバってKeep-Aliveできるのでしょうか?
0282名無しさん@お腹いっぱい。NGNG
HTTPで www.yahoo.co.jp にGET / HTTP/1.1すると
レスポンスヘッダとボディの区切りが\r\n\r\nになって
くれないんですけど何でですか
0283>282NGNG
ふつー\r\rだろが
DOSに洗脳されてんな
0284名無しさん@お腹いっぱい。NGNG
>>282 Yahooは変なんだよ。「送信はstrictに、受信は寛容に」ということで頑張れ。
>>283 馬鹿。HTTPの規約資料読めよ。
0285名無しさん@お腹いっぱい。NGNG
>>284
YahooのHTTPDって何つかってんの?
0286名無しさん@お腹いっぱい。NGNG
telnetで
headすりゃいいじゃん
ちなみに俺がやらないのは
Socks串がかんでる環境なんで
設定いじるのがウザイだけ
0287名無しさん@お腹いっぱい。NGNG
>>284
そういう詳細情報はヘッダに出てこない。
HEADリクエストでページ内容全部送ってきたり、
CRLFじゃなくて全部CRで送ってきたり、邪悪この上ない。
0288名無しさん@お腹いっぱい。NGNG
Yahooは完全オリジナルじゃないか?
何かのカスタマイズかもしれないが、Yahooのサービス内容に
そこらのhttpdは不要だしな。
0289名無しさん@クリスマスもひとり。NGNG
Winsockについて教えてください。
まだWinsockの勉強をはじめて一週間くらいです。

サーバーはポートを指定してクライアントの接続を待機すると思うんですが、
クライアントも接続するサーバーのIPとポートを指定しますよね?
そのとき、クライアントはどうやってサーバーのポートを知ればいいのでしょうか?
それとも、きめうちで作るものなのでしょうか?
0290名無しさん@お腹いっぱい。NGNG
>>289
決め打ちです。

ポート決め打ちがいやなら、CORBAのネーミングサービスサーバ
みたいなの自作してちょ。(それでもネーミングサービスサーバ
への接続は決めうちになるが)
0291名無しさん@お腹いっぱい。NGNG
>そのとき、クライアントはどうやってサーバーのポートを知ればいいのでしょうか?

クライアントは、IPアドレスもポート番号も、ユーザーが指定したものを使うのが原則。
ただし、メジャーなプロトコルの標準的なポート番号はIANAで登録管理されているので、
そこで管理されている値で当てはまるものをデフォルトとして用意するのが親切。
参照: http://www.isi.edu/in-notes/iana/assignments/port-numbers
0292名無しさん@クリスマスもひとり。NGNG
>>290 さん、お返事 ありがとうございます。

ガーン、そうなんですかー・・・
じゃあ、サーバー側でポートが使用されてた場合には、
クライアントは変な動作しちゃうのかなぁ?

それと、IPメッセンジャーみたいなのは、
IPの最後の桁を総当りで試してるんでしょうか?
0293名無しさん@お腹いっぱい。NGNG
>>292
変な動作しないようにすれ。
接続したらサーバーから接続メッセージ投げるようにして、一定期間たって
も送ってこなかったり、期待した内容と違うものがきたら「このサーバー
違くない?」といって切断すればいい。

>それと、IPメッセンジャーみたいなのは、
ブロードキャストするとか、マルチキャストするとか。
0294名無しさん@お腹いっぱい。NGNG
>292
見当違いのサーバプロセスにコネクトしても、とりあえず
ソケットは出来ちゃうね。普通はソケットできたらサービス
ごとのプロトコルで接続確認のメッセージ投げ合って、それが
お互いの意図するプロセスなのか確認して、間違ってたら落とす
とかするんじゃないでしょうか。
0295293NGNG
>ブロードキャストするとか、マルチキャストするとか。
あ、これローカルに限るからね。
0296名無しさん@クリスマスもひとり。NGNG
>>291 さん
参照を見させていただきました。
まったくのオリジナルなものは49152以降を使って良いって事ですよね?
実際、バッティングしちゃう事は無いのかなあ?ちょっと不安。

細かいとこまでありがとうございました、
明日、仕事中にでもながめてみますー!
0297名無しさん@クリスマスもひとり。NGNG
>>293 さん
ネゴシエーションって言うのかな?ハンドシェイクっつーのかな?
そういった確認プロセスを実装するべきなんですねー・・・

ブロードキャストとマルチキュストはまだよくわからないので、
勉強してきます。UDPで出来るやつですよねー!
0298名無しさん@お腹いっぱい。NGNG
つーか、ポートはservices引いてほしいなぁ。
0299名無しさん@お腹いっぱい。NGNG
非同期ソケットでソケットを閉じるとき、いきなり
closesoket()を呼んで後は無視、というようなことをしてもいいのでしょうか?

それともちゃんとshutdown()を呼んでからFD_CLOSEを待たなければ
ならないでしょうか?
0300名無しさん@お腹いっぱい。NGNG
>>298
servicesって引く意味あるの?
localのことがわかっても意味ないようなきがする。
localhostにTCP/UDP開くこともあるが、remote相手の方が圧倒的に多い。
0301>300NGNG
servicesがなぜ存在するか考えた事ないのか?
0302名無しさん@お腹いっぱい。NGNG
>お互いの意図するプロセスなのか確認して、間違ってたら落とす
>とかするんじゃないでしょうか。

それが理想なんだけど、たいていメジャーなプロトコルの実装って
何もしない(セパレータ待ちのまま止まる)のが多いんだよね・・・
0303名無しさん@お腹いっぱい。NGNG
closesocket()はそのプロセスのソケットを閉じる
shutdown()は複数のプロセスで同じソケットを使っていようと
そのソケットのすべてのインスタンスで閉じる
あと、SD_SENDなら、向こう側はEOFを受取るがこちらはまだ受信は可能


0304名無しさん@お腹いっぱい。NGNG
Winってservicesいつ読んでるの?
あれ、手書きしてちゃんと動くんですか?
0305名無しさん@お腹いっぱい。NGNG
>>304
自分で試せばいいダロ。
少なくともNTの場合はgetservbynameが内部的に
%WINDIR%\system32\drivers\etc\services
を直接読みに行っているっぽい。書き換えるとすぐに反映される。
0306名無しさん@お腹いっぱい。NGNG
windowsのselect()に関して質問させてください
select()で待機中に同プロセス、別スレッドから
待機状態を強制解除(エラー)させる方法が知りたいのですが
そういうイベントってあるのでしょうか?
シグナル投げようかとも思ったんですがwindowsのプログラマが意識できるものは
どれも致命的なのばかりで、できれば横取りしたくないです。
0307名無しさん@お腹いっぱい。NGNG
プロセスやスレッド自体を殺したくはないし、
当該のソケットをclose/shutdownしたくもないということだよな。
そういう必要があるのであれば、ソケット監視にはWSAEventSelectを
使うことにして、
一方ではスレッド間通信用のEventオブジェクトを作成して
WaitForMultipleObjectで両者を一緒に見張るか、
いっそIOCPを使うかするのが真っ当なやり方だろう。

しかし、やや汚い手であるが、ダミーのリスナーを起動して
おき、selectでそのリスナーも一緒に見張らせておく。
で、問題がある場合はそのリスナーにconnect()する、という
やり方で、どうにかなるような気もするな。
0308。>306NGNG
selectの待機時間をある程度短いサイクルにして
チェックするのではダメなの?
WSAEventSelectは、Winsock2.0未満は使えないから、
Win95とかではダメなんで、もしselectで待つのが送信・受信だけなら、
send recvを使わないで、WriteFile・ReadFile+OverlappedI/Oを使って
WaitForMaultipleObjectで待つという手も有るよ。
0309306NGNG
実は、汎用のサーバーC++ classを作ってます
winsock1.1でも動くかたちになってるからできればWSAEventSelect使いたくないんですよね
selectが見張ってるのは複数ポートのソケットの送信、受信(受付も)、エラー、タイムアウトです、(同期)
内部の命令をどうやって受取るか?というのが問題で
今のところ、SIGABRTなげて対処してますが・・・というのが現状です
サーバ機能はシングルスレッドなので余計なスレッドを足したくは無いんですが
良く考えればシグナルだって内部的にはスレッドだな、
シグナル打つスレッドが他に必要になってくるし・・・

PS
.Winのシグナルハンドラ定義って一回シグナル入ると再定義しなきゃいけないんですね
ちょっと賢くなった
0310デフォルトの名無しさんNGNG
>>300

俺はWindows系ではservicesは見ない。昔はgetservbyname()
してたけど、Windowsアプリの場合ポート番号変更するような
機能付ける事が多いからINIファイルやらレジストリから読む
仕様にした。Windowsの流儀としては自然だし。
ちなみにクライアントアプリしか作った事はないし、ポート番
号は非ウエルノウンポートなサービスばっか。

UNIX系はservicesを見るようにしているが、クライアントア
プリでは今後Windowsアプリのような方式にする可能性もある。
0311。>309NGNG
>実は、汎用のサーバーC++ classを作ってます
Winsock独自拡張の機能は使わないでやりたいと言うこと?
0312309NGNG
>Winsock独自拡張の機能は使わないでやりたいと言うこと?
CHATSRVR のこと?

Winsock 2.0にしたら
select()がsignalで飛ばない・・・シクシク
MSDN見たらWSAEINTRは1.1のみだった
0313ごめんね〜NGNG
94まで下がっているんですものぉ〜
0314デフォルトの名無しさんNGNG
非同期ソケットをつかってプログラミングしてるんですが、
データを受信してるとき、受信スピードを落とすのは
どーやってやればいいですか?

いちいち切断なんてことはしませんよね。
0315デフォルトの名無しさんNGNG
age
0316>314NGNG
recvしなきゃいい。
0317デフォルトの名無しさんNGNG
>>308
昔Win95でsocketにoverlapped I/O使ってFTP転送みたいにがんがん転送する
奴作ったら、swapしてまでOS内部にデータためこんで、しまいにOSごとハング
アップしてしまったよ。
間欠的に少々のデータを送るにはいいかもしれないけど。
0318。>317NGNG
そうだね、俺もそうなったよ。
というか、nonblockで普通にsend+selectでも同じ事象になるけど。
ディレイかませれば、死なないで済むから、FTPみたいな、
ハンドシェークなしの一方的な転送じゃなければ大丈夫だよ。
win98、NT3.5以降では問題起きないから、利用環境が特定できる
ものなら心配する必要はないと思うけど。
0319デフォルトの名無しさんNGNG
>>316
ありがとうございます。
FD_READのときはかならず全部読まなきゃいけないと
思ってたんですが、そんなことはないんですね。

とりあえずやってみるです。
0320デフォルトの名無しさんNGNG
>>318
Win95でソケット使ったこと無いので参考までに
質問させて。
ガンガン送るという意味がよく分からないのだけれど
1. selectでSNDBUFが開くのを待つ
2. EWOULDBLOCK、もしくはデータが無くなるまでsendループ
3. EWOULDBLOCKの場合は1へ
の繰り返しと思っていいですかね。
これで駄目なら、Win95のselectは、WinsockレイヤーのSNDBUFが
fullであっても writableであると返すような間違った
実装がなされているということになるな....ちょっと信じ難い。

>>319
受信が速すぎて困ることって想像がつかないのだけれど、
なぜ困ってるの?
0321。>320NGNG
>これで駄目なら、Win95のselectは、WinsockレイヤーのSNDBUFが
>実装がなされているということになるな....ちょっと信じ難い。
うーん、selectの実装だけの問題かどうかは、わかりませんが、
バッファリングの機構のどこかに問題があるのは確かですよ。
それ以上掘り下げる事はしていませんが。

私の場合は、select+sendで317の言うような現象になったんで、
WriteFile+OverlappedI/Oに変えてみたんだけど改善しなかったんで、
しょうがないから、blockmodeに変えたけどね。
同一のプログラムををNT,98でも検証してたから、
win95の問題であることはまず間違いないです。

>なぜ困ってるの?
たぶん、流量制限したいんじゃないんですか?
0322317NGNG
>>318
>というか、nonblockで普通にsend+selectでも同じ事象になるけど。
ほえ?
nonblockだったら、送信できなきゃWSAEWOULDBLOCKでsend()から戻って
くるんだから、OS内部にためこんで自滅なんて起きないけど。
0323デフォルトの名無しさんNGNG
>たぶん、流量制限したいんじゃないんですか?
そです。
0324デフォルトの名無しさんNGNG
オイオイどっちが本当なのだ。
>>322
sendはSNDBUFがfullな場合にEWOULDBLOCKを正しく返すが
(Win95の)WriteFileはERROR_IO_PENDINGを返すべきときに返さない
という解釈で良いの?
0325317NGNG
>>324
少なくとも俺はそうだと認識してる。
ただ、NT4でも同じだったけど(流石にWin95のようにハングはしなかったけど、
仮想メモリ不足のダイアログは出た)

なので、ハンドシェーク無しの場合はsocketにoverlapped I/Oを使うのは危険
だなと。
0326320=324NGNG
>>325
ちょっと普段使わないOSR2立ち上げてテストしてみた。
仕事じゃないのでマジメにやった訳じゃないが...
(本当ならACKが帰ってくるタイミングとI/O がpending
でなくなるタイミングを比較検討したいところだ)

1. Win95でもデフォルトのSNDBUFのサイズは8192のようだ
2. sendは一応SNDBUFのサイズを見ており、1024バイトずつの
パケットを送ってやると、ちょうど9回目でEWOULDBLOCKを返す
ようになる。
3. しかし、サーバ側はacceptしたあと寝たフリをさせている
にも関わらず、selectが即リターンする。ここでもう一度send
を実行すると当然のようにEWOULDBLOCK。selectがちゃんと
寝てくれないのは困り者だな。無論BSDならselectが帰ってこない
ところだ。

WriteFile版も試したが、ERROR_IO_PENDINGを「必ず」返す。
だが、GetOverlappedResultがマトモに機能しないようだ。
これが致命的なのだろう。試しにOverlapped構造体にセットした
イベントをWaitForSingleObjectで待ってみたが、いずれに
せよ即リターンする。
最初はこの版を止まるまで無限ループというコードで試したら、
プログラムではなくシステムが停止してしまった(苦笑)。
0327。>326NGNG
追試ご苦労様です。
>プログラムではなくシステムが停止してしまった(苦笑)。
そうそう、こちこちにかたまっちゃんだよ。
sendでも、WriteFileでも結果的におんなじことになる。
OSR1,OSR2両方ともおんなじだったはずだよ。

0328デフォルトの名無しさんNGNG
telnetツールを自作したいのですが
23に接続した後何したら良いかわかりません
たぶん、ターミナル情報をやり取りが必要なのでしょうが(telnet.exeの通信にsniffer使うと何かやり取りしてるので・・・)
実際、具体的にどうすれば良いのでしょうか?
開発環境は
VC++6.0、Winsock1.1or2.0(2.0でなくても動作させたいですが)です
0329デフォルトの名無しさんNGNG
>>328 まずはTELNET関連のRFCを読め。
0330デフォルトの名無しさんNGNG
>>328
RFC読みなはれ。番号忘れたけど結構若い番号だから。
プロトコルの話しだからWinSockのバージョンには関係しないよ。

IAC WILL, IAC DO
0331。>NGNG
というか、snifferまである環境なら、
tnぐらい知ってる人周囲にいないのかなぁ?
最近はそうでもないのかな・・・
0332,,a,,,,,,,NGNG
,,,a,,,,,a
0333328NGNG
318ですよね?
一応読んでから質問してるんですけど・・・
あれ見ただけで、コネクション張って、次に何やるかわかるんでしょうか?
コードとか、送受信の定義しか、無かったように見えたんで質問したんですけど?

その他に、オプションで854、858・・・(死ぬほど)
があったんで、その中に書かれているのですか?
一応、854は見てみたんですが
いきなり、「Go Aheadを送信するホストの場合」みたいなところで
つまづきました・・・
0334328NGNG
もしかして
IAC WILL TERM TYPE を
FF FB  18
に編集して送るってことですか?
0335デフォルトの名無しさんNGNG
編集って?
RFCに「IAC WILL」とか書かれているのは単なる解説。
スニファしていても、そういう文字列が出てくるわけではないし、
ユーザーがIAC WILLと打ち込んだからといってそれをコマンドに
翻訳して送れといっている訳でもない。

基本的には送受信データは全部そのまま生で送る。
ただし、TELNETの制御コマンドの始まりを意味するコードと
それに続く数バイトだけは特殊扱いをする。
制御コマンドの送受信コードはRFCに16進で書かれている通り。
0336名無しさん小学1年生NGNG
socketでサーバーを書いているですが、
一度しかクライアントしか受け入れない場合、
acceptした後にそのソケットはshuntdownしちゃっていいのでしょうか?
0337328NGNG
日本語がおかしかったです
編集じゃなくて変換が正しかったです
でも、FFとかFBを送るのはどうやってやるのですか?
ASCIIは7bitですよね
unicodeにするんですか?

>>336
受付ソケットは閉じても問題ないです
その場合、回線不良で切断したら当然、再接続で来ません
ソケット用意してもTIME_WAITの問題でうまくいかない可能性大
まあ、TIME_WAIT回避する方法もありますが、
極希に問題が起こる可能性があります(パケットの生まれ変わりの問題)
特別、shutdownする理由も無いように思うのですが?
0338名無しさん@お腹いっぱい。NGNG
>>337
7bitにこだわる理由を教えてくれ
説明できないことが、その答えだ
0339328NGNG
sendの引数 signed char だから勘違いしてました
なるほど、全然送れてますね
0340>336NGNG
単一のクライアントだけしか受け付けないんだよね?
それなら、一度acceptしたら、listenしているソケットを閉じてしまえば、
いいだけだよ。ソケットを閉じればバックログの待機中の接続には、rstが返るから、
心配ないよ。
0341336NGNG
ありがと。
shutdownってしなくてもよかったんですか。
データが残っている状態(この場合バックログ?)では
closesocketする前にshutdownしないといけないものと思ってました。
0342>341NGNG
listenソケットはデータの送受信しなないから、
shutdownは、必要ないと思うけど。
バックログとは、listenの第2パラメータで指定する、acceptするまで、
保留させる接続のことだよ。acceptしなければ、synは応答しないから、
接続は確立しない。よって、データの送受信は発生しないよ。
この時点ではrstが応答されれば、クライアント側にはサーバーソケットが
生成されていないように見えるから。
acceptしてすぐ切断すると、すれ違いでデータを送信してしまう可能性があるので、
あまり良くないです。shutdown(s,SD_SEND)で呼んでrecvで拾ってやらないと、
いけなくなるし、クライアントが輪は接続確立後に切断されたように見えるから
(まさにそうの通りなんだけど)データが正常に受け取られたのか、判断しずらいよね。
0343336=341NGNG
>acceptしてすぐ切断すると

acceptしたソケットとは通信を続けるので、すぐ切ることはないです。
3つの接続要求がきた場合、1回acceptを発行して、
すぐにlistenしていたポートをclosesocketしてしまえば残りの2つからは
サーバーソケットが存在してないように見える、ってことですよね?

それとも、一度acceptすると3つとも接続が確立しちゃうってこと?
俺の勘違いだと思うけど
0344デフォルトの名無しさんNGNG
>>343
342のaccept後すぐにcloseすると云々というのは、
listening socketではなく、acceptにより返された
descripterのことを云っているので、
343のような処理を行う分には問題がない。
0345342>343NGNG
>すぐにlistenしていたポートをclosesocketしてしまえば残りの2つからは
>サーバーソケットが存在してないように見える、ってことですよね?
そういうことです。
acceptしてすぐ切る云々は、
>>336の
>acceptした後にそのソケットはshuntdownしちゃっていいのでしょうか?
から、acceptして取得した記述子をshutdownしているのかと思ったので、
それは、良くないよという話です。
0346デフォルトの名無しさんNGNG
>>342
>synは応答しないから、接続は確立しない。
うそだろ?
listenしてればsynハンドシェークを完了させる
バックログがなんなのかを勉強し直せよ

>acceptしてすぐ切断すると、すれ違いでデータを送信してしまう可能性があるので・・・
ソケットレベルでacceptされたかどうかはわからないと思うが?
shutdown(s,SD_SEND)した後recvしてどうするんだ?
もう、クライアントには応答できないし
ソケット破棄しても、受信バッファが破棄されるのはかわらんと思うが?
0347342NGNG
>>346
>listenしてればsynハンドシェークを完了させる
>バックログがなんなのかを勉強し直せよ
勘違いしてたかな。ちょっと、確かめてみる。
誤情報流してしまったかもしれん。すまん。
単一接続にするには、バックログ数を減らすのが正しかったか。

>ソケットレベルでacceptされたかどうかはわからないと思うが?
それならば、複数のバックログを設定されていれば、
接続確立したかは、確かに判別不能になるね。

>shutdown(s,SD_SEND)した後recvしてどうするんだ?
へっ?仕掛かり中の受信を終わらせるためだけど。
応答できるかどうかとは、関係ない話しだけどな。
別に捨てるだけなら無理にする必要はないけどね。
通信が会話形式を取らない場合なら、クライアント側は正常に
送信したように見える可能性があるから、
サーバー側は後始末する必要があるんじゃない?
0348デフォルトの名無しさんNGNG
だから下がりスギだって
0349デフォルトの名無しさんNGNG
socketでもtelnetでも良いのですが、proxyを経由させるとき、最初にproxyに接続しますよね。
で、httpなら"GET http://***/index.html HTTP/1.0"とかコマンドを送りますけど、
このコマンドにスペースを使いたい場合ってどうすれば良いのでしょうか?
例えば、httpプロトコル以外で、"SHOW STATUS ***/index.html"とか送ると、
"SHOW"をコマンド、 "STATUS ***/index.html"をアドレスと認識してしまってうまくいきません。
"や'でコマンドを囲んだりしてもうまくいきません。
どう処理すればよいのでしょうか?

0350デフォルトの名無しさんNGNG
http proxyはhttp命令しか受け付けないから当然の結果。
専用プロトコルのproxyをさがそう。
0351名前ついてますか?NGNG
Socks使え。って問題でもないんだろうな。
0352デフォルトの名無しさんNGNG
HTTPトンネルをしたいのか?
GetのQueryString or Postして
cgiで受けて代用できないようなことなのか?
0353デフォルトの名無しさんNGNG
同じLAN内で自分の相手してくれるサーバ探すのって普通どうするの?
DirectPlayのEnumHostsに相当する処理を行いたい場合。
0354デフォルトの名無しさんNGNG
>>353
使いたいポートにUDPでブロードキャスト投げろ。
0355354NGNG
補足
サーバ側はブロードキャストによるリクエストを受け取ったら、Senderに応答を
返すようにしておく。
0356353NGNG
やっぱそうなのか、結構面倒くさいのね。
どうもありがとう。ただいま実験中……
0357353NGNG
使いたいポートにUDPでブロードキャスト投げたら
TCPで使えなくない?
普通どうすんの? 別のポート使うの?
0358353NGNG
acceptといっしょにできないのなんかもったいないな。
0359デフォルトの名無しさんNGNG
>>356
面倒くさいから、上位に抽象化されたライブラリを作るわけです。

>>357
TCPとUDPは独立にbindできる。つまり、同じポートでTCPの待ち受けと
UDPの待ち受けを同時にできます。

>>358
TCP用のサーバsocketとUDP用のサーバsocketをbind後、select。
読み取り可になったsocketに応じた処理をする。
0360353NGNG
ウヒョーありがとー。
いろいろ試してみます。
0361353NGNG
ところで俺の用途だと、ゲームだから、
非ブロッキング+適当に休む+ポーリングで
ぜんぜん問題ないから単なる話のタネなんだけどさ、
ブロッキングモードで使いたいときは
サーバーを終了したいときってどうするの?
0362デフォルトの名無しさんNGNG
シグナルでも投げたら?
当然、分岐を書いておく
0363353NGNG
やっぱシグナルかー、いまいちかっこわるいなあ。
WaitForMultipleObjectでスレッドもWin32シグナルもタイマも
あり、って方がいいなあ。
selectで終了用のダミーの入力fd持つとかできる?
そんなみょうちくりんなことするよりシグナルの方がマシか……
0364デフォルトの名無しさんNGNG
>>363
select使う時点でblockingもnon-blockingも関係無いような気がするけど。違ったっけ?
blockingで、read、recvを使うんなら、シグナル(か、その他の割り込み)以外思い付かない。
select使うんなら、timeoutしたところで終了判定。
0365デフォルトの名無しさんNGNG
SOCKETに対してWaitFor〜()が使えればいいんだけどねぇ。
ReadFile(), WriteFile()にはSOCKET渡せるくせに、変な所で手抜きだよな。
0366デフォルトの名無しさんNGNG
SOCKETに対してWaitFor〜()が使えれば悩まずに済むんだけどね。
ReadFile(), WriteFile()にはSOCKET渡せるくせに、変な所で手抜きだよなぁ。
0367デフォルトの名無しさんNGNG
>>364
send時に動作が変わりそうな気配が・・・
0368デフォルトの名無しさんNGNG
>>363
http://piza.2ch.net/test/read.cgi?bbs=tech&key=970344582&st=306&to=309&nofirst=true
あたりに同じ話題があった。
306が結局どうしたのかはしらん。
0369デフォルトの名無しさんNGNG
Javaでabstractメソッド(仮にfunc())を持つInterfaceをImplementsした
Serializableオブジェクトインスタンスを、Socket→ObjectInput/OutputStream
つかって投げ合って、相手先でfunc()を起動するっていうコーディングって、普通かな?

RMIやCORBAでネーミングサーバ立ち上げるほどの事でもない(一対一が確定してる)
なら、普通はこのやり方だよね?
0370デフォルトの名無しさんNGNG
age
0371デフォルトの名無しさんNGNG
99
0372デフォルトの名無しさんNGNG
>>363
AfxEventSelect()で設定したEventと終了のEventをWaitFor〜()で
待つってのはどう?
0373372NGNG
WSAEventSelect()だった。
WinSock2だけどね。
0374デフォルトの名無しさんNGNG
ブロードキャスト受けた時に
それが、ブロードキャストと判定するにはどうしたら良いのでしょう?

また、ブロードキャストを投げて、誰から、帰って来たのかは
どうやって知るのでしょうか?
0375デフォルトの名無しさんNGNG
TCP/IPなら、宛て先アドレスが255.255.255.255とか。
そういう話じゃなかったっけ?
0376デフォルトの名無しさんNGNG
>>374
(;´д`)学校の宿題は自分でやりましょう
0377374NGNG
宛先をソケット情報のどこから取れば良いのかと言うことです
やりたいことはブロードキャストを使ったデータ送受信です
ノード数はそれほど多くないのでトラフィックは問題ない程度です

あと、環境はC言語 OSはUnix&Windows でお願いします(出来ればバークレー型ソケットで・・・)

ちなみに、宿題ではありません
0378374NGNG
宛先をソケット情報のどこから取れば良いのかと言うことです
やりたいことはブロードキャストを使ったデータ送受信です
ノード数はそれほど多くないのでトラフィックは問題ない程度です

あと、環境はC言語 OSはUnix&Windows でお願いします(出来ればバークレー型)

ちなみに、宿題ではありません
0379デフォルトの名無しさんNGNG
2重すみません
0380デフォルトの名無しさんNGNG
IRCプロコトルをカプセル化したコンポーネントってどっかに転がってないですかね。
IRCクライアント CHOCOA のCOMオブジェクトを使うと面倒で面倒で。←タコ
0381デフォルトの名無しさんNGNG
age
0382デフォルトの名無しさんNGNG
age
0383デフォルトの名無しさんNGNG
shutdownとclosesocketの違いを教えてください。
(少なくともMSDNでは)shutdown後のソケットを再利用してはいけない
書いてあったので、さっさとcloseしちゃっても同じだと思うのですが。

送信(受信)のみ禁止したい状況が思いつかないので。

#複数のスレッドにまたがって1つのソケットを使いまわすことは無い
#という前提でお願いします。
0384デフォルトの名無しさんNGNG
>383
こことか参考になるかも
http://www.kt.rim.or.jp/~ksk/sock-faq/unix-socket-faq-ja-2.html#ss2.6
0385デフォルトの名無しさんNGNG
>>384
ありがとう。お行儀好く逝きましょうということですね
0386デフォルトの名無しさんNGNG
hostent構造体のh_addr_listメンバでipアドレスのリスト取れると思うのですが、
肝心のh_addr_list要素数が無いのですが、どうやってすべてのリストを取得するのでしょうか?
0387デフォルトの名無しさんNGNG
>>386
ケツがNULLポインタになってるから、そこまでループで回して処理
0388デフォルトの名無しさんNGNG
ソケットに対してのI/Oは何でやってます?
送信はsend/writeのどちら?
受信はrecv/readのどちら?
待ちはselect/pollのどちら?
BSDかSYS/Vの違いだろうけどさぁやっぱ好みってあるじゃん。
0389デフォルトの名無しさんNGNG
>388
俺はwindowsだからsend/recv/select
UNIX使うようになったら、read/write/selectでやりたいな。
楽そうだし。
0390ageNGNG
age
0391デフォルトの名無しさんNGNG
>待ちはselect/pollのどちら?
pollの方が監視できる記述子が多いからなぁ。
0392デフォルトの名無しさんNGNG
win32で
プロミスカス・モードの指定の仕方を教えてください
どうも、Unix系、Linux系のキーワードでMSDNにHitしないんですけど・・・
0393デフォルトの名無しさんNGNG
kqueue, keventはどうよ?
0394デフォルトの名無しさんNGNG
>>392
おまえ、どこにでもでるよな
bosscatだっけ?
0395デフォルトの名無しさんNGNG
あげ
0396デフォルトの名無しさんNGNG
P2Pによりなまsocket通信復活!
CORBA?SOAP?そんな遅いもん使ってられん!!!
yotte あげ
0397デフォルトの名無しさんNGNG
JavaでP2PはRMIでやる羽目になるだろね。
0398(゚Д゚)NGNG
Linuxでtcpdumpのまねをしてスニッファーもどきを作ったんですけど。
Winsockで、スニッファーを作ってみたいんですが。
プロミスキャスモードに変更とかどやんの!?
ドライバー作らないとだめとかいううわさを聞いたんですけど・・・。
0399デフォルトの名無しさんNGNG
>298
うわさどおりです。詳しい人よろしく。
0400ころNGNG
本ばかりよんでいてプログラムはぜんぜん組んでいないのですが
わからないことがありましたので質問します。
ビジュアルベーシックなのですが、FTPやHTTPは対応している
ようなんですが、TELNETに接続するときのやりかたが
どうも良く分かりません。いろいろ本はよんでいるのですが
だめです。
0401デフォルトの名無しさんNGNG
本なんて読まなくていいから、こっちをきちんと読め。
http://RFC.net/rfc854.html
0402ころNGNG
見たんですが、さっぱり訳がわかりませんでした。
0403名無しさんNGNG
telnetはただのソケット接続です。
送信するものを自由にタイプできるだけです。
0404デフォルトの名無しさんNGNG
>>403みたいにRFCを読まずに、そう思いこむ馬鹿がいる。
0405ころNGNG
毎日、このスレッド確認しております。ど素人なので、RFCがなんなのか
まったくわかりません。FTPサーバーなどにはウインドウズの関数を
つかってアクセスできるようなのですが、テルネットは、その関数では
対応してないようなんです。なにか他にあるんでしょうか。
0406デフォルトの名無しさんNGNG
明日の「教えてクン」を目指す、>>405 に以下の文章を捧げる。
日々精進し、パソコンヲタクどもの親切を蹂躙してやれ。

努力を放棄すること。いやしくも「教えてクン」たるもの、努力をしては
ならない。過去ログを読んだり、検索してはいけない。「英語は苦手なの
で、分かりません。」は、高く評価できる。辞書片手にマニュアルやReadMe
を読むなど、決してしてはならない。他力本願と言われようと、自分で調
べたり試行錯誤したりせず、他人の努力の結果を搾取するのが、正しい
「教えてクン」である。

また、「もう何が悪いのかサッパリ分かりません。」と言ってふてくされ
るのも有効である。「サッパリ」という単語が「やる気の無さ」を効果的
に表現している。「原因を特定するには、何をすべきでしょうか?」と訊
いてしまうと自己の積極性が現れてしまうので、「教えてクン」失格であ
る。

情報を開示しないこと。使用OSや、機器構成などの必須の情報を知らせ
てはならない。マザーボード名やBIOSのバージョンも同様だ。具体的
なアプリ名やバージョンも隠蔽すべきだ。「DVD再生ソフト」のように
曖昧に表記しておけばよい。反対に「前から欲しいと思っていた○○」と
か「安売りされていた○○」 等の「どうでもいい情報」は、どんどん書
いてやれ。

トラブルの場合は、状況を正確に記述してはならない。「なんだかうまく
動きません。」とか「エラーが出ます。」等と具体的なことは何も書かな
いことが重要である。また、自分の試してみた事も具体的に書いてはいけ
ない。考えられる組合せのマトリックスを作成し、状況を整理するなどもっ
てのほかである。最悪の場合、それだけで問題が解決してしまうこともあ
るのだ。

「いろいろやってみたけど、動きません。」が理想的だ。

答える人間のことを考えないこと。「教えてクン」は、孤高の戦士である。
相手のことを考えるようでは教えてクン失格というものだ。以下のような
行動が、望ましい。

初心者であることを高らかに宣言し、初心者向けの丁寧で分かりやすい説
明を強要する。専門用語の使用を禁じておくとさらに効果的である。簡潔
な説明を禁じられたヲタクどもは、同じ内容を説明するのに、何倍もの労
力を強いられる。自分は努力せず、相手には多大な努力をさせることこそ
が「教えてクン」の真骨頂である。

マルチポストも有効である。そのBBSを信用していないことを明確に示
せる。「どうせ、お前らじゃ分からんだろう。」という意志表示として高
く評価できる。もちろんマルチポストの非礼をあらかじめ詫びてはならな
い。それでは、単なる「急いでいる人」になってしまう。それは、教えて
クンではない。

質問のタイトルは、「教えてください。」で良い。タイトルを読んだだけ
では「何に関する質問」か全く分からない。そういう努力は、答える人間
にさせれば良いのだ。とにかく、答える人間が答えやすいように気を使っ
て質問してはならない。傲慢で不遜な態度が必須である。「聞きたいこと
があります。」など、プロの仕事であろう。

最後に、言うまでも無いことだとは思うが、答えてくれた人達にお礼の言
葉を返すなど言語道断である。せっかく「教えてクン」を貫いてきたのに、
最後にお礼を言っているようでは、臥竜点睛を欠いていると言わざるを得
ない。質問だけしておいて、後はシカトが基本である。上級テクニックと
して、「そんなことはもう試しました。」とか、「そこまで初心者じゃあ
りません。」などと言って、回答者の神経を逆なでしておけば完璧である。

以上のことを踏まえて質問すれば、君も立派な「教えてクン」である。
ビバ! 教えてクン! 教えてクンに栄光あれ!!
0407ころNGNG
ご指摘の通り、まったく努力していませんでした。
もうすこし、自分なりにチャレンジしてみます。
いろいろ本は立ち読みしたんですが、なかなかこれだ!
っていうのに出会えないんです。今後のライフワークの
ひとつとしてがんばっていきたいと思います。
0408デフォルトの名無しさんNGNG
>>406
まぁまぁ。
FAQ スレなんだから勘弁してやれよ。
コピペだけど。
0409デフォルトの名無しさんNGNG
>>400
っつーか、本気でやるつもり?相当ダルいよ、マジで。
0410デフォルトの名無しさんNGNG
プロトコルにあわせてプログラムを組むなら、
最低限RFCを読まないと話にならないよ。
普通は、RFCを読みながら四苦八苦してプログラムを組んで動作を確認していくもの。
ちょろっと眺めて出来ないと言う人間は、出来なくて当たり前。
0411デフォルトの名無しさんNGNG
>>407
ライフワークがそんなにいくつもあってたまるか!
0412デフォルトの名無しさんNGNG
質問すれなのだろうけど、
上の見てたら何にも質問できないね
よってさげまんせー
0413ころNGNG
いろいろためしてみて、VBからテルネットサーバーにアクセスすることができました。
まだデータのやりとりの部分は試していないのでこれから暇をみつけては前進して
いきたいと思います。ただ個人的にプロトコルの詳細およびしくみをよく理解していないので
そのへんの勉強していきたいと思っております。
0414デフォルトの名無しさんNGNG
age
0415ころNGNG
>409
自分では組めないと思っていたプログラムを過去になんとか
完成させたことがありますので、多少時間はかかるかもしれませんが
がんばってみます。ただウインドーズ系のプログラムがほんと初めてなので
その辺でとまどっていますが、すこしづつ理解しつつあります。
0416>415NGNG
>ウインドーズ系
カコイイ
0417デフォルトの名無しさんNGNG
>>403
TELNETプロトコル以外ならな
TELNETプロトコルのときは端末性能のチェックとかするだろ
0418ころNGNG
とりあえず、データも完璧とはいえませんが、受信できました。
しかし、受け取る量がでかいのかわかりませんが、うまく表示できていません。
あとはすこしVBの勉強でもすればなんとかなるかなと、思っています。
あまいでしょうか。完璧にするには、あとしばらくかかると思いますが、
なんとかなると思います。結局、ここでは何も教わりませんでしたが
やる気みたいなものを与えてくれたことを感謝いたします。
0419ころNGNG
サーバーからのデータは受け取れるのですが、
こちらからの送信した内容を相手が処理してくれません。
このあたりから難しいですね。テルネットは。
0420デフォルトの名無しさんNGNG
ころくんはtelnetがなんなのかわかっているのかな?
0421デフォルトの名無しさんNGNG
火葬短足
0422承認のロジックについて教えてください。NGNG
承認のロジックについて教えてください。
acceptした後、その相手が対象のソフトからであるかどうかの
チェックはどのようにやってますか?

私はacceptの後、タイムアウトのために、SetTimerを行い
クライアントから固定長のデータを送信させ、
そのデータ内容により対象のソフトからの接続かチェックします。
そのデータが間違っていた場合、又は、タイマーメッセージがきた時までに、
承認が完了していなかった場合はそのSOCKETはclosesocketします。
関係ないかもしれませんが、selectで接続・送受信とも非同期を設定しています。
Winsockは1.1を使用しています。

皆さんはどのような方法をとっていますか?
0423デフォルトの名無しさんNGNG
acceptでソケットが生成されたら、
認証用スレッドに回し、そこからキーデータを送信、
相手がキーに対応したデータを返したら承認。
0424デフォルトの名無しさんNGNG
Winsock難しいすぎないか?
0425デフォルトの名無しさんNGNG
アギョ
0426デフォルトの名無しさんNGNG
UNIXのUDPマシン間通信で サーバ落ちてたりして、パケットが帰ってこなかった場合
どのようにタイムアウト処理をすればよいでしょう? select() を使うべきですか?
それとも他にいい手段ありますか?
0427デフォルトの名無しさんNGNG
>>426
select()がいやならalarm()つかえば?
どっちがいいのかはよくわからん。
0428デフォルトの名無しさんNGNG
伝統的にselectかpollじゃない?
単純なタイムアウトなら簡単だし。
複数だと結構めんどくさいけどね。
0429426NGNG
なるほど alarm() poll() なんて関数があったんですね 調べて試してみます
ありがとう
0430デフォルトの名無しさんNGNG
つか、帰ってくるとなぜ解る?
0431デフォルトの名無しさんNGNG
初カキコなんですが、ビギナーみたいなこと聞いていいですか?
0432ころNGNG
テルネットのプログラムで愚問いばかりしていたものです。
結局のところいきついたところはRFCでした。やはりRFCを読まずに
なんとかしようと思ったのは馬鹿でした。
はじめにRFCを読めっていってくれた方に感謝いたします。
だいぶ、テルネットのプロトコルについて分かってきました。あとは
トライ&エラーでがんばっていきたいと思います
>431
とりあえずなにが知りたいのですか。愚問いでもなにか、突破口みたいな
ものは開けるかもしれません。
0433デフォルトの名無しさんNGNG
一応優良スレですので、
0434WinsockNGNG
一度 listen開始したソケットのlistenを止めるには
どうしたらよいのでしょうか?
0435デフォルトの名無しさんNGNG
listenを0にすれば?
0436434NGNG
えー?
でも、引数に指定する数は1〜5ってあったよ?
大丈夫なのかなあ?
0437デフォルトの名無しさんNGNG
>>434
close()
0438ころNGNG
テルネットのクライアントできました。送受信ともにokになりました。
割と簡単にできたのでびっくりでしたが。ほとんどwinsockの知識はないんですが
なんとかなるもんなんですね。
0439デフォルトの名無しさんNGNG
WindowsでIRCクライアント作ってるんだけど、思ったより難しいなあ。
一つのチャンネルだけなら問題無いんだけど、二つ以上のチャンネルの処理が
全然分からない・・・。
0440デフォルトの名無しさんNGNG
メールソフトみたいにmail.hoge.comと指定すれば、
サーバに接続して受信するプログラムを作ろうとしましたが、
connect()で指定するのはIPアドレスなので、
ドメイン名からIPアドレスに変換する方法がわかりません。
変換する関数や、アルゴリズムを教えてもらえませんでしょうか?
Windows,UNIXどちらでも結構です。開発言語はC言語です。
よろしくお願いします。
0441デフォルトの名無しさんNGNG
>>440
gethostbyname
0442デフォルトの名無しさんNGNG
>>440
それぐらいは、googleででてきますよ。
0443440NGNG
>>441
gethostbyname
使ってみましたが、HOSTSファイル内での検索しかしていないみたいです。

>>442
ドメイン IPアドレス C言語 プログラム
などで検索してみたのですが、見つかりませんでした。
見落としたのかもしれないので、もう1回調べてみます。
0444441NGNG
>>443
それはリゾルバの設定をしていないから。
あるいはDNS等がまともに動いていないから。

もう少し自分で調べてから書き込もうね。
0445デフォルトの名無しさんNGNG
nslookupのソースを読もう
0446443NGNG
>>444
リゾルバ
この単語、初めて聞きました。
これを元に何とかなりそうです。
ありがとうございました。

>>445
nslookupのソースを読もう
この手もありますね。
googleで検索して、ソースを見てみます。
0447くまたんNGNG
ころ改め、くまたん
自作テルネットクライアントで
ネゴシエーション状況を表示させたいのですが。。。
0448デフォルトの名無しさんNGNG
TCP接続で教えて下さい。
現在、特定のServerのTCP-portに対して接続が出来るかチェックするプログラム
を書いてます。
単にconnect()が成功するかどうかを見るだけなんですが…

この機能自体は簡単に実装できたのですが、問題は相手のServer自体が
完全に落ちている場合に、connect()発行後にタイムアウトするまで
結構な時間がかかりますが、これを短縮させる方法がわかりません。

このタイムアウトするまでの時間を短縮する事は可能なのでしょうか?
可能であれば方法を教えて下さい。宜しくお願いします。
0449448NGNG
sageてどうする>俺
0450デフォルトの名無しさんNGNG
>>448
http://www.kt.rim.or.jp/~ksk/sock-faq/unix-socket-faq-ja-3.html#ss3.5
0451デフォルトの名無しさんNGNG
VCでwinsockの使い方をおしえてください
0452デフォルトの名無しさんNGNG
VCでwinsockの使い方をおしえてください
0453デフォルトの名無しさんNGNG
>>452
何をどう教えればよいのか教えてください
0454448NGNG
>>450
connect前にsignalしかけてalarm()置いたらばっちり期待通りの動作になりました。
回答有難う御座いました。
0455452NGNG
>>453
どんなことでもいーんです
おねがいします
0456デフォルトの名無しさんNGNG
>>455
じゃぁ一つだけ教えてやろう。

「お前にはプログラマとしての適性が全く無い」
0457デフォルトの名無しさんNGNG
>>456
親切だね。ここまで適切なコメントしてあげる人は滅多にいない。
0458デフォルトの名無しさんNGNG
wininet.h って何に使うのですか?
0459デフォルトの名無しさんNGNG
>>458
wininet.hを何に使いたいのですか?
0460458NGNG
afxwin.hって何に使うんですか?
0461458NGNG
ファイヤーワォールを作りたいのですが。
0462デフォルトの名無しさんNGNG
テルネットのオプション設定できるひといますか。
接続した瞬間にログインメッセージがきてしまいます。
ネゴシエーションの状況も受け取りたいのですが
うまくいきません。なんでかな。
0463デフォルトの名無しさんNGNG
SSL(https)でwebサーバ(NES)と通信するクライアントプログラムを作成したいのですが、
WinsockのAPIだけでは無理ですよね?
もしそうだとすると、一体なんのライブラリを使えば可能でしょうか?
ふと世にあるフリーソフトなんか見るとSSLには対応してないことが多く、
あまり参考になるようなソースを得ることができません。
ひょっとしてあまりSSL対応のフリーソフトが無いのはライセンスの問題とかありますか?
やはりIEやNeckoなんかのCOM(?)を利用するしかないのでしょうか。
コンポーネントプログラムってやったことないので・・・。
SSLのハンドシェイクを1から実装するのは現実的ではないと思いまして・・。

回答よろしくお願いします。

#あとWWWクライアントでSSL実装してるソースなんか落ちてたら教えて頂けませんでしょうか。
0464458NGNG
>>460
afxwin.h はMFCがらみじゃなかったっけ?
0465&Hearts;NGNG
2chのIDから、IPを割り出すにはどーすればいーのですか?
0466デフォルトの名無しさんNGNG
>>465
ご自分でお調べなさい
http://www.google.com/
0467♥465♥NGNG
サンクス >>466
0468デフォルトの名無しさんNGNG
>> 463
http://www.openssl.org
0469超初心者NGNG
UNIXで使用しているUDPのポート番号の範囲を調べるにはどうすればよいでしょうか?
0470超初心者NGNG
>>469
ポートスキャンすればいいんでしょうか?
ほんと何も知って無くてすいません
0471デフォルトの名無しさんNGNG
APIをフックして、ファイヤーウォールみたいなものを作る事って可能でしょうか?
0472デフォルトの名無しさんNGNG
>>469
netstat

>>471
可能。つーか何がしたい?
0473471NGNG
>>472
どこかへ勝手にアクセスしているかどうか調べたいのです。
他人の作ったツールは怖くて使えません。
0474デフォルトの名無しさんNGNG
>>473
ログがとれるルータ買えば?
0475デフォルトの名無しさんNGNG
WinInit って WinSockを使わないでインターネットにアクセスしていませんか?
WinInit.dllをデバッガで見ると、WSock32.dll から関数をインポートしていません。
0476デフォルトの名無しさんNGNG
>>475
ほんと?
他のDLLやコンポーネント経由とかじゃなくて?
0477デフォルトの名無しさんNGNG
ほんとだ。 モジュールとしてロードされていない。
0478デフォルトの名無しさんNGNG
selectについて詳しいサイトって無いですか?
0479デフォルトの名無しさんNGNG
>>478
socket, poll, pipe というキーワードと一緒に検索すると
いいかもしれない。
0480デフォルトの名無しさんNGNG
>>478
ありがとうございます。
色々出てきました
0481デフォルトの名無しさんNGNG
windowsのselectって、
openやpipeとかのハンドルも認識する?
0482デフォルトの名無しさんNGNG
>>481
winsockのselectに入れられるのは、winsockで作ったソケットだけだと思う。

WaitForMultipleObjectsのレイヤまで降りれば、
ソケット/ファイル/パイプ/スレッド/プロセス/メッセージキュー/etc.
(ぶっちゃけた話、非同期処理ほぼすべて)
のイベントを待つことができるんだが...winsockとの絡みが分からん。

詳しい奴の登場を待つ。
0483デフォルトの名無しさんNGNG
>>475
plugable protocol handler とかそのへんのドキュメントを
読めば、http(s) や ftp のプロトコルハンドラがTCP/IP を
使っているわけで、wininet はその層については関知していない
ということがわかります。
0484デフォルトの名無しさんNGNG
>>482
Windows NT 系列の Winsock2.0 なら、ソケットも
WaitFor*Objectで待てる。
0485デフォルトの名無しさんNGNG
>>482
CreatePipeで作ったパイプはWaitFor〜が効かない。
CreateNamedPipeにFILE_FLAG_OVERLAPPEDを与えて
作らないと駄目じゃないかな?

>>484
正しいやり方はWSAAsyncSelectでイベントに結びつけるか、
WSARecvでオーバーラップにしてWaitFor〜でしょ。

どちらにしても、WSAAsyncSelect以外はselectでのポーリング
とロジックの作り方が変わるので注意が必要。
0486デフォルトの名無しさんNGNG
VCでネットワークプログラミングを勉強したいのですが
何かいい本、またはホームページはありませんか
あったら教えてください。お願いします
0487デフォルトの名無しさんNGNG
>>486
俺は昔のCマガの特集と、極めるVisualC++で勉強した。
結論:いい本で勉強した方が遙かに吸収が早いです。
0488486NGNG
>>487
そう思うんですが地方に住んでいるのでなかなか本の内容が
わからずに買うのをためらってしまうんです。
書評とかがもっと増えれば安心して買えるんですが...
0489481NGNG
ということは、windowsで単一スレッドコンソールの
チャットクライアントを作るような場合、
selectをタイムアウト付きでポーリングして、
ユーザー入力にはkbhitで判定するのが一番自然でしょうか?
(WaitFor〜レベルまで降りたくないので)
0490デフォルトの名無しさんNGNG
age
0491デフォルトの名無しさんNGNG
sendする時に、selectで待たないで、
連続してsendしていくと何か問題あるでしょうか?
selectの2番めの引数の使い方がわからないです。
recvならメッセージが着るって事で理解できるんですが。
0492475NGNG
>>475
動的にロードしていた。
0493デフォルトの名無しさんNGNG
よくポートが空いていると言いますが、
これは、そのポートがlistenになっているって事ですか?
そして、要求があれば、acceptするのですか?

そして、例えばプリンタポートが空いていたら、
外部からプリンターの操作が可能になるのですか?

良く分からん。
0494デフォルトの名無しさんNGNG
>>491
(sendできない状態ってのを、相手が送信を受け付けて無い状態って前提で話すけど)
sendできない状態でsendしていくと、
ソケットのバッファに溜まっていくんじゃない?
溢れたらエラー返ってくるとか。
(「溢れた場合」ってのがあるのか疑問だけど、恐らく一定サイズで切り上げるんだと思う。)
結局、相手が受信しない限りは、ソケットのsend内部バッファ?に
どんどん溜まっていく筈だから、selectして送信状況を把握していく処理は必要だと思う。

ちなみにこれは推測だから実際の所は知りません。ごめんね。
詳しい人が現れるのを待ちましょう。
0495デフォルトの名無しさんNGNG
>>493
恐らく、何らかのサーバーアプリがそのポートにbindしてなければ、
「ポートが空いている」という事では?
使ってたらbindは失敗すると思う。
0496デフォルトの名無しさんNGNG
オフラインで、ソケットを使ったアプリ間の通信したいのですが、
どうするのでしょうか?
socket関数がINVALID_SOCKETを返すので先に進みません。
0497デフォルトの名無しさんNGNG
localhostでやれば?>496
hosts参照
0498デフォルトの名無しさんNGNG
>>496
INVALID_SOCKETって、socket()が失敗するってこと?ソケット層
のレベルではオンラインもオフラインもないと思うんだけど。
WSAStartup()を呼んでないだけ、なんてオチじゃないよね?(藁

とりあえず、WSAGetLastError()で理由を調べてみましょう。
0499496NGNG
WSAStartup()を忘れていました。
うまく行きそうです。
487さん、498さんありがとうございます。

んー、他のプロセスが一度でもWSAStartup()を呼んでいれば、
エラーにならないのかなぁ。
WSAStartup()が無くてもエラーにならない事があったから…。
0500デフォルトの名無しさんNGNG
>> 493
ソケットとかでいう「ポート」とプリンタポートっていうときの「ポート」は
別物だぜよ。
0501デフォルトの名無しさんNGNG
>>494
sendは1度の呼出しで送信可能状態になるまでブロックする。
そのブロックしている間に何かしたいならば、selectを使用する。
ってこと。
sendでブロックしてもいいならsekectしなくても良い。
0502デフォルトの名無しさんNGNG
afe
0503デフォルトの名無しさんNGNG
まともなの作るつもりならselectでタイムアウト検出は必要だと思われ。
0504デフォルトの名無しさんNGNG
WSAStartup() がエラーを返した時も、
WSACleanup() を呼ぶ必要があるのでしょうか?
以下ヘルプ。

>There must be one WSACleanup call corresponding to every successful
>WSAStartup call to allow third-party DLLs to make use of a Windows
>Sockets DLL on behalf of an application. This means, for example,
>that if an application calls WSAStartup three times, it must call
>WSACleanup three times. The first two calls to WSACleanup do nothing
>except decrement an internal counter; the final WSACleanup call for the
>task does all necessary resource deallocation for the task.
0505デフォルトの名無しさんNGNG
>>499
他のプロセスは関係ない。自分のプロセス内のDLLが初期化した
場合は使える。>>504の記述にあるとおり、DLLが勝手に初期化
しても平気なように、WSAStartupを呼んだ回数分WSACleanupを
呼ばなきゃいけない仕様になっている。

>>504
内部の実装は知らんが、常識的に考えて失敗した場合も内部の
カウンタを増加するように実装する?つまりそゆこと。

#M$は何でWSAStartupを呼ばなきゃいけないように作ったんだ?
0506デフォルトの名無しさんNGNG
M$ わ、というか元の (Win3.1 の頃の) Winsock がライブラリ
レベル (DLL) でのソケット API サポートだったからでわ。
UNIX はカーネルレベル (って表現で良い?) のサポートだから
初期化はいらない。
0507デフォルトの名無しさんNGNG
補足: Win3.1 の頃のしょっぱなは Win 標準で Winsock をサポート
していたわけではなかった (と記憶する)。サードパーティから DLL
形式で Winsock が出ていた。Trumpet Winsock とか、わけ分からず
設定した覚えがある (DNS とか何のことか分からんかった)。途中で
M$ がそれを買ったのかパクッたかして Win 付属の標準ライブラリと
なった。今の Winsock はそのままずるずる引きずってんじゃないの?
(確かに Winsock2 に変わったときに OS レベルでサポートしても
良かったのでは、と思う)
0508505NGNG
そろそろsocketをkernel32.dllのAPIにして欲しいね。
他のファイル関係のAPIと同じように、UNIX風の関数は
Cライブラリに取り込めば使い勝手よくなると思うぞ。
CreateSocket()を_socket()で包むような感じで。

ついでにパイプやコンソールもselect出来るようになれば
嬉しいね。何でCreatePipeのハンドルをpolling出来ない
仕様にしたんだろうね。まったく。
0509デフォルトの名無しさんNGNG
標準入出力モナー>508
select使えなさスギ
0510デフォルトの名無しさんNGNG
__WSAFDIsSetって何に使うのですか?
0511デフォルトの名無しさんNGNG
WinSockを使わないとすると、インターネットへのアクセスはどうなるのでしょうか?
直接デバイスドライバとやり取りするのですか?
でも、これだとハード毎に異なりますよねぇ〜。
WinSockのフックは出来たのですが、検出できないアクセスがあるもので…。
0512デフォルトの名無しさんNGNG
rawソケットを使ってTCPソケットと同じことをやろうとした場合、
パケットの送受信って何を使えばいいのでしょう?
0513デフォルトの名無しさんNGNG
Windowsでソケット使う場合ってBSDスタイルのワーカスレッド形式が良いですか?
0514デフォルトの名無しさんNGNG
test
0515超初心者NGNG
pingのTオプションについて教えてもらえませんか
どうやって指定するのでしょう。マルチキャストがいまいち・・・

またこれを使ってtracerouteの替わりにできるとも聞いたのですが
実際どうなんでしょう。
0516デフォルトの名無しさんNGNG
>>515
そんなあなたに ping -f がオススメです
0517デフォルトの名無しさんNGNG
>>515
Tオプションと言われても実装されている環境によって意味が違うの
では?Win98ではそのようなオプションはありませんでした。

多分「ping -T 値」って指定するのでは?
0518超初心者NGNG
>>517
usage: ping [-QRadfnqrv] [-c count] [-i wait] [-l preload] [-p pattern]
[-P policy] [-s packetsize] [-S src_addr] [-t timeout]
[host | [-L] [-I iface] [-T ttl] mcast-group]
こんな感じの環境です

fオプションはないみたいですね。
0519デフォルトの名無しさんNGNG

ソケット通信ほとんど素人の者です。
ソケット通信で Send メソッドで通信する場合
一度で送るサイズをこうした方が良いとかありますか?
1MBのデータを送る場合、1回の Send で1MB送るのではなく
10KBに分けて100回 Send を行った方が効率的ってことありますか?
(自分で試せ!ってツッコミはイヤ〜ン。)
それとMSDNのサポート技術文書「[SDK32] 送信サイズが小さいと TCP/IP のパフォーマンスが低くなる」ってところにMTUサイズがどうのこうのって書いてありますがこれはどう言うことでしょうか?
1460バイト単位らしいですが普段気に留める必要はあるのでしょうか?
環境はVC++6.0です。
 お・し・え・て
0520デフォルトの名無しさんNGNG
い・や・よ
0521デフォルトの名無しさんNGNG
>>518
 TTLの値はIPパケットの生存時間で0なら破棄されたと思います。
この値の減り方はよく知りませんが、ルータなどを超えると減ったと
思います。
 pingとtracerouteは同じICMPのECHOリクエストとECHO応答を使う
プログラムですが、tracerouteはTTLの値でパケットが破棄される仕
組みを利用していたと思います。詳細はtracerouteのソースを読ん
でください。それに合わせてpingを利用するなら使えそうな感じが
します。
0522超初心者NGNG
結局Tオプションはどのようにアドレスを指定すればいいんでしょう。
224.0.0.1としてみたら何かは表示されましたが
普通のアドレスだとこうなります。
> ping -T 10 アドレス
ping: -I, -L, -T flags cannot be used with unicast destination
0523デフォルトの名無しさんNGNG
>>515
板違い。通信技術板へいきませう。
0524超初心者NGNG
>>523
そうします
0525デフォルトの名無しさんNGNG
WinSock1と
WinSock2って何が違うんですか?
0526デフォルトの名無しさんNGNG
UNIXネットワークプログラミングは基本ですか?
0527デフォルトの名無しさんNGNG
>>526
というかマトモな本がそれしかない
0528デフォルトの名無しさんNGNG
>>519
素人です。
自分は2000バイトずつに分けてます。
1回ずつACKを受け取ってから送信するようにしてます。
正しいかどうかわからないけど、動いてます。
1MBを1回のSendでは無理だと思います。
0529デフォルトの名無しさんNGNG
>>528
サンキュ。
これから本格的なMLに聞いてくる。
とりあえずレスありがと。
0530512NGNG
結局この板にはrawソケットでプログラミングできる人が居ないのね。
0531デフォルトの名無しさんNGNG
>>530
Berkeley Packet Filterでも使えば?
0532512NGNG
>>531
 Berkley Packet Filterをちょっと調べてみたらパケットのスニファー
みたいな用途っぽいですね。やりたいのはconnect()などの制御
とデータパケットの送受信をrawソケットで実現させること。
 環境は書いてませんでしたが、AIXかHP-UX。あるいはLinuxでも
OK。
0533デフォルトの名無しさんNGNG
>>532
LinuxでいいんならTCP実装のソース読めばいいんでねえの?
0534512NGNG
>>533
Linuxカーネルって全くといって良いほどソースを読んだことが無いです
が、rawソケットで実装されてるのですか?なかなか奥の深い助言です
ね。

カーネルソースをみてみましたが、net/ipv4辺り?としかわかりません。
ソースを読むにあたって、システムコールに対応するソースは何処か
解説のあるサイトはご存知でしょうか?
0535デフォルトの名無しさんNGNG
<form method='POST' action="http://aaa/ssss.cgi">
<input type=hidden name="get" value="143242341324">
<input type=submit value="abcd">
</form>
このCGIの出力結果を見るにはどんな文ををサーバーに送れば見ることが出来ますか?
おしえてください
0536デフォルトの名無しさんNGNG
> あるいはLinuxでも OK。

BPFってありました? 相当する機能はあったと思うけど..
0537512NGNG
Berkley Packet Filterをしっかり調べれば問題解決するということ
ですね。詳細を調べてみます。
0538デフォルトの名無しさんNGNG
DirectPlayってルータとか通すときプロコトルがNATでないといけませんよね。
うちのはNATeなのですがヤフメなどは使えます。
で、ポートの役目リストみたいなページで、ヤフメのポートが記述してあったのですが、、
WinSockなど特別な方法を使えばふつーに通信できるのでしょうか?
判りにくくてスミマセン(汗

具体的に言うとマイクロソフトメッセンジャーなどは1:1で会話や通信できるのに
(どこかでサーバ介している??)
DirectPlayを使うと(というよりわたしの技術では)東急ケーブルなどのローカルIPなプロバイダの人とは
ネットワークゲームが出来なかったりするのです。(どうにかNATeにも対応させたいし、、)
回避する方法はないのでしょうか。。
資料などありましたらこのバカにも判りやすく具体的によろしくお願いします
(ここの何処にあるとか。。)
0539デフォルトの名無しさんNGNG
TCP/IPのパケットデータを覗くソフトってあるんでしょうか?
Win2000使ってます。
0540デフォルトの名無しさんNGNG
>>539 PacMon
http://www.layer.co.jp/
0541デフォルトの名無しさんNGNG
フリーウェアならethereal、Analyzerがあります。
メニューなどが英語ですけど十分使えます。
Analyzerの英語(日本語ならベターだけど)ドキュメントが欲しいところ。
0542デフォルトの名無しさんNGNG
>>538
NATって何なのかもう少し理解してから書き込んで下さい
0543デフォルトの名無しさんNGNG
NATの理解がNATらん
0544デフォルトの名無しさんNGNG
>>543
回線で足つってください。
0545デフォルトの名無しさんNGNG
NATく行かん
0546デフォルトの名無しさんNGNG
>>545
回線で足つって氏んで下さい
0547デフォルトの名無しさんNGNG
厨房質問ですいません。
ftp-data 20/tcp
や
netbios-dgm 138/tcp nbdgm
netbios-dgm 138/udp nbdgm
のように実際のセッションがあるときにしか使われないポートが
開いているかどうかを調べるには対応する
ftp 21/tcp
とか
netbios-ssn 139/tcp nbssn
が開いていることで判断すればいいのでしょうか?
それとも上記のデータ送信ポートが開いていることを
セッションを作らずに直接調べる方法があるのでしょうか?
0548sNGNG
おまえらたいどがNATらん.
0549デフォルトの名無しさんNGNG
厨房警報NATるで
0550デフォルトの名無しさんNGNG
怪傑ズNAT
0551デフォルトの名無しさんNGNG
(ソケット使うならTCP/IPって普通に勉強するもんじゃなかったのか。。。
0552デフォルトの名無しさんNGNG
>>545
激しくワラタ
0553デフォルトの名無しさんNGNG
>>551
ソケット使う「だけ」ならそれほど勉強する必要はない。
0554デフォルトの名無しさんNGNG
1、CGIでURLエンコードするときのデフォルトの文字コードは決まってるんでしょうか?
2、SJISのエンコードは %XX で言いと思うんですが、他の文字コードのエンコードは
  どうやってやるのでしょうか?
UNICODEとかの場合は %XXXX で良いのでしょうか?
0555デフォルトの名無しさんNGNG
>>554

%xxは文字コードのエンコードじゃなくてバイナリのエンコードだから
S-JISだろうとEUCだろうとunicodeだろうと全部%xxの組み合わせダヨ。

デフォルトの文字コードはどうなんだろうね。発信元依存じゃないのかな?
0556デフォルトの名無しさんNGNG
>>554
URL-Encode は単にエンコード方式を規定しているだけで、charset の規定はない。
0557554NGNG
555さん556さん、ありがとうございます。
わかりましたです。
0558デフォルトの名無しさんNGNG
このスレ、レベル低いね。
0559デフォルトの名無しさんNGNG
甘NATう
0560七夕NGNG
願いがかNATいいね
0561デフォルトの名無しさんNGNG
NATって大豆を水につけて煮たものに納豆菌をつけてワラの中に入れて発酵させたものでしょ?
0562デフォルトの名無しさんNGNG
そら納豆や
0563デフォルトの名無しさんNGNG
NATゃん
0564デフォルトの名無しさんNGNG
age
0565デフォルトの名無しさんNGNG
おもしろかった
0566デフォルトの名無しさんNGNG
Windowsで、WinInet使わずにWinSockでHTTPするのはバカですか?
0567デフォルトの名無しさんNGNG
・WinInetのバージョンに左右されたくない
・IEが入ってなくても使えるようにしたい
等の理由があれば馬鹿じゃないだろ
0568デフォルトの名無しさんNGNG
わたしもWinsock派だよん
0569デフォルトの名無しさんNGNG
>>567
なるほど、じゃあ、そういうことにしておきます。

プロトコル調べて、自力で動かすのが楽しいからやってただけなんですが(笑)
0570デフォルトの名無しさんNGNG
すにっふぁしたあい('-`)
0571デフォルトの名無しさんNGNG
proxy とか使ってる人がいるかもしれないから、
WinInet 使えるんなら使っておいたほうが良いと思う。
0572デフォルトの名無しさんNGNG
winsock2使えアホボケ
0573デフォルトの名無しさんNGNG
>>571
proxyも自分でつないじゃ駄目?
0574デフォルトの名無しさんNGNG
>>573
IEの設定を使いたいって事でしょ
自力で探ると結構面倒だし
0575デフォルトの名無しさんNGNG
JavaScriptで自動構成とかされてると自力じゃどうやっても取れない。
厳密にはJavaScriptエンジンまで作れば取れるだろうけどそこまでする
ならWinInet使うぞ。
WinInetで困ったのがIE5あたりで追加されたフラグをうかつに立ててると
IE3環境でERROR_INVALID_PARAMETERになること
0576デフォルトの名無しさんNGNG
あと https がタダで使えるのも美味しいぞ>WinInet
0577デフォルトの名無しさんNGNG
Winsockのselectは効率割悪いってよ。>使ってる人
詳しくはアスキーのマルチスレッドプログラミングって本参照
0578デフォルトの名無しさんNGNG
IriaやらRegetのレジューム機能
ってどうやって実現されてるの?
0579デフォルトの名無しさんNGNG
>>577
NTならIO完了ポートを使うのが常識。
0580デフォルトの名無しさんNGNG
>>578
要求ヘッダで「ここの位置からのデータを頂戴」と書いてサーバーに伝えてるだけです。
詳しくはIriaやRegetのログ出力を見れ。
0581デフォルトの名無しさんNGNG
>>578
その手ことが知りたいならRFC嫁やゴラァ
0582デフォルトの名無しさんNGNG
winsockレベルでproxy経由でアクセスってどうやるんですか?
0583デフォルトの名無しさんNGNG
GET http://www.2ch.net/ HTTP/1.0
0584デフォルトの名無しさんNGNG
HTTP1.0/1.1のRFC読めって?
0585デフォルトの名無しさんNGNG
>>582
おいおい(ワラ
0586デフォルトの名無しさんNGNG
プロキシサーバに接続した後、>>583 みたいに URI 部分に
スキームやホスト名まで指定してやれば可能。プロキシが
対応していれば ftp:// ってのも HTML 形式で返してくれるぞ。
あとは Cache-Control とかだな。
0587デフォルトの名無しさんNGNG
>>585はなんでワラってるの?
0588デフォルトの名無しさんNGNG
>>587
winsock使ってる時点で、自力で串とお話する以外ないからだろ?
0589デフォルトの名無しさんNGNG
?
そのやりかたを教えてくれって言ってるんじゃないの?>588
0590デフォルトの名無しさんNGNG
>>589
winsock使ってる時点で、プロキシ経由しようが
しまいがあんまり変わんないんだよ。
0591デフォルトの名無しさんNGNG
>>589
ということで、それを聞くということは、
プロキシ経由しないやり方もよく分かってないんじゃないかと
思うわけさ(ワラ
0592デフォルトの名無しさんNGNG
で、>>589と>>591はなんでワラってるの?
0593デフォルトの名無しさんNGNG
Raw Socket反対!!!!
IPヘッダー書き換える
馬鹿なクラッカーが増えるだけ!!!
0594デフォルトの名無しさんNGNG
包丁反対!!!!
人を刺す
馬鹿な犯罪者が増えるだけ!!!
0595デフォルトの名無しさんNGNG
Raw SocketないとPingもできないから困る
0596デフォルトの名無しさんNGNG
HTTPわかってない奴は無理にSocketでHTTPを実装しようとするな。
RFC読めとまではいわないからせめて本でも買って仕組みを勉強しろ!
0597デフォルトの名無しさんNGNG
HTTP1.1のRFCは日本語訳もあるし、本など不要
それすら読まない奴は、公害垂れ流しになるから、
インターネット上にパケットをとばすプログラムは組むな
0598デフォルトの名無しさんNGNG
>>595
Windowsに関しては生ソケットを使わなくても、PINGはとばせる
0599デフォルトの名無しさんNGNG
>>598
Windowsに関してはっていってもどうせWinsock2のRawソケットじゃたいしたことできないから関係ないな。
0600デフォルトの名無しさんNGNG
ソケットの持ってるバッファのサイズって知ることはできますか?
また、変更することはできますか?
0601デフォルトの名無しさんNGNG
>>600
getsockopt
0602デフォルトの名無しさんNGNG
>>594
料理できねーよ。
0603デフォルトの名無しさんNGNG
>>599
たいしたことできないって何が?
0604デフォルトの名無しさんNGNG
Windows 上で現在の DNS サーバー名を取得するにはどうすれば良いのでしょうか?

うちのマシンだと HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\NameServer も
GetComputerNameEx(ComputerNameDnsDomain,lpBuffer,&nSize) もヌル文字列しか返らなくて役に立ちません
0605デフォルトの名無しさんNGNG
ヌル文字列しか帰らないのは単にDNSサーバーが本当に設定されてない
だけでないかい。
ipconfigでは表示されるの?
0606デフォルトの名無しさんNGNG
うちはルータ通してるので、DhcpNameServer
0607デフォルトの名無しさんNGNG
>>606
どんな環境だろうとルータを通らないとインターネットは使えないぞ
0608デフォルトの名無しさんNGNG
ウェブオブジェクトってなんですか?
0609デフォルトの名無しさんNGNG
>>605
DNS引けなきゃ2chにも来れんと思われ
0610デフォルトの名無しさんNGNG
>>609
ダイヤルアップのときしかDNSサーバが設定されてないとか
0611デフォルトの名無しさんNGNG
IP直打ちで来れるはず。
0612デフォルトの名無しさんNGNG
Windows2000のソケットって同時に何個まで開けるのですか?
240前後のような気がするのですがどうでしょうか?
0613デフォルトの名無しさんNGNG
>>612
ここで聞くよりテストプログラムをちょっと作って調べた方が早い
なのに何故いちいち他人に聞くんだ?
0614デフォルトの名無しさんNGNG
>>612
ここで聞くよりテストプログラムをちょっと作って調べた方が早い
なのに何故いちいち他人に聞くんだ?
0615デフォルトの名無しさんNGNG
>>613 >>614
なんでそんなに簡単だったら教えてあげないの?
それに、自分で作るより、WebでWinsock FAQを検索したほうが早いよ。
613は、まだ作ってるのか。ほいこれ。
http://www.cyberport.com/~tangent/programming/winsock/examples/get-sockets.html
ここのFAQは有名だよ。
0616デフォルトの名無しさんNGNG
>>615
簡単なことすら自分でしようとしない奴に教えても意味がないだろう
それからそのアドレスのサンプルは見れば分かるはずだが
「何個まで開ける」を計測しているのではなく
「何個まで作れる」を計測しているプログラム
FAQは>>615みたいに内容を理解しない奴が見ても無駄
0617デフォルトの名無しさんNGNG
ああ、うぜえな。
教えたくないやつはレス付けるなよ。
なんか、学校の教師みたいだな。分からない事聞くと
すぐ辞書引けみたいなやつ。
どう考えたって、教えてもらった方が早くて効率的。
自分で調べろっていう気持ちもわかるけど、答えてくれるやつが居るなら
聞いたほうが絶対に良い。
0618デフォルトの名無しさんNGNG
>>617
内容によるだろ。>>612は明らかに「自分でやれ」だぞ
0619デフォルトの名無しさんNGNG
>自分で調べろっていう気持ちもわかるけど、答えてくれるやつが居るなら
>聞いたほうが絶対に良い。
だから、答えてくれる奴なんていないことを、いい加減理解しろ
答えてくれる奴がいないから、「聞いた方が絶対に良い」というのは成り立たないんだよ
見ず知らずの他人に聞くより自分で実験した方がよっぽど早い
質問してから10時間以上経過しているが、これだけあればとっくに試し終わっているだろう

>分からない事聞くと すぐ辞書引けみたいなやつ。
そんな当たり前のことを、いちいち言われて生きてきたのか?
そうとう過保護に育ってきたんだろうな
0620デフォルトの名無しさんNGNG
>>618
俺は「1+1は何ですか?」って聞かれても教えてやるよ。
英語勉強してて、分からない単語を一々全部辞書ひく?
時間の無駄だね。始めから訳が書いてある単語帳で覚えるでしょ、普通。

まあ、言ってる事は理解できるんだけど。だから、教えることを強要しないし。
アホらしい質問は無視すりゃOK。
答えてくれる人が居たらラッキーって事で。
0621デフォルトの名無しさんNGNG
今ブラウザのような初歩的なソフトを作ろうとしている初心者です。
そこでHTTPサーバとのやりとりの仕方とかコマンドに
ついてブラウザ自身はどうしているのでしょうか。
ホストにアクセスしてコマンドを送信する方法について書かれた
HPありませんでしょうか、お願いします。
0622デフォルトの名無しさんNGNG
>>619
だからさー、答える気が無いなら書き込むなよ。ウザイから。
無視してろって。お前見たいのが一番の害虫だよ。
結局、自分のレベルに合って自分に有益な情報じゃないと興味無いんでしょ?
誰もが君みたいにハイレベルじゃないんだから。
0623デフォルトの名無しさんNGNG
>>622
お前が答えれば良いだろう
答える気がないなら書き込まないんじゃないのか?
0624デフォルトの名無しさんNGNG
>>621
http://RFC.net/rfc2616.html
0625デフォルトの名無しさんNGNG
>俺は「1+1は何ですか?」って聞かれても教えてやるよ。
じゃあ、教えて
1+1は何ですか?
0626デフォルトの名無しさんNGNG
>>623
結局その程度の反論しかできないのか。
知らないものをどうやって答えるんだ?
まあ、書き込むなという点には同意。
俺のカキコも相当ウザイはず。

だけどな、このスレでよく見かけるけど、ちょっと初心者級の質問すると
「このスレもレベル下がったね」とかいう書きこみは余計なお世話なんだよ。
一部のレベルが高い奴らだけの為に存在してるスレじゃないんだから。
分かるやつから見ればくだらない事なんだろうけど、質問してる側から見れば
そうとは限らない。
それに俺だって君の言う事は十分理解してるよ。
そもそもこんなレベルの質問してる時点でプログラマとしての適性が限りなく
0に近いわけだし。検索能力も無いんだから。
でも、別にここに書きこんでるやつが全員職業プログラマになるとは限らないし
まだ中学生程度のやつの書き込みかもしれない。
だから俺は自分が知ってる事はレスするよ。
もし質問してるやつが救いようの無い低レベル職業プログラマだったとしても
ここで俺達が叩かなくてもいずれ消えていくでしょ。
0627デフォルトの名無しさんNGNG
>>625
2です。
0628デフォルトの名無しさんNGNG
>>626
だからお前が答えろって
偽善は口先だけ?
0629デフォルトの名無しさんNGNG
>>627
それでは答えになっていません
もう一度聞きます、「1+1は何ですか?」
0630デフォルトの名無しさんNGNG
>>628
もしかして日本語が理解できてない人?
0631デフォルトの名無しさんNGNG
>>629
あー、なんでしょうね。
足し算の数式?その数式の答えが2になることはわかるんだけど
それ以上の事はわからないや。ごめんね。
0632デフォルトの名無しさんNGNG
>>628
>知らないものをどうやって答えるんだ?
ってかいてありますが、何か?
お前、見てると誰にでもただ噛み付きたいだけなんだね。
確かにウザイわ(w
0633デフォルトの名無しさんNGNG
Q 「1+1は何ですか?」
A 「ハァ?」
ってならないか普通
俺は答えられないゾ
0634デフォルトの名無しさんNGNG
>>632
調べて答えれば良いのでは?
そこまで言う人なんだから、他人のために労力は惜しまないでしょう。
偽善じゃなければの話だけど。
0635デフォルトの名無しさんNGNG
無意味に荒らすなよ。
0636デフォルトの名無しさんNGNG
>>624
ありがとう
0637デフォルトの名無しさんNGNG
>>634
偽善も何も、誰も答えるなんて書いてないじゃん?
答えられないなら無視してろってのが主張してることだと思うが。
さっきから偽善って使ってるけど、よほど偽善にしたいんだね(w
0638デフォルトの名無しさんNGNG
>>633
(ップ
それがお前の普通か。
普通ね。
0639デフォルトの名無しさんNGNG
>>637
答えられないなら書くなよ(藁
0640デフォルトの名無しさんNGNG
>>638
あなた様のお答えはいかに?
0641617NGNG
おいおい荒れてるね。
どう考えても俺のカキコが原因だ。ごめんね。
俺も自分の言ってることに矛盾してしつこく書き込んでるのが悪いよ。
本当にすみません。

>>634
んー、さすがに知らない事を答えるほどの優しさは持ち合わせてないです。
すんません。まあ、でかい口きいてるし叩かれても当然ですが。
0642デフォルトの名無しさんNGNG
なんか誰にでも噛み付きたい厨房が一人で頑張ってるなあ。
夏だしね。
0643デフォルトの名無しさんNGNG
>>641
謝るな、自分の主張は戦争になっても貫き通せ
0644デフォルトの名無しさんNGNG
>>639
全くその通りだ。だから>>613みたいな馬鹿が減らないんだよね。
答えないならレスするなよな(w
0645デフォルトの名無しさんNGNG
>>642
おう、お前もがんばるな
暑いからな、体こわすなよ
0646617NGNG
>>643
いや、自分の主張はそのままですよ。
答える気が無いなら、無視してれば良いんじゃない?って話です。
ただ、このスレを荒らしてしまった事に対して謝ってるのです。
とりあえず、これ以上荒らしたくないのでsageで。
0647デフォルトの名無しさんNGNG
折角の質問スレなのに荒らすなよ。
0648夏厨祭り始まりNGNG
613 名前:デフォルトの名無しさん 投稿日:2001/07/27(金) 08:53
>>612
ここで聞くよりテストプログラムをちょっと作って調べた方が早い
なのに何故いちいち他人に聞くんだ?

616 名前:デフォルトの名無しさん 投稿日:2001/07/27(金) 11:26
>>615
簡単なことすら自分でしようとしない奴に教えても意味がないだろう
それからそのアドレスのサンプルは見れば分かるはずだが
「何個まで開ける」を計測しているのではなく
「何個まで作れる」を計測しているプログラム
FAQは>>615みたいに内容を理解しない奴が見ても無駄

619 名前:デフォルトの名無しさん 投稿日:2001/07/27(金) 13:53
>自分で調べろっていう気持ちもわかるけど、答えてくれるやつが居るなら
>聞いたほうが絶対に良い。
だから、答えてくれる奴なんていないことを、いい加減理解しろ
答えてくれる奴がいないから、「聞いた方が絶対に良い」というのは成り立たないんだよ
見ず知らずの他人に聞くより自分で実験した方がよっぽど早い
質問してから10時間以上経過しているが、これだけあればとっくに試し終わっているだろう

>分からない事聞くと すぐ辞書引けみたいなやつ。
そんな当たり前のことを、いちいち言われて生きてきたのか?
そうとう過保護に育ってきたんだろうな

623 名前:デフォルトの名無しさん 投稿日:2001/07/27(金) 14:13
>>622
お前が答えれば良いだろう
答える気がないなら書き込まないんじゃないのか?

625 名前:デフォルトの名無しさん 投稿日:2001/07/27(金) 14:18
>俺は「1+1は何ですか?」って聞かれても教えてやるよ。
じゃあ、教えて
1+1は何ですか?

628 名前:デフォルトの名無しさん 投稿日:2001/07/27(金) 14:27
>>626
だからお前が答えろって
偽善は口先だけ?

629 名前:デフォルトの名無しさん 投稿日:2001/07/27(金) 14:29
>>627
それでは答えになっていません
もう一度聞きます、「1+1は何ですか?」

633 名前:デフォルトの名無しさん 投稿日:2001/07/27(金) 14:36
Q 「1+1は何ですか?」
A 「ハァ?」
ってならないか普通
俺は答えられないゾ
0649デフォルトの名無しさんNGNG
>>647
ここは
>主にソケットに関してのFAQ
だから質問スレじゃないよ
FAQとQ&Aの違いは分かるよね?
0650デフォルトの名無しさんNGNG
       夏厨祭りだワッショイ!!
     \\  夏厨祭りだワッショイ!! //
 +   + \\ 夏厨祭りだワッショイ!!/+
                            +
.   +   /■\  /■\  /■\  +
      ( ´∀`∩(´∀`∩)( ´ー`)
 +  (( (つ   ノ(つ  丿(つ  つ ))  +
       ヽ  ( ノ ( ヽノ  ) ) )
       (_)し' し(_) (_)_)
0651デフォルトの名無しさんNGNG
わっしょい
0652デフォルトの名無しさんNGNG
ソケットの接続最大数は、65535までのポートを全て食い尽くすまで
自動でポート番号を決定する場合は1000〜5000のポートを食い尽くすまで
以上、わっしょい
0653デフォルトの名無しさんNGNG
RAD系ツールなどで(ソケットコントロール)それやると
10個めくらいで死んじゃいマス
わっしょい
0654デフォルトの名無しさんNGNG
答えが書き込まれた瞬間にどんどん下がっていくな
わっしょい
0655デフォルトの名無しさんNGNG
そのそもそんなこと聞いて何をするつもりだったんだ?
わっしょい
0656612NGNG
>そのそもそんなこと聞いて何をするつもりだったんだ?
ネットスパイダーみたいなものを作ろうと思ったのですが、
マルチスレッドにして、可能なだけソケット開いてHTTPすれば
早くなるかなと思った次第です。
0657デフォルトの名無しさんNGNG
ネットスパイダーってなに?
0658612NGNG
HTMLのLINKタグを辿ってネットを巡回するツールです。
0659デフォルトの名無しさんNGNG
ホスト側のプログラムで、
bind()の2番目の引数のsockaddr_inを、
sin_addr.s_addr = INADDR_ANY;
って書いてる本があるんですが、これってどうなんでしょう?

FAQにはホストのIPアドレスって書いてあるんですけど…
0660デフォルトの名無しさんNGNG
INADDR_ANYはどこからの接続でも受け付けるという意味です。
便乗で質問ですが、あるIPアドレスの範囲からの接続だけを受け付ける
ように指定することはできますか?
0661デフォルトの名無しさんNGNG
>>660
addr/maskのようなアクセス制御は出来ませんが、bind()に渡すアドレスに、
インタフェースのアドレスを指定すれば、そのインタフェースを経由した接続
要求のみを受け付けるようにする事は可能です。

winsockの場合は、WSAAcceptにコールバックを渡して、実際にaccept動作を
する前にフィルタさせるような事も出来るみたいです。こちらの方法は試した
事がないので、実際に出来るかどうかは知りません。
0662デフォルトの名無しさんNGNG
東風荘の通信を監視して、自分がなにをツモッたかなどを
知るにはどうすればいいの?
0663デフォルトの名無しさんNGNG
自分のつもなら普通にやっててもわかるがな
0664デフォルトの名無しさんNGNG
WinMX のプロトコルの詳細を知るのに良いページとかありませんか?
0665664NGNG
調べてみたらポートの 1025 が空いてたな、
でも、これかどうか分からないしな…
0666デフォルトの名無しさんNGNG
http://google.yahoo.co.jp/bin/query?p=WinMX+%a1%a1%a5%d7%a5%ed%a5%c8%a5%b3%a5%eb&hc=0&hs=0
0667デフォルトの名無しさんNGNG
http://homepage2.nifty.com/katuya/index.html
ネットワークRPGの作り方がのってる。
0668デフォルトの名無しさんNGNG
超初心者でもわかるFTPプログラム(C/S両方)のソースと解説のある
サイト、もしくは本を誰か教えてください!!できればUNIX系で
0669デフォルトの名無しさんNGNG
>>660
>INADDR_ANYはどこからの接続でも受け付けるという意味です。

これだと誤解を生みかねない説明なので補足させてちょ。
『UNIXネットワークプログラミング第2版 vol.1』 pp.13 で、

「(第2引数の)IP アドレスには、サーバホストが複数の
 インターフェイスを持っていた場合に、どのインターフェイスに
 あてたクライアントからのコネクションでも受け付けることを意味する
 INADDR_ANY を指定する」

とあるように、「どこからの接続でも」っていうのは、
「サーバのインターフェイスのどこからでも」ってことであって、
「どのクライアントからの接続でも」って意味ではないよ。
bind の意味を考えれば当たり前だけど、一応補足しておくね。
0670664NGNG
>> 666 ありがと、

ところで、WPNPの機能がNapchanに取り入れられるなんてことは
ないのか、という疑問が湧いてくるかもしれないが、これは難しい
だろう。というのは、WPNPの方はオープンになっていないからで
ある。
Napchanに限らず、NapsterサーバーやOpenNapにつなぐNapster
クライアントソフトがあんなにもたくさん開発されたのは、オー
プンソースという形で公開されているOpanNapとその仕様のおか
げである。MorpheusやWPNPのように、オープンになっていないと、
いくらWPNPのキャッシュサーバーのIPアドレス、ポートが公開さ
れていたとしても、その仕様がわかってない限り、WPNPを利用
するクライアントソフトを使うのは難しいだろう。
ただ、もともとNapsterにしたところでオープンにしていたわけ
ではなく、ハッカーたちがNapsterサーバーにアクセスして実験を
繰り返してOpenNapという形で仕様をオープンにしたのだから、
同じことがWPNPに起こったとしても不思議ではない。


↑コピペなんだけど、、、

どうも仕様は公開されてないみたいです
パケットキャプチャするしか無いですか(-_-;
0671デフォルトの名無しさんNGNG
Windows98,MX系でNICに来るパケットを監視するにはどうしたらよいのでしょうか?

WinSockで出来るのか。(出来ないっぽい)
ドライバを作らないとダメなのか。(よく知らない)
特殊なAPIがあるのか(探したけどそれっぽいのがない)

サパーリ分からない状態です。
定石やヒントだけでもいいので、情報をお願いします。
0672名無しさんNGNG
Windows用のtcpdumpがwindumpって名前で出てるみたいよ。
0673名無しさんNGNG
YahooのWEBサーバーにコネクション張って
GET ***** HTTP/1.0..........ってコマンド送っても
↓までしか返してくれないんだけど、どうして?

HTTP/1.0 200 OK
Date: Fri, 10 Aug 2001 11:19:39 GMT
Content-type: text/html;charset=euc-jp
Expires: Thu, 05 Jan 1995 22:00:00 GMT
Pragma: no-cache
Cache-Control: private
Set-Cookie: B=7qk8vbgtn7gqb&b=2; expires=Thu, 15 Apr 2010 20:00:00 GMT; path=/; domain=.yahoo.co.jp
0674673NGNG
要するに
Content-Lengthとhtmlデータを返してくれない。
なぜでしょうか?
0675671NGNG
>>672
情報ありがとうございます。
早速検索かけてみました。
ソースもあったので中を見たところ、どうもドライバを作って入れてるみたいですね。
(まだちょっと見ただけですが)

やっぱりドライバからやらないと出来ないのかな?
ちょっと大変(^^;)

取り合えずソースを眺めてみます。(asmファイルもあってちょっとくじけそうですが)
0676デフォルトの名無しさんNGNG
>>673
ちゃんとバッファが空になるまで読んだ?
0677673NGNG
>>676
読んでなかったよ。悪かったな。
0678673NGNG
>>677
偽者!
でも、その通りでした。Content-Length返さないのね。失礼。
0679デフォルトの名無しさんNGNG
すいません、便乗質問なんですが、>>673 と同じように
いろんなサーバに接続してデータを受信してみたんですけど、
Content-Length を返さないところが結構ありました。

結局 Content-Length は必須じゃないんですか?
0680デフォルトの名無しさんNGNG
>>679
HTTP1.0ではコネクションが切れるまでがコンテンツとなっている。(←たぶん)
内容が固定でないもの(例:掲示板cgi)はほとんどがそう。困ったもんだ。
HTTP1.1では対策が講じられているので、必ずサイズが分かる。
よってコネクションの切断の方法によらず転送の成否が分かる。
ただしサーバーが1.1である必要あり。
まあいまどき1.0なサーバーはないと思われ。
0681デフォルトの名無しさんNGNG
0.9って仕様にはあったよね・・・
たしかGETのみ・・・
0682デフォルトの名無しさんNGNG
>>680 chunked message か?
Netscape Proxy Server とか chunked はずしちゃうよ。もちろん
Content-Length も無しで。それ以前に HTTP/1.1 だからといって
必ず chunked や Content-Length が付いている保証はない。

>>681 GET のみ、レスポンスコード&ヘッダなしでいきなりコンテ
ンツ返信ってやつだな。自作の Web 巡回ツールテストしてて 0.9
レスポンスにぶち当たってこけたことがある。
0683680NGNG
>>682
まじで?
サイズ保証したい場合は自分でまた何かフィールドつけることになるのか・・・
アホや・・・
0684デフォルトの名無しさんNGNG
たしか2種類あるよ>サイズ取得
0685679NGNG
どうも、有難うございます。

コネクションが切れるまでがコンテンツ、だったら
データの終りまで行って切れたのか、それともエラーで切れたかの
区別が出来ないんじゃないですかね…

今 RFC を読んでるんですけど Chunked Message 出てます。
Content-Length は HTTP/1.0 の互換性のためで、
Chunked で送る場合は Chunked を優先して、サーバは Content-
Length は送るな、と書いてありました。
(↑英語正しく読めた自信無い、間違ってるかも)

chunk だと read しっぱなしじゃダメで、データを受信
するのにそれなりの仕組みが必要みたいですね…
0686682NGNG
>>685 手前味噌だがオイラの和訳ページ使ってくれ。

http://www.geocities.co.jp/SiliconValley-PaloAlto/5694/rfc/rfc2068-ja.html

データの整合性を保証するなら長さだけじゃなく Content-MD5
までやってくれや。chunked message には「フッタ」もあり
だから (RFC2616 で修正されたかな?) そこらへんの実装も
難しいぞ。IE のコントロール使ってるとかアプレットとか
なら気にしなくても良いが。
0687685NGNG
>>686
ありがとう〜
英文印刷して読んでやろうかと思っていたところでした、
ホント助かります。
0688デフォルトの名無しさんNGNG
>>683
RFCにはサイズを(Content-Lengthかchunked encodingで)「付けなけれ
ばならない(MUST)」って書かれてるんだけどね(さもないとPersistent
Connectionのとき切れ目が分からない)。
現実はそんなに甘くないということで。
0689デフォルトの名無しさんNGNG
SOCKSV4/V5に対応したクライアントを作りたいのですが、
情報が全く手に入りません。
何処かに良いサンプル落ちてませんかね。。
0690692NGNG
>>688
を、persistent connection の時はデータ長を明示的に渡さな
ければならないということを言い忘れてた。まぁどのみちサーバ
側が persistent connection を拒否して長さ省略で返す場合
もあるんだけどね。
0691デフォルトの名無しさんNGNG
仕様上はmustだってことでいいの?
0692デフォルトの名無しさんNGNG
サーバクライアントタイプのネットゲーを作ったとして、
それを24時間だれでも遊べるようにしたいのですが。

自宅のPCにサーバプログラムを放り込んで、
24時間ネットにつなげっぱなしにすれば実現できますか。

大手のサーバのように、24時間信頼性の高い
(ちょくちょく切断されない)サーバを個人で運営するには
どうすれば良いのですか。
0693デフォルトの名無しさんNGNG
通信技術板で聞いた方がいい答えが期待できると思うよ
それと回線は何なの?
0694692NGNG
いまADSLで接続してます。
外部から電話がかかってくると切断されますが…
0695682NGNG
>>691 RFC 2068 か 2616 の "4.4 Message Length" 読んでみ。
message-body 長の決定方法に "By the server closing
the connection." って書いてあるから (RFC 2616 は
transfer-length になってる; 当然か)。Content-Length もしくは
Transfer-Encoding: chunked のどちらかを使わなければならない
という MUST 要求はなかった。
0696デフォルトの名無しさんNGNG
>>694
それは保安器交換で直ると思われ
http://salami.2ch.net/test/read.cgi?bbs=isp&key=995877420
スレ違いなのでsage
0697デフォルトの名無しさんNGNG
http://www2.odn.ne.jp/~aaj02540/img/P000172F.jpg
こういうネットワークエラーがでるんですけど、
どなたかアドバイスお願い致します。
0698デフォルトの名無しさんNGNG
>>697
(・∀・)チンコ!!
0699デフォルトの名無しさんNGNG
エロサイトばっかみてんじゃねーぞ、ゴルァ!って意味です。
0700デフォルトの名無しさんNGNG
700!
0701デフォルトの名無しさんNGNG
>>697
精神的ブラクラにつき開くことなかれ
0702デフォルトの名無しさんNGNG
>>695
ガイーン(T_T)
データ転送をHTTPで済まそうと思ったけど甘かったかな・・・
データ本体をパーズせずに転送エラーをチェックしたかったんだけど・・・
ご教授ありがとうございます。
0703デフォルトの名無しさんNGNG
ここの日記の 8月23日 には HTTP がらみの話が載っている。
ttp://www.geocities.co.jp/SiliconValley-Oakland/1680/memo0008.html
0704デフォルトの名無しさんNGNG
>>702 Content-MD5 を使え。
0705デフォルトの名無しさんNGNG
>>704
調べてみます。これってサーバのCPU食いませんか?なんとなく心配。
0706デフォルトの名無しさんNGNG
ソケットとMQの長所、短所は?
0707デフォルトの名無しさんNGNG
MQってなに?
0708デフォルトの名無しさんNGNG
Javaでメール送信プログラムを組んでいるのですが、
メールがうまく送信できずに悩んでいます。
やっていることは、DNSに問い合わせて、MXレコードを引いて
直接相手側のSMTPにメールを送っています。
エラーの内容は、

>501 Invalid domain name

と出るのですが、なにか対処法ご存知の方いらっしゃいますか?
0709デフォルトの名無しさんNGNG
クライアントがポートを7000に設定して接続したら、
サーバーは、ポート7001と返してきたが、どうして?
クライアントもサーバも同じ7000でいいのでは?
0710デフォルトの名無しさんNGNG
TCPの話?
0711デフォルトの名無しさんNGNG
>>708

相手SMTPサーバにあなたの側は、どう名乗っているかがちときになる。
0712チェックサムNGNG
生ソケットを作ってUDPでパケットを送っているんですが少し疑問が。
IPヘッダーのチェックサムなんですが、適当な数字(2とか3)を入れ
てもパケットが送信出来てしまいます。何でエラーが起きないんでしょうか?
0713極めて不確かNGNG
分からないけど、こんな感じじゃないかなぁ

1. ドライバが勝手に(親切にも)直してくれる。
2. 実はいつでもパケットは送信できる。受け取ったホストは
チェックサムを計算して、壊れたパケットだと見なして蹴る。

くだらん邪推書き込んでスマソ。どなたか詳しい方居りませぬか?
0714デフォルトの名無しさんNGNG
>>712
UDPにエラーを返す規定はないからエラーなどおきるわけがない。
もし、そのパケットの送信に対して相手が何らかの応答をしてきたとするならドライバが勝手に直したのだろうし
応答が帰ってこないのなら相手側が壊れたパケットだとして破棄したんだろう。
0715712NGNG
>>714
>UDPにエラーを返す規定はないからエラーなどおきるわけがない。
そうだったんですか、勝手にチェックサムエラーを期待していました。
ありがとうございました。
0716デフォルトの名無しさんNGNG
Javaでネットワークプログラミングする時
BufferedInputStreamは
どういう風に使えばいいのでしょうか?
0717デフォルトの名無しさんNGNG
JavaでDNSサーバからMXレコードを引くにはどうしたらいいのでしょう?
簡単だろうとタカを括っていたのですが、予想外に苦戦してます。

いまのところnslookupコマンドを外部呼出しして結果をファイルにリダイレクトして、そこから読み込むという方法をとっているのですが、やはり自プログラムで直接引くようにしたいのです。

サンプル等も探したのですが、見当たりません。
なにか情報があったら教えてくださいませ
0718717NGNG
と思ったら、ちょうと知ってそうなお方がそこに・・・!

>>708
MXレコードはどうやって引いているのですか?
さっぱりわからなくて、困っています。やはり自分でソケットプログラムを
書いてDNSからのデータを解析しないといけないのでしょうか?
0719708NGNG
>>711
>相手SMTPサーバにあなたの側は、どう名乗っているかがちときになる。
それって、HELOコマンドのときのことですか?
HEROコマンドに対するレスポンスでエラーが出ています。
HEROコマンドの引数に、MIMEエンコードした文字列を入れちゃ駄目ですか?

>>718
dnsjavaというのを使ってます。
http://xbill.org/dnsjava/
0720デフォルトの名無しさんNGNG
メールサーバーの送信部分をエミュレート(?)したいのですが、
Return-Path、Received、Message-Idなどのヘッダー(エンベローブ)って
普通にDATAコマンドの後に記述しても駄目なんでしょうか?
だれか教えてぷりーず。
0721 NGNG
どなたか、Winsockでタイムアウトの時間を設定する方法を
教えてくださいませんか。
0722デフォルトの名無しさんNGNG
>721
コネクション切断検知のタイムアウトなら
レジストリいじらないと
だめだったような(NTの場合)
0723 NGNG
connect()でのタイムアウトを短くしたいのですが、無理なのですか・・・。
0724デフォルトの名無しさんNGNG
非ブロッキングモードのsocket使えば?
0725WInsock勉強中NGNG
WinSockを使ってクライアント側のアプリを作っているのですが、
サーバに何か要求しようとして、Connectした後Sendする前に
その要求がやっぱり不要になってしまった場合。
あるいは、SendしてRecvしている最中にいま受信しているデータが
不要になって、さっさと別の要求を出したい場合。

上記のような場合どうすればいいでしょうか?
現状は、問答無用でshutdownを実行しているのですが、
あまりよろしくないような・・・
やはりきちっとすべてのデータを受信してからでないと
次の要求はできないのでしょうか?
どなたか教えてください。
0726デフォルトの名無しさんNGNG
>>725
いきなりクライアントが shutdown する可能性があることを前提に
サーバーを作ってあれば(作っておくべき、異常終了に対応するため
にも)、それでも良いよ。

データの受信中にコマンドを発行したいなら、FTP みたくコマンドと
データ用に別々にコネクションを張るのが楽だと思うが。今、どうし
てます?
0727WInsock勉強中NGNG
>>726
デフォルトの名無しさん お返事ありがとうございます。
知識不足でFTPみたく・・・の部分はよくわからないのですが、
現状ではデータ要求のコマンド(というかメッセージ?)もデータ自体も
すべて同じ風にrecvとsendを使用して同じSocketでやり取りしています。
この部分を別仕様に変えるのはちょっと大変なので、サーバ側がいきなりの
shutdownに対応しているか?を確認してみます。
ありがとうございました。
0728デフォルトの名無しさんNGNG
ネットワークゲームを作るには、C を勉強するのが一番の早道ですか?
0729デフォルトの名無しさんNGNG
>>728
いや、Cは関係ない。
知識さえ仕入れれば、Cでも何でもOK。

でも、ゲーム作るのは、C/C++のほうがいいかな。
0730デフォルトの名無しさんNGNG
使われているポート一覧を調べるにはひとつひとつbindして調べるしか
ないのでしょうか?
0731デフォルトの名無しさんNGNG
netstatのソースコードを見れば?
0732デフォルトの名無しさんNGNG
>>731
そうですね。反省。
0733デフォルトの名無しさんNGNG
dnsjavaをダウンロードして、lookupをためしてみたんだけど、
bud compressionっていうエラーがでて、アドレスを引けない。
わかる人、教えて_(..)_
0734デフォルトの名無しさんNGNG
>>733
javahouseの過去ログ検索で
dnsjavaで検索してみれ。
つい最近dnsjavaの話題があったぞ。
0735デフォルトの名無しさん01/09/03 01:00ID:v81rkv8.
ソケット通信で、文字列を一行ずつ取得したい場合、
1バイトづつレシーブするのとバッファにためておいて一行ずつ切り出すのとでは
どっちが効率いいですか?

操作自体は1バイトづつのほうがやりやすいと思うんですが・・
0736デフォルトの名無しさん01/09/04 01:08ID:3J1vv5e.
>>735
効率の定義にもよるけど・・・recv呼び出しのコストとか?

javaでいうBufferedStreamみたいなのを使えば、気にしなくて済むね。
エラー処理が面倒だけど。
0737デフォルトの名無しさん01/09/04 07:05ID:MJCjZdvc
>>735
ためて1行ずつ切り出すと改行のない長い文字列を送信されたときにえらいことになります
0738ちょっと質問01/09/04 14:27ID:Mo7rJ2/M
UNIXネットワークプログラミングのreadn関数って欠陥品に思えて仕方がないので質問。

以下、readn

ssize_t /* Read "n" bytes from a descriptor. */
readn(int fd, void *vptr, size_t n)
{
    size_t nleft;
    ssize_t nread;
    char *ptr;

    ptr = vptr;
    nleft = n;
    while (nleft > 0) {
        if ( (nread = read(fd, ptr, nleft)) < 0) {
            if (errno == EINTR)
                nread = 0; /* and call read() again */
            else
                return(-1);
            } else if (nread == 0)
                break; /* EOF */

        nleft -= nread;
        ptr += nread;
    }
    return(n - nleft); /* return >= 0 */
}
/* end readn */
0739デフォルトの名無しさん01/09/04 20:36ID:Mo7rJ2/M
〜諸処理〜
iread = read(sockfd,buf,sizeof(buf));
write(sockfd,buf,iread);

とするとできるのに

while(( iread = read(sockfd,buf,sizeof(buf)) >0 )
  write(sockfd,buf,iread);

とすると予想した文字列bufを書き込んでくれません。
内部のバッファーに貯めちゃっているような感じがするのですが
なにが原因でしょうか。
Perlであれば $|=; みたいなおまじないがありますがC言語でも同じようなのがあるのでしょうか。
おねがいします。
0740デフォルトの名無しさん01/09/04 23:39ID:xADXB3S6
この本のソースってネットで検索すればかなりたくさん出てくる
新しいのが出てるかもしれんので探してみ
0741名も無い名無しNGNG
自分のIPがローカルIPかグローバルIPかを知るには
どうすればいいのでしょうか?
0742デフォルトの名無しさんNGNG
>>739
while文を使った方で、毎回read()が何返してるかireadを出力してみたらどうでしょう?

while (iread = read(sockfd,buf,sizeof(buf)) > 0) { // >>739の')'の数あってる?
fprintf(stderr, "iread is %d\n", iread);
write(sockfd,buf,iread);
}

それと、
> 予想した文字列bufを書き込んでくれません。
という文字列は、read()で正しく読み出せていますか?

あと、sockfdがnon-blockingに設定されていて、
read()がEWOULDBLOCKやEAGAINなんかで0を返してきているって事はないですか?
0743 食いだおれさんNGNG
>>21
> しかし、TCP/IP本は必ずといっていいほどOSIも載せるから勘違いしている人も多いんだよな・・・

激亀レスだけど、OSIなんてほとんどの本に載ってないぞ。
OSI参照モデルが載っているだけだろ。
0744デフォルトの名無しさんNGNG
1年前の書き込みにレスする人、初めて見たヨ。
0745デフォルトの名無しさんNGNG
>>742
EWOULDBLOCKやEAGAINの時は、-1が返るはず
0746お胸おっぱいNGNG
>>741
RFC を読む。
0747742NGNG
>>745
あっ、すみません、おっしゃる通り-1ですね。ご指摘どうもです。(ペコ
0748741NGNG
>>746
読んでみました。
10.0.0.0 - 10.255.255.255
172.16.0.0 - 172.31.255.255
192.168.0.0 - 192.168.255.255
の範囲のIPはローカルIPって事ですね?
0749 デフォルトの名無しさんNGNG
>>748
RFC1597読んだんだと思うが、public/private addressという用語。
global/localではない。globalは使う人が多いけどlocalはほとんど聞かない。
たぶんclient側のaddressと混同しやすいから。

うるさいかも知れないのでsage
0750748NGNG
あー、そう書いてありました、
ためになります。
Thanks!
0751初心者NGNG
自分のソフトが動いているマシンから、
LAN上につながっている特定の相手のマシン(IPアドレスで区別)に、
ファイルを送り込みたい場合、

たとえば、相手のマシンにサーバもしくはクライアントの役目をするような
なんらかのソフトが入ってて、動いていれば、
いろんな手段で実現できると思うのですが、

相手のマシンが ただLANにつながっているだけ、
という状態では こちらのソフトからファイルを送り込む事は不可能ですか?
0752デフォルトの名無しさんNGNG
>>751不可能
0753751NGNG
>>752
やっぱりだめですね
ありがとうございました
0754デフォルトの名無しさんNGNG
>>751は何を企んでいたのだろう?
0755751NGNG
別に企んでません(ワラ

現在あるリモートメンテナンスソフトを
LAN対応させようとしてて、
リモート側のソフトをLANで入れられないかなーと・・・

よく考えたら、バカな質問ね
0756デフォルトの名無しさんNGNG
recvfrom()の最後の2つの引数、特に struct sockaddr *from
なんだけど、online manual にも、ものの本にも、データの
送り元のアドレスがセットされて戻るとしか解説されてないん
だけど、このfrom引数に送り元のアドレスが最初から
分かっている時に予め代入してから渡すと何かいいこと
あるんでしょうか?
いえ、そうしているソースを見た事があるので。
個人的にはまったく意味ないんじゃないのかなーって
思うんだけど。
0757デフォルトの名無しさんNGNG
>>756
特定アドレスからのパケットを受け入れる
0758756NGNG
>>757
えっ、そうなんだ(汗
ありがと。
0759ネット関係のプログラム作るの初めてNGNG
windowsで、winsock使用で簡単な通信プログラム作ってます。

winCEにも対応させる事を考えて、
WSAAsyncSelectを使用しないで(CE未対応なので)、
スレッドを用意してselectで通信を監視するようにしています。
selectで受信を判定して、recvする事は成功したのですが、

相手からの接続が切れた事(WSAAsyncSelectの、FD_CLOSEに相当する)
の判定のしかたがわかりません。

どうしたら良いのでしょうか?

いろいろ検索かけたり、ヘルプとかで調べてみたのですが、わかりません・・・
0760デフォルトの名無しさんNGNG
>>759
recvが0を返した時
0761デフォルトの名無しさんNGNG
すんませんが、どっかにtelnetのRFCの日本語訳ないでしょうか?
0762デフォルトの名無しさんNGNG
>>761
Rubyはクソです。ゴミ箱逝きです。

いじょ
この発言をコピペしていただければ幸いです。
0763デフォルトの名無しさんNGNG
>>761
http://www.google.com/search?hl=ja&q=telnet+RFC+%93%FA%96%7B%8C%EA%96%F3&lr=
0764761NGNG
>>763
あのさあ、検索しても見付からないからここで聞いてるんだけどさ。
0765デフォルトの名無しさんNGNG
今だ!765ゲットォォォォ!!
 ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄       (´´
     ∧∧   )      (´⌒(´
  ⊂(゚Д゚⊂⌒`つ≡≡≡(´⌒;;;≡≡≡=
         ̄ ̄  (´⌒(´⌒;;
      ズザーーーーーッ
0766765NGNG
Rubyはクソです。ゴミ箱逝きです。
 ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄       (´´
     ∧∧   )      (´⌒(´
  ⊂(゚Д゚⊂⌒`つ≡≡≡(´⌒;;;≡≡≡=
         ̄ ̄  (´⌒(´⌒;;
0767765NGNG
sage忘れた。スマソ
 ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄       (´´
     ∧∧   )      (´⌒(´
  ⊂(゚Д゚⊂⌒`つ≡≡≡(´⌒;;;≡≡≡=
         ̄ ̄  (´⌒(´⌒;;
0768デフォルトの名無しさんNGNG
>>764
これでどうだ!:-P
ttp://www.geocities.co.jp/HeartLand-Kaede/8800/rfc/rfc1097j.txt
0769デフォルトの名無しさんNGNG
質問した事があるのですが、質問した事を忘れてました。
敢えて何番の者かは申しませんが親切に答えてくれた方ありがとうございました。
0770デフォルトの名無しさんNGNG
>>768
おお!ありがとう。
しかしこれはサブリミナルオプションらしいですね。
telnetそのもののRFCの日本語訳を希望。
わがままいってごめんちょ
0771デフォルトの名無しさんNGNG
礼儀正しいんだか無礼なんだか…デモチョトワラタ。
…敢えて何番へのレスかは申しませんが…。
0772デフォルトの名無しさんNGNG
770がチョット可愛くみえた。(笑
0773デフォルトの名無しさんNGNG
              / ̄ ̄ ̄ ̄ ̄
     ,__     | >>770が>>768のjokeに気付きますように。
    /  ./\    \_____
  /  ./( ・ ).\       o〇       ヾ!;; . iii|//"
/_____/ .(´ー`) \   ∧∧   .       |;;; :.iii|/゙
 ̄|| || || ||. |っ¢..|| ̄   (,,  ) ナムナム   |;;; ,:iii|
  || || || ||./,,, |ゝ iii~   ⊂  ヾwwwjjrjww!;;;;:::iii|jwjjrjww〃
  | ̄ ̄ ̄|~~凸( ̄)凸 .(  ,,)〜 wjwjjrj从jwwjwjjrj从jr
0774デフォルトの名無しさんNGNG
以下のようにして、受信ループをまわしているのですが、
クライアント(IE6)が転送を中断してsocketが無効になったときに、
なぜか無限ループになってしまいます。
ちなみに、自分でtelnetを使用して実験した場合では再現しませんでした

このソケットをselect()で調べると、常に読み取り可能。
受信バイト数は16777215バイト。となっています。
無効時には-1が帰るものだと思っていたのですが、
sizeof(rbuf)よりも大きい数が帰ってきたらエラーとして扱うべきなのでしょうか?

char rbuf[4096];
while (len = recv(session, rbuf, sizeof(rbuf) - 1, 0)) {
  rbuf[len] = '\0';
  printf("%s", rbuf);
}
0775デフォルトの名無しさんNGNG
>>774
recv()が-1を返したときも、上のコードだとループは回り続けるけど、
if (len < 0) {...} みたいなコードは省略済み?
ちなみに、16777215は0x00ffffffだけど、
本当にこの値をrecv()が返してきてるの?
lenの値が16777215だった場合の領域破壊はこの際置いておくとしても、
そこのとこどうよ。
0776デフォルトの名無しさんNGNG
telnetのソースコードありますか?あったら下さい。環境はLinuxです。
0777デフォルトの名無しさんNGNG
そんなものはどこにでもころがってます。
0778デフォルトの名無しさん NGNG
ソケットに関してというわけではないので、恐縮なのですが。。。
VBで、InetコントロールのOpenURLメソッドで取得したHTMLデータ
をシーケンシャルファイルに保存すると、2バイト文字が化けて
しまいます。これを回避する方法がありましたら、ご教授ください!
よろしくお願いします!!!
0779デフォルトの名無しさんNGNG
>>777
777getおめでとう。

で、ください。くださいと言ってます。
0780デフォルトの名無しさんNGNG
FTPのLISTコマンドでファイル一覧を表示すると、.ファイルなどの隠しファイルが表示されませんが、隠しファイルまで表示するにはどうすればいいでしょうか?
0781デフォルトの名無しさんNGNG
-a
0782デフォルトの名無しさんNGNG
>>781
それはUNIXのlsコマンドの話でしょう。
自分が言ってるのはFTPの応答コマンドの話。
0783デフォルトの名無しさんNGNG
うちではだまってても .* 全部見えるな
0784デフォルトの名無しさんNGNG
>>782
LIST -aとか
NLST -aとかやってみ。
0785780NGNG
LIST -a でできた
すんませんね>>781
アリガトサン>>784
0786780NGNG
しかしRFC959にはそんなこと一言も書いてないね。
なぜだろう?
0787デフォルトの名無しさんNGNG
959はObsoleteだから。
0788759NGNG
>>760
ありがとうございます
遅レスで申し訳ない上に、さらに質問ですが、

それは、selectだけでは判定できない という事でしょうか?
今は、ソケット監視スレッドで
タイム0でselectを呼び出してループしてます
FDを見て、情報ありの時だけ recvするイベントをだしてメインでrecvしてます

ソケット監視ループで、recvもすれば良いのかなと思ったのですが、
でも、recvって、ブロッキングにならない使いかたできるのでしたっけ?
0789デフォルトの名無しさんNGNG
>>786
つまり厳密には鯖依存ってこと
>>787
大嘘こくな
0790760ではないがNGNG
>>788
それ(loopでselect()の復帰を待ってrecv())でよいはず。
コネクション断でもselect()はデータ到着とみなす。
select()がデータ来てるといってるのにread()でブロックすることはない。
ただ、Win系ならWSAEventSelect()なんかの非同期I/Oを使用するAPIを呼ぶと、
socketが自動的にnonblocking-modeに設定されるので注意。
0791790NGNG
あ、一部訂正。>>790のread()はrecv()でした。すまそ。
0792790NGNG
あ、一部訂正。>>790のread()はrecv()でした。すまそ。
0793788NGNG
>>790
>コネクション断でもselect()はデータ到着とみなす。
知らなかった・・・勉強不足

selectループはそのままに、
recv() が 0 の時 切断処理を行うようにしたら、うまくいきました
ありがとうございました
0794デフォルトの名無しさんNGNG
>>788
ここ一遍目を通しておくとよいよ。
http://www.kt.rim.or.jp/~ksk/sock-faq/indexj.html
0795デフォルトの名無しさんNGNG
winCEとwin32のソケット通信に関する質問を
WinCEスレに書いたのですが、
もしかして、こっちのスレに書いたほうが良かったのかなーなどと
思いはじめ、
図々しくもリンク貼ります
CEスレの93です
↓
http://piza2.2ch.net/test/read.cgi/tech/998569580/93
0796デフォルトの名無しさんNGNG
MFC(WinInet)にてサーバにHTTPS経由でファイルをアップロードしてます。
500MBのファイルを1MBで分割して500回POSTしてるんですが
400回目あたりを過ぎたところで受信要求がタイムアウトして
しまいます。。。んでリトライして行うとまたタイムアウト
んでまた・・・の繰り返しで
8回あたりリトライするとサーバから受信要求が返されます。

原因として何が挙げられるんでしょうか??
ただ単にサーバに負荷がかかってるのでしょうか?それにしては
ブラウザからCGIを直接起動するときの反応が通常のような・・・。

ちなみにMFCではPOSTするたびにコネクションを新規生成してます。
サーバはSolaris+Apache+PHP。
0797デフォルトの名無しさんNGNG
>>795
bind()のエラーだったらTIME_WAITによるAddress already in useの可能性大。
きみも>>794が紹介してくれたとこに一度行ってきなさい。勉強になるから。
0798デフォルトの名無しさんNGNG
ここ、いいですね
ありがとうございます
0799 NGNG
SendMailで受け取った複数ドメイン(*.aaa.com、*.bbb.net、*.ccc.ne.jp等)毎、
複数ユーザ毎のメールを一括でPerl等に出力し、
Perlで転送先へ仕分けして再配送したいのですが、
エンベローブの宛先アドレスや送信元アドレスをPerlへパラメータとして与えたいと
思っています。(MAIL From: [email protected] や RCPT To: [email protected]の情報)
sendmail.defでそれらしい設定を探しましたが、
以下のようなPOPDOMが最も近そうでした。

PSEUDO_POP_DOMAIN=yes/no
POPDOM_MAILER_PATH='/usr/sbin/lmail'
POPDOM_MAILER_FLAG=$PROG_MAILER_FLAG
POPDOM_MAILER_ARGS='lmail -d $h $u'
POPDOM_MAILER_MAXSIZE=100000
POPDOM_MAILER_MAXLINE=

しかし、上記の設定では、$uは宛先の@前のユーザ名のみなので、
@以降のドメイン名部分が取得できません。
また、送信元情報の取得もできません。
そういった情報は固定の変数に設定されているのでしょうか?($〜)

それと、ACCEPT_ADDRSで*.hoge.comという形式でドメイン受信の設定は
可能でしょうか。
TLDは手動設定でいいのですが、サブドメインの登録は自動化したいので、
DNSの*指定のように全サブドメイン対象の設定にしたいと思っています。
0800800NGNG
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
0801デフォルトの名無しさんNGNG
やはり一つのポートには一つのソケットしかつなげられないわけですか?
0802デフォルトの名無しさんNGNG
>>881
基本的にはYes
しかし一つの代表ポートに複数の接続要求を出すことは出来る
TCPのテストプログラムを作って接続語の相手先のポート番号を確認すれば意味は分かる
0803デフォルトの名無しさんNGNG
winsock2.0を使ってプログラムしているのですが、
ひとつ不可解な現象にあって困ってます。
recvで受信するときに、改行文字(\r\n)が送られて来ても、
戻り値で2が帰ってくると思ってたのですが、1なのです。
どうしてでしょうか?

ちなみに、受信バッファを監視していると確実に\r\nが書き込まれてました。
0804デフォルトの名無しさんNGNG
あ、ちなみにtelnetで接続して試してます
0805デフォルトの名無しさんNGNG
>>803
質問内容がいまいちわからないですが、、、

socket層には改行文字なんて概念はありません
純粋にバイナリを送受信してるだけです

送信元が\r\nを送ったんなら、\r\nが届くだろうし、
\nだけを送ったんなら\nだけが届くでしょう
0806デフォルトの名無しさんNGNG
>>805
返答どうもです。
えっと、症状なのですが、確実に\r\nは送られて来てます。
しかし、recvの戻り値が1なので、単純に戻り値を元にバッファを連結すると
\nが上書きされてしまうのです。
0807デフォルトの名無しさんNGNG
相手がUNIXならtelnetを使っても改行コードは\nしか送られてこないはず
勘違いしてない?
0808デフォルトの名無しさんNGNG
W2kでtelnetして接続。
Enterを押して改行だけ送信。

char buf[4096];
memset(buf,0,sizeof buf);
len = recv(c, buf, sizeof buf, 0);

accept後に上記のソースで受信すると、
len = 1;
buf[0] = '\r';
buf[1] = '\n';

こういう状態になってます。
len = 2なら納得できるのですが・・・

と、いう話です。
0809デフォルトの名無しさんNGNG
ウザくて申し訳ないですが、ageさせてもらいます。
どなたか、よろしくお願いします
0810デフォルトの名無しさんNGNG
一対一でつながるwinsockのサーバーとクライアント両方を作ってます

つながっている状態から、

クライアントがソケットを切断した場合、

サーバー側は、一度ソケットを閉じないで
そのままlistenしても良いのですか?
0811デフォルトの名無しさんNGNG
閉じろ
0812デフォルトの名無しさんNGNG
>>810
接続受付用のソケットとデータ通信用ソケットの違いを理解していない奴が多すぎる
0813810NGNG
じゃあ、
閉じる(closesocket) -> socket生成(socket) -> bind ->
listenで良いのですか?
0814デフォルトの名無しさんNGNG
>>810
acceptで受け取ったsocketは閉じるとして、
bindした方は閉じる必要無いのでは?
0815デフォルトの名無しさんNGNG
>>813

812が言っていることに対して勉強し直せ。
0816810=813NGNG
やっとわかりました。自分の大ボケぶりが恥ずかしい。

1.bind->listen->accept用のソケット(socketで生成)と、
2.acceptで受け取ったデータ通信ソケットということですね

で、2は閉じて、また新たにacceptしなさい
ということですね
0817socksockNGNG
Win98で動作していたwinsockプログラムを
Win2kでビルドし直して動作させたところ、
30分ぐらいで止まってしまいました。

Win2kはSP2を適用しています。(SP1ではBugが…)
SP2でwinsockプログラムがうまく動作しないという噂
を聞いたことがありますでしょうか。
0818デフォルトの名無しさんNGNG
いっさいありません
0819デフォルトの名無しさんNGNG
>>817

OSを疑うよりもまず自分のコードを徹底的に疑いましょう。99.9%は自分のミスです。
0820デフォルトの名無しさんNGNG
WinInetって使えるの?
さっきちょっと調べたら送信要求タイムアウト設定できない
バージョンもあるじゃん。
WinInet使ってHttp転送しよとしてるんだけど、諦めろってことか?
0821デフォルトの名無しさんNGNG
>>819
0.1%もOSに責任があるようなOSなぞ逝ってよし
0822デフォルトの名無しさんNGNG
>821

マターリいこうよ、なっ?
0823デフォルトの名無しさんNGNG
>>821
0.1%って微妙な線だな
Winは45%くらい責任があるしなぁ
BSDくらいか?
0824デフォルトの名無しさんNGNG
>>823
なんでもOSのせいにするなって
0825デフォルトの名無しさんNGNG
大概の場合、自分のミスをOSが許容してしまい、環境が変わると発現する
でも結局ミスしているのは自分
以前、人殺ししたけど捕まらなかったから、また殺したら今回は捕まるのはおかしいと言っているようなもの
0826デフォルトの名無しさんNGNG
↑こいつ何言ってんの????????
0827デフォルトの名無しさんNGNG
>826

>825は>823に文句言ってんの。

分かった?
0828デフォルトの名無しさんNGNG
>>821

その0.1%のバグもほぼ対処法がある。
その対処を知らない/行っていないのはやっぱり開発者の責任。
0829元PGNGNG
>828

そうとも言い切れないと思うけど?

漏れは5年間でメーカーが認めたOSバグに2回遭遇したよ。
(汎用機でね、KシリーズとASシリーズ)
ASのバグなんて、工場のシステム2日間止まって大騒ぎ、保
証騒動になってた。
米国の開発チームにまで話がいったのどうのと聞いた。

OSのバグやと騒ぐ奴に限ってショボミスしてるというのは賛成
する。
大体、開発者のミスだもんな。

上記のトラブル時は、その考え方のせいで対応が遅れたけどな。
0830デフォルトの名無しさんNGNG
ネットワーク初心者なのですが、ソケットとポートに関する質問です。

まず、サーバがポート番号10000を見張っている、並列サーバ
(fork()する、またはマルチスレッド)だとします。サーバは、ク
ライアントから接続要求が来ると、要求を受け付けて、要求を受
け付けるためのプロセスをfork()します。fork()されたプロセス
はそれぞれサーバ側では10000番ポートを利用して通信を行いま
す。

クライアント1: 20000 <- TCP/IP -> 10000 :サーバプロセス1
クライアント2: 20001 <- TCP/IP -> 10000 :サーバプロセス2

ここで、疑問なのですが、要求を処理するためにfork()されたプ
ロセスは、それぞれサーバ側では10000番ポートを利用して通信
を行いますよね。クライアントが複数あった場合、10000番ポー
トに飛んできたデータは、サーバプロセス1に渡すべきかサーバ
プロセス2に渡すべきかどうやって判断するのでしょうか?
TCP/IPでの接続確立とは、こういったセッションの管理を自動で
やってくれるものなのでしょうか?それとも私、根本から勘違い
しています?
0831デフォルトの名無しさんNGNG
>>830
また>>812に該当する奴が出てきたな
0832 デフォルトの名無しさんNGNG
>>812に付け加えるに、
TCPの接続は、
・自分のIP address
・自分のport番号
・相手のIP address
・相手のport番号
の4つ組で識別される。始めの二つだけではない。
始めの二つは同じなのに別の接続、という事があり得るという事。

そして、TCPの接続と(各自分サイドの)socketは一対一対応。
上記の事を知らない人が多い事を見ても、socketはいい抽象化だと思われ
0833デフォルトの名無しさんNGNG
ポートっていくつぐらいあるの?
結構少ないのかなあ
0834デフォルトの名無しさんNGNG
素人です。教えてください。

(スレ立てるまでもない第5弾にも投稿したのですが…)
(こちらの方が、より技術的なレスがくると思い再投稿します)

今まで作業上、
TeraTermを用いてIP経由(TCPポートは任意。仮に6001)でリモートアクセスサーバに
接続後、TeraTermのbreak信号を送出(Alt+b)して遠隔端末にして使っていました。

これと同等のことをperlで実行したいと考えているのですが、
方法がいまいちわかりません。

IO::Socket::INETでソケット作ってそれにbreak信号を流すことで
実現できると考えているのですが、ブレーク信号って具体的にはどうやって送るんだろ?
というところで行き詰まっております。

ex.) printf <$SOCKET_hoge> "break信号??"; # という感じかなーと。

それとももっと別の良い方法があるのでしょうか?

ご指導のほどよろしくお願いします。
0835 デフォルトの名無しさんNGNG
>>834
> TeraTermを用いてIP経由(TCPポートは任意。仮に6001)でリモートアクセスサーバに
> 接続後、TeraTermのbreak信号を送出(Alt+b)して遠隔端末にして使っていました。

相手はtelnet protocolを理解するわけね?

IAC BRKを送る。"\255\243"
http://www.iij.ad.jp/pub/RFC/rfc845.txt
0836デフォルトの名無しさんNGNG
File Not Found
?
0837 デフォルトの名無しさんNGNG
>>835
> http://www.iij.ad.jp/pub/RFC/rfc845.txt

ftp://ftp.iij.ad.jp/pub/RFC/rfc854.txt

でした。(記憶で書いたたら番号も間違えていた…)
0838デフォルトの名無しさんNGNG
>>835

いまさらながら、
RFCと2chのありがたみを感じております。

(RFCを真剣に読もうとしなかったあっしが恥ずかしいです。)

感謝。多謝。
0839デフォルトの名無しさんNGNG
telnetあげ
0840デフォルトの名無しさんNGNG
ネットワークプログラミングの練習もかねて、
TFTPのサーバプログラムを作ってみようと思うのですが、
参考になるサイトや書籍、
もしくは、ソース公開してるフリーソフトで参考になりそうなもの、
なにか知りませんか?
0841デフォルトの名無しさんNGNG
>>840
tftpd.cそのもの。BSDやLinuxにはついてくる。
0842デフォルトの名無しさんNGNG
>>840
http://RFC.net/rfc1350.html
このくらい自分で探せや
0843デフォルトの名無しさんNGNG
共有メモリを使うと、セマフォもだいたい同時に使うのですが、
セマフォの使い方がよくわかりません。
POSIX, SYSV,形式それぞれについて教えてください。

ネットワークプログラミングIPC編は読みました。
それでも、サパーリです。
0844 デフォルトの名無しさんNGNG
>>843
> セマフォの使い方がよくわかりません。

原理が分かってないのだから、OSの原理/基礎の本を読め。
0845-NGNG
>共有メモリを使うと、セマフォもだいたい同時に使うのですが、
>セマフォの使い方がよくわかりません。

だいたい同時に使ってるのに使い方がよくわからないのか??
0846デフォルトの名無しさんNGNG
データ送受信用socketが接続状態の時、
サーバ側からshutdown -> closeというのは、
本来やってはいけない事なのでしょうか

win32でこれをやった場合、特に問題なかったのですが、
winCEでこれをやったら動作がおかしくなってしまうのです
(その後、新しいsocket生成はできるのだが、connectができない
リセットかけるまで復帰しない)

かならずクライアント側から先に
shutdown -> closeしなくてはいけないのでしょうか?
0847デフォルトの名無しさんNGNG
>>846
>>794
0848デフォルトの名無しさんNGNG
>>794のサイト(・∀・)イイ!! thnx>847
0849  NGNG
特定のアプリケーションの行っている通信パケットを監視するには
どうやればいいんでしょうか?
本屋であさってみたものの、どれもピンとくるものがなくって・・・
0850デフォルトの名無しさんNGNG
パケットモニタを使ってみるとか。
http://www.vector.co.jp/soft/winnt/net/se136129.html
0851デフォルトの名無しさんNGNG
winsockで、
一度にsendして良いサイズの基準って、なにかありますか?

何も考えずにそのまま、最大2Mくらいのものを一度にsendしていたのですが、
(有線の)LANでは特に問題なかったのですが、
(しかも、sendの戻り値を見ると、一回のsendで送れてしまっているようである)
無線LANで使用したら、
sendすると固まってしまい、しばらく(数十秒)してタイムアウトで返ってくる、という事が
多く発生するようになりました
それで、分割して(たとえば2kくらいとか)sendするようにしたのですが、
そしたら固まる確率はかなり減ったのですが、やっぱりたまに固まりがおきてしまいます

無線LAN自体の問題でしょうか?
0852デフォルトの名無しさんNGNG
>>851
たしか、8kか16kだったような。
0853デフォルトの名無しさんNGNG
>>851
ただ、分割してるだけ?
2k送ったら1バイトのackを受信って感じでどうかな?
ちょっと遅くなるかもしれないけど。
0854デフォルトの名無しさんNGNG
バッファの量を取得する関数を使え
あとは自分で調べよ
0855デフォルトの名無しさんNGNG
>>854
ヒントくださーい。
0856ヒントNGNG
おぷと
0857デフォルトの名無しさんNGNG
>>856
もう一声!
0858デフォルトの名無しさんNGNG
getsockopt
SO_MAX_MSG_SIE
0859デフォルトの名無しさんNGNG
追加(Stream)
SO_RCVBUF
SO_SNDBUF
0860デフォルトの名無しさんNGNG
>>858, >>859
これ、どう使えばいいんですか?
0861デフォルトの名無しさんNGNG
>>860
調子に乗るな、いい加減にしろ
0862デフォルトの名無しさんNGNG
>>861
なーんだ、知らないんだー
0863デフォルトの名無しさんNGNG
>>862
さようなら、そしてもう来るな
0864デフォルトの名無しさんNGNG
>>863
プログラマーはすぐ怒るんだから。こわっ
0865デフォルトの名無しさんNGNG
ポート番号10000って、何に使われる事が多いですか?
使わない方がよいですか?
0866デフォルトの名無しさんNGNG
問題ない、良きに計らえ
0867デフォルトの名無しさんNGNG
厨房よ、無知をさらけだして
みっともない恥じをカクコト莫れ

すっこめウンこ厨房
0868デフォルトの名無しさんNGNG
FAQ スレで厨房に説教タレル工房発見
0869デフォルトの名無しさんNGNG
>>865
> ポート番号10000って、何に使われる事が多いですか?
> 使わない方がよいですか?

http://www.iana.org/assignments/port-numbers読め。最後の部分もな。

> 何に使われる事が多いですか?

「多い」とか「多くない」の問題じゃないよ。自由に使っていいport番号は決まってる。
お前がICQ.comの馬鹿技術者なら別だけど。
0870デフォルトの名無しさんNGNG
>>863
けっきょくマニュアルに載っていること以外は答えられないのね.
0871デフォルトの名無しさんNGNG
初心者なんですが、socket()-bind()、sendto()-recvfrom()の
ソケット通信を行うプログラムでWindows98とNTでの違いはあるんでしょうか?
実は98上で動いたものがNT上で動かなくて困ってるんですが...。
0872デフォルトの名無しさんNGNG
>>870
つか、マニュアルの読み方くらい覚えてから来い。
そこから教えてたんじゃ玉欄。
0873デフォルトの名無しさんNGNG
>>870
これだけヒントをもらった上に、偉く時間が経っているにも関わらず、
未だに道に迷ってうろついている方向音痴のあなたに乾杯!
永久に遭難していた方が世のため人のため。
0874デフォルトの名無しさんNGNG
質問です。
「UNIXネットワークプログラミング」で紹介されている
socketやconnect等のラッパー関数であるSocketやConnect関数は
どこかにソースがあるのですか?
あるのだとしたらどのディレクトリの中にあるのか教えてください。
お願いします。
0875デフォルトの名無しさんNGNG
>>874
11ページを見よ。
0876デフォルトの名無しさんNGNG
>>875
どうもどうも。
0877デフォルトの名無しさんNGNG
netstat -e
で取得できる送受信バイト数と同様な値をプログラムから取得したいのです。
SNMPを使う事まではわかるんですが具体的な手順を教えてください。

あ、Win9xとWin2000のVC6です。
0878デフォルトの名無しさんNGNG
netstat逆汗しれ
0879デフォルトの名無しさんNGNG
>>877
http://www.sysinternals.com/files/netstatp.zip
0880877NGNG
>>879
サンクスね

あと、Google検索で色々調べてたら見つかりました。

http://www.codeguru.com/mfc/comments/26225.shtml
http://www.zdnet.co.jp/help/howto/linux/0007master/06/

何とか目的の物が出来ました。
0881デフォルトの名無しさん NGNG
php覚えやすい言語だけど索引もろくに使えないようなへたくそな本などが多くて無駄手間がかかる。
学生(20歳)
0882デフォルトの名無しさんNGNG
>>881
板違い?
http://pc.2ch.net/php/
WEBプログラミング@2ch掲示板
0883kevin hikinikNGNG
マジで聞きます。

tracertがUDPを利用してるとかICMPを利用してるとか・・・
どゆこと?

プロトコルに基づいてる!?
コードになりゃみんないっしょじゃんか・・・。
用はソケットなりストリームなりを使えばいいだけじゃん。

システムが全治2週間ほどあるんで、見ようにも見れんし。
プロトコル専用のヘッダやライブラリがあるわじゃないっしょ?
プロトコルに基づいて実装するってどゆこと?
0884デフォルトの名無しさんNGNG
>>883
マジなのか?
もう少し勉強してから質問したほうがいいぞ。
それか、質問する時の言葉遣いを覚えろ。
0885kevin hikinikNGNG
すみません、先敗どの!

勉強いっぱいしました。

実装してないだけだい!

頼むから教えろ。
0886デフォルトの名無しさん NGNG
winsockの非同期で、sendで送信中のデータ数をリアルタイムで
知るにはどうしたらいいの?
0887デフォルトの名無しさんNGNG
>>886
小出しにして送信できたバイト数をカウントしなさいYO!
0888デフォルトの名無しさんNGNG
>>883
プロトコルをプログラミング言語か何かだと誤解してるような。
0889デフォルトの名無しさんNGNG
>>883
プロトコルという言葉の意味を考えてみよう。
0890デフォルトの名無しさんNGNG
>>887
小出しにすると送信速度遅くならない?
0891デフォルトの名無しさんNGNG
>>885
「PGなのに知らなかった事を潔く質問してみるスレ」で解決できたんじゃないの?
http://pc.2ch.net/test/read.cgi/prog/1002086817/643-656
0892デフォルトの名無しさんNGNG
UNPを理解していれば旧ネスペも簡単?
本当は資格の勉強なんかしたくないんだけど簡単なら取っちゃおうかなと思ってるのですが・・
0893( メ ´Д`)<893 ◆HHJeUSD6 NGNG
893get
0894質問。NGNG
TCP転送で、sendの方の文字列の大きさとして、
recvの方を固定サイズにした場合、2回以上send
すると正しい文字列でrecvできませんよね?

これを正しく受信するにはどうしたらよいですか??
場合わけしようにもかなりあるような気がして。

send回数は1〜何回でも連続でするものとします。
0895デフォルトの名無しさんNGNG
>>894
可変長のデータをやりとりしたい時は、
最初に長さを送るのが簡単だとおもいます。

それか受けとった後に'\0'を探して…
0896質問。NGNG
>>895

ありがとうございます。でも、
他の方法ってありますか?
0897デフォルトの名無しさんNGNG
数値計算のプログラムをCで書いてるのですが、
結果をグラフで逐次表示したいんですが何か良い方法を
教えて下さい。
0898デフォルトの名無しさんNGNG
>>897
それはネットワークプログラミングと、どのような関係がありますか?
0899デフォルトの名無しさんNGNG
>>894
いまいち言いたいことが分からんけど。

(1)相手が1回目のデータをすべて受信できたことを確認してから2回目のデータを送る
(2)データサイズを固定長にしておく
(3)データを見ればどこで切れるか分かる構造にしておく(データサイズを送る、データを\0で区切る、など)
の、どれか。
0900質問。NGNG
>>899
説明不足ですみません。
sendする文字サイズは文字の長さなので可変長です。
recvする文字サイズは固定長です。

んでもって、sendとrecvが1:1に同期しながら
動かしているんで・・・。(^^;

ありがとうございました。
0901デフォルトの名無しさんNGNG
>>899
sendとrecvが1:1に同期しながら動く?
それは、そもそも無理では?

1回のsendで送ったデータが、2回以上のrecvに分割されるかもしれない。
2回のsendで送ったデータが、1回のrecvで受け取れるかもしれない。

このへんは何も保証されないので、データサイズを送信するなりしなければ、解決になりません。
0902901NGNG
↑ >>900 の間違い
0903デフォルトの名無しさんNGNG
>>898
きっと、計算プログラムとグラフプログラムがあって、その間を
ネットワークで繋いで逐次表示させたいんだよ。だけど、tcp/ipか
udp/ipか、HTTP tunnelingか、RPCかDCOMかの何を使えばいいかで
迷っていたりするんだよ(ワラ。
0904デフォルトの名無しさんNGNG
>>903
UDP/IP っていう言い方、あんまし聞かないな・・・
とりあえず TCP でいいんじゃない?
0905905NGNG
はい、質問!
通信対戦っぽいソフト作ってるんですが、
HTTPプロキシを通して出来ないかと試してみたら、
POSTが効かなかったり、バッファリングしたりしやがりまして、
なかなか上手くいかないんです。
なんか良い方法をご存じの方いらっしゃらないでしょーか?
1回データをやりとりするたびに
HTTPを繋いだり切ったりするしかないんでしょーか?
0906デフォルトの名無しさんNGNG
パフォーマンスの要求されるsocketアプリケーションをPCで開発・運用する場合、最も高速なOSは何でしょうか?
とりあえずWin+cygwin/Winsockを考えているのですが。
0907デフォルトの名無しさんNGNG
>>906
OSが高速でも、ネットワーク回線自体の伝送速度で制限を受けるので、意味ないです。
10Mbps の回線では、どんなOSを使っても 10Mbps しか出ないのです。

・・・それとも、ネットワークとは関係なく、単にCPUパワーを得たいだけ?
0908デフォルトの名無しさんNGNG
>>906

Windows2000Server+Winsock2+完了I/Oポートを使って組むやり方が
Windowsだと最もパフォーマンスが高い。
マルチプロセッサ対応もさせやすいのでCPU毎に得意な処理を分散可能だ。

ただしライセンス料もべらぼうに高い(w
0909908NGNG
スマン、ただしサーバ用途に限ってのこと。
クライアントサイドなら組み方を問題にするべきでOSはなんでもいいと思うが
0910デフォルトの名無しさんNGNG
>Windows2000Server+Winsock2+完了I/Oポートを使って組むやり方が
>Windowsだと最もパフォーマンスが高い。
これをUNIXでやる場合、各ポートをselectでチェックする処理を
ループでぐるぐる回すの?なんか遅そうだな...
0911デフォルトの名無しさんNGNG
>>911
なんかミスリーディングな言い方してるけど、
selectすると一度に全部のポートがチェックできるよ。
0912デフォルトの名無しさんNGNG
でもselectって、ソケット数に限界なかった?
あれがイヤ。
0913デフォルトの名無しさんNGNG
じゃあ最もパフォーマンスの高いPC用サーバOSってなによ?
0914無党派さんNGNG
>>912
固定の奴でも128〜4096はあるし、変更できるUNIXもあるが…
0915デフォルトの名無しさんNGNG
>>913
MacOS X
0916デフォルトの名無しさんNGNG
>>915
それだけは絶対にない
0917908NGNG
>>913
自分がMSマンセーなのでWindows2000/XP
むしろUnix系は良く知らんので判断できん。

>>911
私未だにselectの使い方がよく判らんのですが。
複数のソケットをチェックできても、どのソケットが反応したのか
調べる効率的な方法があるんでしょか

ちなみに完了I/OポートではなくてI/O完了ポートAPIだった。
0918デフォルトの名無しさんNGNG
>>910
パラメータはtimeslot以外ほとんどNULLにすればいいんじゃない。
ブロッキングをいちいち気にしてられないよ。
selectってようはエラーがないか調べるだけでしょ。
0919デフォルトの名無しさんNGNG
selectって何するものなの?
0920デフォルトの名無しさんNGNG
>>919
複数のソケットに対する、普通は受信を待つために、使うもの。
0921デフォルトの名無しさんNGNG
>>920
ソケットに限らない
0922デフォルトの名無しさんNGNG
完了IOポートAPI使うんならselectは関係ないんじゃない?
つうかselectを使わないための完了IOポートでしょ?
0923デフォルトの名無しさんNGNG
マルチスレッドがまだなかったころに非同期処理を実装するための
苦肉の策
0924デフォルトの名無しさんNGNG
>>913
Solarisちがうかな?

>>923
マルチスレッド使うときと使えないときで、非同期処理はどう違うのさ?
0925デフォルトの名無しさんNGNG
マルチスレッドあり → 受信専用スレッドを作って select で待ち
マルチスレッドなし → メッセージループでメッセージ待ち
0926デフォルトの名無しさんNGNG
>925
つか、そのマルチスレッド有りは「非同期」やなく「同期」やとおもうんだが。
0927デフォルトの名無しさんNGNG
>>926
dispatcherに専用threadがいるだけで、
その先はportにbindされた非同期methodをpoolされていたthreadに実行させる、
って実装を想定しているんじゃないかな?
実際、I/O完了ポートAPIだって、kernel/dll内threadがdispatchしているわけでしょう?

>>920
file, socket, diviceなどの複数のstreamが、
readableか、writableか、例外が起きてないか調べます。
真であるstreamがあれば復帰して、bit maskが1になります。
acceptで受けるような接続要求も検知できます。(inetdで使っている)

>>923
そんなことはない。
素朴にどんどんthreadを生成すると、SunOS 5の様に強力なthreadをsupportするOSでも
bottle neckになるから、複数のstream待ちを、何本かのselect/dispatcherにまとめて、
別のthreadに管理させる、ってのは、highly multi-threadedなprogrammingの常套手段。
まあ、普通のprogrammerは、滅多にそういうsystem設計する機会ないと思うけど、
知らないし、bottle neckを調べられから、hardwareを増強させて逃げるdesignerも多い。
0928デフォルトの名無しさんNGNG
>>927
横文字使いすぎでみっともない
0929908NGNG
非同期要求が完了したコールバックをAPI呼出したプライマリスレッドではなく、
プールしておいたいくつかのワーカスレッドに対して行うって事で良いのかな?
これによって平行動作するスレッドの数を制限する事には賛成。

無制限にスレッド作りつづけるとWindowsならいづれブルースクリーンだ。
つまりこの実装を強力にサポートするI/O完了ポートがあるWindows最高(w
0930デフォルトの名無しさんNGNG
Winsock2でrecvfromでUDPデータを受けるプログラムを動かしているのですが、
およそ18Kバイト分のパケットを受信したあたりからデータが所々おかしくなって
しまいます。虫食い状態です。recvfromで受けた直後でデータを見てみたのですが
その時点で既におかしいってことは、あとはどこらへんを調べていったらいいんで
しょうか?はまってます。(泣)
(ちなみにLinuxで問題なく動いていたものをWinsock2(Windows)に移植
 したものです。)
0931デフォルトの名無しさんNGNG
>>930
ちなみにrecvfromの受信バッファの大きさは十分大きくしたり毎回0リセットしてみたり
色々やってみましたが症状変わりませんでした。
0932デフォルトの名無しさんNGNG
>>930
送信側はだいじょぶ?
0933デフォルトの名無しさんNGNG
>>932
同じサーバに対してLinuxからアクセスした場合は問題ないんです。(とほほ)
VisualC++6.0なんですが、昔recvfromでSin_Zeroに誤ったデータを書いてしまう
バグがあったようなのですが、パッチのSP2は既にあてているので環境は問題無さ気
なんですけどね。ここの皆さんはそういう経験は無いでしょうか?やっぱこんなの
俺だけかな(藁
0934デフォルトの名無しさんNGNG
>930
単にUDPの制限(仕様)とかやなくて?
>927
http://state-threads.sourceforge.net/docs/st.html
つまり、こういうこと?(/.でみつけた。)
0935デフォルトの名無しさんNGNG
>>934
その後色々調べて見たところサーバからは正しいパケットが送信されている事が
モニターツールにより分かりました。つまりクライアント側の問題であると…。
さらに、クライアント側のイーサーのインターフェースをモニタリングするとなんと
UDPでなくIPパケットとしか認識されてませんでした。何故だぁ…(怒)
IPパケットが山のように見えます。(藁
ちなみにTCP,ARPのレイヤーはちゃんと見えてます。また他のUDPを使うソフト
で試しに通信してみるとUDPはちゃんと通りますのでUDPが通らないという事では
ないみたいです。クライアントソフトの問題ということになるのかな…謎
0936デフォルトの名無しさんNGNG
>>935
つーかよ、

> また他のUDPを使うソフトで試しに通信してみるとUDPはちゃんと通りま
> すのでUDPが通らないという事ではないみたいです。

の時によ、

> さらに、クライアント側のイーサーのインターフェースをモニタリングするとなんと
> UDPでなくIPパケットとしか認識されてませんでした。何故だぁ…(怒)

すると、どうなるんだ?
「UDPパケット」と表示されるのか? 「IPパケット」と表示されるのか?

どうせ、「他のUDPを使うソフト」でも「IPパケット」と表示されていて、
単に、UDPパケットだから、Winが破棄しちゃう事があるだけだろ。

そのプログラムにパケットの再送機構は含まれているわけ?
なければ、たまには虫食いになるのが正しい動作。
0937デフォルトの名無しさんNGNG
>>930
パケットが途中で失せたり、順序がごっちゃになったりしても
UDPは関知しない(ので、対策は上位レイヤーでしろや)、
ちゅうUDPの仕様を理解した上で、UDPを利用してる?
つーかさ、なんでUDPなわけ?TCPの方がいいと思うが

>データが所々おかしくなって
CRCでもつけて、おかしいところを再送するように書けや。
0938デフォルトの名無しさんNGNG
>>936
>>937
状況がきちんと説明できてなかったのでちょっとあれなんですが、
ご指摘ごもっともです。たしかにTCPでやっちまえってのもそうなん
ですが、今回の症状の原因が知りたくて。あとUDPの特性はベスト
エフォートってことで分かって使ってます。モニターツールで見てると
受け側のマシンのイーサ?までは正しいパケットが正しい順番で来
ているのです。それをrecvfromでソケットから取り出した後データが
おかしくなってる。なんだかVC++の環境やライブラリの問題?の
ような気がしてきました。いずれにせよくだらん質問にレス頂いて感
謝しています。
0939938NGNG
>>938
>なんだかVC++の環境やライブラリの問題
えっとソケットライブラリのバグパッチがちゃんと当たってない
のかもという意味です。その変もちっと調べてみます。それでは。
0940デフォルトの名無しさんNGNG
>>938
べつにイーサまで正しいパケットが来てて、
それがプロトコルスタックで破棄されてもUDPなら問題ではないと思いますが…
>>937もそういうことを言ってるのだと…
0941デフォルトの奈々氏さんNGNG
ご存知の方、教えてください。

WinNT4.0でnetstatを実行してるんですが、TIME_WAIT状態になったソケットって
1000コまでしか表示されないようなんですが、何かの仕様でしょうか?
#ちなみにESTABLISHED状態とかのソケットは1000以上でも表示される。

SnmpExtensionXXX()系のAPIを叩いてソケットの状態を表示するnetstatもどきを
作ってみたんですが、同じ結果になってしまいました。
0942デフォルトの名無しさんNGNG
レス数が900を超えています。1000を超えると表示できなくなるよ。
0943デフォルトの名無しさんNGNG
WndProc 内であるメッセージが来たら send するようなプログラムを作っています
ここで、send の呼ばれる間隔が短すぎると、
送信するデータが 1 つのパケットにまとめられてしまうのですが、
これを避ける方法はないでしょうか?

具体的には、
「4 バイトデータのパケット送信
-> 4 バイトデータのパケット送信
-> 4 バイトデータのパケット送信」
となって欲しいところが
「12 バイトデータのパケット送信」
となってしまいます

ブロッキングするようにすると、send の返り値にはちゃんと 4 が入るのですが、
パケットフィルタして確認すると、12 バイトなどにまとめられて送信されています

Java では flush という関数がありましたが、
WinSock には内部バッファを明示的に送信するような手段はないのでしょうか
どなたかご存知でしたら、ご教授よろしくお願いします
0944デフォルトの名無しさんNGNG
>>943
setsockopt(TCP_NODELAY)
0945デフォルトの名無しさんNGNG
でもストリームだと受け取る側から見たら変わらんのじゃないの?
4バイトだろうが12バイトにまとめられようが
0946943NGNG
>>944
おおおお!できました!ありがとうございます!
今日一日中悩んでたのに・・・、思いきって質問して良かったです
お礼にお団子どうぞ!
-○○○-

>>945
たしかにその通りなんですが・・・
タイミングが重要だったので、バッファに溜められると困るのです
0947デフォルトの名無しさんNGNG
次スレ立てておきました。

ネットワークプログラミング相談室 Port2
http://pc.2ch.net/test/read.cgi/tech/1006258198/
0948デフォルトの名無しさんNGNG
UDPプログラミングサンプル等が参照できるサイトを
教えていただきたいのですが。
0949Disca ◆NAfP6znE NGNG
>>948
http://www.ccad.sccs.chukyo-u.ac.jp/manualc/prgrm/dialogbase/media/network/
WSAStartupも知らなかったのに、見つけたYO。

すべてのログ見るのに疲れた(はぁ〜
0950foovarNGNG
すみませんが、どなたか教えてください。

select()を使わずに、ファイルディスクリプタの指すストリームが
ファイルなのかソケットなのかを判断する方法って無いですか。

ストリームからデータを読み出して加工するルーチンがあって、
内部でファイルディスクリプタがファイルを指す場合とソケットの
場合で分けたいのです。
で、最初からselect()を意識した作りではないので、select()を用
いた仕様に作りかえるのがわずらわしいのです。
0951デフォルトの名無しさんNGNG
getsockopt()
0952foovarNGNG
>>951
うひょー、有難うございます。
0953初心者NGNG
一つのパケットを送るとACKが返ってくると思いますが、
そのACKが返ってきたときの時刻が知りたい場合、どの
関数の戻り値を知ればいいでしょうか?
それとも他にいい方法があるでしょうか?
0954デフォルトの名無しさんNGNG
recvした直後に、time()で取るとか。
‥‥そういうことではなくて?
0955デフォルトの名無しさんNGNG
WinInetでmms://~のファイルを読むことはできますか?
っていうか、mmsとか関係ないですか?
0956デフォルトの名無しさんNGNG
新しいスレに移りましょう

ネットワークプログラミング相談室 Port2
http://pc.2ch.net/test/read.cgi/tech/1006258198/
レス数が950を超えています。1000を超えると書き込みができなくなります。