ネットワークプログラミング相談室
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001名無しさん@お腹いっぱい。
NGNG0002名無しさん@お腹いっぱい。
NGNG00031>2
NGNG0004名無しさん@お腹いっぱい。
NGNG(゚Д゚)ハァ?
00051=3>4
NGNG0006名無しさん@お腹いっぱい。
NGNG0007名無しさん@お腹いっぱい。
NGNGプラットフォームはなんでもあり?
00081=3>7
NGNG0009名無しさん@お腹いっぱい。
NGNG0010名無しさん@お腹いっぱい。
NGNGいい本教えて下さい
0012>11
NGNGリロードしてよかった・・・
0013初心者
NGNG0014名無しさん@お腹いっぱい。
NGNGあんま関係ない。
強いていえばセッション層に含まれる手順だけど、
OSIモデルを意識してソケット使うことって、あんましないよね。
0015名無しさん@お腹いっぱい。
NGNG0016名無しさん@お腹いっぱい。
NGNG部屋にこもってる世間知らずのじいさんたちの世迷言。
CMIPは誰も使わないし、TCP/IPはOSIと関係ない。
0017ういろう
NGNG0018名無しさん@お腹いっぱい。
NGNG本当ですか?
0019cafe
NGNG実際に7層あるプロトコル無いし。
解説書書いてる人も、訳分からなかったんだろうな。
0020名無しさん@お腹いっぱい。
NGNGもし Windows を使っているならば、
ActivePerl という無料の Perl 実行環境があるので、
それを使いましょう。
[ 参考 ] Windows 95/NTでPerl&CGIのページ
http://www.att.or.jp/perl/win/nt_cgi2.html
0021>16
NGNG0022ソケットと
NGNG0023>22
NGNGプログラムで実装してください。
0024名無しさん@お腹いっぱい。
NGNG目的とする別のURLを開けられないようにするには
どうしたらよいのでしょうか?
0025ウッハウハ
NGNGJavaScript でほにゃららってのはどう?
<html>
<head>
<script Language="JavaScript"><!--
function inst(){ alert("アドレスはhogehoge"); return false; }
// -->
</script>
</head>
<body>
0026ソケット入門中
NGNGソケット
IPアドレスとポート番号を用いて通信するインターフェース
HTTP,FTP等
ぶっちゃけて言えば、特定のポート番号の別名(HTTPは80等)
〃プロトコル
サーバーとクライアントの間でコマンドやデータのやり取りをするとき、
どういうリクエストを送り、どういう応答を返すかの取り決め。
0027初心者
NGNG>IPアドレスとポート番号を用いて通信するインターフェース
ということは、ソケットとは、TCPプロトコルとIPプロトコルのコネクションを
確立するためのもので、これらのプロトコルとは深く関わっているが、
アプリケーションプロトコルはまた別物で、他に自分で用意しなければならない
という解釈であっていますでしょうか?
0028無名
NGNG002926@あまり自信ない
NGNG>確立するためのもので、これらのプロトコルとは深く関わっているが、
TCPやIPのヘッダやパケットを覆い隠すという感じ?
>アプリケーションプロトコルはまた別物で、他に自分で用意しなければならない
アプリケーション毎に送る内容が違うから。
俺の勝手な解釈
IP:ルーティング(送りっぱなし)
TCP:転送の確実性の確保(含エラーチェック)
ソケット:TCPやIPのヘッダを意識せず、データを用意するだけでパケットを送れる
サーバーソケットとクライアントソケットを結ぶファイル記述子のようなもの
アプリケーションプロトコル:通信の方法
送るデータの形式("GET xxx"や"POST xxx")
BMPファイルのヘッダ形式のようなもの
0030名無しさん@お腹いっぱい。
NGNG必ずしも
>ソケット
> IPアドレスとポート番号を用いて通信するインターフェース
とは限らないヨ。
>HTTP,FTP等
> ぶっちゃけて言えば、特定のポート番号の別名(HTTPは80等)
ポート番号は変えられるので、こうとは限らないヨ。
>〃プロトコル
「HTTP」の「P」は「Protocol」のことだヨ。
0031無名選手@投げたらアカん!
NGNG0032名無しさん@お腹いっぱい。
NGNG0033名無しさん@お腹いっぱい。
NGNGいまはもうWinSock2を標準にしてプログラミング
してよくなった?
まだ1.1を前提にしなきゃいけないの?
0034名無しさん@お腹いっぱい。
NGNGWin95にwinsock2を安全に入れる方法を発見すればおっけー
0035名無しさん@お腹いっぱい。
NGNG0036名無しさん@お腹いっぱい。
NGNGはあ?
0037名無しさん@お腹いっぱい。
NGNG0038名無しさん@お腹いっぱい。
NGNGどうも、アクティブパールって、その為に有ったんですね。
Jパールと両方いれてみようかな?
003936
NGNG37みたいな意味なら、データグラムのIPヘッダ適当に書きかえれば
いくらでもできるが。そういうことなのか?
0040>34
NGNG関連内容
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一つは同一マシンのプロセス間通信用、
もう一つは外部マシンとの通信用ということらしいですが、
どうしてこの二つともが「ソケット」と呼ばれているのでしょうか?
TCPやIPでの外部通信とマシン内部のプロセス同士の通信は
まったく別物のような気がするのですが。
0042名無しさん@お腹いっぱい。
NGNG?
0043名無しさん@お腹いっぱい。
NGNGおんなじだよ〜。ソケットってのはデータの出入り口の事だから、
データがネットワークを経由して別のマシンに逝こうが、同じマ
シンの別のプロセスに逝こうが、関係ないよ。
0044名無しさん@お腹いっぱい。
NGNG0045>>41
NGNG> まったく別物のような気がするのですが。
違ったり同じだったり。
とりあえず内部用に127.0.0.1のIPアドレスが予約されてたり。
スタンドアロンのIPCでストリーム通信だってできたり。
0046>
NGNG少しはあるんじゃないか?
0047> 44
NGNGこれは「同一マシン」「ネットワーク経由」の違いとは関係ないゾ。
ネタ?
0048名無しさん@お腹いっぱい。
NGNG0049つまり
NGNGTCP/IPスタック(?)を借りてやらなけらばならないということですか?
0050名無しさん@お腹いっぱい。
NGNGIPv4でデータグラム型。つまり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パイプでもいいよ
0052名無しさん@お腹いっぱい。
NGNGバイブは違うよ
0053名無しさん@お腹いっぱい。
NGNGSVR4だとパイプだろうがソケットだろうが、結局STREAMS配下だから
同じようなもんじゃなかったっけ?
# いや、最近やってないからもはやうろ覚えなんだが
0054名無しさん@お腹いっぱい。
NGNG良く読め(藁
0056名無しさん@お腹いっぱい。
NGNG0057名無しさん@お腹いっぱい。
NGNG0058名無しさん@お腹いっぱい。
NGNG0059名無しさん@お腹いっぱい。
NGNG0060名無しさん@お腹いっぱい。
NGNGUNIXネットワークプログラミング〈Vol.1〉ネットワークAPI・ソケットとXTI
[原書名:UNIX NETWORK PROGRAMMING,Volume 1,Networking APIs:Sockets and XTI〈Stevens,W.Richard〉 ]
ISBN4-8101-8612-1
でも本体価格8,000円です。でもって分厚いです。
(学生の人は図書館行って探した方が良いかも)。
0061名無しさん@お腹いっぱい。
NGNG0062名無しさん@お腹いっぱい。
NGNG0063名無しさん@お腹いっぱい。
NGNG「多数の接続を同時に処理しなければならないサーバーでは
WindowsNTとI/O完了ポートを使用する必要があります」(P388)
と書いてるんだけどI/O完了ポートについて日本語で詳しく書かれてる
webサイトを知らないでしょうか?
MSDNやサンプルを眺めてもさっぱりわからなかったもので・・・
0064名無しさん@お腹いっぱい。
NGNG0065名無しさん@お腹いっぱい。
NGNG0066名無しさん@お腹いっぱい。
NGNGちょい前にI/Oコンプリーションポート使って、TCPでの同時接続1000台程度のサーバを組んだ。
マルチCPUを生かしやすいし、サーバの負荷も軽減する。
よくあるパターンで、クライアント接続時にスレッドやプロセスを起動して
処理させるのではコストが高く、主にselect〜recvがネックになる。
とくによいサイトや本は内容に思える。
自分は、Win32マルチスレッドプログラミングとMSDNで理解。
ちなみに、同プロジェクトの人に何度も説明したが、
誰も理解してくれなかった覚えがあり。
0067名無しさん@お腹いっぱい。
NGNG理解できる範囲の事しかわからん。
006863
NGNGWin32マルチスレッドプログラミング買いました。
I/O完了ポートを使ったサーバーのサンプルがそのままついているのはありがたかったです。
本をサンプルソースを眺めてなんとなくですが仕組みは理解することが出来ました。
ありがとうございました。
0069問題提起
NGNG�@ISDN回線の2回線をパソコンの画面で制御できる。
�ATAのリダイアル規制をはずして1分間に60回リダイアルできる
�B1つの番号が混んでいたら他の予備に登録した番号をどんどんかけていく
このようなプログラムがわかる人いますか?
わかる人がいたら教えてください
0070>69
NGNG0071名無しさん@お腹いっぱい。
NGNG0072名無しさん@お腹いっぱい。
NGNG氏ね
0074>70
NGNG0075教えて君
NGNG分かったのですが、?が%81Hって変換されるのは何故なんですか?
エンコードの方法が良く分からないので教えていただけないでしょうか。
0076名無しさん@いっぱいいっぱい
NGNG端末 → NTマシン → UNIXマシン
という構成で中間のNTサーバで複数の端末から送られてくるファイル
を一括して受け取り。その後UNIXに転送しています。
(転送方法は端末→NT、NT→UNIXともFTPです。)
現在はNTサーバに一時フォルダを設けて、そのフォルダの中身を定期的
に覗いてファイルがあれば転送するプログラムを常駐させているのです
が、これをファイルが転送されて来たのをトリガにしてリアルタイムに
転送する方法は無いのでしょうか?
NTサーバでなくUNIXならばftpの設定をいじくって(inetd.confだっけ?)
転送用のバッチを用意すればよかったと思ったけど、NTはさっぱり分かり
ません。何か参考になるURLだけでもいいですから教えてもらえないでしょ
うか?
0077名無しさん@お腹いっぱい。
NGNGFindFirstChangeNotification()APIの説明を読んで
適当なプログラムを書くよろし。
俺はスプーラ書くときに必ず使う。
0078名無しさん@お腹いっぱい。
NGNG1) RFC1738を読め
ftp://ftp.iij.ad.jp/pub/RFC/rfc1738.txt
2)
シフトJISにおける全角?のコードは0x8148で、0x48はASCIIのH。
0079名無しさん@いっぱいいっぱい
NGNGありがとうございます。
早速調べてみます。
0080名無しさん@お腹いっぱい。
NGNG可能でしたら方法をおしえてください。
008175
NGNG有り難うございます。どのrfcを読めば良いのか分からず困ってました。
では、もう少し頑張ってみます。
0082名無しさん@お腹いっぱい。
NGNG?の文字コードが0x81で始まる事を知らなかっただけのような気が・・
008375
NGNGいーえ、知ってたのですが一部の2バイト文字の2バイト目がアルファベットに
変わってるが理解できなかったのです。
あ、ひょっとして2バイト目がアルファベットと同じ場合はそのままで
送るのか。。それだったら俺すっげー間抜けだ。。
0084名無しさん@お腹いっぱい。
NGNG「アルファベットと同じ場合は」じゃなくて
「ASCII文字だったら」だな。
おっとスラッシュは以下略
008575
NGNG間抜けな俺に色々有り難う。。あー恥ずかしい。
0086名無しさん@お腹いっぱい。
NGNGつまり、屋外からノートとか使って自宅マシンの
ファイルをいじったりてことか?
008780
NGNGそうです。
自宅マシンをずっとネットに続けておけば問題ないのですが、
通信料の問題もあるしずっとつなげつづけることは不可能なんで、
屋外からダイアルアップ接続ができれば便利だなと。
0088名無しさん@お腹いっぱい。
NGNGいい答えが得られると思う。
0089名無しさん@お腹いっぱい。
NGNG009080
NGNGどうもです。
RAS…もちょっと勉強が足りんようです。
RAS系のAPI使ったサンプルプログラムさがしてみます。
その前に、家にはモデムしかないけど他に機器を買わないと無理なような…。
0091名無しさん@お腹いっぱい。
NGNG今目の前にwin98SEがあるけど、
ダイアルアップサーバなるモノが入ってるから、
多分それじゃねぇかな?
0092名無しさん@お腹いっぱい。
NGNGプログラムすることは必要無いと思うぞ。
Windowsにそういう機能があるって。
あと、モデムでも待ち受けできると思う。
009380
NGNG情報ありがとうございます。
残念ながらwin98を持ってないのですぐには試せそうもないです。
なかなか見つからないですが、
win2kでもつかえるダイアルアップサーバーはないでしょうか。
できればソース込みで。
あと、モデムで待ち受けができるのは初めて知りました。
0094初歩的な疑問
NGNG受信側の recv の返り値は、100KB に満たない場合があるじゃないですか?
こうなる理由はなぜなんでしょうか?
0095名無しさん@お腹いっぱい。
NGNG細い線が間に入ってパケットが分割されたとか、
何らかの原因でパケットが損失して再送してもらってる
とかいろいろ考えられる。
0096名無しさん@お腹いっぱい。
NGNGrecv一発で届いたら、ダウンロードの状況表示がいらないことに気がつきませんか?
009794
NGNGいまいち意味がよくわからないんですけど、
それは、送信側が(例えば10MBのファイルなんかを)send一発で出す訳じゃないと思うので、当てはまらないんじゃないかと...
0098名無しさん@お腹いっぱい。
NGNG0099名無しさん@お腹いっぱい。
NGNG0100名無しさん@お腹いっぱい。
NGNG0101名無しさん@お腹いっぱい。
NGNG回線が混んでいて0.1KB/sしか出ないときも、
それがsendで送った最小単位だと思っているのか・・・
TCPとUDPの仕様を混同してるな
0102しろーと
NGNG各パケットはそれぞれ違うルートを通るんだよね?!
そして中には消失しちまう輩も出るんだよね。
TCPは再送要求するが、UDPはそんなもん無視する。
全部送られるか、タイムオーバーとかして、溜まった所でrecvが成立する。
で、よろしいでしょうか?
0103名無しさん@お腹いっぱい。
NGNG違う。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「届いたよー、次のパケットよろしく」
「あれ?こないよ(変だよ)?、もう一回送ってー」
とかいうやりとりをやってるんじゃなかったっけ?
0105名無しさんi486
NGNGプログラムからはその動作は見えない
パケットサイズ関係なしに連続したデータに見える
0106名無しさん@お腹いっぱい。
NGNGパケット一個ごとにそんなことをやっていたら致命的に遅くなるぞ
再送要求はシーケンスが連続していなかったときだけ
いい加減なことを言う前にきちんとTCP/IP本を読め
0107名無しさん@お腹いっぱい。
NGNGおまえもよく読め
0108名無しさん@お腹いっぱい。
NGNG(LinuxやNTがAcceptする場合の話し)
0109名無しさん@お腹いっぱい。
NGNG0110名無しさん@お腹いっぱい。
NGNG理屈はそうだけど、実際問題そんなにつないで動くんでしょうか?
Javaのソケットだと500ポートくらいでいかれ始めるらしいけど。
0111新米ギコ@すぐ出て逝きます
NGNG|Д゚)<ポート食潰すより、衝突の方が困るッス
|⊂ 10000より大でユニークなの選んだはずなんだけどなぁ
| |
| U
0112名無しさん@お腹いっぱい。
NGNG予約ポート以外を食いつぶすまでは大丈夫
acceptで生成されたソケットのポートを表示するプログラムを作れば分かります
0113名無しさん@お腹いっぱい。
NGNG0114名無しさん@お腹いっぱい。
NGNGTCP/IPの入門書を読んでみよう。
0115名無しさん@お腹いっぱい。
NGNGそれはそーなんでしょうけど、
実際問題として、accept したらプロセスなり、スレッドなり起こして処理する場合は、
プロセスやスレッドの限界が先に来そうな気がします。
0116名無しさん@お腹いっぱい。
NGNGacceptは受付ソケットが固定のポートを必要とするだけで、
接続が確立されるごとにソケットを作って新しくポートを割り当てています
0117名無しさん@お腹いっぱい。
NGNGードとマルチスレッドを比較した場合、マルチスレッドはスレッド
の数が増えすぎると、非常に遅くなることがある、と指摘していま
す。
スケーラブルなWinSockサーバーアプリケーションを作成する場合、
非同期処理にするかマルチスレッドにするかの適切な指針というの
はあるのでしょうか?
0118名無しさん@お腹いっぱい。
NGNGと、書いてる通り。
だから、コネクションが二桁以上になるようなサーバに関しては、
基本的に非同期にして、ボトルネックになるような重い処理が存在する場合は、
ワーカースレッドをいくつか用意して、リクエスト毎にキューにつめて、
そのスレッド達に処理をさせるような形にすると負荷が分散されて良いと思う。
0119名無しさん@お腹いっぱい。
NGNG0120名無しさん@お腹いっぱい。
NGNGどうも、ありがとうございます。
二桁以上ということは、10以上ということですから、スケーラビリティが必要な場合は、
事実上、非同期処理が必須ということですね。
Windows NT/2000での並行処理には、マルチスレッドが高速というイメージがあったので
すが、そんな単純なものではないことがわかりました。
他のレスにもあったI/O完了ポートについても、調べてみます。この場合は、マルチスレ
ッドの同期処理ということになるのでしょうか。ワーカースレッドのキューイングメカ
ニズムを実装するか、I/O完了ポートを使用するべきか、迷うところです。
0121名無しさん@お腹いっぱい。
NGNGスレッドプールって奴だね。
>>119
ちょっと表現が不適切。ファイルディスクリプタのmaxに引っかかる場合
もあるぞって事ね。limitで拡張できる事もあるが。
Win32はいくつまでだったっけか。
0122名無しさん@お腹いっぱい。
NGNG非同期モードにしてると、ひとつのメッセージの処理(JIS<>SJIS変換など)を
している間に、サーバから大量のメッセージが送られてきた場合
処理が終わる前に次のメッセージによってバッファが上書きされて
上手く行かないのですが、どうしたら良いでしょう?
とりあえず、4kバイトくらいのバッファを用意して、そこに転送してから
JIS<>SJIS変換などの処理を行っているんですけど、それでもバッファが
全て埋まってしまう可能性があるわけで・・・。
チャットプログラムについて詳しく解説してあるホームページや
書籍などはないでしょうか?
0123名無しさん@お腹いっぱい。
NGNG> 処理が終わる前に次のメッセージによってバッファが上書きされて
> 上手く行かないのですが、どうしたら良いでしょう?
TCPなんだったら、処理が終わるまでrecv()しなければ良いと思うんだが…
UDPだったらとりあえず、データをバッファにプールすればいいんじゃないの?
いくら何でも、処理がおっつかないほど大量にデータがくるとは思えないし、
こういう方法でダメなら、構造的に無理だと思うけど。
> チャットプログラムについて詳しく解説してあるホームページや
> 書籍などはないでしょうか?
注文がニッチなので、122がそれを行え。
0124名無しさん@お腹いっぱい。
NGNG>TCPなんだったら、処理が終わるまでrecv()しなければ良いと思うんだが…
私の理解不足かも知れませんが、非同期の場合、サーバからデータが送られてきたら
現在行われている処理とは別のスレッドのようなものが自動的に作成されて
FD_READ以下の処理が行われてしまう気がするのですが、違いますでしょうか?
プログラムの動作を見ていると、ひとつのメッセージ処理を行っている間に
サーバから他のデータが送られてきた場合、FD_READ以降の処理(recv()など)が
行われているので、自動的にrecv()してしまうのですが・・・。
私自身のプログラムでは、スレッドは作成していないので、WSAAsyncSelectによって
自動的に複数のスレッド(?)が作成されて実行されているように思えます。
かといって、同期処理にしてしまうと、瞬時的に固まってしまって実用的では
ないのです。
0125名無しさん@お腹いっぱい。
NGNG123じゃないが...
> 現在行われている処理とは別のスレッドのようなものが
> 自動的に作成されて
そんなことはないよ。気になるんなら、それぐらい自分で調べれ。
気になる箇所でGetCurrentThreadIdでも使えばいいだろ。
本当にPrimaryThreadしか動いていないのなら....
>>122
における
> ひとつのメッセージの処理
の中で GetMessage/PeekMessage相当のものが呼ばれるようなことを
やっていないか?要はVisual BasicにおけるDoEvents相当の処理だな。
後は、「自動的にrecvしてしまう」も何も、 recvを呼んでいるのは
どっかの小人さんじゃなくて自分だろ?
ソケットに対応するデータ構造ぐらい用意してるんだろうから、それに
「処理中」のフラグでも加えてやればいいわな。
0126名無しさん@お腹いっぱい。
NGNG>Win95にwinsock2を安全に入れる方法を発見すればおっけー
これは、発見されていないですよね。
もしかしたら、ムー大陸のように、最初から存在しないのかもしれません。
0127名無しさん
NGNGあなたは根本的に最初から間違ってます。
勘違いしていると言った方が正確でしょう。
無理です。
0128名無しさん@お腹いっぱい。
NGNGバッファをスタック(ローカル変数)にとってないでしょ?
0130名無しさん@お腹いっぱい。
NGNGじゃなくて124だ。藁>オレ
バッファをスタックにとれば、バッファの上書きはさけられるだろう。
ちょっとだけ工夫しないとさかさまの順番にメッセージが届いているように
見えるかもしれないけど。
0131名無しさん@お腹いっぱい。
NGNGそんなことをしなくても受け取らなければ上書きされることはない
0133名無しさん@お腹いっぱい。
NGNGなんでスタックなのか知らんが、普通にリストなり標準C++のstringを使えばいいじゃん。
0134名無しさん@お腹いっぱい。
NGNGバッファ管理、非同期I/O、マルチスレッド、メッセージループ、ウインドウプロシージャ
の関係が理解できていないからうまく作れないのです。>124
0135名無しさん@お腹いっぱい。
NGNG>バッファをスタック(ローカル変数)にとってないでしょ?
ええ、その通りです。なぜ分かったのですか?
バッファをローカル変数にしてやってみます。助言ありがとうございました。
>134
>途中までいい感じだったのが、とんでもなく低レベルになってる気がする。
申し訳ありません、私のせいですか?^^;
134さんの言う通り、
>バッファ管理、非同期I/O、マルチスレッド、メッセージループ、ウインドウプロシージャ
の概念が理解出来ていないのかもしれません。
実は、C/C++とWindows環境でプログラムを組むのはこれが始めてで
以前は、ザイログニーモニックのアセンブラとBASICでプログラムを
組んでいました。
根本的な部分での理解が不足しているのかも知れません。実際、理解に苦しむ部分が多いです。
ただ、昔なら音楽をひとつ鳴らすにも、BGMドライバを作成して、ドライバ専用のデータを
作成するMMLエディタ&コンパイラを作って・・・と大変でしたが
Windows環境では、ほとんどの機能がAPIなどで用意されているので
楽だなあと感じています。始めに覚えることは多くて、慣れませんが。
0136>135
NGNGそれなら、楽にこなしてくれ。
組み込み関連やってるなら、すぐわかる問題点だよ。
ウインドウズのイベントドリブンな構造とバッファ制御は、
割り込み制御よりはるかに簡単なはず。
0137名無しさん@お腹いっぱい。
NGNGMFCを使っている時点で逝って良し
0138名無しさん@お腹いっぱい。
NGNGsendしたら、FD_WRITEもらうまでバッファ開放しちゃだめだよ〜。
0139138
NGNG書かないようにね〜。
014033
NGNG>>127さんへ
>あなたは根本的に最初から間違ってます。
>勘違いしていると言った方が正確でしょう。
>無理です。
勘違いしてるらしいことはわかりました。
34さんのレスには私が理解している以上の含みがあったのでしょう。
恥をしのんで、おたずねしますが、何を勘違いしているのでしょうか?
「無理です」というのは、インストールが無理だということなのでしょ
うか? 全然、わかっていないようです。
0141名無しさん@お腹いっぱい。
NGNG名前:33は126の間違い
0142名無しさん@お腹いっぱい。
NGNG0143>138=139
NGNGhttp://www.nakka.com/lib/inet/httpcex.html
のHTTPSendRequest関数
0144名無しさん@お腹いっぱい。
NGNG138じゃないが....
そもそも
sendがWSAEWOULDBLOCKになる場合があるのを全く考慮していない。
ダメダメ。
0145132=40
NGNG重ねてお聞きしますが、Windows95にWinsock2をインストールした後の問題を
解決する方法を >>40 に書いたのですが、この方法に何か問題があるのでしょうか?
ぜひ教えてください。
0146143
NGNGwwwcもsendがWSAEWOULDBLOCKになる場合があるのを全く考慮していなかった。
0147138
NGNG結構馬鹿プログラム多いのね。
特にsendの場合運がいいと適当に動いちゃうし、
仮にUAE起こしても、OSの中で起きるから、
作った奴は、「これだから、Windows or WinSock は!」
とか言ってるかもしれない。恥ずかしいねぇ。
0148名無しさん@お腹いっぱい。
NGNGだから、チェックが入ってなくても全然おかしくない。
sendで返ってきたぶんだけ、送るバッファのポインタをずらすとかするわけだし。
0149>148
NGNGバッファもスタックに取ってる。
NonBlokモードならいつ逝ってもおかしくない。
通常、NonBlockモードでも、socket側のバッファにコピーされるだけだから、
低負荷な状態なら、sendはWSAEWOULDBLOCKを返さない場合も多いだろう。
>だから、チェックが入ってなくても全然おかしくない。
Blokingモードで作ってるつもりなら、別の意味でチェックしたほうがいいだろう。
どこかで、NonBlockに変更されてる可能性がある。
どちらにせよ、WSAEWOULDBLOCKをもらったら、送信が完了するのを待つか、
socketをcloseしない限り、送信バッファも開放できない。
>sendで返ってきたぶんだけ、送るバッファのポインタをずらすとかするわけだし。
ポインタずらして何するのさ。FD_WRITEまで待てよ。
0150>146
NGNG0151名無しさん@お腹いっぱい。
NGNG使う必要性が無いと思うんだけど一般的に何に使うの?
0152名無しさん@お腹いっぱい。
NGNG漏れはsend成功したらその分のバッファはsocket側が
コピーして勝手に送ってくれるはずなので、即解放してもOKと考えるがどうか?
0153名無しさん@お腹いっぱい。
NGNG適合しやすいので使う ヽ(´ー`)ノ
0154148@NonBlocking
NGNG> >sendで返ってきたぶんだけ、送るバッファのポインタをずらすとかするわけだし。
> ポインタずらして何するのさ。FD_WRITEまで待てよ。
だから、今回のsendで送れた分だけずらして、次のFD_WRITEを
待つんだよ。
あと考えてみたが、WSAEWOULDBLOCKをチェックしないと、
sendできなかったのがfatalエラーなのか、混んでるだけなのか
わかんないからやっぱチェックせんといかんな。
0155>150
NGNGSDKにはこう書いてある。↓
The WSAAsyncSelect function automatically sets socket s to nonblocking mode,
WSAAsyncSelect を使うと自動的にNonBlocking Modeになるようですが。
BlockingModeで使うなら、BlockingModeに戻さないといかんのじゃないの?
0156>152
NGNG>コピーして勝手に送ってくれるはずなので、即解放してもOKと考えるがどうか?
そりゃ、成功したなら即開放していいでしょ。
問題は、WSAEWOULDBLOCKになった場合のことでしょ?
0157名無しさん@お腹いっぱい。
NGNG>>152
138はsendがEWOULDBLOCKにより「失敗」した場合のことを書いているように
見えるのだが。
send --> EWOULDBLOCK --> FD_WRITE --> send(再送)
>>154
> 今回のsendで送れた分だけずらして、次のFD_WRITEを待つ
も何も、sendが正常終了したのなら、待ったところでFD_WRITEは来ないぞ。
accept/connect後のFD_WRITEはともかく、それ以外のFD_WRITEは、
一旦pendingの状態になっていたsendに対するものと思え。
> あと考えてみたが
今までどんな恐ろしいモノを顧客に納めてきたかは聞かないことにするよ。
0158157
NGNGスマソ
0159名無しさん@お腹いっぱい。
NGNGいたような記憶が。へたれは多い・・・
0160154
NGNG>> 今回のsendで送れた分だけずらして、次のFD_WRITEを待つ
> も何も、sendが正常終了したのなら、待ったところでFD_WRITEは来ないぞ。
送るデータがバンバンにあるんだよ。
送りたい分全部おくれたらFD_WRITE待たないよ。
> 今までどんな恐ろしいモノを顧客に納めてきたかは聞かないことにするよ。
随分前にやったことなので、あんまり覚えてなかったんだよ。
sendっが0返したときがいっぱいでそれがブロックだっけ?
っていう風な記憶になってた。
いっぱいだとsend()でSOCKET_ERRORがかえって、
WSAGetLastErrorでWSAEWOULDBLOCKになるのを確認して、
FD_WRITEを待つんだよな。
ちゃんとそう作ったから安心すれ ヽ(´ー`)ノ
0161152
NGNGそうか、ブロックになったときの話だったのか。
そりゃ、送れてないんだから解放したらだめなのは当たり前だな。
0162>157,160
NGNGFD_WRITEは、送信完了じゃなくって、送信可能を示す。
だから、送信成功後に、FD_WRITEを待ってもなんら問題ない。
0163名無しさん@お腹いっぱい。
NGNG作って事ないじゃないの?
0164160
NGNG> だから、送信成功後に、FD_WRITEを待ってもなんら問題ない。
漏れが作ってたのはFTPだから、送ったら終いよ。即closeする毛
0165名無しさん@お腹いっぱい。
NGNGんな馬鹿なことがあるか。
acceptやconnect直後か、sendがブロックからsend可能になった
時だけだろ。
0166>165
NGNGクライアントソケットなら、connect後の送信可能な場合。
サーバーソケットなら、acceptしたソケットが送信可能な場合だな。
selectすれば、すぐにFD_WRITEが返ってくるってことだ。
157,160は
>FD_WRITEは、送信完了じゃなくって、送信可能を示す。
ってところを勘違いしてるようだからな。
0167>164
NGNGコントロールポートはどうしてるんだ?
それに、そのFTP(サーバーか?)は一回のsendですべて送信してしまうのか?
不可解だ。
0168名無しさん@お腹いっぱい。
NGNG????
WSAAsyncSelectを使っているのにselectを使うのか?
何のために?
0169>168
NGNGちなみに、WindowプログラムでもWSAAsyncSelectなんて使わないで、
selectを使用してソケットプログラミングは出来るよ。
というか、WSAAsyncSelect遅延が大きいから、俺は使わないけど。
0170名無しさん@お腹いっぱい。
NGNGずーっとWSAAsyncSelectを使った非同期ソケットプログラミングの
話をやってたのに、自分だけバークレイ方式での非同期ソケットに
関する話を強引にやってた訳ね。で、あんたの言ってるFD_WRITE
とかは、要するにwrite_fdがSETされた、ってことな訳か。
この親父何訳わがんねこと言ってんのかと思ったよ。
0171>170
NGNG非同期ソケットだからといって、WSAAsyncSelectは必須ではないんだよ。
WSAAsyncSelectのために非同期ソケットにするわけじゃないんだから。
俺がWSAAsyncSelectを使わないってのは、まったくの余談の付け足しで、
selectを例としたことと関係ないんだけどね。
それに、BSD互換ソケットでも、winsockでもFD_WRITEの考え方は、同じだよ。
selectを例にだしたのは、一番理解しやすいだろうからだが。
>この親父何訳わがんねこと言ってんのかと思ったよ。
それは、あなたの理解力が低いからだね。
困った困った。(藁
0172170
NGNGそういういい加減な書き方止めろよ。仮にも技術者なんだからな。
そして、理解されないことを他人の理解力のせいにするな。
それで良くこの仕事をやってこれたな。
> 非同期ソケットだからといって、WSAAsyncSelectは必須ではないんだよ。
WSAAsyncSelectの話をしているのに、「非同期ソケット」一般の
話を急に持ち込むな。そうするなら明示しろ。
> BSD互換ソケットでも、winsockでもFD_WRITEの考え方は、同じだよ。
「考え方」が同じだからといって、同じ用語を説明もなしに使うな。
無説明にFD_WRITEと言ったら、普通はWSAASyncSelectのソケットイベント
のことだと思うぞ。お前は本気でBerkeleyの世界で「FD_WRITE」という
という用語を使っているのか?
0173>172
NGNGかるしうむ不足なんじゃないかなぁ?
私は最初から、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と思うぞ。WinSock用語なんだから。
0175174
NGNGさせただけに見えるな。まぁタイプ量少なくて書くには便利かもしれん
けど、俺も
>無説明にFD_WRITEと言ったら、普通はWSAASyncSelectのソケットイベント
>のことだと思うぞ。
と思うな。
0176>174
NGNGでも、WinSock用語でとりあえず通じてるみたいじゃん。
0177170
NGNG仲良くなりたいんなら
> それは、あなたの理解力が低いからだね。困った困った。(藁
なんて言わないことだな。
お前自分の非を認められないタイプだな?(苦笑)
本当は、それまでの話の流れでWSAAsyncSelectの話をしていたのに
気づかず間抜けな書込みをしただけだって正直に言えよ。
166ぐらいで「勘違いだった」って言えばそれで話は終わったんだよ。
> FD_WRITEは、WSAASyncSelectでもselectでもpollでもWSAEventSelectでも
> みんな意味は同じなんだけど。
じゃあ、"FD_WRITE"を文字通りに使った例見せてみ。 selectでいいぞ。
>>174
通じてねえから164/165みたいなことになったんだろ。
0178名無しさん@お腹いっぱい。
NGNG>>176
だった。
0179名無しさん@お腹いっぱい。
NGNGああ、そういう事か、言われてみれば、selectとpollにFD_WRITEはないな。
これは、確かに誤解を招くね。
>177
そういうことで噛み付いてるとは、まったく気づかなかったよ
意地悪だねぇ。最初から、そう言えばいいじゃない。
0180170
NGNGなんかどっと疲れが.....
だったら
> FD_WRITEは、WSAASyncSelectでもselectでもpollでもWSAEventSelectでも
> みんな意味は同じなんだけど。
> >無説明にFD_WRITEと言ったら、普通はWSAASyncSelectのソケットイベント
> >のことだと思うぞ。
> 普通思わないんじゃないかな。まぁ、話の流れから、あなたがそう思ったなら、
> 言葉足らずだったのでしょうね。ごめんね。
とか大嘘書くんじゃねえ。
「言われてみれば」とか言ってる場合じゃねえだろ。
0181名無しさん@お腹いっぱい。
NGNG0182126=140
NGNG40の回答が34に対するものだということを見過ごしていました。
132は数字しかなかったので、自分あてのものだということに気
づかなかったのです。
せっかく、書き込んでくれているのにもうしわけありません。
安全にインストールするという意味で、40=132=145さんの答えで
いいのだと思います。知りませんでした。有益な情報をありがと
うございます。
ただ、アプリケーションを配布する上で、ユーザーに対してモジ
ュールをダウンロードしろといえない場合もあります。そのとき
に自分が提供するインストーラで安定してインストールさせるこ
とができないならば、Winsock2.0を使えないことがあるのです。
ただ、Windows 95はじょじょにマイナーなOSになりつつあり、ま
た、古いのだから、新しいアプリケーションに対応するためにダ
ウンロードしろ、といえる環境になりつつあります。
もっとも、ダイヤルアップ ネットワーク 1.3 が安全にWinsock2.
0をインストールさせることができるならば、インストーラで確実
にインストールさせることはできるはずです。
ただ、うちの場合、ActiveXコントロールと一緒にWebベースでイン
ストールさせないといけない場合も多いので、やはり、むずかしそ
うです。
0184名無しさん@お腹いっぱい。
NGNGソケット(TCP)で通信する場合の通信フォーマット(可変長電文)を決める時って、みなさんどうされてます?
データの最後を判別する場合、
1.バイナリデータで、ヘッダーにサイズを入れる。
2.アスキーコードにして、NULLとか改行コードで電文の最後を判別。
3.その他
あと、ACK(というか応答電文)みたいなものは用意しますか?
0185>184
NGNGヘッダーと言うか、先頭にデータ長入れるけど。
バイナリデータはこうしないと確実な区切りを識別させるには、
もっと面倒なことするか、ソケット切るしかなくなるから。
>あと、ACK(というか応答電文)みたいなものは用意しますか?
さらに上位のハンドシェークを入れるるのは、なんだかなと・・・
たまに見かけますが。
0186名無しさん@お腹いっぱい。
NGNG簡単なのだったらPOP3みたいに全部テキストで\n区切りにするとか。
# telnetでdebugできて便利。security的には駄目だが
ACK/NAKの仕組みは必要でしょ。
0187186
NGNGおいおい。いくらTCPでパケットロストが無いことが保証されてても、相手が
ちゃんとrecv()して送り側の電文を処理したかどうかは上位(APレベル)
プロトコルで確認するしかないだろ。それが冗長だと言うなら、既存プロト
コル(POP3, NNTP, FTP, and etc...)もみんな冗長かい。
0188186
NGNG場合は、必ずしも応答返す必要はないけどね。
# 処理状態報告とか。まぁそれだったらそもそもUDPでいいじゃんて話
# もあるけれど
0189>187
NGNG>>186の処理状態報告という同じ意味なんだけどね。
pop3,nntpのようなアプリケーションプロトコルは、取り決めしなきゃ、
データのやり取りできないから当然必要ですよね。<いくらなんでも、これなしに通信が成立しない。
参考までに、知ってるとは思うけど、ftpのデータ転送はソケットが繋がったら、
ハンドシェーク無しで転送して送り終わるとソケットを切るだけの仕様になっています。
途中にACK/NAKのようなデータ確認手順はありませんよ。
0190184
NGNG>>186
日曜日なのにわざわざレス有り難う御座います。m(")m
結局、ACK/NAK(相当?)の必要性は、システムポリシーに依存する訳でしょうね。
テキストかバイナリか、については如何でしょうか?
確かに telnet で debugできるのは良いのですが、データ量があるので辛いかも...
あと、個人的には、改行区切りとかだと改行が来るまで1バイトハンドリングしなきゃならない。っていうのが
COMポートみたいで、なんだかな〜。と思ったりもします。
0191>190
NGNGいいかもしれませんが、扱うデータにバイナリが含まれる場合は、
テキストベースで制御するのは、それなりに、面倒な処理が必要になります。
汎用な手順を考えていないなら、[データ長][データ]の形式で処理してやる方が、
簡単でしょう。
0192名無しさん@お腹いっぱい。
NGNG> 改行区切りとかだと改行が来るまで1バイトハンドリングしなきゃならない
UNIXならfdopenしておいてfgetsで読むのが普通では?効率も悪くない。
winsockならMSG_PEEK指定でのrecvで改行位置をチェックしてから本読み込み
やるのが比較的マシと思う。
0193190
NGNG元はバイナリなので、テキストでやるとしたらなんらかの手段(Base64とか単純にアスキーコードに変換とか)で、
変換する予定でいます。
>>192
>UNIXならfdopenしておいてfgetsで読むのが普通では?効率も悪くない。
ソケットでfgetsって使ったことないんですけど、データ(改行)が到着する以前に、fgets を使っても大丈夫なもんなんですかね?
0194192
NGNG「大丈夫」とは?
fgetsを使う場合は、ソケットはブロッキングモード、
タイムアウト監視はalarm()で、というのが普通と思う。
無論この場合は、改行前にfgetsを呼んでも単に
ブロックするだけ。
非同期モードの場合には、そもそもfgetsを使うべき
ではないだろう。
0195193
NGNG>無論この場合は、改行前にfgetsを呼んでも単に
>ブロックするだけ。
ああ、なるほど、そういう方法もあるんですね。実はブロッキングモードって使ったことなかったもんで。
失礼致しました。(ちなみにOSはLinuxです)
0196>193
NGNG>変換する予定でいます。
通信量と要求される性能の問題だと思うけど、
8Bitコードを通せないとか特別な理由が無いなら、
非常に資源の無駄遣いじゃない?
base64でエンコードすると、およそデータ量は1.5倍ぐらいになるよ。
0197名無しさん@お腹いっぱい。
NGNGコマンドはテキスト。データはバイナリでいいんじゃ
ねーの?俺はそういう作りにしてるけど。って言うか
普通そうするよね?
0198193=184
NGNG個人的にはバイナリデータ希望なんですけど、(プロジェクト内の)人それぞれ考えが違うので...
(最初の質問= >>184 の意図は)バイナリデータにする為の説得材料を収集したかったといいますか...
>>197
コマンドっていうのは、POP3 で言えば、STAT とかのことですね?
で、返ってくるデータはバイナリ。
という意味ですかね?
0199197
NGNG俺がサーバー組む時のパターンだと、コマンドと
リザルトはテキスト。POPの某云々の解釈でOK。
で、バイナリデータの送受信は、ファイルのアッ
プロード/ダウンロードで実装するので、そこだ
けがバイナリデータ。例えばアップロードは
→UPLOAD:"パス名",ファイルサイズ
←RESLUT:OK
→バイナリデータ
←RESULT:OK,受信したサイズ
みたいに。バイナリデータは4096バイトずつ
のパケットでぐるぐるループして送る。
構造体みたいなモンをやり取りする場合は、その
構造体をテキストに変換するんだけど、それも可
読可能な方式にエンコードする。time_t型のデー
タなんかもYYYY/MM/DD,hh:mm:ssにするとか、定数
は#defineで定義したまんまの文字列に…とか。
あと、日本語の漢字コードや改行コードの変換も
エンコーダがサーバ上の形式に変換する。
だから、コマンドやエンコーダ/デコーダが構造
体の種類毎に必要なのがちょいとアレかもな。
サーバとクライアントのエンディアンやワード長
が同じなら、バイナリで送ってもいいかもな。
0201>199
NGNG0202名無しさん@お腹いっぱい。
NGNG199のプロトコルで1日中がんがん回すとかなら、性能的にもうちっと考えた
方がいいだろうけど、ワンショット送る位なら気にするほどでもないんじゃ
ない?
# データ形式やプロトコルは用途に合わせて選択しよー
0203WinSNMP
NGNGどなたか詳しく解説してある本やホームページがありましたら、
教えてください。
とりあえずTrapが打ちたい…( ゚Д゚)
0204>202
NGNGパフォーマンスを出しにくいことは、触れておくべきだろう。
双方向で、ガシガシ転送するのかも知れんし。
># データ形式やプロトコルは用途に合わせて選択しよー
それは、当然だろう。プロトコルに限らんが。
0205名無しさん@お腹いっぱい。
NGNG違うなら文字列に変換して送ったほうが無難
0206たおる
NGNGあれ、簡単だと思うから、簡単にでもいいから解説のあるとこ
教えて欲しいんだけど。
0207199
NGNGまさに、異OS、異アーキテクチャ混在なんで
パフォーマンス出ないのは承知でこんな仕様
なんだな。
クライアントだけでなく、サーバも同じく、
異OS、異アーキテクチャ混在だし。
0208>207
NGNGつーか、通信上は、ビッグエンディアンに統一するのが常識。
>異OS、異アーキテクチャ
そんこと当然として仕様は決めるもんだ。
バイナリ通信だからアーキテクチャ依存だなんてことはない。
送ったデータがアーキテクチャ依存のデータなら、文字列変換したところで、
元に戻せば、やはりアーキテクチャ依存のデータにしかならんだろ。
0209名無しさん@お腹いっぱい。
NGNGキャプチャ取ったりした場合に解析しやすいとか、
tnでつついて、デバッグ出来るとか、そんなことだろ。
デバッグしやすい以外の理由はないと思うが。
0210名無しさん@お腹いっぱい。
NGNG問題になるのはエンディアンだけではないだろう。
構造体を直接送るとなると、当然ワード長の違いやpaddingの問題があるし、
何より浮動小数点数のメンバがあったりすると論外だ。
0211名無しさん@お腹いっぱい。
NGNG0212>210
NGNGそんなものそのまんま送るほうが馬鹿。
たまに、こういう事して隙間だらけのパケットを送ってくる奴がありますが、
はっきり言って笑いものにされます。
ちゃんとパケットフォーマット決めて送りなさいって。
逆を言えばただそれだけのことじゃん。
0213????
NGNG0214>213
NGNGで通信したいのに
>構造体を直接送るとなると、当然ワード長の違いやpaddingの問題があるし、
を
>そんなものそのまんま送るほうが馬鹿。
ってことだろ。
0215名無しさん@お腹いっぱい。
NGNG> 異OS、異アーキテクチャ
を前提としているんでないの?
いや、213 の言ってることは初耳なんだけど、ほんと?
詳細解説希望。
0216213
NGNG詳細はソースを見てほしいけど、Xプロトコルのレコードそのものを
構造体に対応させている。アーキテクチャによっては直接実現不可能な
場合があり、その場合はビットフィールドを使って逃げている。
エンディアンが違っている場合は受信後にSWAPする。
非常に苦しい処理だけど、処理速度を最優先するとこうするしかない。
0217>216
NGNG性能のためアーキテクチャ依存する仕様だと言うことになるのかな?
しかし、異なるアーキテクチャでも変換することによって、通信可能な
訳だよね?どうやって情報を得ているの?
バウンダリする場合の規定とかを事前にネゴしてるんじゃない?
事前の設定でもいいんだけど。そうでもしなきゃ通信不能だよね。
そういう約束で動いてるのなら、構造体送信してもなんら問題ない
事だと思うけど。
212の言ってる馬鹿は、そういう約束事無しにそのまんま構造体を送信した場合のことでしょ。
0218213
NGNGエンディアンだけはどうにもならないが、Xプロトコルでは最初に
エンディアンの種別を通知するようになっている。変換が必要なら
受信側でエンディアンの変換する。サーバーとクライアントが同じ
アーキテクチャなら変換不要なので、エンディアンを規定して
しまう方法よりも効率が良い。
>212の言ってる馬鹿は、そういう約束事無しに...
よく見るとそうだなあ。煽ってすまん。
0219名無しさん@お腹いっぱい。
NGNGVC++だた、pragmaで構造体のアラインを指定できますよね。
GCCその他のコンパイラでは同なんでしょう?
何年か前に、Solalisでパケットフォーマットの構造体きるのに、
char配列で全部作ったことがあるんだけど、あまりにしんどいから。
0220名無しさん@お腹いっぱい。
NGNGinfo gcc
0221名無しさん@お腹いっぱい。
NGNG0222名無しさん@お腹いっぱい。
NGNG0223名無しさん@お腹いっぱい。
NGNG参考になるようなソースが公開されてるクライアントってあるのかな?
0224名無しさん@localhost
NGNGUnix向けのものはごく一部を除いて公開されてる。
http://www.irc.org/ あたりが良いのでは。
0225223
NGNGもしwindowsのC++とかで書かれてるのがあったらそっちの方がいいけど、
贅沢もいってられないか・・・。
0226名無しさん@お腹いっぱい。
NGNG>char配列で全部作ったことがあるんだけど、あまりにしんどいから。
共用体つかえばどうよ?
0227名無しさん@お腹いっぱい。
NGNG0228>226
NGNGunion {
char c[2];
short s;
} u;
long data;
};
とした場合、dataは構造体先頭から3バイト目になりそうな気がしないんだけど。
0229名無しさん@お腹いっぱい。
NGNGそんな簡単な事うだうだ考えるより確かめてみそ。
ただし、structのパディングは環境によって違うらしいから
妙な技使わないように。
0230>
NGNG一番簡単だと思うが‥C++ならクラス化してしまえば安全だろうし‥
なぜにそんなくらいをめんどくさがる?
もしかしてメンバが2万個くらいあるのか?
0231名称未設定
NGNG非ブロッキングソケットのconnectをselectで待っていて、
connectできなかったときexceptfdsにそのソケットが入ってきますが、
そのときのエラーコードってどうやって調べるんでしょうか?
WSAGetLastError()では0が返ってきちゃいます…。
0232名無しさん@お腹いっぱい。
NGNG以下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).
0233232
NGNGoptvalとして0が返ってくるね。
0234231
NGNGサンクスです。できました。10061(WSAECONNREFUSED)が
返ってきました。
けど233はなんででしょうね…。
0237名無しさん@お腹いっぱい。
NGNG複数接続可のサーバープログラム
(プロトコル:TCP、開発環境:VC++6.0、WinSock Versiion1.1、クライアント別の処理はSelect()で切り分け)
を組みたいのですが
接続してきたクライアント毎のタイムアウト設定の方法は
何か決まりきった手法はあるのでしょうか?
また、良いアイデアなどあったらよろしくお願いします
私は下の力技しか思い付きませんでした・・・
Accept()の時点でクライアント毎のタイムアウトのカウンタを生成(300秒とか)して
Selectの直前でタイマはってSelect直後でカウンタから減算
カウンタが0以下になったらshutdown()
データ処理があったらカウンタをリセット
0238名無しさん@お腹いっぱい。
NGNGselectにタイムアウトの指定がモロにあるだろう
何で使わないんだ?
0239名無しさん@お腹いっぱい。
NGNG以下は別に「決まりきった方法」という訳じゃないが...
1. connect/入出力発生時に、「次のタイムアウト時刻」を計算してそれを
保持しておき、タイムアウトチェック時は単にそれと現在時刻を比較する
ことにすれば、カウンタ管理などは要らない。
2. タイムアウト管理情報をキューの形で保持し、先頭の方からチェックして
いくことにより、毎回全ソケットに対してタイムアウトのチェックを行う
必要がなくなる。ただしこれは、「任意の場所からの削除」が行えなければ
ならないので、厳密にはキューではない。
>>238
シングルスレッドのサーバで、複数のsocketを1度のselectで同時監視するから
だろ、どう考えても。
0240237
NGNG早速のレスありがとうございます
今のところクライアント数はそれほど多くは考えていないので
1.の方法で行こうと思います
ただ、クライアント数が増えると厳しいので
2.の方法をキュー管理スレッドを1個立ててやっても良いかな
と思っています(シングルだとselect()のタイムアウト値に絡んでくるから・・・)
ただ、select()、rcve()、send()、shutdown()、close()などの処理中に
別スレッドからshutdown()した時の動作が確実なのか?(タイミングの問題)が
疑問なのでそれらを調べてからやってみます
0241>240
NGNG>疑問なのでそれらを調べてからやってみます
そういう時は、クリティカルセクションやミューテックス等で同期を取りましょう。
全ての条件での動作の検証は、現実的に不可能です。
0242名無しさん@お腹いっぱい。
NGNGWinsock1.1ということだが、
setsockopt SO_SNDTIMEO
setsockopt SO_RCVTIMEO
は使えるのだろうか。これが使えればソケット毎にタイムアウト値を
設定できるので、↑のような苦労は一切不要になる。
試してみては。
0243名無しさん@お腹いっぱい。
NGNG0244242
NGNGうんMSDNのsetsockoptのヘルプには「Version2でサポート」
と書いてあった。
のに、WSAStartupでバージョン1.1を指定しても使えた。
厨房で赤ちゃんでドキュソな僕ちんにはWinsockは良く分かりまへん。
0246名無しさん@お腹いっぱい。
NGNGノンブロックのクライアントソケットで、
connectしたときに、sinがリトライすると、
サーバー側が遅れてsinを返してもconnectが、
タイムオーバーで失敗するんです。
うまく回避した人いたら、回避方法教えてください。
私は、ブロッキングモードに書き直して納品に間に合わせたんだけど、
なんだか気持ち悪いんで。
0247名無しさん@お腹いっぱい。
NGNGsinとは3ウェイハンドシェークでいうところのSYNのことですかな?
SYNがリトライするとはどういうこと?
ノンブロッキングソケットでconnectしたらselect()かWSAAsyncSelect()で
完了を待たないとだめっすよ。
0248246>247
NGNG>connectしたらselect()かWSAAsyncSelect()で
は、話が噛み合ってません。
具体的には以下のような動作をした場合TCPプロトコル上は、
接続されてるにも関わらずconnectがエラー(無論selectで)
検知するということです。
Client Server
1 sin ->
2 sin ->
3 sin ->
4 <- sin
ダイアルアップルーターなどを使用した場合、
最初のsinでダイアル開始する為、この事象が発生します。
0249246>247
NGNGずっと、sinだと思い込んでいました。(恥
0250名無しさん@お腹いっぱい。
NGNGタイムアウトを縮めることはできても
伸ばすことはできないと記憶してます
でも、ブロッキングモードで問題が無いならそういうわけでもなさそうですね・・・
0251246
NGNG4のサーバー側からのSYNを受信しても、connectは完了しているはずなんですが、
selectは暫く終わらず、動作としては、SYNを受信できなかったような、
動きにをするんですよ。早い話が、Winsockのバグだと思うんですけどね。
逆にこういうやり方なら問題なかったとか、知りたいんですよ。
0252名無しさん@お腹いっぱい。
NGNGWSAAsyncSelect()でもおんなじなんですか?
0253246>252
NGNGWSAAsyncSelect()は試していません。
隠しウインドウを作ってもよかったのですが、
その時は、うまくいったり駄目だったりで、
(どうもSYNの再送回数と関係が有るようでした)
アナライザ見ながらカットアンドトライした結果、
ブロッキングモードにすることを選んだんです。
もう少し時間があれば、やってみたんですが。
0254名無しさん@お腹いっぱい。
NGNGconnect()が本当に成功しているならソケットは必ず読み取り可になるんで
select()の動作自体を疑いたくは無いですね・・・
0255名無しさん@お腹いっぱい。
NGNG失敗する条件を教えてください
大きなデータ(ブロッキングモードで5MB前後)の場合、
エラーになる場合(-1)と送りきれる場合の
区別がつきません(まったく同じ条件で結果が分かれます)
現在、プラットホームを限定しないで情報を集めております
0256しろーと
NGNG1初回のsend(バッファに空きあり)
成功した大きさが返ってくる(ブロックしない)
2次にポインタをずらしてもう一回sendする(まだ空きがない)
ブロックする/エラー(WSAEWOULDBLOCK)
3selectで待つ/FD_WRITEが来るので、
2のsendをもう一回(ブロックしない)
成功した大きさが返ってくるので、2に戻る
こう考えているんだけど、合ってます?
0257>255
NGNG送信データサイズと送信エラーとに直接の相関関係はないでしょ。
相手局の問題や、通信経路(OSのバッファ等を含む)の問題の方が重要だとおもうけど。
win95のwinsockで、ノンブロックのsendで数M送信したら
Winが固まったことはある。
もちろんselectで送信完了を待って順繰りに2Kづつ送信した場合。
同じプログラムで、win98,NT4では問題なかったんだけどね。
0258255
NGNGブロッキングモード
ストリームソケット
クライアントのポートはconnect()に選ばせる
送信バッファ8KB
送信データ5MB
select()で送信可の確認
プログラム起動直後に1回のsend()で全部送る
受け側でデータ全体の受信を確認後終了(デバッグの意味)
受け側TAIME_WAIT後に同じプログラムを走らせる(受け側も再起動)
この状態で、send()の成否が分かれます
失敗する時には、ほとんど一瞬で帰ってくるのです
送信バッファに対してデータが大きいですが、直接原因になるのでしょうか?
実際には切り分けて送るので問題ないのですが
成否が分かれるのが気持ち悪くて相談したわけです
心当たりはないでしょうか・・・
0259>258
NGNG>受け側TAIME_WAIT後に同じプログラムを走らせる(受け側も再起動)
>この状態で、send()の成否が分かれます
このあたりに問題がありそうな気がするんだけど。
サーバー側のポートは、再起動する時点で本当に開放されてる?
ゾンビになってるとか無いよね?
0260名無しさん@お腹いっぱい。
NGNG0261名無しさん@お腹いっぱい。
NGNGポートが解放されていなければ、bindでエラーになるだろう。
setsockoptでSO_REUSEADDRオプションを指定していない限り。
>>258が
「TIME_WAIT後に」と云っているのはそういう意味だと
俺は受け取ったのだが。
0262259>261
NGNG実はそうなんではと疑ってるんだけど。
0263261
NGNG実はbindエラーのせいでサーバ側が起きてねえというオチ?
それならクライアントからのconnectも失敗するだろう。
bindエラーを見逃し、しかもconnectエラーも見逃すということを
やるだろうか。まあ俺ならやりかねんが。
それはともかく、サーバ再起動直後という特殊なタイミングのみに
起きる問題かどうかは切り分けたい。
サーバにずっとrecvさせておくようなパターンでも、
sendのエラーは発生するの? >>255
それと、h_errnoの値は教えてくれな。
0264259>263
NGNG>bindエラーを見逃し、しかもconnectエラーも見逃すということを
いや、connectが失敗するのも、sendが失敗するのも、
どっちもselectで待ってるものはおんなじだから怪しいなと。
改めて、見直してみると原因はこんなもんって結構おおいじゃない。(爆
クライアントがエラーになるから、必死にクライアント調べてみて、
FD_SETしてるのは、送信の方だから、送信エラーと思ってるとか・・・
つーか、255さん、なんか否定してよ。
0265名無しさん@お腹いっぱい。
NGNGどんな言語が必要ですか?
0266>265
NGNG0267>258
NGNG>送信バッファ8KB
8Kってあんまり意味ないと思うよ、
普通ウインドウサイズ2Kぐらいだし、
OSのオーバーヘッドを緩和したいなら、もっと大きくした方が良いだろうし。
まぁ、8Kが悪いわけじゃないけど、中途半端だなと。
0268255
NGNGサーバー側に問題がありました
サーバーは受取ったデータをファイルに保存するように作られていたのですが
これが、消えてなかったです、ファイルが重複してると接続を切るようにできていたので
connect()直後クライアント側は送信可能を感知して送信し、send()中にサーバーが切断してしまうという状態でした
接続が成功していたので安心しきって見落としてました
Winsock2.0ではsend()の戻り値はSOCKET_ERRORだから-1かな(書いたと思ってましたけど前々スレッドでしたね)
直後のWSAGetLastError()は10057でした(数値ですみません)
関数の存在自体を忘れてました・・・
それと、TIME_WAIT後という意味は261さんのとおりです
TIME_WAIT状態終了後と書くべきでした・・・
送信バッファはWinsock2.0のデフォルトじゃないんですか?
バッファいじってない状態でその値が取得できたのでそのまま使ったのですが・・・
自分の置かれている状態を正確に他人に伝えるのは難しいですね・・・
今回は色々と勉強させてもらいました
0269267>268
NGNG>バッファいじってない状態でその値が取得できたのでそのまま使ったのですが・・・
ああ、そういうこと。ソケット内のバッファの事ね。
アプリケーション上のバッファサイズ(送信単位)かと思った
確かWinsockについてはほとんど意味なしだったと思う。
詳しくは、前回号のMSDNに解説を読んでみてくれ。
0270名無しさん@お腹いっぱい。
NGNGを取得する方法はあるのでしょうか?
FormatMessage()見たいなやつです。
0271名無しさん@お腹いっぱい。
NGNGWinsock特有のエラー以外は、標準的なBSDのエラーコードに
WSABASEERR(=10000)を足した値になっているので、FreeBSD
あたりのsys_errlist定義をパクってくれば大概は事足りる。
もちろん日本語のメッセージにはならないけどね。
0272270
NGNGありがトン
パクってくる ε≡Ξヽ(´ー`)ノ
0273。>270,271
NGNGエラーメッセージ取得できるんだけど。
駄目だったエラーコードはどれ?
0274270
NGNGFormatMessage()がFALSEを返したのでだめだと思ったのさ。
でも多分僕のやり方が逝けないんだね(●´▽`●)
0275。>274
NGNG後、環境差異もあると思うんだよね。
私がここんとこ、見てたのは、W2Kだから。
ERROR_FILE_NOT_FOUNDとかの、ネイティブなエラーはメッセージ取れてる?
0276271
NGNG多分環境依存。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;
}
0277270
NGNG最後に表示されたメッセージは
6118 このワークグループのサーバー一覧は、現在使えません。
で、
FormatMessage()がしぱいした回数は
0x2da7 回でした。
0278271
NGNG俺会社のNT4(Service Pack6)で試したけど同じ結果。
最近のMSDNでは、Win32 Error Codesの中にWSA関係のエラーコード
も含まれているんだけどな。
0279。>
NGNG98、NT4はダメなのかな。
0280名無しさん@お腹いっぱい。
NGNGMSDNのエラーコード表をぱくってエラーメッセージ取得関数を作ったことがある。
そうか最近は取得できるんだ…。
0281名無しさん@お腹いっぱい。
NGNG可能でしょうか?
プロキシサーバからサーバってKeep-Aliveできるのでしょうか?
0282名無しさん@お腹いっぱい。
NGNGレスポンスヘッダとボディの区切りが\r\n\r\nになって
くれないんですけど何でですか
0283>282
NGNGDOSに洗脳されてんな
0285名無しさん@お腹いっぱい。
NGNGYahooのHTTPDって何つかってんの?
0286名無しさん@お腹いっぱい。
NGNGheadすりゃいいじゃん
ちなみに俺がやらないのは
Socks串がかんでる環境なんで
設定いじるのがウザイだけ
0287名無しさん@お腹いっぱい。
NGNGそういう詳細情報はヘッダに出てこない。
HEADリクエストでページ内容全部送ってきたり、
CRLFじゃなくて全部CRで送ってきたり、邪悪この上ない。
0288名無しさん@お腹いっぱい。
NGNG何かのカスタマイズかもしれないが、Yahooのサービス内容に
そこらのhttpdは不要だしな。
0289名無しさん@クリスマスもひとり。
NGNGまだWinsockの勉強をはじめて一週間くらいです。
サーバーはポートを指定してクライアントの接続を待機すると思うんですが、
クライアントも接続するサーバーのIPとポートを指定しますよね?
そのとき、クライアントはどうやってサーバーのポートを知ればいいのでしょうか?
それとも、きめうちで作るものなのでしょうか?
0290名無しさん@お腹いっぱい。
NGNG決め打ちです。
ポート決め打ちがいやなら、CORBAのネーミングサービスサーバ
みたいなの自作してちょ。(それでもネーミングサービスサーバ
への接続は決めうちになるが)
0291名無しさん@お腹いっぱい。
NGNGクライアントは、IPアドレスもポート番号も、ユーザーが指定したものを使うのが原則。
ただし、メジャーなプロトコルの標準的なポート番号はIANAで登録管理されているので、
そこで管理されている値で当てはまるものをデフォルトとして用意するのが親切。
参照: http://www.isi.edu/in-notes/iana/assignments/port-numbers
0292名無しさん@クリスマスもひとり。
NGNGガーン、そうなんですかー・・・
じゃあ、サーバー側でポートが使用されてた場合には、
クライアントは変な動作しちゃうのかなぁ?
それと、IPメッセンジャーみたいなのは、
IPの最後の桁を総当りで試してるんでしょうか?
0293名無しさん@お腹いっぱい。
NGNG変な動作しないようにすれ。
接続したらサーバーから接続メッセージ投げるようにして、一定期間たって
も送ってこなかったり、期待した内容と違うものがきたら「このサーバー
違くない?」といって切断すればいい。
>それと、IPメッセンジャーみたいなのは、
ブロードキャストするとか、マルチキャストするとか。
0294名無しさん@お腹いっぱい。
NGNG見当違いのサーバプロセスにコネクトしても、とりあえず
ソケットは出来ちゃうね。普通はソケットできたらサービス
ごとのプロトコルで接続確認のメッセージ投げ合って、それが
お互いの意図するプロセスなのか確認して、間違ってたら落とす
とかするんじゃないでしょうか。
0295293
NGNGあ、これローカルに限るからね。
0296名無しさん@クリスマスもひとり。
NGNG参照を見させていただきました。
まったくのオリジナルなものは49152以降を使って良いって事ですよね?
実際、バッティングしちゃう事は無いのかなあ?ちょっと不安。
細かいとこまでありがとうございました、
明日、仕事中にでもながめてみますー!
0297名無しさん@クリスマスもひとり。
NGNGネゴシエーションって言うのかな?ハンドシェイクっつーのかな?
そういった確認プロセスを実装するべきなんですねー・・・
ブロードキャストとマルチキュストはまだよくわからないので、
勉強してきます。UDPで出来るやつですよねー!
0298名無しさん@お腹いっぱい。
NGNG0299名無しさん@お腹いっぱい。
NGNGclosesoket()を呼んで後は無視、というようなことをしてもいいのでしょうか?
それともちゃんとshutdown()を呼んでからFD_CLOSEを待たなければ
ならないでしょうか?
0300名無しさん@お腹いっぱい。
NGNGservicesって引く意味あるの?
localのことがわかっても意味ないようなきがする。
localhostにTCP/UDP開くこともあるが、remote相手の方が圧倒的に多い。
0301>300
NGNG0302名無しさん@お腹いっぱい。
NGNG>とかするんじゃないでしょうか。
それが理想なんだけど、たいていメジャーなプロトコルの実装って
何もしない(セパレータ待ちのまま止まる)のが多いんだよね・・・
0303名無しさん@お腹いっぱい。
NGNGshutdown()は複数のプロセスで同じソケットを使っていようと
そのソケットのすべてのインスタンスで閉じる
あと、SD_SENDなら、向こう側はEOFを受取るがこちらはまだ受信は可能
0304名無しさん@お腹いっぱい。
NGNGあれ、手書きしてちゃんと動くんですか?
0305名無しさん@お腹いっぱい。
NGNG自分で試せばいいダロ。
少なくともNTの場合はgetservbynameが内部的に
%WINDIR%\system32\drivers\etc\services
を直接読みに行っているっぽい。書き換えるとすぐに反映される。
0306名無しさん@お腹いっぱい。
NGNGselect()で待機中に同プロセス、別スレッドから
待機状態を強制解除(エラー)させる方法が知りたいのですが
そういうイベントってあるのでしょうか?
シグナル投げようかとも思ったんですがwindowsのプログラマが意識できるものは
どれも致命的なのばかりで、できれば横取りしたくないです。
0307名無しさん@お腹いっぱい。
NGNG当該のソケットをclose/shutdownしたくもないということだよな。
そういう必要があるのであれば、ソケット監視にはWSAEventSelectを
使うことにして、
一方ではスレッド間通信用のEventオブジェクトを作成して
WaitForMultipleObjectで両者を一緒に見張るか、
いっそIOCPを使うかするのが真っ当なやり方だろう。
しかし、やや汚い手であるが、ダミーのリスナーを起動して
おき、selectでそのリスナーも一緒に見張らせておく。
で、問題がある場合はそのリスナーにconnect()する、という
やり方で、どうにかなるような気もするな。
0308。>306
NGNGチェックするのではダメなの?
WSAEventSelectは、Winsock2.0未満は使えないから、
Win95とかではダメなんで、もしselectで待つのが送信・受信だけなら、
send recvを使わないで、WriteFile・ReadFile+OverlappedI/Oを使って
WaitForMaultipleObjectで待つという手も有るよ。
0309306
NGNGwinsock1.1でも動くかたちになってるからできればWSAEventSelect使いたくないんですよね
selectが見張ってるのは複数ポートのソケットの送信、受信(受付も)、エラー、タイムアウトです、(同期)
内部の命令をどうやって受取るか?というのが問題で
今のところ、SIGABRTなげて対処してますが・・・というのが現状です
サーバ機能はシングルスレッドなので余計なスレッドを足したくは無いんですが
良く考えればシグナルだって内部的にはスレッドだな、
シグナル打つスレッドが他に必要になってくるし・・・
PS
.Winのシグナルハンドラ定義って一回シグナル入ると再定義しなきゃいけないんですね
ちょっと賢くなった
0310デフォルトの名無しさん
NGNG俺はWindows系ではservicesは見ない。昔はgetservbyname()
してたけど、Windowsアプリの場合ポート番号変更するような
機能付ける事が多いからINIファイルやらレジストリから読む
仕様にした。Windowsの流儀としては自然だし。
ちなみにクライアントアプリしか作った事はないし、ポート番
号は非ウエルノウンポートなサービスばっか。
UNIX系はservicesを見るようにしているが、クライアントア
プリでは今後Windowsアプリのような方式にする可能性もある。
0311。>309
NGNGWinsock独自拡張の機能は使わないでやりたいと言うこと?
0312309
NGNGCHATSRVR のこと?
Winsock 2.0にしたら
select()がsignalで飛ばない・・・シクシク
MSDN見たらWSAEINTRは1.1のみだった
0313ごめんね〜
NGNG0314デフォルトの名無しさん
NGNGデータを受信してるとき、受信スピードを落とすのは
どーやってやればいいですか?
いちいち切断なんてことはしませんよね。
0315デフォルトの名無しさん
NGNG0316>314
NGNG0317デフォルトの名無しさん
NGNG昔Win95でsocketにoverlapped I/O使ってFTP転送みたいにがんがん転送する
奴作ったら、swapしてまでOS内部にデータためこんで、しまいにOSごとハング
アップしてしまったよ。
間欠的に少々のデータを送るにはいいかもしれないけど。
0318。>317
NGNGというか、nonblockで普通にsend+selectでも同じ事象になるけど。
ディレイかませれば、死なないで済むから、FTPみたいな、
ハンドシェークなしの一方的な転送じゃなければ大丈夫だよ。
win98、NT3.5以降では問題起きないから、利用環境が特定できる
ものなら心配する必要はないと思うけど。
0319デフォルトの名無しさん
NGNGありがとうございます。
FD_READのときはかならず全部読まなきゃいけないと
思ってたんですが、そんなことはないんですね。
とりあえずやってみるです。
0320デフォルトの名無しさん
NGNGWin95でソケット使ったこと無いので参考までに
質問させて。
ガンガン送るという意味がよく分からないのだけれど
1. selectでSNDBUFが開くのを待つ
2. EWOULDBLOCK、もしくはデータが無くなるまでsendループ
3. EWOULDBLOCKの場合は1へ
の繰り返しと思っていいですかね。
これで駄目なら、Win95のselectは、WinsockレイヤーのSNDBUFが
fullであっても writableであると返すような間違った
実装がなされているということになるな....ちょっと信じ難い。
>>319
受信が速すぎて困ることって想像がつかないのだけれど、
なぜ困ってるの?
0321。>320
NGNG>実装がなされているということになるな....ちょっと信じ難い。
うーん、selectの実装だけの問題かどうかは、わかりませんが、
バッファリングの機構のどこかに問題があるのは確かですよ。
それ以上掘り下げる事はしていませんが。
私の場合は、select+sendで317の言うような現象になったんで、
WriteFile+OverlappedI/Oに変えてみたんだけど改善しなかったんで、
しょうがないから、blockmodeに変えたけどね。
同一のプログラムををNT,98でも検証してたから、
win95の問題であることはまず間違いないです。
>なぜ困ってるの?
たぶん、流量制限したいんじゃないんですか?
0322317
NGNG>というか、nonblockで普通にsend+selectでも同じ事象になるけど。
ほえ?
nonblockだったら、送信できなきゃWSAEWOULDBLOCKでsend()から戻って
くるんだから、OS内部にためこんで自滅なんて起きないけど。
0323デフォルトの名無しさん
NGNGそです。
0324デフォルトの名無しさん
NGNG>>322
sendはSNDBUFがfullな場合にEWOULDBLOCKを正しく返すが
(Win95の)WriteFileはERROR_IO_PENDINGを返すべきときに返さない
という解釈で良いの?
0325317
NGNG少なくとも俺はそうだと認識してる。
ただ、NT4でも同じだったけど(流石にWin95のようにハングはしなかったけど、
仮想メモリ不足のダイアログは出た)
なので、ハンドシェーク無しの場合はsocketにoverlapped I/Oを使うのは危険
だなと。
0326320=324
NGNGちょっと普段使わない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。>326
NGNG>プログラムではなくシステムが停止してしまった(苦笑)。
そうそう、こちこちにかたまっちゃんだよ。
sendでも、WriteFileでも結果的におんなじことになる。
OSR1,OSR2両方ともおんなじだったはずだよ。
0328デフォルトの名無しさん
NGNG23に接続した後何したら良いかわかりません
たぶん、ターミナル情報をやり取りが必要なのでしょうが(telnet.exeの通信にsniffer使うと何かやり取りしてるので・・・)
実際、具体的にどうすれば良いのでしょうか?
開発環境は
VC++6.0、Winsock1.1or2.0(2.0でなくても動作させたいですが)です
0329デフォルトの名無しさん
NGNG0330デフォルトの名無しさん
NGNGRFC読みなはれ。番号忘れたけど結構若い番号だから。
プロトコルの話しだからWinSockのバージョンには関係しないよ。
IAC WILL, IAC DO
0331。>
NGNGtnぐらい知ってる人周囲にいないのかなぁ?
最近はそうでもないのかな・・・
0332,,a,,,,,,,
NGNG0333328
NGNG一応読んでから質問してるんですけど・・・
あれ見ただけで、コネクション張って、次に何やるかわかるんでしょうか?
コードとか、送受信の定義しか、無かったように見えたんで質問したんですけど?
その他に、オプションで854、858・・・(死ぬほど)
があったんで、その中に書かれているのですか?
一応、854は見てみたんですが
いきなり、「Go Aheadを送信するホストの場合」みたいなところで
つまづきました・・・
0334328
NGNGIAC WILL TERM TYPE を
FF FB 18
に編集して送るってことですか?
0335デフォルトの名無しさん
NGNGRFCに「IAC WILL」とか書かれているのは単なる解説。
スニファしていても、そういう文字列が出てくるわけではないし、
ユーザーがIAC WILLと打ち込んだからといってそれをコマンドに
翻訳して送れといっている訳でもない。
基本的には送受信データは全部そのまま生で送る。
ただし、TELNETの制御コマンドの始まりを意味するコードと
それに続く数バイトだけは特殊扱いをする。
制御コマンドの送受信コードはRFCに16進で書かれている通り。
0336名無しさん小学1年生
NGNG一度しかクライアントしか受け入れない場合、
acceptした後にそのソケットはshuntdownしちゃっていいのでしょうか?
0337328
NGNG編集じゃなくて変換が正しかったです
でも、FFとかFBを送るのはどうやってやるのですか?
ASCIIは7bitですよね
unicodeにするんですか?
>>336
受付ソケットは閉じても問題ないです
その場合、回線不良で切断したら当然、再接続で来ません
ソケット用意してもTIME_WAITの問題でうまくいかない可能性大
まあ、TIME_WAIT回避する方法もありますが、
極希に問題が起こる可能性があります(パケットの生まれ変わりの問題)
特別、shutdownする理由も無いように思うのですが?
0338名無しさん@お腹いっぱい。
NGNG7bitにこだわる理由を教えてくれ
説明できないことが、その答えだ
0339328
NGNGなるほど、全然送れてますね
0340>336
NGNGそれなら、一度acceptしたら、listenしているソケットを閉じてしまえば、
いいだけだよ。ソケットを閉じればバックログの待機中の接続には、rstが返るから、
心配ないよ。
0341336
NGNGshutdownってしなくてもよかったんですか。
データが残っている状態(この場合バックログ?)では
closesocketする前にshutdownしないといけないものと思ってました。
0342>341
NGNGshutdownは、必要ないと思うけど。
バックログとは、listenの第2パラメータで指定する、acceptするまで、
保留させる接続のことだよ。acceptしなければ、synは応答しないから、
接続は確立しない。よって、データの送受信は発生しないよ。
この時点ではrstが応答されれば、クライアント側にはサーバーソケットが
生成されていないように見えるから。
acceptしてすぐ切断すると、すれ違いでデータを送信してしまう可能性があるので、
あまり良くないです。shutdown(s,SD_SEND)で呼んでrecvで拾ってやらないと、
いけなくなるし、クライアントが輪は接続確立後に切断されたように見えるから
(まさにそうの通りなんだけど)データが正常に受け取られたのか、判断しずらいよね。
0343336=341
NGNGacceptしたソケットとは通信を続けるので、すぐ切ることはないです。
3つの接続要求がきた場合、1回acceptを発行して、
すぐにlistenしていたポートをclosesocketしてしまえば残りの2つからは
サーバーソケットが存在してないように見える、ってことですよね?
それとも、一度acceptすると3つとも接続が確立しちゃうってこと?
俺の勘違いだと思うけど
0344デフォルトの名無しさん
NGNG342のaccept後すぐにcloseすると云々というのは、
listening socketではなく、acceptにより返された
descripterのことを云っているので、
343のような処理を行う分には問題がない。
0345342>343
NGNG>サーバーソケットが存在してないように見える、ってことですよね?
そういうことです。
acceptしてすぐ切る云々は、
>>336の
>acceptした後にそのソケットはshuntdownしちゃっていいのでしょうか?
から、acceptして取得した記述子をshutdownしているのかと思ったので、
それは、良くないよという話です。
0346デフォルトの名無しさん
NGNG>synは応答しないから、接続は確立しない。
うそだろ?
listenしてればsynハンドシェークを完了させる
バックログがなんなのかを勉強し直せよ
>acceptしてすぐ切断すると、すれ違いでデータを送信してしまう可能性があるので・・・
ソケットレベルでacceptされたかどうかはわからないと思うが?
shutdown(s,SD_SEND)した後recvしてどうするんだ?
もう、クライアントには応答できないし
ソケット破棄しても、受信バッファが破棄されるのはかわらんと思うが?
0347342
NGNG>listenしてればsynハンドシェークを完了させる
>バックログがなんなのかを勉強し直せよ
勘違いしてたかな。ちょっと、確かめてみる。
誤情報流してしまったかもしれん。すまん。
単一接続にするには、バックログ数を減らすのが正しかったか。
>ソケットレベルでacceptされたかどうかはわからないと思うが?
それならば、複数のバックログを設定されていれば、
接続確立したかは、確かに判別不能になるね。
>shutdown(s,SD_SEND)した後recvしてどうするんだ?
へっ?仕掛かり中の受信を終わらせるためだけど。
応答できるかどうかとは、関係ない話しだけどな。
別に捨てるだけなら無理にする必要はないけどね。
通信が会話形式を取らない場合なら、クライアント側は正常に
送信したように見える可能性があるから、
サーバー側は後始末する必要があるんじゃない?
0348デフォルトの名無しさん
NGNG0349デフォルトの名無しさん
NGNGで、httpなら"GET http://***/index.html HTTP/1.0"とかコマンドを送りますけど、
このコマンドにスペースを使いたい場合ってどうすれば良いのでしょうか?
例えば、httpプロトコル以外で、"SHOW STATUS ***/index.html"とか送ると、
"SHOW"をコマンド、 "STATUS ***/index.html"をアドレスと認識してしまってうまくいきません。
"や'でコマンドを囲んだりしてもうまくいきません。
どう処理すればよいのでしょうか?
0350デフォルトの名無しさん
NGNG専用プロトコルのproxyをさがそう。
0351名前ついてますか?
NGNG0352デフォルトの名無しさん
NGNGGetのQueryString or Postして
cgiで受けて代用できないようなことなのか?
0353デフォルトの名無しさん
NGNGDirectPlayのEnumHostsに相当する処理を行いたい場合。
0354デフォルトの名無しさん
NGNG使いたいポートにUDPでブロードキャスト投げろ。
0355354
NGNGサーバ側はブロードキャストによるリクエストを受け取ったら、Senderに応答を
返すようにしておく。
0356353
NGNGどうもありがとう。ただいま実験中……
0357353
NGNGTCPで使えなくない?
普通どうすんの? 別のポート使うの?
0358353
NGNG0359デフォルトの名無しさん
NGNG面倒くさいから、上位に抽象化されたライブラリを作るわけです。
>>357
TCPとUDPは独立にbindできる。つまり、同じポートでTCPの待ち受けと
UDPの待ち受けを同時にできます。
>>358
TCP用のサーバsocketとUDP用のサーバsocketをbind後、select。
読み取り可になったsocketに応じた処理をする。
0360353
NGNGいろいろ試してみます。
0361353
NGNG非ブロッキング+適当に休む+ポーリングで
ぜんぜん問題ないから単なる話のタネなんだけどさ、
ブロッキングモードで使いたいときは
サーバーを終了したいときってどうするの?
0362デフォルトの名無しさん
NGNG当然、分岐を書いておく
0363353
NGNGWaitForMultipleObjectでスレッドもWin32シグナルもタイマも
あり、って方がいいなあ。
selectで終了用のダミーの入力fd持つとかできる?
そんなみょうちくりんなことするよりシグナルの方がマシか……
0364デフォルトの名無しさん
NGNGselect使う時点でblockingもnon-blockingも関係無いような気がするけど。違ったっけ?
blockingで、read、recvを使うんなら、シグナル(か、その他の割り込み)以外思い付かない。
select使うんなら、timeoutしたところで終了判定。
0365デフォルトの名無しさん
NGNGReadFile(), WriteFile()にはSOCKET渡せるくせに、変な所で手抜きだよな。
0366デフォルトの名無しさん
NGNGReadFile(), WriteFile()にはSOCKET渡せるくせに、変な所で手抜きだよなぁ。
0367デフォルトの名無しさん
NGNGsend時に動作が変わりそうな気配が・・・
0368デフォルトの名無しさん
NGNGhttp://piza.2ch.net/test/read.cgi?bbs=tech&key=970344582&st=306&to=309&nofirst=true
あたりに同じ話題があった。
306が結局どうしたのかはしらん。
0369デフォルトの名無しさん
NGNGSerializableオブジェクトインスタンスを、Socket→ObjectInput/OutputStream
つかって投げ合って、相手先でfunc()を起動するっていうコーディングって、普通かな?
RMIやCORBAでネーミングサーバ立ち上げるほどの事でもない(一対一が確定してる)
なら、普通はこのやり方だよね?
0370デフォルトの名無しさん
NGNG0371デフォルトの名無しさん
NGNG0372デフォルトの名無しさん
NGNGAfxEventSelect()で設定したEventと終了のEventをWaitFor〜()で
待つってのはどう?
0373372
NGNGWinSock2だけどね。
0374デフォルトの名無しさん
NGNGそれが、ブロードキャストと判定するにはどうしたら良いのでしょう?
また、ブロードキャストを投げて、誰から、帰って来たのかは
どうやって知るのでしょうか?
0375デフォルトの名無しさん
NGNGそういう話じゃなかったっけ?
0376デフォルトの名無しさん
NGNG(;´д`)学校の宿題は自分でやりましょう
0377374
NGNGやりたいことはブロードキャストを使ったデータ送受信です
ノード数はそれほど多くないのでトラフィックは問題ない程度です
あと、環境はC言語 OSはUnix&Windows でお願いします(出来ればバークレー型ソケットで・・・)
ちなみに、宿題ではありません
0378374
NGNGやりたいことはブロードキャストを使ったデータ送受信です
ノード数はそれほど多くないのでトラフィックは問題ない程度です
あと、環境はC言語 OSはUnix&Windows でお願いします(出来ればバークレー型)
ちなみに、宿題ではありません
0379デフォルトの名無しさん
NGNG0380デフォルトの名無しさん
NGNGIRCクライアント CHOCOA のCOMオブジェクトを使うと面倒で面倒で。←タコ
0381デフォルトの名無しさん
NGNG0382デフォルトの名無しさん
NGNG0383デフォルトの名無しさん
NGNG(少なくともMSDNでは)shutdown後のソケットを再利用してはいけない
書いてあったので、さっさとcloseしちゃっても同じだと思うのですが。
送信(受信)のみ禁止したい状況が思いつかないので。
#複数のスレッドにまたがって1つのソケットを使いまわすことは無い
#という前提でお願いします。
0384デフォルトの名無しさん
NGNGこことか参考になるかも
http://www.kt.rim.or.jp/~ksk/sock-faq/unix-socket-faq-ja-2.html#ss2.6
0385デフォルトの名無しさん
NGNGありがとう。お行儀好く逝きましょうということですね
0386デフォルトの名無しさん
NGNG肝心のh_addr_list要素数が無いのですが、どうやってすべてのリストを取得するのでしょうか?
0387デフォルトの名無しさん
NGNGケツがNULLポインタになってるから、そこまでループで回して処理
0388デフォルトの名無しさん
NGNG送信はsend/writeのどちら?
受信はrecv/readのどちら?
待ちはselect/pollのどちら?
BSDかSYS/Vの違いだろうけどさぁやっぱ好みってあるじゃん。
0389デフォルトの名無しさん
NGNG俺はwindowsだからsend/recv/select
UNIX使うようになったら、read/write/selectでやりたいな。
楽そうだし。
0390age
NGNG0391デフォルトの名無しさん
NGNGpollの方が監視できる記述子が多いからなぁ。
0392デフォルトの名無しさん
NGNGプロミスカス・モードの指定の仕方を教えてください
どうも、Unix系、Linux系のキーワードでMSDNにHitしないんですけど・・・
0393デフォルトの名無しさん
NGNG0394デフォルトの名無しさん
NGNGおまえ、どこにでもでるよな
bosscatだっけ?
0395デフォルトの名無しさん
NGNG0396デフォルトの名無しさん
NGNGCORBA?SOAP?そんな遅いもん使ってられん!!!
yotte あげ
0397デフォルトの名無しさん
NGNG0398(゚Д゚)
NGNGWinsockで、スニッファーを作ってみたいんですが。
プロミスキャスモードに変更とかどやんの!?
ドライバー作らないとだめとかいううわさを聞いたんですけど・・・。
0399デフォルトの名無しさん
NGNGうわさどおりです。詳しい人よろしく。
0400ころ
NGNGわからないことがありましたので質問します。
ビジュアルベーシックなのですが、FTPやHTTPは対応している
ようなんですが、TELNETに接続するときのやりかたが
どうも良く分かりません。いろいろ本はよんでいるのですが
だめです。
0401デフォルトの名無しさん
NGNGhttp://RFC.net/rfc854.html
0402ころ
NGNG0403名無しさん
NGNG送信するものを自由にタイプできるだけです。
0404デフォルトの名無しさん
NGNG0405ころ
NGNGまったくわかりません。FTPサーバーなどにはウインドウズの関数を
つかってアクセスできるようなのですが、テルネットは、その関数では
対応してないようなんです。なにか他にあるんでしょうか。
0406デフォルトの名無しさん
NGNG日々精進し、パソコンヲタクどもの親切を蹂躙してやれ。
努力を放棄すること。いやしくも「教えてクン」たるもの、努力をしては
ならない。過去ログを読んだり、検索してはいけない。「英語は苦手なの
で、分かりません。」は、高く評価できる。辞書片手にマニュアルやReadMe
を読むなど、決してしてはならない。他力本願と言われようと、自分で調
べたり試行錯誤したりせず、他人の努力の結果を搾取するのが、正しい
「教えてクン」である。
また、「もう何が悪いのかサッパリ分かりません。」と言ってふてくされ
るのも有効である。「サッパリ」という単語が「やる気の無さ」を効果的
に表現している。「原因を特定するには、何をすべきでしょうか?」と訊
いてしまうと自己の積極性が現れてしまうので、「教えてクン」失格であ
る。
情報を開示しないこと。使用OSや、機器構成などの必須の情報を知らせ
てはならない。マザーボード名やBIOSのバージョンも同様だ。具体的
なアプリ名やバージョンも隠蔽すべきだ。「DVD再生ソフト」のように
曖昧に表記しておけばよい。反対に「前から欲しいと思っていた○○」と
か「安売りされていた○○」 等の「どうでもいい情報」は、どんどん書
いてやれ。
トラブルの場合は、状況を正確に記述してはならない。「なんだかうまく
動きません。」とか「エラーが出ます。」等と具体的なことは何も書かな
いことが重要である。また、自分の試してみた事も具体的に書いてはいけ
ない。考えられる組合せのマトリックスを作成し、状況を整理するなどもっ
てのほかである。最悪の場合、それだけで問題が解決してしまうこともあ
るのだ。
「いろいろやってみたけど、動きません。」が理想的だ。
答える人間のことを考えないこと。「教えてクン」は、孤高の戦士である。
相手のことを考えるようでは教えてクン失格というものだ。以下のような
行動が、望ましい。
初心者であることを高らかに宣言し、初心者向けの丁寧で分かりやすい説
明を強要する。専門用語の使用を禁じておくとさらに効果的である。簡潔
な説明を禁じられたヲタクどもは、同じ内容を説明するのに、何倍もの労
力を強いられる。自分は努力せず、相手には多大な努力をさせることこそ
が「教えてクン」の真骨頂である。
マルチポストも有効である。そのBBSを信用していないことを明確に示
せる。「どうせ、お前らじゃ分からんだろう。」という意志表示として高
く評価できる。もちろんマルチポストの非礼をあらかじめ詫びてはならな
い。それでは、単なる「急いでいる人」になってしまう。それは、教えて
クンではない。
質問のタイトルは、「教えてください。」で良い。タイトルを読んだだけ
では「何に関する質問」か全く分からない。そういう努力は、答える人間
にさせれば良いのだ。とにかく、答える人間が答えやすいように気を使っ
て質問してはならない。傲慢で不遜な態度が必須である。「聞きたいこと
があります。」など、プロの仕事であろう。
最後に、言うまでも無いことだとは思うが、答えてくれた人達にお礼の言
葉を返すなど言語道断である。せっかく「教えてクン」を貫いてきたのに、
最後にお礼を言っているようでは、臥竜点睛を欠いていると言わざるを得
ない。質問だけしておいて、後はシカトが基本である。上級テクニックと
して、「そんなことはもう試しました。」とか、「そこまで初心者じゃあ
りません。」などと言って、回答者の神経を逆なでしておけば完璧である。
以上のことを踏まえて質問すれば、君も立派な「教えてクン」である。
ビバ! 教えてクン! 教えてクンに栄光あれ!!
0407ころ
NGNGもうすこし、自分なりにチャレンジしてみます。
いろいろ本は立ち読みしたんですが、なかなかこれだ!
っていうのに出会えないんです。今後のライフワークの
ひとつとしてがんばっていきたいと思います。
0408デフォルトの名無しさん
NGNGまぁまぁ。
FAQ スレなんだから勘弁してやれよ。
コピペだけど。
0409デフォルトの名無しさん
NGNGっつーか、本気でやるつもり?相当ダルいよ、マジで。
0410デフォルトの名無しさん
NGNG最低限RFCを読まないと話にならないよ。
普通は、RFCを読みながら四苦八苦してプログラムを組んで動作を確認していくもの。
ちょろっと眺めて出来ないと言う人間は、出来なくて当たり前。
0411デフォルトの名無しさん
NGNGライフワークがそんなにいくつもあってたまるか!
0412デフォルトの名無しさん
NGNG上の見てたら何にも質問できないね
よってさげまんせー
0413ころ
NGNGまだデータのやりとりの部分は試していないのでこれから暇をみつけては前進して
いきたいと思います。ただ個人的にプロトコルの詳細およびしくみをよく理解していないので
そのへんの勉強していきたいと思っております。
0414デフォルトの名無しさん
NGNG0415ころ
NGNG自分では組めないと思っていたプログラムを過去になんとか
完成させたことがありますので、多少時間はかかるかもしれませんが
がんばってみます。ただウインドーズ系のプログラムがほんと初めてなので
その辺でとまどっていますが、すこしづつ理解しつつあります。
0416>415
NGNGカコイイ
0417デフォルトの名無しさん
NGNGTELNETプロトコル以外ならな
TELNETプロトコルのときは端末性能のチェックとかするだろ
0418ころ
NGNGしかし、受け取る量がでかいのかわかりませんが、うまく表示できていません。
あとはすこしVBの勉強でもすればなんとかなるかなと、思っています。
あまいでしょうか。完璧にするには、あとしばらくかかると思いますが、
なんとかなると思います。結局、ここでは何も教わりませんでしたが
やる気みたいなものを与えてくれたことを感謝いたします。
0419ころ
NGNGこちらからの送信した内容を相手が処理してくれません。
このあたりから難しいですね。テルネットは。
0420デフォルトの名無しさん
NGNG0421デフォルトの名無しさん
NGNG0422承認のロジックについて教えてください。
NGNGacceptした後、その相手が対象のソフトからであるかどうかの
チェックはどのようにやってますか?
私はacceptの後、タイムアウトのために、SetTimerを行い
クライアントから固定長のデータを送信させ、
そのデータ内容により対象のソフトからの接続かチェックします。
そのデータが間違っていた場合、又は、タイマーメッセージがきた時までに、
承認が完了していなかった場合はそのSOCKETはclosesocketします。
関係ないかもしれませんが、selectで接続・送受信とも非同期を設定しています。
Winsockは1.1を使用しています。
皆さんはどのような方法をとっていますか?
0423デフォルトの名無しさん
NGNG認証用スレッドに回し、そこからキーデータを送信、
相手がキーに対応したデータを返したら承認。
0424デフォルトの名無しさん
NGNG0425デフォルトの名無しさん
NGNG0426デフォルトの名無しさん
NGNGどのようにタイムアウト処理をすればよいでしょう? select() を使うべきですか?
それとも他にいい手段ありますか?
0427デフォルトの名無しさん
NGNGselect()がいやならalarm()つかえば?
どっちがいいのかはよくわからん。
0428デフォルトの名無しさん
NGNG単純なタイムアウトなら簡単だし。
複数だと結構めんどくさいけどね。
0429426
NGNGありがとう
0430デフォルトの名無しさん
NGNG0431デフォルトの名無しさん
NGNG0432ころ
NGNG結局のところいきついたところはRFCでした。やはりRFCを読まずに
なんとかしようと思ったのは馬鹿でした。
はじめにRFCを読めっていってくれた方に感謝いたします。
だいぶ、テルネットのプロトコルについて分かってきました。あとは
トライ&エラーでがんばっていきたいと思います
>431
とりあえずなにが知りたいのですか。愚問いでもなにか、突破口みたいな
ものは開けるかもしれません。
0433デフォルトの名無しさん
NGNG0434Winsock
NGNGどうしたらよいのでしょうか?
0435デフォルトの名無しさん
NGNG0436434
NGNGでも、引数に指定する数は1〜5ってあったよ?
大丈夫なのかなあ?
0437デフォルトの名無しさん
NGNGclose()
0438ころ
NGNG割と簡単にできたのでびっくりでしたが。ほとんどwinsockの知識はないんですが
なんとかなるもんなんですね。
0439デフォルトの名無しさん
NGNG一つのチャンネルだけなら問題無いんだけど、二つ以上のチャンネルの処理が
全然分からない・・・。
0440デフォルトの名無しさん
NGNGサーバに接続して受信するプログラムを作ろうとしましたが、
connect()で指定するのはIPアドレスなので、
ドメイン名からIPアドレスに変換する方法がわかりません。
変換する関数や、アルゴリズムを教えてもらえませんでしょうか?
Windows,UNIXどちらでも結構です。開発言語はC言語です。
よろしくお願いします。
0441デフォルトの名無しさん
NGNGgethostbyname
0442デフォルトの名無しさん
NGNGそれぐらいは、googleででてきますよ。
0443440
NGNGgethostbyname
使ってみましたが、HOSTSファイル内での検索しかしていないみたいです。
>>442
ドメイン IPアドレス C言語 プログラム
などで検索してみたのですが、見つかりませんでした。
見落としたのかもしれないので、もう1回調べてみます。
0444441
NGNGそれはリゾルバの設定をしていないから。
あるいはDNS等がまともに動いていないから。
もう少し自分で調べてから書き込もうね。
0445デフォルトの名無しさん
NGNG0446443
NGNGリゾルバ
この単語、初めて聞きました。
これを元に何とかなりそうです。
ありがとうございました。
>>445
nslookupのソースを読もう
この手もありますね。
googleで検索して、ソースを見てみます。
0447くまたん
NGNG自作テルネットクライアントで
ネゴシエーション状況を表示させたいのですが。。。
0448デフォルトの名無しさん
NGNG現在、特定のServerのTCP-portに対して接続が出来るかチェックするプログラム
を書いてます。
単にconnect()が成功するかどうかを見るだけなんですが…
この機能自体は簡単に実装できたのですが、問題は相手のServer自体が
完全に落ちている場合に、connect()発行後にタイムアウトするまで
結構な時間がかかりますが、これを短縮させる方法がわかりません。
このタイムアウトするまでの時間を短縮する事は可能なのでしょうか?
可能であれば方法を教えて下さい。宜しくお願いします。
0449448
NGNG0450デフォルトの名無しさん
NGNGhttp://www.kt.rim.or.jp/~ksk/sock-faq/unix-socket-faq-ja-3.html#ss3.5
0451デフォルトの名無しさん
NGNG0452デフォルトの名無しさん
NGNG0453デフォルトの名無しさん
NGNG何をどう教えればよいのか教えてください
0454448
NGNGconnect前にsignalしかけてalarm()置いたらばっちり期待通りの動作になりました。
回答有難う御座いました。
0456デフォルトの名無しさん
NGNGじゃぁ一つだけ教えてやろう。
「お前にはプログラマとしての適性が全く無い」
0457デフォルトの名無しさん
NGNG親切だね。ここまで適切なコメントしてあげる人は滅多にいない。
0458デフォルトの名無しさん
NGNG0459デフォルトの名無しさん
NGNGwininet.hを何に使いたいのですか?
0460458
NGNG0461458
NGNG0462デフォルトの名無しさん
NGNG接続した瞬間にログインメッセージがきてしまいます。
ネゴシエーションの状況も受け取りたいのですが
うまくいきません。なんでかな。
0463デフォルトの名無しさん
NGNGWinsockのAPIだけでは無理ですよね?
もしそうだとすると、一体なんのライブラリを使えば可能でしょうか?
ふと世にあるフリーソフトなんか見るとSSLには対応してないことが多く、
あまり参考になるようなソースを得ることができません。
ひょっとしてあまりSSL対応のフリーソフトが無いのはライセンスの問題とかありますか?
やはりIEやNeckoなんかのCOM(?)を利用するしかないのでしょうか。
コンポーネントプログラムってやったことないので・・・。
SSLのハンドシェイクを1から実装するのは現実的ではないと思いまして・・。
回答よろしくお願いします。
#あとWWWクライアントでSSL実装してるソースなんか落ちてたら教えて頂けませんでしょうか。
0465&Hearts;
NGNG0466デフォルトの名無しさん
NGNGご自分でお調べなさい
http://www.google.com/
0467♥465♥
NGNG0468デフォルトの名無しさん
NGNGhttp://www.openssl.org
0469超初心者
NGNG0471デフォルトの名無しさん
NGNG0474デフォルトの名無しさん
NGNGログがとれるルータ買えば?
0475デフォルトの名無しさん
NGNGWinInit.dllをデバッガで見ると、WSock32.dll から関数をインポートしていません。
0476デフォルトの名無しさん
NGNGほんと?
他のDLLやコンポーネント経由とかじゃなくて?
0477デフォルトの名無しさん
NGNG0478デフォルトの名無しさん
NGNG0479デフォルトの名無しさん
NGNGsocket, poll, pipe というキーワードと一緒に検索すると
いいかもしれない。
0480デフォルトの名無しさん
NGNGありがとうございます。
色々出てきました
0481デフォルトの名無しさん
NGNGopenやpipeとかのハンドルも認識する?
0482デフォルトの名無しさん
NGNGwinsockのselectに入れられるのは、winsockで作ったソケットだけだと思う。
WaitForMultipleObjectsのレイヤまで降りれば、
ソケット/ファイル/パイプ/スレッド/プロセス/メッセージキュー/etc.
(ぶっちゃけた話、非同期処理ほぼすべて)
のイベントを待つことができるんだが...winsockとの絡みが分からん。
詳しい奴の登場を待つ。
0483デフォルトの名無しさん
NGNGplugable protocol handler とかそのへんのドキュメントを
読めば、http(s) や ftp のプロトコルハンドラがTCP/IP を
使っているわけで、wininet はその層については関知していない
ということがわかります。
0484デフォルトの名無しさん
NGNGWindows NT 系列の Winsock2.0 なら、ソケットも
WaitFor*Objectで待てる。
0485デフォルトの名無しさん
NGNGCreatePipeで作ったパイプはWaitFor〜が効かない。
CreateNamedPipeにFILE_FLAG_OVERLAPPEDを与えて
作らないと駄目じゃないかな?
>>484
正しいやり方はWSAAsyncSelectでイベントに結びつけるか、
WSARecvでオーバーラップにしてWaitFor〜でしょ。
どちらにしても、WSAAsyncSelect以外はselectでのポーリング
とロジックの作り方が変わるので注意が必要。
0486デフォルトの名無しさん
NGNG何かいい本、またはホームページはありませんか
あったら教えてください。お願いします
0487デフォルトの名無しさん
NGNG俺は昔のCマガの特集と、極めるVisualC++で勉強した。
結論:いい本で勉強した方が遙かに吸収が早いです。
0489481
NGNGチャットクライアントを作るような場合、
selectをタイムアウト付きでポーリングして、
ユーザー入力にはkbhitで判定するのが一番自然でしょうか?
(WaitFor〜レベルまで降りたくないので)
0490デフォルトの名無しさん
NGNG0491デフォルトの名無しさん
NGNG連続してsendしていくと何か問題あるでしょうか?
selectの2番めの引数の使い方がわからないです。
recvならメッセージが着るって事で理解できるんですが。
0493デフォルトの名無しさん
NGNGこれは、そのポートがlistenになっているって事ですか?
そして、要求があれば、acceptするのですか?
そして、例えばプリンタポートが空いていたら、
外部からプリンターの操作が可能になるのですか?
良く分からん。
0494デフォルトの名無しさん
NGNG(sendできない状態ってのを、相手が送信を受け付けて無い状態って前提で話すけど)
sendできない状態でsendしていくと、
ソケットのバッファに溜まっていくんじゃない?
溢れたらエラー返ってくるとか。
(「溢れた場合」ってのがあるのか疑問だけど、恐らく一定サイズで切り上げるんだと思う。)
結局、相手が受信しない限りは、ソケットのsend内部バッファ?に
どんどん溜まっていく筈だから、selectして送信状況を把握していく処理は必要だと思う。
ちなみにこれは推測だから実際の所は知りません。ごめんね。
詳しい人が現れるのを待ちましょう。
0495デフォルトの名無しさん
NGNG恐らく、何らかのサーバーアプリがそのポートにbindしてなければ、
「ポートが空いている」という事では?
使ってたらbindは失敗すると思う。
0496デフォルトの名無しさん
NGNGどうするのでしょうか?
socket関数がINVALID_SOCKETを返すので先に進みません。
0497デフォルトの名無しさん
NGNGhosts参照
0498デフォルトの名無しさん
NGNGINVALID_SOCKETって、socket()が失敗するってこと?ソケット層
のレベルではオンラインもオフラインもないと思うんだけど。
WSAStartup()を呼んでないだけ、なんてオチじゃないよね?(藁
とりあえず、WSAGetLastError()で理由を調べてみましょう。
0499496
NGNGうまく行きそうです。
487さん、498さんありがとうございます。
んー、他のプロセスが一度でもWSAStartup()を呼んでいれば、
エラーにならないのかなぁ。
WSAStartup()が無くてもエラーにならない事があったから…。
0500デフォルトの名無しさん
NGNGソケットとかでいう「ポート」とプリンタポートっていうときの「ポート」は
別物だぜよ。
0501デフォルトの名無しさん
NGNGsendは1度の呼出しで送信可能状態になるまでブロックする。
そのブロックしている間に何かしたいならば、selectを使用する。
ってこと。
sendでブロックしてもいいならsekectしなくても良い。
0502デフォルトの名無しさん
NGNG0503デフォルトの名無しさん
NGNG0504デフォルトの名無しさん
NGNGWSACleanup() を呼ぶ必要があるのでしょうか?
以下ヘルプ。
>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他のプロセスは関係ない。自分のプロセス内のDLLが初期化した
場合は使える。>>504の記述にあるとおり、DLLが勝手に初期化
しても平気なように、WSAStartupを呼んだ回数分WSACleanupを
呼ばなきゃいけない仕様になっている。
>>504
内部の実装は知らんが、常識的に考えて失敗した場合も内部の
カウンタを増加するように実装する?つまりそゆこと。
#M$は何でWSAStartupを呼ばなきゃいけないように作ったんだ?
0506デフォルトの名無しさん
NGNGレベル (DLL) でのソケット API サポートだったからでわ。
UNIX はカーネルレベル (って表現で良い?) のサポートだから
初期化はいらない。
0507デフォルトの名無しさん
NGNGしていたわけではなかった (と記憶する)。サードパーティから DLL
形式で Winsock が出ていた。Trumpet Winsock とか、わけ分からず
設定した覚えがある (DNS とか何のことか分からんかった)。途中で
M$ がそれを買ったのかパクッたかして Win 付属の標準ライブラリと
なった。今の Winsock はそのままずるずる引きずってんじゃないの?
(確かに Winsock2 に変わったときに OS レベルでサポートしても
良かったのでは、と思う)
0508505
NGNG他のファイル関係のAPIと同じように、UNIX風の関数は
Cライブラリに取り込めば使い勝手よくなると思うぞ。
CreateSocket()を_socket()で包むような感じで。
ついでにパイプやコンソールもselect出来るようになれば
嬉しいね。何でCreatePipeのハンドルをpolling出来ない
仕様にしたんだろうね。まったく。
0509デフォルトの名無しさん
NGNGselect使えなさスギ
0510デフォルトの名無しさん
NGNG0511デフォルトの名無しさん
NGNG直接デバイスドライバとやり取りするのですか?
でも、これだとハード毎に異なりますよねぇ〜。
WinSockのフックは出来たのですが、検出できないアクセスがあるもので…。
0512デフォルトの名無しさん
NGNGパケットの送受信って何を使えばいいのでしょう?
0513デフォルトの名無しさん
NGNG0514デフォルトの名無しさん
NGNG0515超初心者
NGNGどうやって指定するのでしょう。マルチキャストがいまいち・・・
またこれを使ってtracerouteの替わりにできるとも聞いたのですが
実際どうなんでしょう。
0516デフォルトの名無しさん
NGNGそんなあなたに ping -f がオススメです
0517デフォルトの名無しさん
NGNGTオプションと言われても実装されている環境によって意味が違うの
では?Win98ではそのようなオプションはありませんでした。
多分「ping -T 値」って指定するのでは?
0518超初心者
NGNGusage: 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デフォルトの名無しさん
NGNG0521デフォルトの名無しさん
NGNGTTLの値はIPパケットの生存時間で0なら破棄されたと思います。
この値の減り方はよく知りませんが、ルータなどを超えると減ったと
思います。
pingとtracerouteは同じICMPのECHOリクエストとECHO応答を使う
プログラムですが、tracerouteはTTLの値でパケットが破棄される仕
組みを利用していたと思います。詳細はtracerouteのソースを読ん
でください。それに合わせてpingを利用するなら使えそうな感じが
します。
0522超初心者
NGNG224.0.0.1としてみたら何かは表示されましたが
普通のアドレスだとこうなります。
> ping -T 10 アドレス
ping: -I, -L, -T flags cannot be used with unicast destination
0523デフォルトの名無しさん
NGNG板違い。通信技術板へいきませう。
0525デフォルトの名無しさん
NGNGWinSock2って何が違うんですか?
0526デフォルトの名無しさん
NGNG0527デフォルトの名無しさん
NGNGというかマトモな本がそれしかない
0528デフォルトの名無しさん
NGNG素人です。
自分は2000バイトずつに分けてます。
1回ずつACKを受け取ってから送信するようにしてます。
正しいかどうかわからないけど、動いてます。
1MBを1回のSendでは無理だと思います。
0529デフォルトの名無しさん
NGNGサンキュ。
これから本格的なMLに聞いてくる。
とりあえずレスありがと。
0530512
NGNG0531デフォルトの名無しさん
NGNGBerkeley Packet Filterでも使えば?
0532512
NGNGBerkley Packet Filterをちょっと調べてみたらパケットのスニファー
みたいな用途っぽいですね。やりたいのはconnect()などの制御
とデータパケットの送受信をrawソケットで実現させること。
環境は書いてませんでしたが、AIXかHP-UX。あるいはLinuxでも
OK。
0533デフォルトの名無しさん
NGNGLinuxでいいんならTCP実装のソース読めばいいんでねえの?
0534512
NGNGLinuxカーネルって全くといって良いほどソースを読んだことが無いです
が、rawソケットで実装されてるのですか?なかなか奥の深い助言です
ね。
カーネルソースをみてみましたが、net/ipv4辺り?としかわかりません。
ソースを読むにあたって、システムコールに対応するソースは何処か
解説のあるサイトはご存知でしょうか?
0535デフォルトの名無しさん
NGNG<input type=hidden name="get" value="143242341324">
<input type=submit value="abcd">
</form>
このCGIの出力結果を見るにはどんな文ををサーバーに送れば見ることが出来ますか?
おしえてください
0536デフォルトの名無しさん
NGNGBPFってありました? 相当する機能はあったと思うけど..
0537512
NGNGですね。詳細を調べてみます。
0538デフォルトの名無しさん
NGNGうちのはNATeなのですがヤフメなどは使えます。
で、ポートの役目リストみたいなページで、ヤフメのポートが記述してあったのですが、、
WinSockなど特別な方法を使えばふつーに通信できるのでしょうか?
判りにくくてスミマセン(汗
具体的に言うとマイクロソフトメッセンジャーなどは1:1で会話や通信できるのに
(どこかでサーバ介している??)
DirectPlayを使うと(というよりわたしの技術では)東急ケーブルなどのローカルIPなプロバイダの人とは
ネットワークゲームが出来なかったりするのです。(どうにかNATeにも対応させたいし、、)
回避する方法はないのでしょうか。。
資料などありましたらこのバカにも判りやすく具体的によろしくお願いします
(ここの何処にあるとか。。)
0539デフォルトの名無しさん
NGNGWin2000使ってます。
0540デフォルトの名無しさん
NGNGhttp://www.layer.co.jp/
0541デフォルトの名無しさん
NGNGメニューなどが英語ですけど十分使えます。
Analyzerの英語(日本語ならベターだけど)ドキュメントが欲しいところ。
0542デフォルトの名無しさん
NGNGNATって何なのかもう少し理解してから書き込んで下さい
0543デフォルトの名無しさん
NGNG0544デフォルトの名無しさん
NGNG回線で足つってください。
0545デフォルトの名無しさん
NGNG0546デフォルトの名無しさん
NGNG回線で足つって氏んで下さい
0547デフォルトの名無しさん
NGNGftp-data 20/tcp
や
netbios-dgm 138/tcp nbdgm
netbios-dgm 138/udp nbdgm
のように実際のセッションがあるときにしか使われないポートが
開いているかどうかを調べるには対応する
ftp 21/tcp
とか
netbios-ssn 139/tcp nbssn
が開いていることで判断すればいいのでしょうか?
それとも上記のデータ送信ポートが開いていることを
セッションを作らずに直接調べる方法があるのでしょうか?
0548s
NGNG0549デフォルトの名無しさん
NGNG0550デフォルトの名無しさん
NGNG0551デフォルトの名無しさん
NGNG0552デフォルトの名無しさん
NGNG激しくワラタ
0553デフォルトの名無しさん
NGNGソケット使う「だけ」ならそれほど勉強する必要はない。
0554デフォルトの名無しさん
NGNG2、SJISのエンコードは %XX で言いと思うんですが、他の文字コードのエンコードは
どうやってやるのでしょうか?
UNICODEとかの場合は %XXXX で良いのでしょうか?
0555デフォルトの名無しさん
NGNG%xxは文字コードのエンコードじゃなくてバイナリのエンコードだから
S-JISだろうとEUCだろうとunicodeだろうと全部%xxの組み合わせダヨ。
デフォルトの文字コードはどうなんだろうね。発信元依存じゃないのかな?
0556デフォルトの名無しさん
NGNGURL-Encode は単にエンコード方式を規定しているだけで、charset の規定はない。
0557554
NGNGわかりましたです。
0558デフォルトの名無しさん
NGNG0559デフォルトの名無しさん
NGNG0560七夕
NGNG0561デフォルトの名無しさん
NGNG0562デフォルトの名無しさん
NGNG0563デフォルトの名無しさん
NGNG0564デフォルトの名無しさん
NGNG0565デフォルトの名無しさん
NGNG0566デフォルトの名無しさん
NGNG0567デフォルトの名無しさん
NGNG・IEが入ってなくても使えるようにしたい
等の理由があれば馬鹿じゃないだろ
0568デフォルトの名無しさん
NGNG0569デフォルトの名無しさん
NGNGなるほど、じゃあ、そういうことにしておきます。
プロトコル調べて、自力で動かすのが楽しいからやってただけなんですが(笑)
0570デフォルトの名無しさん
NGNG0571デフォルトの名無しさん
NGNGWinInet 使えるんなら使っておいたほうが良いと思う。
0572デフォルトの名無しさん
NGNG0573デフォルトの名無しさん
NGNGproxyも自分でつないじゃ駄目?
0574デフォルトの名無しさん
NGNGIEの設定を使いたいって事でしょ
自力で探ると結構面倒だし
0575デフォルトの名無しさん
NGNG厳密にはJavaScriptエンジンまで作れば取れるだろうけどそこまでする
ならWinInet使うぞ。
WinInetで困ったのがIE5あたりで追加されたフラグをうかつに立ててると
IE3環境でERROR_INVALID_PARAMETERになること
0576デフォルトの名無しさん
NGNG0577デフォルトの名無しさん
NGNG詳しくはアスキーのマルチスレッドプログラミングって本参照
0578デフォルトの名無しさん
NGNGってどうやって実現されてるの?
0579デフォルトの名無しさん
NGNGNTならIO完了ポートを使うのが常識。
0580デフォルトの名無しさん
NGNG要求ヘッダで「ここの位置からのデータを頂戴」と書いてサーバーに伝えてるだけです。
詳しくはIriaやRegetのログ出力を見れ。
0581デフォルトの名無しさん
NGNGその手ことが知りたいならRFC嫁やゴラァ
0582デフォルトの名無しさん
NGNG0583デフォルトの名無しさん
NGNG0584デフォルトの名無しさん
NGNG0585デフォルトの名無しさん
NGNGおいおい(ワラ
0586デフォルトの名無しさん
NGNGスキームやホスト名まで指定してやれば可能。プロキシが
対応していれば ftp:// ってのも HTML 形式で返してくれるぞ。
あとは Cache-Control とかだな。
0587デフォルトの名無しさん
NGNG0588デフォルトの名無しさん
NGNGwinsock使ってる時点で、自力で串とお話する以外ないからだろ?
0589デフォルトの名無しさん
NGNGそのやりかたを教えてくれって言ってるんじゃないの?>588
0590デフォルトの名無しさん
NGNGwinsock使ってる時点で、プロキシ経由しようが
しまいがあんまり変わんないんだよ。
0591デフォルトの名無しさん
NGNGということで、それを聞くということは、
プロキシ経由しないやり方もよく分かってないんじゃないかと
思うわけさ(ワラ
0592デフォルトの名無しさん
NGNG0593デフォルトの名無しさん
NGNGIPヘッダー書き換える
馬鹿なクラッカーが増えるだけ!!!
0594デフォルトの名無しさん
NGNG人を刺す
馬鹿な犯罪者が増えるだけ!!!
0595デフォルトの名無しさん
NGNG0596デフォルトの名無しさん
NGNGRFC読めとまではいわないからせめて本でも買って仕組みを勉強しろ!
0597デフォルトの名無しさん
NGNGそれすら読まない奴は、公害垂れ流しになるから、
インターネット上にパケットをとばすプログラムは組むな
0598デフォルトの名無しさん
NGNGWindowsに関しては生ソケットを使わなくても、PINGはとばせる
0599デフォルトの名無しさん
NGNGWindowsに関してはっていってもどうせWinsock2のRawソケットじゃたいしたことできないから関係ないな。
0600デフォルトの名無しさん
NGNGまた、変更することはできますか?
0601デフォルトの名無しさん
NGNGgetsockopt
0602デフォルトの名無しさん
NGNG料理できねーよ。
0603デフォルトの名無しさん
NGNGたいしたことできないって何が?
0604デフォルトの名無しさん
NGNGうちのマシンだと HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\NameServer も
GetComputerNameEx(ComputerNameDnsDomain,lpBuffer,&nSize) もヌル文字列しか返らなくて役に立ちません
0605デフォルトの名無しさん
NGNGだけでないかい。
ipconfigでは表示されるの?
0606デフォルトの名無しさん
NGNG0607デフォルトの名無しさん
NGNGどんな環境だろうとルータを通らないとインターネットは使えないぞ
0608デフォルトの名無しさん
NGNG0609デフォルトの名無しさん
NGNGDNS引けなきゃ2chにも来れんと思われ
0610デフォルトの名無しさん
NGNGダイヤルアップのときしかDNSサーバが設定されてないとか
0611デフォルトの名無しさん
NGNG0612デフォルトの名無しさん
NGNG240前後のような気がするのですがどうでしょうか?
0613デフォルトの名無しさん
NGNGここで聞くよりテストプログラムをちょっと作って調べた方が早い
なのに何故いちいち他人に聞くんだ?
0614デフォルトの名無しさん
NGNGここで聞くよりテストプログラムをちょっと作って調べた方が早い
なのに何故いちいち他人に聞くんだ?
0615デフォルトの名無しさん
NGNGなんでそんなに簡単だったら教えてあげないの?
それに、自分で作るより、WebでWinsock FAQを検索したほうが早いよ。
613は、まだ作ってるのか。ほいこれ。
http://www.cyberport.com/~tangent/programming/winsock/examples/get-sockets.html
ここのFAQは有名だよ。
0616デフォルトの名無しさん
NGNG簡単なことすら自分でしようとしない奴に教えても意味がないだろう
それからそのアドレスのサンプルは見れば分かるはずだが
「何個まで開ける」を計測しているのではなく
「何個まで作れる」を計測しているプログラム
FAQは>>615みたいに内容を理解しない奴が見ても無駄
0617デフォルトの名無しさん
NGNG教えたくないやつはレス付けるなよ。
なんか、学校の教師みたいだな。分からない事聞くと
すぐ辞書引けみたいなやつ。
どう考えたって、教えてもらった方が早くて効率的。
自分で調べろっていう気持ちもわかるけど、答えてくれるやつが居るなら
聞いたほうが絶対に良い。
0619デフォルトの名無しさん
NGNG>聞いたほうが絶対に良い。
だから、答えてくれる奴なんていないことを、いい加減理解しろ
答えてくれる奴がいないから、「聞いた方が絶対に良い」というのは成り立たないんだよ
見ず知らずの他人に聞くより自分で実験した方がよっぽど早い
質問してから10時間以上経過しているが、これだけあればとっくに試し終わっているだろう
>分からない事聞くと すぐ辞書引けみたいなやつ。
そんな当たり前のことを、いちいち言われて生きてきたのか?
そうとう過保護に育ってきたんだろうな
0620デフォルトの名無しさん
NGNG俺は「1+1は何ですか?」って聞かれても教えてやるよ。
英語勉強してて、分からない単語を一々全部辞書ひく?
時間の無駄だね。始めから訳が書いてある単語帳で覚えるでしょ、普通。
まあ、言ってる事は理解できるんだけど。だから、教えることを強要しないし。
アホらしい質問は無視すりゃOK。
答えてくれる人が居たらラッキーって事で。
0621デフォルトの名無しさん
NGNGそこでHTTPサーバとのやりとりの仕方とかコマンドに
ついてブラウザ自身はどうしているのでしょうか。
ホストにアクセスしてコマンドを送信する方法について書かれた
HPありませんでしょうか、お願いします。
0622デフォルトの名無しさん
NGNGだからさー、答える気が無いなら書き込むなよ。ウザイから。
無視してろって。お前見たいのが一番の害虫だよ。
結局、自分のレベルに合って自分に有益な情報じゃないと興味無いんでしょ?
誰もが君みたいにハイレベルじゃないんだから。
0623デフォルトの名無しさん
NGNGお前が答えれば良いだろう
答える気がないなら書き込まないんじゃないのか?
0625デフォルトの名無しさん
NGNGじゃあ、教えて
1+1は何ですか?
0626デフォルトの名無しさん
NGNG結局その程度の反論しかできないのか。
知らないものをどうやって答えるんだ?
まあ、書き込むなという点には同意。
俺のカキコも相当ウザイはず。
だけどな、このスレでよく見かけるけど、ちょっと初心者級の質問すると
「このスレもレベル下がったね」とかいう書きこみは余計なお世話なんだよ。
一部のレベルが高い奴らだけの為に存在してるスレじゃないんだから。
分かるやつから見ればくだらない事なんだろうけど、質問してる側から見れば
そうとは限らない。
それに俺だって君の言う事は十分理解してるよ。
そもそもこんなレベルの質問してる時点でプログラマとしての適性が限りなく
0に近いわけだし。検索能力も無いんだから。
でも、別にここに書きこんでるやつが全員職業プログラマになるとは限らないし
まだ中学生程度のやつの書き込みかもしれない。
だから俺は自分が知ってる事はレスするよ。
もし質問してるやつが救いようの無い低レベル職業プログラマだったとしても
ここで俺達が叩かなくてもいずれ消えていくでしょ。
0627デフォルトの名無しさん
NGNG2です。
0628デフォルトの名無しさん
NGNGだからお前が答えろって
偽善は口先だけ?
0629デフォルトの名無しさん
NGNGそれでは答えになっていません
もう一度聞きます、「1+1は何ですか?」
0630デフォルトの名無しさん
NGNGもしかして日本語が理解できてない人?
0631デフォルトの名無しさん
NGNGあー、なんでしょうね。
足し算の数式?その数式の答えが2になることはわかるんだけど
それ以上の事はわからないや。ごめんね。
0632デフォルトの名無しさん
NGNG>知らないものをどうやって答えるんだ?
ってかいてありますが、何か?
お前、見てると誰にでもただ噛み付きたいだけなんだね。
確かにウザイわ(w
0633デフォルトの名無しさん
NGNGA 「ハァ?」
ってならないか普通
俺は答えられないゾ
0634デフォルトの名無しさん
NGNG調べて答えれば良いのでは?
そこまで言う人なんだから、他人のために労力は惜しまないでしょう。
偽善じゃなければの話だけど。
0635デフォルトの名無しさん
NGNG0636デフォルトの名無しさん
NGNGありがとう
0637デフォルトの名無しさん
NGNG偽善も何も、誰も答えるなんて書いてないじゃん?
答えられないなら無視してろってのが主張してることだと思うが。
さっきから偽善って使ってるけど、よほど偽善にしたいんだね(w
0638デフォルトの名無しさん
NGNG(ップ
それがお前の普通か。
普通ね。
0639デフォルトの名無しさん
NGNG答えられないなら書くなよ(藁
0640デフォルトの名無しさん
NGNGあなた様のお答えはいかに?
0641617
NGNGどう考えても俺のカキコが原因だ。ごめんね。
俺も自分の言ってることに矛盾してしつこく書き込んでるのが悪いよ。
本当にすみません。
>>634
んー、さすがに知らない事を答えるほどの優しさは持ち合わせてないです。
すんません。まあ、でかい口きいてるし叩かれても当然ですが。
0642デフォルトの名無しさん
NGNG夏だしね。
0643デフォルトの名無しさん
NGNG謝るな、自分の主張は戦争になっても貫き通せ
0644デフォルトの名無しさん
NGNG全くその通りだ。だから>>613みたいな馬鹿が減らないんだよね。
答えないならレスするなよな(w
0645デフォルトの名無しさん
NGNGおう、お前もがんばるな
暑いからな、体こわすなよ
0646617
NGNGいや、自分の主張はそのままですよ。
答える気が無いなら、無視してれば良いんじゃない?って話です。
ただ、このスレを荒らしてしまった事に対して謝ってるのです。
とりあえず、これ以上荒らしたくないのでsageで。
0647デフォルトの名無しさん
NGNG0648夏厨祭り始まり
NGNG>>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ここは
>主にソケットに関してのFAQ
だから質問スレじゃないよ
FAQとQ&Aの違いは分かるよね?
0650デフォルトの名無しさん
NGNG\\ 夏厨祭りだワッショイ!! //
+ + \\ 夏厨祭りだワッショイ!!/+
+
. + /■\ /■\ /■\ +
( ´∀`∩(´∀`∩)( ´ー`)
+ (( (つ ノ(つ 丿(つ つ )) +
ヽ ( ノ ( ヽノ ) ) )
(_)し' し(_) (_)_)
0651デフォルトの名無しさん
NGNG0652デフォルトの名無しさん
NGNG自動でポート番号を決定する場合は1000〜5000のポートを食い尽くすまで
以上、わっしょい
0653デフォルトの名無しさん
NGNG10個めくらいで死んじゃいマス
わっしょい
0654デフォルトの名無しさん
NGNGわっしょい
0655デフォルトの名無しさん
NGNGわっしょい
0656612
NGNGネットスパイダーみたいなものを作ろうと思ったのですが、
マルチスレッドにして、可能なだけソケット開いてHTTPすれば
早くなるかなと思った次第です。
0657デフォルトの名無しさん
NGNG0658612
NGNG0659デフォルトの名無しさん
NGNGbind()の2番目の引数のsockaddr_inを、
sin_addr.s_addr = INADDR_ANY;
って書いてる本があるんですが、これってどうなんでしょう?
FAQにはホストのIPアドレスって書いてあるんですけど…
0660デフォルトの名無しさん
NGNG便乗で質問ですが、あるIPアドレスの範囲からの接続だけを受け付ける
ように指定することはできますか?
0661デフォルトの名無しさん
NGNGaddr/maskのようなアクセス制御は出来ませんが、bind()に渡すアドレスに、
インタフェースのアドレスを指定すれば、そのインタフェースを経由した接続
要求のみを受け付けるようにする事は可能です。
winsockの場合は、WSAAcceptにコールバックを渡して、実際にaccept動作を
する前にフィルタさせるような事も出来るみたいです。こちらの方法は試した
事がないので、実際に出来るかどうかは知りません。
0662デフォルトの名無しさん
NGNG知るにはどうすればいいの?
0663デフォルトの名無しさん
NGNG0664デフォルトの名無しさん
NGNG0665664
NGNGでも、これかどうか分からないしな…
0666デフォルトの名無しさん
NGNG0667デフォルトの名無しさん
NGNGネットワークRPGの作り方がのってる。
0668デフォルトの名無しさん
NGNGサイト、もしくは本を誰か教えてください!!できればUNIX系で
0669デフォルトの名無しさん
NGNG>INADDR_ANYはどこからの接続でも受け付けるという意味です。
これだと誤解を生みかねない説明なので補足させてちょ。
『UNIXネットワークプログラミング第2版 vol.1』 pp.13 で、
「(第2引数の)IP アドレスには、サーバホストが複数の
インターフェイスを持っていた場合に、どのインターフェイスに
あてたクライアントからのコネクションでも受け付けることを意味する
INADDR_ANY を指定する」
とあるように、「どこからの接続でも」っていうのは、
「サーバのインターフェイスのどこからでも」ってことであって、
「どのクライアントからの接続でも」って意味ではないよ。
bind の意味を考えれば当たり前だけど、一応補足しておくね。
0670664
NGNGところで、WPNPの機能がNapchanに取り入れられるなんてことは
ないのか、という疑問が湧いてくるかもしれないが、これは難しい
だろう。というのは、WPNPの方はオープンになっていないからで
ある。
Napchanに限らず、NapsterサーバーやOpenNapにつなぐNapster
クライアントソフトがあんなにもたくさん開発されたのは、オー
プンソースという形で公開されているOpanNapとその仕様のおか
げである。MorpheusやWPNPのように、オープンになっていないと、
いくらWPNPのキャッシュサーバーのIPアドレス、ポートが公開さ
れていたとしても、その仕様がわかってない限り、WPNPを利用
するクライアントソフトを使うのは難しいだろう。
ただ、もともとNapsterにしたところでオープンにしていたわけ
ではなく、ハッカーたちがNapsterサーバーにアクセスして実験を
繰り返してOpenNapという形で仕様をオープンにしたのだから、
同じことがWPNPに起こったとしても不思議ではない。
↑コピペなんだけど、、、
どうも仕様は公開されてないみたいです
パケットキャプチャするしか無いですか(-_-;
0671デフォルトの名無しさん
NGNGWinSockで出来るのか。(出来ないっぽい)
ドライバを作らないとダメなのか。(よく知らない)
特殊なAPIがあるのか(探したけどそれっぽいのがない)
サパーリ分からない状態です。
定石やヒントだけでもいいので、情報をお願いします。
0672名無しさん
NGNG0673名無しさん
NGNGGET ***** 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
0674673
NGNGContent-Lengthとhtmlデータを返してくれない。
なぜでしょうか?
0675671
NGNG情報ありがとうございます。
早速検索かけてみました。
ソースもあったので中を見たところ、どうもドライバを作って入れてるみたいですね。
(まだちょっと見ただけですが)
やっぱりドライバからやらないと出来ないのかな?
ちょっと大変(^^;)
取り合えずソースを眺めてみます。(asmファイルもあってちょっとくじけそうですが)
0676デフォルトの名無しさん
NGNGちゃんとバッファが空になるまで読んだ?
0677673
NGNG読んでなかったよ。悪かったな。
0678673
NGNG偽者!
でも、その通りでした。Content-Length返さないのね。失礼。
0679デフォルトの名無しさん
NGNGいろんなサーバに接続してデータを受信してみたんですけど、
Content-Length を返さないところが結構ありました。
結局 Content-Length は必須じゃないんですか?
0680デフォルトの名無しさん
NGNGHTTP1.0ではコネクションが切れるまでがコンテンツとなっている。(←たぶん)
内容が固定でないもの(例:掲示板cgi)はほとんどがそう。困ったもんだ。
HTTP1.1では対策が講じられているので、必ずサイズが分かる。
よってコネクションの切断の方法によらず転送の成否が分かる。
ただしサーバーが1.1である必要あり。
まあいまどき1.0なサーバーはないと思われ。
0681デフォルトの名無しさん
NGNGたしかGETのみ・・・
0682デフォルトの名無しさん
NGNGNetscape Proxy Server とか chunked はずしちゃうよ。もちろん
Content-Length も無しで。それ以前に HTTP/1.1 だからといって
必ず chunked や Content-Length が付いている保証はない。
>>681 GET のみ、レスポンスコード&ヘッダなしでいきなりコンテ
ンツ返信ってやつだな。自作の Web 巡回ツールテストしてて 0.9
レスポンスにぶち当たってこけたことがある。
0683680
NGNGまじで?
サイズ保証したい場合は自分でまた何かフィールドつけることになるのか・・・
アホや・・・
0684デフォルトの名無しさん
NGNG0685679
NGNGコネクションが切れるまでがコンテンツ、だったら
データの終りまで行って切れたのか、それともエラーで切れたかの
区別が出来ないんじゃないですかね…
今 RFC を読んでるんですけど Chunked Message 出てます。
Content-Length は HTTP/1.0 の互換性のためで、
Chunked で送る場合は Chunked を優先して、サーバは Content-
Length は送るな、と書いてありました。
(↑英語正しく読めた自信無い、間違ってるかも)
chunk だと read しっぱなしじゃダメで、データを受信
するのにそれなりの仕組みが必要みたいですね…
0686682
NGNGhttp://www.geocities.co.jp/SiliconValley-PaloAlto/5694/rfc/rfc2068-ja.html
データの整合性を保証するなら長さだけじゃなく Content-MD5
までやってくれや。chunked message には「フッタ」もあり
だから (RFC2616 で修正されたかな?) そこらへんの実装も
難しいぞ。IE のコントロール使ってるとかアプレットとか
なら気にしなくても良いが。
0687685
NGNGありがとう〜
英文印刷して読んでやろうかと思っていたところでした、
ホント助かります。
0688デフォルトの名無しさん
NGNGRFCにはサイズを(Content-Lengthかchunked encodingで)「付けなけれ
ばならない(MUST)」って書かれてるんだけどね(さもないとPersistent
Connectionのとき切れ目が分からない)。
現実はそんなに甘くないということで。
0689デフォルトの名無しさん
NGNG情報が全く手に入りません。
何処かに良いサンプル落ちてませんかね。。
0690692
NGNGを、persistent connection の時はデータ長を明示的に渡さな
ければならないということを言い忘れてた。まぁどのみちサーバ
側が persistent connection を拒否して長さ省略で返す場合
もあるんだけどね。
0691デフォルトの名無しさん
NGNG0692デフォルトの名無しさん
NGNGそれを24時間だれでも遊べるようにしたいのですが。
自宅のPCにサーバプログラムを放り込んで、
24時間ネットにつなげっぱなしにすれば実現できますか。
大手のサーバのように、24時間信頼性の高い
(ちょくちょく切断されない)サーバを個人で運営するには
どうすれば良いのですか。
0693デフォルトの名無しさん
NGNGそれと回線は何なの?
0694692
NGNG外部から電話がかかってくると切断されますが…
0695682
NGNGmessage-body 長の決定方法に "By the server closing
the connection." って書いてあるから (RFC 2616 は
transfer-length になってる; 当然か)。Content-Length もしくは
Transfer-Encoding: chunked のどちらかを使わなければならない
という MUST 要求はなかった。
0696デフォルトの名無しさん
NGNGそれは保安器交換で直ると思われ
http://salami.2ch.net/test/read.cgi?bbs=isp&key=995877420
スレ違いなのでsage
0697デフォルトの名無しさん
NGNGこういうネットワークエラーがでるんですけど、
どなたかアドバイスお願い致します。
0698デフォルトの名無しさん
NGNG(・∀・)チンコ!!
0699デフォルトの名無しさん
NGNG0700デフォルトの名無しさん
NGNG0701デフォルトの名無しさん
NGNG精神的ブラクラにつき開くことなかれ
0702デフォルトの名無しさん
NGNGガイーン(T_T)
データ転送をHTTPで済まそうと思ったけど甘かったかな・・・
データ本体をパーズせずに転送エラーをチェックしたかったんだけど・・・
ご教授ありがとうございます。
0703デフォルトの名無しさん
NGNGttp://www.geocities.co.jp/SiliconValley-Oakland/1680/memo0008.html
0704デフォルトの名無しさん
NGNG0705デフォルトの名無しさん
NGNG調べてみます。これってサーバのCPU食いませんか?なんとなく心配。
0706デフォルトの名無しさん
NGNG0707デフォルトの名無しさん
NGNG0708デフォルトの名無しさん
NGNGメールがうまく送信できずに悩んでいます。
やっていることは、DNSに問い合わせて、MXレコードを引いて
直接相手側のSMTPにメールを送っています。
エラーの内容は、
>501 Invalid domain name
と出るのですが、なにか対処法ご存知の方いらっしゃいますか?
0709デフォルトの名無しさん
NGNGサーバーは、ポート7001と返してきたが、どうして?
クライアントもサーバも同じ7000でいいのでは?
0710デフォルトの名無しさん
NGNG0711デフォルトの名無しさん
NGNG相手SMTPサーバにあなたの側は、どう名乗っているかがちときになる。
0712チェックサム
NGNGIPヘッダーのチェックサムなんですが、適当な数字(2とか3)を入れ
てもパケットが送信出来てしまいます。何でエラーが起きないんでしょうか?
0713極めて不確か
NGNG1. ドライバが勝手に(親切にも)直してくれる。
2. 実はいつでもパケットは送信できる。受け取ったホストは
チェックサムを計算して、壊れたパケットだと見なして蹴る。
くだらん邪推書き込んでスマソ。どなたか詳しい方居りませぬか?
0714デフォルトの名無しさん
NGNGUDPにエラーを返す規定はないからエラーなどおきるわけがない。
もし、そのパケットの送信に対して相手が何らかの応答をしてきたとするならドライバが勝手に直したのだろうし
応答が帰ってこないのなら相手側が壊れたパケットだとして破棄したんだろう。
0716デフォルトの名無しさん
NGNGBufferedInputStreamは
どういう風に使えばいいのでしょうか?
0717デフォルトの名無しさん
NGNG簡単だろうとタカを括っていたのですが、予想外に苦戦してます。
いまのところnslookupコマンドを外部呼出しして結果をファイルにリダイレクトして、そこから読み込むという方法をとっているのですが、やはり自プログラムで直接引くようにしたいのです。
サンプル等も探したのですが、見当たりません。
なにか情報があったら教えてくださいませ
0718717
NGNG>>708
MXレコードはどうやって引いているのですか?
さっぱりわからなくて、困っています。やはり自分でソケットプログラムを
書いてDNSからのデータを解析しないといけないのでしょうか?
0719708
NGNG>相手SMTPサーバにあなたの側は、どう名乗っているかがちときになる。
それって、HELOコマンドのときのことですか?
HEROコマンドに対するレスポンスでエラーが出ています。
HEROコマンドの引数に、MIMEエンコードした文字列を入れちゃ駄目ですか?
>>718
dnsjavaというのを使ってます。
http://xbill.org/dnsjava/
0720デフォルトの名無しさん
NGNGReturn-Path、Received、Message-Idなどのヘッダー(エンベローブ)って
普通にDATAコマンドの後に記述しても駄目なんでしょうか?
だれか教えてぷりーず。
0721
NGNG教えてくださいませんか。
0722デフォルトの名無しさん
NGNGコネクション切断検知のタイムアウトなら
レジストリいじらないと
だめだったような(NTの場合)
0723
NGNG0724デフォルトの名無しさん
NGNG0725WInsock勉強中
NGNGサーバに何か要求しようとして、Connectした後Sendする前に
その要求がやっぱり不要になってしまった場合。
あるいは、SendしてRecvしている最中にいま受信しているデータが
不要になって、さっさと別の要求を出したい場合。
上記のような場合どうすればいいでしょうか?
現状は、問答無用でshutdownを実行しているのですが、
あまりよろしくないような・・・
やはりきちっとすべてのデータを受信してからでないと
次の要求はできないのでしょうか?
どなたか教えてください。
0726デフォルトの名無しさん
NGNGいきなりクライアントが shutdown する可能性があることを前提に
サーバーを作ってあれば(作っておくべき、異常終了に対応するため
にも)、それでも良いよ。
データの受信中にコマンドを発行したいなら、FTP みたくコマンドと
データ用に別々にコネクションを張るのが楽だと思うが。今、どうし
てます?
0727WInsock勉強中
NGNGデフォルトの名無しさん お返事ありがとうございます。
知識不足でFTPみたく・・・の部分はよくわからないのですが、
現状ではデータ要求のコマンド(というかメッセージ?)もデータ自体も
すべて同じ風にrecvとsendを使用して同じSocketでやり取りしています。
この部分を別仕様に変えるのはちょっと大変なので、サーバ側がいきなりの
shutdownに対応しているか?を確認してみます。
ありがとうございました。
0728デフォルトの名無しさん
NGNG0729デフォルトの名無しさん
NGNGいや、Cは関係ない。
知識さえ仕入れれば、Cでも何でもOK。
でも、ゲーム作るのは、C/C++のほうがいいかな。
0730デフォルトの名無しさん
NGNGないのでしょうか?
0731デフォルトの名無しさん
NGNG0732デフォルトの名無しさん
NGNGそうですね。反省。
0733デフォルトの名無しさん
NGNGbud compressionっていうエラーがでて、アドレスを引けない。
わかる人、教えて_(..)_
0734デフォルトの名無しさん
NGNGjavahouseの過去ログ検索で
dnsjavaで検索してみれ。
つい最近dnsjavaの話題があったぞ。
0735デフォルトの名無しさん
01/09/03 01:00ID:v81rkv8.1バイトづつレシーブするのとバッファにためておいて一行ずつ切り出すのとでは
どっちが効率いいですか?
操作自体は1バイトづつのほうがやりやすいと思うんですが・・
0736デフォルトの名無しさん
01/09/04 01:08ID:3J1vv5e.効率の定義にもよるけど・・・recv呼び出しのコストとか?
javaでいうBufferedStreamみたいなのを使えば、気にしなくて済むね。
エラー処理が面倒だけど。
0737デフォルトの名無しさん
01/09/04 07:05ID:MJCjZdvcためて1行ずつ切り出すと改行のない長い文字列を送信されたときにえらいことになります
0738ちょっと質問
01/09/04 14:27ID:Mo7rJ2/M以下、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/Miread = 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どうすればいいのでしょうか?
0742デフォルトの名無しさん
NGNGwhile文を使った方で、毎回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> しかし、TCP/IP本は必ずといっていいほどOSIも載せるから勘違いしている人も多いんだよな・・・
激亀レスだけど、OSIなんてほとんどの本に載ってないぞ。
OSI参照モデルが載っているだけだろ。
0744デフォルトの名無しさん
NGNG0745デフォルトの名無しさん
NGNGEWOULDBLOCKやEAGAINの時は、-1が返るはず
0748741
NGNG読んでみました。
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 デフォルトの名無しさん
NGNGRFC1597読んだんだと思うが、public/private addressという用語。
global/localではない。globalは使う人が多いけどlocalはほとんど聞かない。
たぶんclient側のaddressと混同しやすいから。
うるさいかも知れないのでsage
0750748
NGNGためになります。
Thanks!
0751初心者
NGNGLAN上につながっている特定の相手のマシン(IPアドレスで区別)に、
ファイルを送り込みたい場合、
たとえば、相手のマシンにサーバもしくはクライアントの役目をするような
なんらかのソフトが入ってて、動いていれば、
いろんな手段で実現できると思うのですが、
相手のマシンが ただLANにつながっているだけ、
という状態では こちらのソフトからファイルを送り込む事は不可能ですか?
0752デフォルトの名無しさん
NGNG0753751
NGNGやっぱりだめですね
ありがとうございました
0754デフォルトの名無しさん
NGNG0755751
NGNG現在あるリモートメンテナンスソフトを
LAN対応させようとしてて、
リモート側のソフトをLANで入れられないかなーと・・・
よく考えたら、バカな質問ね
0756デフォルトの名無しさん
NGNGなんだけど、online manual にも、ものの本にも、データの
送り元のアドレスがセットされて戻るとしか解説されてないん
だけど、このfrom引数に送り元のアドレスが最初から
分かっている時に予め代入してから渡すと何かいいこと
あるんでしょうか?
いえ、そうしているソースを見た事があるので。
個人的にはまったく意味ないんじゃないのかなーって
思うんだけど。
0757デフォルトの名無しさん
NGNG特定アドレスからのパケットを受け入れる
0759ネット関係のプログラム作るの初めて
NGNGwinCEにも対応させる事を考えて、
WSAAsyncSelectを使用しないで(CE未対応なので)、
スレッドを用意してselectで通信を監視するようにしています。
selectで受信を判定して、recvする事は成功したのですが、
相手からの接続が切れた事(WSAAsyncSelectの、FD_CLOSEに相当する)
の判定のしかたがわかりません。
どうしたら良いのでしょうか?
いろいろ検索かけたり、ヘルプとかで調べてみたのですが、わかりません・・・
0760デフォルトの名無しさん
NGNGrecvが0を返した時
0761デフォルトの名無しさん
NGNG0762デフォルトの名無しさん
NGNGRubyはクソです。ゴミ箱逝きです。
いじょ
この発言をコピペしていただければ幸いです。
0763デフォルトの名無しさん
NGNGhttp://www.google.com/search?hl=ja&q=telnet+RFC+%93%FA%96%7B%8C%EA%96%F3&lr=
0764761
NGNGあのさあ、検索しても見付からないからここで聞いてるんだけどさ。
0765デフォルトの名無しさん
NGNG ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄ (´´
∧∧ ) (´⌒(´
⊂(゚Д゚⊂⌒`つ≡≡≡(´⌒;;;≡≡≡=
 ̄ ̄ (´⌒(´⌒;;
ズザーーーーーッ
0766765
NGNG ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄ (´´
∧∧ ) (´⌒(´
⊂(゚Д゚⊂⌒`つ≡≡≡(´⌒;;;≡≡≡=
 ̄ ̄ (´⌒(´⌒;;
0767765
NGNG ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄ (´´
∧∧ ) (´⌒(´
⊂(゚Д゚⊂⌒`つ≡≡≡(´⌒;;;≡≡≡=
 ̄ ̄ (´⌒(´⌒;;
0768デフォルトの名無しさん
NGNGこれでどうだ!:-P
ttp://www.geocities.co.jp/HeartLand-Kaede/8800/rfc/rfc1097j.txt
0769デフォルトの名無しさん
NGNG敢えて何番の者かは申しませんが親切に答えてくれた方ありがとうございました。
0770デフォルトの名無しさん
NGNGおお!ありがとう。
しかしこれはサブリミナルオプションらしいですね。
telnetそのもののRFCの日本語訳を希望。
わがままいってごめんちょ
0771デフォルトの名無しさん
NGNG…敢えて何番へのレスかは申しませんが…。
0772デフォルトの名無しさん
NGNG0773デフォルトの名無しさん
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デフォルトの名無しさん
NGNGrecv()が-1を返したときも、上のコードだとループは回り続けるけど、
if (len < 0) {...} みたいなコードは省略済み?
ちなみに、16777215は0x00ffffffだけど、
本当にこの値をrecv()が返してきてるの?
lenの値が16777215だった場合の領域破壊はこの際置いておくとしても、
そこのとこどうよ。
0776デフォルトの名無しさん
NGNG0777デフォルトの名無しさん
NGNG0778デフォルトの名無しさん
NGNGVBで、InetコントロールのOpenURLメソッドで取得したHTMLデータ
をシーケンシャルファイルに保存すると、2バイト文字が化けて
しまいます。これを回避する方法がありましたら、ご教授ください!
よろしくお願いします!!!
0779デフォルトの名無しさん
NGNG777getおめでとう。
で、ください。くださいと言ってます。
0780デフォルトの名無しさん
NGNG0781デフォルトの名無しさん
NGNG0782デフォルトの名無しさん
NGNGそれはUNIXのlsコマンドの話でしょう。
自分が言ってるのはFTPの応答コマンドの話。
0783デフォルトの名無しさん
NGNG0784デフォルトの名無しさん
NGNGLIST -aとか
NLST -aとかやってみ。
0786780
NGNGなぜだろう?
0787デフォルトの名無しさん
NGNG0788759
NGNGありがとうございます
遅レスで申し訳ない上に、さらに質問ですが、
それは、selectだけでは判定できない という事でしょうか?
今は、ソケット監視スレッドで
タイム0でselectを呼び出してループしてます
FDを見て、情報ありの時だけ recvするイベントをだしてメインでrecvしてます
ソケット監視ループで、recvもすれば良いのかなと思ったのですが、
でも、recvって、ブロッキングにならない使いかたできるのでしたっけ?
0789デフォルトの名無しさん
NGNGつまり厳密には鯖依存ってこと
>>787
大嘘こくな
0790760ではないが
NGNGそれ(loopでselect()の復帰を待ってrecv())でよいはず。
コネクション断でもselect()はデータ到着とみなす。
select()がデータ来てるといってるのにread()でブロックすることはない。
ただ、Win系ならWSAEventSelect()なんかの非同期I/Oを使用するAPIを呼ぶと、
socketが自動的にnonblocking-modeに設定されるので注意。
0793788
NGNG>コネクション断でもselect()はデータ到着とみなす。
知らなかった・・・勉強不足
selectループはそのままに、
recv() が 0 の時 切断処理を行うようにしたら、うまくいきました
ありがとうございました
0794デフォルトの名無しさん
NGNGここ一遍目を通しておくとよいよ。
http://www.kt.rim.or.jp/~ksk/sock-faq/indexj.html
0795デフォルトの名無しさん
NGNGWinCEスレに書いたのですが、
もしかして、こっちのスレに書いたほうが良かったのかなーなどと
思いはじめ、
図々しくもリンク貼ります
CEスレの93です
↓
http://piza2.2ch.net/test/read.cgi/tech/998569580/93
0796デフォルトの名無しさん
NGNG500MBのファイルを1MBで分割して500回POSTしてるんですが
400回目あたりを過ぎたところで受信要求がタイムアウトして
しまいます。。。んでリトライして行うとまたタイムアウト
んでまた・・・の繰り返しで
8回あたりリトライするとサーバから受信要求が返されます。
原因として何が挙げられるんでしょうか??
ただ単にサーバに負荷がかかってるのでしょうか?それにしては
ブラウザからCGIを直接起動するときの反応が通常のような・・・。
ちなみにMFCではPOSTするたびにコネクションを新規生成してます。
サーバはSolaris+Apache+PHP。
0797デフォルトの名無しさん
NGNGbind()のエラーだったらTIME_WAITによるAddress already in useの可能性大。
きみも>>794が紹介してくれたとこに一度行ってきなさい。勉強になるから。
0798デフォルトの名無しさん
NGNGありがとうございます
0799
NGNG複数ユーザ毎のメールを一括で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の*指定のように全サブドメイン対象の設定にしたいと思っています。
0800800
NGNG800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 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デフォルトの名無しさん
NGNG0802デフォルトの名無しさん
NGNG基本的にはYes
しかし一つの代表ポートに複数の接続要求を出すことは出来る
TCPのテストプログラムを作って接続語の相手先のポート番号を確認すれば意味は分かる
0803デフォルトの名無しさん
NGNGひとつ不可解な現象にあって困ってます。
recvで受信するときに、改行文字(\r\n)が送られて来ても、
戻り値で2が帰ってくると思ってたのですが、1なのです。
どうしてでしょうか?
ちなみに、受信バッファを監視していると確実に\r\nが書き込まれてました。
0804デフォルトの名無しさん
NGNG0805デフォルトの名無しさん
NGNG質問内容がいまいちわからないですが、、、
socket層には改行文字なんて概念はありません
純粋にバイナリを送受信してるだけです
送信元が\r\nを送ったんなら、\r\nが届くだろうし、
\nだけを送ったんなら\nだけが届くでしょう
0806デフォルトの名無しさん
NGNG返答どうもです。
えっと、症状なのですが、確実に\r\nは送られて来てます。
しかし、recvの戻り値が1なので、単純に戻り値を元にバッファを連結すると
\nが上書きされてしまうのです。
0807デフォルトの名無しさん
NGNG勘違いしてない?
0808デフォルトの名無しさん
NGNGEnterを押して改行だけ送信。
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どなたか、よろしくお願いします
0810デフォルトの名無しさん
NGNGつながっている状態から、
クライアントがソケットを切断した場合、
サーバー側は、一度ソケットを閉じないで
そのままlistenしても良いのですか?
0811デフォルトの名無しさん
NGNG0812デフォルトの名無しさん
NGNG接続受付用のソケットとデータ通信用ソケットの違いを理解していない奴が多すぎる
0813810
NGNG閉じる(closesocket) -> socket生成(socket) -> bind ->
listenで良いのですか?
0814デフォルトの名無しさん
NGNGacceptで受け取ったsocketは閉じるとして、
bindした方は閉じる必要無いのでは?
0815デフォルトの名無しさん
NGNG812が言っていることに対して勉強し直せ。
0816810=813
NGNG1.bind->listen->accept用のソケット(socketで生成)と、
2.acceptで受け取ったデータ通信ソケットということですね
で、2は閉じて、また新たにacceptしなさい
ということですね
0817socksock
NGNGWin2kでビルドし直して動作させたところ、
30分ぐらいで止まってしまいました。
Win2kはSP2を適用しています。(SP1ではBugが…)
SP2でwinsockプログラムがうまく動作しないという噂
を聞いたことがありますでしょうか。
0818デフォルトの名無しさん
NGNG0819デフォルトの名無しさん
NGNGOSを疑うよりもまず自分のコードを徹底的に疑いましょう。99.9%は自分のミスです。
0820デフォルトの名無しさん
NGNGさっきちょっと調べたら送信要求タイムアウト設定できない
バージョンもあるじゃん。
WinInet使ってHttp転送しよとしてるんだけど、諦めろってことか?
0821デフォルトの名無しさん
NGNG0.1%もOSに責任があるようなOSなぞ逝ってよし
0822デフォルトの名無しさん
NGNGマターリいこうよ、なっ?
0823デフォルトの名無しさん
NGNG0.1%って微妙な線だな
Winは45%くらい責任があるしなぁ
BSDくらいか?
0824デフォルトの名無しさん
NGNGなんでもOSのせいにするなって
0825デフォルトの名無しさん
NGNGでも結局ミスしているのは自分
以前、人殺ししたけど捕まらなかったから、また殺したら今回は捕まるのはおかしいと言っているようなもの
0826デフォルトの名無しさん
NGNG0827デフォルトの名無しさん
NGNG>825は>823に文句言ってんの。
分かった?
0828デフォルトの名無しさん
NGNGその0.1%のバグもほぼ対処法がある。
その対処を知らない/行っていないのはやっぱり開発者の責任。
0829元PG
NGNGそうとも言い切れないと思うけど?
漏れは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また>>812に該当する奴が出てきたな
0832 デフォルトの名無しさん
NGNGTCPの接続は、
・自分の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> 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?
0837 デフォルトの名無しさん
NGNG> http://www.iij.ad.jp/pub/RFC/rfc845.txt
ftp://ftp.iij.ad.jp/pub/RFC/rfc854.txt
でした。(記憶で書いたたら番号も間違えていた…)
0838デフォルトの名無しさん
NGNGいまさらながら、
RFCと2chのありがたみを感じております。
(RFCを真剣に読もうとしなかったあっしが恥ずかしいです。)
感謝。多謝。
0839デフォルトの名無しさん
NGNG0840デフォルトの名無しさん
NGNGTFTPのサーバプログラムを作ってみようと思うのですが、
参考になるサイトや書籍、
もしくは、ソース公開してるフリーソフトで参考になりそうなもの、
なにか知りませんか?
0841デフォルトの名無しさん
NGNGtftpd.cそのもの。BSDやLinuxにはついてくる。
0842デフォルトの名無しさん
NGNGhttp://RFC.net/rfc1350.html
このくらい自分で探せや
0843デフォルトの名無しさん
NGNGセマフォの使い方がよくわかりません。
POSIX, SYSV,形式それぞれについて教えてください。
ネットワークプログラミングIPC編は読みました。
それでも、サパーリです。
0844 デフォルトの名無しさん
NGNG> セマフォの使い方がよくわかりません。
原理が分かってないのだから、OSの原理/基礎の本を読め。
0845-
NGNG>セマフォの使い方がよくわかりません。
だいたい同時に使ってるのに使い方がよくわからないのか??
0846デフォルトの名無しさん
NGNGサーバ側からshutdown -> closeというのは、
本来やってはいけない事なのでしょうか
win32でこれをやった場合、特に問題なかったのですが、
winCEでこれをやったら動作がおかしくなってしまうのです
(その後、新しいsocket生成はできるのだが、connectができない
リセットかけるまで復帰しない)
かならずクライアント側から先に
shutdown -> closeしなくてはいけないのでしょうか?
0847デフォルトの名無しさん
NGNG>>794
0848デフォルトの名無しさん
NGNG0849
NGNGどうやればいいんでしょうか?
本屋であさってみたものの、どれもピンとくるものがなくって・・・
0850デフォルトの名無しさん
NGNGhttp://www.vector.co.jp/soft/winnt/net/se136129.html
0851デフォルトの名無しさん
NGNG一度にsendして良いサイズの基準って、なにかありますか?
何も考えずにそのまま、最大2Mくらいのものを一度にsendしていたのですが、
(有線の)LANでは特に問題なかったのですが、
(しかも、sendの戻り値を見ると、一回のsendで送れてしまっているようである)
無線LANで使用したら、
sendすると固まってしまい、しばらく(数十秒)してタイムアウトで返ってくる、という事が
多く発生するようになりました
それで、分割して(たとえば2kくらいとか)sendするようにしたのですが、
そしたら固まる確率はかなり減ったのですが、やっぱりたまに固まりがおきてしまいます
無線LAN自体の問題でしょうか?
0852デフォルトの名無しさん
NGNGたしか、8kか16kだったような。
0853デフォルトの名無しさん
NGNGただ、分割してるだけ?
2k送ったら1バイトのackを受信って感じでどうかな?
ちょっと遅くなるかもしれないけど。
0854デフォルトの名無しさん
NGNGあとは自分で調べよ
0855デフォルトの名無しさん
NGNGヒントくださーい。
0856ヒント
NGNG0857デフォルトの名無しさん
NGNGもう一声!
0858デフォルトの名無しさん
NGNGSO_MAX_MSG_SIE
0859デフォルトの名無しさん
NGNGSO_RCVBUF
SO_SNDBUF
0860デフォルトの名無しさん
NGNGこれ、どう使えばいいんですか?
0861デフォルトの名無しさん
NGNG調子に乗るな、いい加減にしろ
0862デフォルトの名無しさん
NGNGなーんだ、知らないんだー
0863デフォルトの名無しさん
NGNGさようなら、そしてもう来るな
0864デフォルトの名無しさん
NGNGプログラマーはすぐ怒るんだから。こわっ
0865デフォルトの名無しさん
NGNG使わない方がよいですか?
0866デフォルトの名無しさん
NGNG0867デフォルトの名無しさん
NGNGみっともない恥じをカクコト莫れ
すっこめウンこ厨房
0868デフォルトの名無しさん
NGNG0869デフォルトの名無しさん
NGNG> ポート番号10000って、何に使われる事が多いですか?
> 使わない方がよいですか?
http://www.iana.org/assignments/port-numbers読め。最後の部分もな。
> 何に使われる事が多いですか?
「多い」とか「多くない」の問題じゃないよ。自由に使っていいport番号は決まってる。
お前がICQ.comの馬鹿技術者なら別だけど。
0870デフォルトの名無しさん
NGNGけっきょくマニュアルに載っていること以外は答えられないのね.
0871デフォルトの名無しさん
NGNGソケット通信を行うプログラムでWindows98とNTでの違いはあるんでしょうか?
実は98上で動いたものがNT上で動かなくて困ってるんですが...。
0872デフォルトの名無しさん
NGNGつか、マニュアルの読み方くらい覚えてから来い。
そこから教えてたんじゃ玉欄。
0873デフォルトの名無しさん
NGNGこれだけヒントをもらった上に、偉く時間が経っているにも関わらず、
未だに道に迷ってうろついている方向音痴のあなたに乾杯!
永久に遭難していた方が世のため人のため。
0874デフォルトの名無しさん
NGNG「UNIXネットワークプログラミング」で紹介されている
socketやconnect等のラッパー関数であるSocketやConnect関数は
どこかにソースがあるのですか?
あるのだとしたらどのディレクトリの中にあるのか教えてください。
お願いします。
0875デフォルトの名無しさん
NGNG11ページを見よ。
0876デフォルトの名無しさん
NGNGどうもどうも。
0877デフォルトの名無しさん
NGNGで取得できる送受信バイト数と同様な値をプログラムから取得したいのです。
SNMPを使う事まではわかるんですが具体的な手順を教えてください。
あ、Win9xとWin2000のVC6です。
0878デフォルトの名無しさん
NGNG0880877
NGNGサンクスね
あと、Google検索で色々調べてたら見つかりました。
http://www.codeguru.com/mfc/comments/26225.shtml
http://www.zdnet.co.jp/help/howto/linux/0007master/06/
何とか目的の物が出来ました。
0881デフォルトの名無しさん
NGNG学生(20歳)
0882デフォルトの名無しさん
NGNG板違い?
http://pc.2ch.net/php/
WEBプログラミング@2ch掲示板
0883kevin hikinik
NGNGtracertがUDPを利用してるとかICMPを利用してるとか・・・
どゆこと?
プロトコルに基づいてる!?
コードになりゃみんないっしょじゃんか・・・。
用はソケットなりストリームなりを使えばいいだけじゃん。
システムが全治2週間ほどあるんで、見ようにも見れんし。
プロトコル専用のヘッダやライブラリがあるわじゃないっしょ?
プロトコルに基づいて実装するってどゆこと?
0884デフォルトの名無しさん
NGNGマジなのか?
もう少し勉強してから質問したほうがいいぞ。
それか、質問する時の言葉遣いを覚えろ。
0885kevin hikinik
NGNG勉強いっぱいしました。
実装してないだけだい!
頼むから教えろ。
0886デフォルトの名無しさん
NGNG知るにはどうしたらいいの?
0887デフォルトの名無しさん
NGNG小出しにして送信できたバイト数をカウントしなさいYO!
0888デフォルトの名無しさん
NGNGプロトコルをプログラミング言語か何かだと誤解してるような。
0889デフォルトの名無しさん
NGNGプロトコルという言葉の意味を考えてみよう。
0890デフォルトの名無しさん
NGNG小出しにすると送信速度遅くならない?
0891デフォルトの名無しさん
NGNG「PGなのに知らなかった事を潔く質問してみるスレ」で解決できたんじゃないの?
http://pc.2ch.net/test/read.cgi/prog/1002086817/643-656
0892デフォルトの名無しさん
NGNG本当は資格の勉強なんかしたくないんだけど簡単なら取っちゃおうかなと思ってるのですが・・
0893( メ ´Д`)<893 ◆HHJeUSD6
NGNG0894質問。
NGNGrecvの方を固定サイズにした場合、2回以上send
すると正しい文字列でrecvできませんよね?
これを正しく受信するにはどうしたらよいですか??
場合わけしようにもかなりあるような気がして。
send回数は1〜何回でも連続でするものとします。
0895デフォルトの名無しさん
NGNG可変長のデータをやりとりしたい時は、
最初に長さを送るのが簡単だとおもいます。
それか受けとった後に'\0'を探して…
0896質問。
NGNGありがとうございます。でも、
他の方法ってありますか?
0897デフォルトの名無しさん
NGNG結果をグラフで逐次表示したいんですが何か良い方法を
教えて下さい。
0898デフォルトの名無しさん
NGNGそれはネットワークプログラミングと、どのような関係がありますか?
0899デフォルトの名無しさん
NGNGいまいち言いたいことが分からんけど。
(1)相手が1回目のデータをすべて受信できたことを確認してから2回目のデータを送る
(2)データサイズを固定長にしておく
(3)データを見ればどこで切れるか分かる構造にしておく(データサイズを送る、データを\0で区切る、など)
の、どれか。
0900質問。
NGNG説明不足ですみません。
sendする文字サイズは文字の長さなので可変長です。
recvする文字サイズは固定長です。
んでもって、sendとrecvが1:1に同期しながら
動かしているんで・・・。(^^;
ありがとうございました。
0901デフォルトの名無しさん
NGNGsendとrecvが1:1に同期しながら動く?
それは、そもそも無理では?
1回のsendで送ったデータが、2回以上のrecvに分割されるかもしれない。
2回のsendで送ったデータが、1回のrecvで受け取れるかもしれない。
このへんは何も保証されないので、データサイズを送信するなりしなければ、解決になりません。
0903デフォルトの名無しさん
NGNGきっと、計算プログラムとグラフプログラムがあって、その間を
ネットワークで繋いで逐次表示させたいんだよ。だけど、tcp/ipか
udp/ipか、HTTP tunnelingか、RPCかDCOMかの何を使えばいいかで
迷っていたりするんだよ(ワラ。
0904デフォルトの名無しさん
NGNGUDP/IP っていう言い方、あんまし聞かないな・・・
とりあえず TCP でいいんじゃない?
0905905
NGNG通信対戦っぽいソフト作ってるんですが、
HTTPプロキシを通して出来ないかと試してみたら、
POSTが効かなかったり、バッファリングしたりしやがりまして、
なかなか上手くいかないんです。
なんか良い方法をご存じの方いらっしゃらないでしょーか?
1回データをやりとりするたびに
HTTPを繋いだり切ったりするしかないんでしょーか?
0906デフォルトの名無しさん
NGNGとりあえずWin+cygwin/Winsockを考えているのですが。
0907デフォルトの名無しさん
NGNGOSが高速でも、ネットワーク回線自体の伝送速度で制限を受けるので、意味ないです。
10Mbps の回線では、どんなOSを使っても 10Mbps しか出ないのです。
・・・それとも、ネットワークとは関係なく、単にCPUパワーを得たいだけ?
0908デフォルトの名無しさん
NGNGWindows2000Server+Winsock2+完了I/Oポートを使って組むやり方が
Windowsだと最もパフォーマンスが高い。
マルチプロセッサ対応もさせやすいのでCPU毎に得意な処理を分散可能だ。
ただしライセンス料もべらぼうに高い(w
0909908
NGNGクライアントサイドなら組み方を問題にするべきでOSはなんでもいいと思うが
0910デフォルトの名無しさん
NGNG>Windowsだと最もパフォーマンスが高い。
これをUNIXでやる場合、各ポートをselectでチェックする処理を
ループでぐるぐる回すの?なんか遅そうだな...
0911デフォルトの名無しさん
NGNGなんかミスリーディングな言い方してるけど、
selectすると一度に全部のポートがチェックできるよ。
0912デフォルトの名無しさん
NGNGあれがイヤ。
0913デフォルトの名無しさん
NGNG0914無党派さん
NGNG固定の奴でも128〜4096はあるし、変更できるUNIXもあるが…
0915デフォルトの名無しさん
NGNGMacOS X
0916デフォルトの名無しさん
NGNGそれだけは絶対にない
0917908
NGNG自分がMSマンセーなのでWindows2000/XP
むしろUnix系は良く知らんので判断できん。
>>911
私未だにselectの使い方がよく判らんのですが。
複数のソケットをチェックできても、どのソケットが反応したのか
調べる効率的な方法があるんでしょか
ちなみに完了I/OポートではなくてI/O完了ポートAPIだった。
0918デフォルトの名無しさん
NGNGパラメータはtimeslot以外ほとんどNULLにすればいいんじゃない。
ブロッキングをいちいち気にしてられないよ。
selectってようはエラーがないか調べるだけでしょ。
0919デフォルトの名無しさん
NGNG0920デフォルトの名無しさん
NGNG複数のソケットに対する、普通は受信を待つために、使うもの。
0921デフォルトの名無しさん
NGNGソケットに限らない
0922デフォルトの名無しさん
NGNGつうかselectを使わないための完了IOポートでしょ?
0923デフォルトの名無しさん
NGNG苦肉の策
0924デフォルトの名無しさん
NGNGSolarisちがうかな?
>>923
マルチスレッド使うときと使えないときで、非同期処理はどう違うのさ?
0925デフォルトの名無しさん
NGNGマルチスレッドなし → メッセージループでメッセージ待ち
0926デフォルトの名無しさん
NGNGつか、そのマルチスレッド有りは「非同期」やなく「同期」やとおもうんだが。
0927デフォルトの名無しさん
NGNGdispatcherに専用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横文字使いすぎでみっともない
0929908
NGNGプールしておいたいくつかのワーカスレッドに対して行うって事で良いのかな?
これによって平行動作するスレッドの数を制限する事には賛成。
無制限にスレッド作りつづけるとWindowsならいづれブルースクリーンだ。
つまりこの実装を強力にサポートするI/O完了ポートがあるWindows最高(w
0930デフォルトの名無しさん
NGNGおよそ18Kバイト分のパケットを受信したあたりからデータが所々おかしくなって
しまいます。虫食い状態です。recvfromで受けた直後でデータを見てみたのですが
その時点で既におかしいってことは、あとはどこらへんを調べていったらいいんで
しょうか?はまってます。(泣)
(ちなみにLinuxで問題なく動いていたものをWinsock2(Windows)に移植
したものです。)
0931デフォルトの名無しさん
NGNGちなみにrecvfromの受信バッファの大きさは十分大きくしたり毎回0リセットしてみたり
色々やってみましたが症状変わりませんでした。
0932デフォルトの名無しさん
NGNG送信側はだいじょぶ?
0933デフォルトの名無しさん
NGNG同じサーバに対してLinuxからアクセスした場合は問題ないんです。(とほほ)
VisualC++6.0なんですが、昔recvfromでSin_Zeroに誤ったデータを書いてしまう
バグがあったようなのですが、パッチのSP2は既にあてているので環境は問題無さ気
なんですけどね。ここの皆さんはそういう経験は無いでしょうか?やっぱこんなの
俺だけかな(藁
0934デフォルトの名無しさん
NGNG単にUDPの制限(仕様)とかやなくて?
>927
http://state-threads.sourceforge.net/docs/st.html
つまり、こういうこと?(/.でみつけた。)
0935デフォルトの名無しさん
NGNGその後色々調べて見たところサーバからは正しいパケットが送信されている事が
モニターツールにより分かりました。つまりクライアント側の問題であると…。
さらに、クライアント側のイーサーのインターフェースをモニタリングするとなんと
UDPでなくIPパケットとしか認識されてませんでした。何故だぁ…(怒)
IPパケットが山のように見えます。(藁
ちなみにTCP,ARPのレイヤーはちゃんと見えてます。また他のUDPを使うソフト
で試しに通信してみるとUDPはちゃんと通りますのでUDPが通らないという事では
ないみたいです。クライアントソフトの問題ということになるのかな…謎
0936デフォルトの名無しさん
NGNGつーかよ、
> また他のUDPを使うソフトで試しに通信してみるとUDPはちゃんと通りま
> すのでUDPが通らないという事ではないみたいです。
の時によ、
> さらに、クライアント側のイーサーのインターフェースをモニタリングするとなんと
> UDPでなくIPパケットとしか認識されてませんでした。何故だぁ…(怒)
すると、どうなるんだ?
「UDPパケット」と表示されるのか? 「IPパケット」と表示されるのか?
どうせ、「他のUDPを使うソフト」でも「IPパケット」と表示されていて、
単に、UDPパケットだから、Winが破棄しちゃう事があるだけだろ。
そのプログラムにパケットの再送機構は含まれているわけ?
なければ、たまには虫食いになるのが正しい動作。
0937デフォルトの名無しさん
NGNGパケットが途中で失せたり、順序がごっちゃになったりしても
UDPは関知しない(ので、対策は上位レイヤーでしろや)、
ちゅうUDPの仕様を理解した上で、UDPを利用してる?
つーかさ、なんでUDPなわけ?TCPの方がいいと思うが
>データが所々おかしくなって
CRCでもつけて、おかしいところを再送するように書けや。
0938デフォルトの名無しさん
NGNG>>937
状況がきちんと説明できてなかったのでちょっとあれなんですが、
ご指摘ごもっともです。たしかにTCPでやっちまえってのもそうなん
ですが、今回の症状の原因が知りたくて。あとUDPの特性はベスト
エフォートってことで分かって使ってます。モニターツールで見てると
受け側のマシンのイーサ?までは正しいパケットが正しい順番で来
ているのです。それをrecvfromでソケットから取り出した後データが
おかしくなってる。なんだかVC++の環境やライブラリの問題?の
ような気がしてきました。いずれにせよくだらん質問にレス頂いて感
謝しています。
0939938
NGNG>なんだかVC++の環境やライブラリの問題
えっとソケットライブラリのバグパッチがちゃんと当たってない
のかもという意味です。その変もちっと調べてみます。それでは。
0940デフォルトの名無しさん
NGNGべつにイーサまで正しいパケットが来てて、
それがプロトコルスタックで破棄されてもUDPなら問題ではないと思いますが…
>>937もそういうことを言ってるのだと…
0941デフォルトの奈々氏さん
NGNGWinNT4.0でnetstatを実行してるんですが、TIME_WAIT状態になったソケットって
1000コまでしか表示されないようなんですが、何かの仕様でしょうか?
#ちなみにESTABLISHED状態とかのソケットは1000以上でも表示される。
SnmpExtensionXXX()系のAPIを叩いてソケットの状態を表示するnetstatもどきを
作ってみたんですが、同じ結果になってしまいました。
0942デフォルトの名無しさん
NGNG0943デフォルトの名無しさん
NGNGここで、send の呼ばれる間隔が短すぎると、
送信するデータが 1 つのパケットにまとめられてしまうのですが、
これを避ける方法はないでしょうか?
具体的には、
「4 バイトデータのパケット送信
-> 4 バイトデータのパケット送信
-> 4 バイトデータのパケット送信」
となって欲しいところが
「12 バイトデータのパケット送信」
となってしまいます
ブロッキングするようにすると、send の返り値にはちゃんと 4 が入るのですが、
パケットフィルタして確認すると、12 バイトなどにまとめられて送信されています
Java では flush という関数がありましたが、
WinSock には内部バッファを明示的に送信するような手段はないのでしょうか
どなたかご存知でしたら、ご教授よろしくお願いします
0944デフォルトの名無しさん
NGNGsetsockopt(TCP_NODELAY)
0945デフォルトの名無しさん
NGNG4バイトだろうが12バイトにまとめられようが
0946943
NGNGおおおお!できました!ありがとうございます!
今日一日中悩んでたのに・・・、思いきって質問して良かったです
お礼にお団子どうぞ!
-○○○-
>>945
たしかにその通りなんですが・・・
タイミングが重要だったので、バッファに溜められると困るのです
0947デフォルトの名無しさん
NGNGネットワークプログラミング相談室 Port2
http://pc.2ch.net/test/read.cgi/tech/1006258198/
0948デフォルトの名無しさん
NGNG教えていただきたいのですが。
0949Disca ◆NAfP6znE
NGNGhttp://www.ccad.sccs.chukyo-u.ac.jp/manualc/prgrm/dialogbase/media/network/
WSAStartupも知らなかったのに、見つけたYO。
すべてのログ見るのに疲れた(はぁ〜
0950foovar
NGNGselect()を使わずに、ファイルディスクリプタの指すストリームが
ファイルなのかソケットなのかを判断する方法って無いですか。
ストリームからデータを読み出して加工するルーチンがあって、
内部でファイルディスクリプタがファイルを指す場合とソケットの
場合で分けたいのです。
で、最初からselect()を意識した作りではないので、select()を用
いた仕様に作りかえるのがわずらわしいのです。
0951デフォルトの名無しさん
NGNG0953初心者
NGNGそのACKが返ってきたときの時刻が知りたい場合、どの
関数の戻り値を知ればいいでしょうか?
それとも他にいい方法があるでしょうか?
0954デフォルトの名無しさん
NGNG‥‥そういうことではなくて?
0955デフォルトの名無しさん
NGNGっていうか、mmsとか関係ないですか?
0956デフォルトの名無しさん
NGNGネットワークプログラミング相談室 Port2
http://pc.2ch.net/test/read.cgi/tech/1006258198/
レス数が950を超えています。1000を超えると書き込みができなくなります。