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

このエントリーをはてなブックマークに追加
1名無しさん@お腹いっぱい。
主にソケットに関してのFAQ
2名無しさん@お腹いっぱい。 :2000/10/01(日) 05:38
なにが聞きたいんじゃ?
31>2 :2000/10/01(日) 13:14
ゲームプログラミング相談室ほパクったものなのて私は特に何を聞きたいというわけではないです。
4名無しさん@お腹いっぱい。 :2000/10/01(日) 13:20
>ほパクったものなのて
(゚Д゚)ハァ?
51=3>4 :2000/10/01(日) 13:25
ほパクった → をパクった
6名無しさん@お腹いっぱい。 :2000/10/01(日) 13:59
RMI使えばソケットの知識必要なし。
7名無しさん@お腹いっぱい。 :2000/10/01(日) 14:17
>>3
プラットフォームはなんでもあり?
81=3>7 :2000/10/01(日) 14:25
OKです。答えが返ってくるとは限りませんが。
9名無しさん@お腹いっぱい。 :2000/10/01(日) 17:52
>>4 爆笑した。
10名無しさん@お腹いっぱい。 :2000/10/01(日) 19:24
勉強したいのですが
いい本教えて下さい
11優しい君 :2000/10/01(日) 20:08
12>11 :2000/10/01(日) 20:14
う、同じスレをリンクしようとして開いていた。
リロードしてよかった・・・
13初心者 :2000/10/01(日) 22:21
ソケットとOSI参照モデルの7層との関係を教えてください
14名無しさん@お腹いっぱい。 :2000/10/02(月) 00:37
>>13
あんま関係ない。
強いていえばセッション層に含まれる手順だけど、
OSIモデルを意識してソケット使うことって、あんましないよね。
15名無しさん@お腹いっぱい。 :2000/10/02(月) 01:18
OSIモデルよりソケットライブラリのほうが歴史があるんだっけ?
16名無しさん@お腹いっぱい。 :2000/10/02(月) 02:07
OSIは、簡単に言うと標準化団体の学者馬鹿によるフライング。
部屋にこもってる世間知らずのじいさんたちの世迷言。

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

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

<html>
<head>
<script Language="JavaScript"><!--
function inst(){ alert("アドレスはhogehoge"); return false; }
// -->
</script>
</head>
<body>
<img src="banner.gif" width=200 height=100>
</body>
</html>

inst()関数は自分で考えてね。
# ネットワークじゃないし。
26ソケット入門中 :2000/10/02(月) 20:36
>>22
ソケット
  IPアドレスとポート番号を用いて通信するインターフェース
HTTP,FTP等
  ぶっちゃけて言えば、特定のポート番号の別名(HTTPは80等)
〃プロトコル
  サーバーとクライアントの間でコマンドやデータのやり取りをするとき、
  どういうリクエストを送り、どういう応答を返すかの取り決め。
27初心者 :2000/10/02(月) 21:54
>ソケット
>IPアドレスとポート番号を用いて通信するインターフェース
ということは、ソケットとは、TCPプロトコルとIPプロトコルのコネクションを
確立するためのもので、これらのプロトコルとは深く関わっているが、
アプリケーションプロトコルはまた別物で、他に自分で用意しなければならない

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

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

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

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

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

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

日本語版ダイヤルアップネットワーク1.3
http://www.asia.microsoft.com/japan/windows/dun1_3/
41名無しさん@お腹いっぱい。 :2000/10/03(火) 16:30
ソケットには2種類あって、
一つは同一マシンのプロセス間通信用、
もう一つは外部マシンとの通信用ということらしいですが、
どうしてこの二つともが「ソケット」と呼ばれているのでしょうか?
TCPやIPでの外部通信とマシン内部のプロセス同士の通信は
まったく別物のような気がするのですが。
42名無しさん@お腹いっぱい。 :2000/10/03(火) 19:45
>ソケットには2種類あって、
43名無しさん@お腹いっぱい。 :2000/10/03(火) 19:52
>ソケットには2種類あって、
おんなじだよ〜。ソケットってのはデータの出入り口の事だから、
データがネットワークを経由して別のマシンに逝こうが、同じマ
シンの別のプロセスに逝こうが、関係ないよ。
44名無しさん@お腹いっぱい。 :2000/10/03(火) 21:36
ストリームとデータグラムの違いね。
45>>41 :2000/10/03(火) 23:58
> TCPやIPでの外部通信とマシン内部のプロセス同士の通信は
> まったく別物のような気がするのですが。
違ったり同じだったり。
とりあえず内部用に127.0.0.1のIPアドレスが予約されてたり。
スタンドアロンのIPCでストリーム通信だってできたり。
46> :2000/10/04(水) 05:43
その別物をなるべく同じようにしようという意図も
少しはあるんじゃないか?
47> 44 :2000/10/04(水) 12:22
> ストリームとデータグラムの違いね。
これは「同一マシン」「ネットワーク経由」の違いとは関係ないゾ。
ネタ?
48名無しさん@お腹いっぱい。 :2000/10/04(水) 16:56
unixの内部プロトコルとIPのことじゃないの?
49つまり :2000/10/04(水) 17:05
同一マシンの違うプロセスと通信するにも
TCP/IPスタック(?)を借りてやらなけらばならないということですか?
50名無しさん@お腹いっぱい。 :2000/10/04(水) 17:34
socket( AF_INET, SOCK_DGRAM, 0 );
IPv4でデータグラム型。つまりUDP。外部と通信可。

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

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

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

ただ、45のように127.0.0.1をローカルマシンのIPアドレスとして
TCPやUDPで通信することもできるヨ。
51名無しさん@お腹いっぱい。 :2000/10/04(水) 17:37
>49
パイプでもいいよ
52名無しさん@お腹いっぱい。 :2000/10/04(水) 19:29
>49
バイブは違うよ
53名無しさん@お腹いっぱい。 :2000/10/05(木) 06:08
>>52
SVR4だとパイプだろうがソケットだろうが、結局STREAMS配下だから
同じようなもんじゃなかったっけ?
# いや、最近やってないからもはやうろ覚えなんだが
54名無しさん@お腹いっぱい。 :2000/10/05(木) 12:12
>>53
良く読め(藁
55つーか :2000/10/05(木) 14:10
>>53
良く見ろ(藁
56名無しさん@お腹いっぱい。 :2000/10/05(木) 14:49
やっぱり生が一番だよ
57名無しさん@お腹いっぱい。 :2000/10/10(火) 15:00
あげ
58名無しさん@お腹いっぱい。 :2000/10/10(火) 15:52
>>57 なんかききたいの?
59名無しさん@お腹いっぱい。 :2000/10/10(火) 17:43
libpcap.a があると良いですよ。なんつて。
60名無しさん@お腹いっぱい。 :2000/10/10(火) 17:49
私のおすすめはこれ。

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

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

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

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

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


70>69 :2000/10/16(月) 12:43
んなもん作ってどうするんだよ。
71名無しさん@お腹いっぱい。 :2000/10/16(月) 12:49
マルチポスト野郎かい >>69
72名無しさん@お腹いっぱい。 :2000/10/16(月) 13:53
こいつのようなクソのためにリダイアル規制ができたんだよな>>69
氏ね
7371 :2000/10/16(月) 14:21
あ、でもこっちには「天才」が付いてない。>>69
74>70 :2000/10/16(月) 18:21
チケット予約とか(藁
75教えて君 :2000/10/16(月) 18:36
HttpでURLに日本語渡すとき、JISコードの前に'%'を付ければ良いのは
分かったのですが、?が%81Hって変換されるのは何故なんですか?
エンコードの方法が良く分からないので教えていただけないでしょうか。

76名無しさん@いっぱいいっぱい :2000/10/16(月) 18:49
ちょっとスレッドの趣旨とずれるかもしれないんですけど、

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

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

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

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

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

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

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

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

こうなる理由はなぜなんでしょうか?
95名無しさん@お腹いっぱい。:2000/10/26(木) 17:30
それだけじゃなんともいえないが・・・
細い線が間に入ってパケットが分割されたとか、
何らかの原因でパケットが損失して再送してもらってる
とかいろいろ考えられる。
96名無しさん@お腹いっぱい。:2000/10/26(木) 22:49
>>94
recv一発で届いたら、ダウンロードの状況表示がいらないことに気がつきませんか?
9794:2000/10/27(金) 12:27
>96
いまいち意味がよくわからないんですけど、
それは、送信側が(例えば10MBのファイルなんかを)send一発で出す訳じゃないと思うので、当てはまらないんじゃないかと...
98名無しさん@お腹いっぱい。:2000/10/27(金) 19:33
>>94 普通は何回もrecvするんとちゃうの?
99名無しさん@お腹いっぱい。:2000/10/27(金) 19:37
データが全部そろう前にrecvしてるからでしょ。
100名無しさん@お腹いっぱい。:2000/10/27(金) 20:18
httpでレジュームする場合にはどういったコマンドを送ればいいのでしょうか?
101名無しさん@お腹いっぱい。:2000/10/27(金) 23:26
>>97
回線が混んでいて0.1KB/sしか出ないときも、
それがsendで送った最小単位だと思っているのか・・・
TCPとUDPの仕様を混同してるな
102しろーと:2000/10/28(土) 00:57
send一発発効したあとは、

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

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

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

で、よろしいでしょうか?
103名無しさん@お腹いっぱい。:2000/10/28(土) 04:28
>>102
違う。1回の send が1回の recv で取り出せるという保証はない。

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

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

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

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

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

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

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

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

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

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

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

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

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

>>40に書いたのですがこれではダメなんですか?
だめならその理由も教えてください。
133名無しさん@お腹いっぱい。:2000/11/07(火) 17:43
>>130

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

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

「無理です」というのは、インストールが無理だということなのでしょ
うか? 全然、わかっていないようです。
141名無しさん@お腹いっぱい。:2000/11/08(水) 06:00

名前:33は126の間違い
142名無しさん@お腹いっぱい。:2000/11/10(金) 13:07
あげ
143>138=139:2000/11/10(金) 15:51
じゃあ、このプログラムはダメってこと?

http://www.nakka.com/lib/inet/httpcex.html
のHTTPSendRequest関数
144名無しさん@お腹いっぱい。:2000/11/10(金) 15:59
>>143
138じゃないが....
そもそも
sendがWSAEWOULDBLOCKになる場合があるのを全く考慮していない。
ダメダメ。
145132=40:2000/11/10(金) 17:31
>>126 = >>140

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

>>174
通じてねえから164/165みたいなことになったんだろ。
178名無しさん@お腹いっぱい。:2000/11/12(日) 01:57
すまん最後のは
>>176
だった。
179名無しさん@お腹いっぱい。:2000/11/12(日) 02:34
>175
ああ、そういう事か、言われてみれば、selectとpollにFD_WRITEはないな。
これは、確かに誤解を招くね。

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


180170:2000/11/12(日) 04:14
>>179
なんかどっと疲れが.....
だったら

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

とか大嘘書くんじゃねえ。
「言われてみれば」とか言ってる場合じゃねえだろ。
181名無しさん@お腹いっぱい。:2000/11/12(日) 05:57
「誤解をまねく」か… べんりないいようだこと。
182126=140:2000/11/12(日) 08:26
>40=132=145さんへ

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

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

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

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

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

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

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

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

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

>>197
コマンドっていうのは、POP3 で言えば、STAT とかのことですね?
で、返ってくるデータはバイナリ。
という意味ですかね?
199197:2000/11/14(火) 16:47
>>198

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

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

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

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

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

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

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

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

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

ちゃんとパケットフォーマット決めて送りなさいって。
逆を言えばただそれだけのことじゃん。
213????:2000/11/15(水) 23:17
Xlibは構造体そのまま送ってるぜ。あれは馬鹿か?
214>213:2000/11/16(木) 01:12
>異OS、異アーキテクチャ
で通信したいのに
>構造体を直接送るとなると、当然ワード長の違いやpaddingの問題があるし、

>そんなものそのまんま送るほうが馬鹿。
ってことだろ。
215名無しさん@お腹いっぱい。:2000/11/16(木) 02:28
X プロトコルは
> 異OS、異アーキテクチャ
を前提としているんでないの?

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

何年か前に、Solalisでパケットフォーマットの構造体きるのに、
char配列で全部作ったことがあるんだけど、あまりにしんどいから。
220名無しさん@お腹いっぱい。:2000/11/16(木) 17:31
>>219
info gcc
221名無しさん@お腹いっぱい。:2000/11/19(日) 23:17
age
222名無しさん@お腹いっぱい。:2000/11/23(木) 18:40
定期上げ
223名無しさん@お腹いっぱい。:2000/11/24(金) 17:51
IRCクライアント作ろうと思うんだけど、
参考になるようなソースが公開されてるクライアントってあるのかな?
224名無しさん@localhost:2000/11/24(金) 17:56
>>223
Unix向けのものはごく一部を除いて公開されてる。
http://www.irc.org/ あたりが良いのでは。
225223:2000/11/24(金) 17:59
なるほど。ありがとう、見に行ってみます。
もしwindowsのC++とかで書かれてるのがあったらそっちの方がいいけど、
贅沢もいってられないか・・・。
226名無しさん@お腹いっぱい。:2000/11/24(金) 19:41
>何年か前に、Solalisでパケットフォーマットの構造体きるのに、
>char配列で全部作ったことがあるんだけど、あまりにしんどいから。

共用体つかえばどうよ?
227名無しさん@お腹いっぱい。:2000/11/26(日) 11:48
定期あげ
228>226:2000/11/26(日) 12:00
struct packet {
union {
char c[2];
short s;
} u;
long data;
};
とした場合、dataは構造体先頭から3バイト目になりそうな気がしないんだけど。
229名無しさん@お腹いっぱい。:2000/11/26(日) 17:42
>226
そんな簡単な事うだうだ考えるより確かめてみそ。

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

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

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

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

238名無しさん@お腹いっぱい。:2000/11/29(水) 21:41
>>237
selectにタイムアウトの指定がモロにあるだろう
何で使わないんだ?
239名無しさん@お腹いっぱい。:2000/11/29(水) 23:00
>>237
以下は別に「決まりきった方法」という訳じゃないが...

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

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

>>238
シングルスレッドのサーバで、複数のsocketを1度のselectで同時監視するから
だろ、どう考えても。
240237:2000/11/30(木) 12:18
>>239
早速のレスありがとうございます

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

275。>274:2000/12/15(金) 00:00
FormatMessage()のエラーコードは、なんだったの?
後、環境差異もあると思うんだよね。
私がここんとこ、見てたのは、W2Kだから。
ERROR_FILE_NOT_FOUNDとかの、ネイティブなエラーはメッセージ取れてる?
276271:2000/12/15(金) 00:54
ウーン。気になるので後で試す。
多分環境依存。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;
}
277270:2000/12/15(金) 15:07
上のコードで試しました。当方WIN98
最後に表示されたメッセージは
6118 このワークグループのサーバー一覧は、現在使えません。
で、
FormatMessage()がしぱいした回数は
0x2da7 回でした。

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

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

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

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

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

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

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

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

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

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

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


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

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

PS
.Winのシグナルハンドラ定義って一回シグナル入ると再定義しなきゃいけないんですね
ちょっと賢くなった
310デフォルトの名無しさん:2000/12/28(木) 11:00
>>300

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

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

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

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

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

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

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

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

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

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

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

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

IAC WILL, IAC DO
331。>:2001/01/08(月) 10:52
というか、snifferまである環境なら、
tnぐらい知ってる人周囲にいないのかなぁ?
最近はそうでもないのかな・・・
332,,a,,,,,,,:2001/01/08(月) 17:34
,,,a,,,,,a
333328:2001/01/09(火) 01:37
318ですよね?
一応読んでから質問してるんですけど・・・
あれ見ただけで、コネクション張って、次に何やるかわかるんでしょうか?
コードとか、送受信の定義しか、無かったように見えたんで質問したんですけど?

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

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

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

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

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

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

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

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

350デフォルトの名無しさん:2001/01/16(火) 15:19
http proxyはhttp命令しか受け付けないから当然の結果。
専用プロトコルのproxyをさがそう。
351名前ついてますか?:2001/01/16(火) 19:14
Socks使え。って問題でもないんだろうな。
352デフォルトの名無しさん:2001/01/17(水) 10:08
HTTPトンネルをしたいのか?
GetのQueryString or Postして
cgiで受けて代用できないようなことなのか?
353デフォルトの名無しさん:2001/01/22(月) 12:59
同じLAN内で自分の相手してくれるサーバ探すのって普通どうするの?
DirectPlayのEnumHostsに相当する処理を行いたい場合。
354デフォルトの名無しさん:2001/01/22(月) 15:28
>>353
使いたいポートにUDPでブロードキャスト投げろ。
355354:2001/01/22(月) 15:29
補足
サーバ側はブロードキャストによるリクエストを受け取ったら、Senderに応答を
返すようにしておく。
356353:2001/01/22(月) 16:09
やっぱそうなのか、結構面倒くさいのね。
どうもありがとう。ただいま実験中……
357353:2001/01/22(月) 16:46
使いたいポートにUDPでブロードキャスト投げたら
TCPで使えなくない?
普通どうすんの? 別のポート使うの?
358353:2001/01/22(月) 16:54
acceptといっしょにできないのなんかもったいないな。
359デフォルトの名無しさん:2001/01/22(月) 17:12
>>356
面倒くさいから、上位に抽象化されたライブラリを作るわけです。

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

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

RMIやCORBAでネーミングサーバ立ち上げるほどの事でもない(一対一が確定してる)
なら、普通はこのやり方だよね?
370デフォルトの名無しさん:2001/01/29(月) 12:24
age
371デフォルトの名無しさん:2001/02/03(土) 16:45
99
372デフォルトの名無しさん:2001/02/06(火) 09:30
>>363
AfxEventSelect()で設定したEventと終了のEventをWaitFor〜()で
待つってのはどう?
373372:2001/02/06(火) 11:06
WSAEventSelect()だった。
WinSock2だけどね。
374デフォルトの名無しさん:2001/02/08(木) 17:51
ブロードキャスト受けた時に
それが、ブロードキャストと判定するにはどうしたら良いのでしょう?

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

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

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

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

ちなみに、宿題ではありません
379デフォルトの名無しさん:2001/02/13(火) 11:56
2重すみません
380デフォルトの名無しさん:2001/02/13(火) 12:03
IRCプロコトルをカプセル化したコンポーネントってどっかに転がってないですかね。
IRCクライアント CHOCOA のCOMオブジェクトを使うと面倒で面倒で。←タコ
381デフォルトの名無しさん:2001/02/16(金) 18:15
age
382デフォルトの名無しさん:2001/02/22(木) 16:59
age
383デフォルトの名無しさん:2001/02/24(土) 11:40
shutdownとclosesocketの違いを教えてください。
(少なくともMSDNでは)shutdown後のソケットを再利用してはいけない
書いてあったので、さっさとcloseしちゃっても同じだと思うのですが。

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

#複数のスレッドにまたがって1つのソケットを使いまわすことは無い
#という前提でお願いします。
384デフォルトの名無しさん:2001/02/24(土) 12:40
385デフォルトの名無しさん:2001/02/25(日) 17:03
>>384
ありがとう。お行儀好く逝きましょうということですね
386デフォルトの名無しさん:2001/02/26(月) 01:31
hostent構造体のh_addr_listメンバでipアドレスのリスト取れると思うのですが、
肝心のh_addr_list要素数が無いのですが、どうやってすべてのリストを取得するのでしょうか?
387デフォルトの名無しさん:2001/02/26(月) 23:07
>>386
ケツがNULLポインタになってるから、そこまでループで回して処理
388デフォルトの名無しさん:2001/02/26(月) 23:35
ソケットに対してのI/Oは何でやってます?
送信はsend/writeのどちら?
受信はrecv/readのどちら?
待ちはselect/pollのどちら?
BSDかSYS/Vの違いだろうけどさぁやっぱ好みってあるじゃん。
389デフォルトの名無しさん:2001/02/27(火) 15:21
>388
俺はwindowsだからsend/recv/select
UNIX使うようになったら、read/write/selectでやりたいな。
楽そうだし。
390age:2001/03/05(月) 17:26
age
391デフォルトの名無しさん:2001/03/05(月) 17:31
>待ちはselect/pollのどちら?
pollの方が監視できる記述子が多いからなぁ。
392デフォルトの名無しさん:2001/03/09(金) 20:07
win32で
プロミスカス・モードの指定の仕方を教えてください
どうも、Unix系、Linux系のキーワードでMSDNにHitしないんですけど・・・
393デフォルトの名無しさん:2001/03/09(金) 21:31
kqueue, keventはどうよ?
394デフォルトの名無しさん:2001/03/24(土) 21:49
>>392
おまえ、どこにでもでるよな
bosscatだっけ?
395デフォルトの名無しさん:2001/03/28(水) 04:41
あげ
396デフォルトの名無しさん:2001/04/16(月) 03:02
P2Pによりなまsocket通信復活!
CORBA?SOAP?そんな遅いもん使ってられん!!!
yotte あげ
397デフォルトの名無しさん:2001/04/16(月) 04:53
JavaでP2PはRMIでやる羽目になるだろね。
398(゚Д゚):2001/05/05(土) 15:21
Linuxでtcpdumpのまねをしてスニッファーもどきを作ったんですけど。
Winsockで、スニッファーを作ってみたいんですが。
プロミスキャスモードに変更とかどやんの!?
ドライバー作らないとだめとかいううわさを聞いたんですけど・・・。
399デフォルトの名無しさん:2001/05/05(土) 15:28
>298
うわさどおりです。詳しい人よろしく。
400ころ:2001/05/05(土) 16:44
本ばかりよんでいてプログラムはぜんぜん組んでいないのですが
わからないことがありましたので質問します。
ビジュアルベーシックなのですが、FTPやHTTPは対応している
ようなんですが、TELNETに接続するときのやりかたが
どうも良く分かりません。いろいろ本はよんでいるのですが
だめです。
401デフォルトの名無しさん:2001/05/05(土) 21:17
本なんて読まなくていいから、こっちをきちんと読め。
http://RFC.net/rfc854.html
402ころ:2001/05/06(日) 20:17
見たんですが、さっぱり訳がわかりませんでした。
403名無しさん:2001/05/07(月) 01:38
telnetはただのソケット接続です。
送信するものを自由にタイプできるだけです。
404デフォルトの名無しさん:2001/05/07(月) 07:31
>>403みたいにRFCを読まずに、そう思いこむ馬鹿がいる。
405ころ:2001/05/07(月) 19:31
毎日、このスレッド確認しております。ど素人なので、RFCがなんなのか
まったくわかりません。FTPサーバーなどにはウインドウズの関数を
つかってアクセスできるようなのですが、テルネットは、その関数では
対応してないようなんです。なにか他にあるんでしょうか。
406デフォルトの名無しさん:2001/05/07(月) 20:56
明日の「教えてクン」を目指す、>>405 に以下の文章を捧げる。
日々精進し、パソコンヲタクどもの親切を蹂躙してやれ。

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

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

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

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

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

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

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

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

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

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

以上のことを踏まえて質問すれば、君も立派な「教えてクン」である。
ビバ! 教えてクン! 教えてクンに栄光あれ!!
407ころ:2001/05/07(月) 21:43
ご指摘の通り、まったく努力していませんでした。
もうすこし、自分なりにチャレンジしてみます。
いろいろ本は立ち読みしたんですが、なかなかこれだ!
っていうのに出会えないんです。今後のライフワークの
ひとつとしてがんばっていきたいと思います。
408デフォルトの名無しさん:2001/05/07(月) 21:51
>>406
まぁまぁ。
FAQ スレなんだから勘弁してやれよ。
コピペだけど。
409デフォルトの名無しさん:2001/05/07(月) 22:23
>>400
っつーか、本気でやるつもり?相当ダルいよ、マジで。
410デフォルトの名無しさん:2001/05/07(月) 22:35
プロトコルにあわせてプログラムを組むなら、
最低限RFCを読まないと話にならないよ。
普通は、RFCを読みながら四苦八苦してプログラムを組んで動作を確認していくもの。
ちょろっと眺めて出来ないと言う人間は、出来なくて当たり前。
411デフォルトの名無しさん:2001/05/07(月) 23:41
>>407
ライフワークがそんなにいくつもあってたまるか!
412デフォルトの名無しさん:2001/05/08(火) 00:39
質問すれなのだろうけど、
上の見てたら何にも質問できないね
よってさげまんせー
413ころ:2001/05/09(水) 17:33
いろいろためしてみて、VBからテルネットサーバーにアクセスすることができました。
まだデータのやりとりの部分は試していないのでこれから暇をみつけては前進して
いきたいと思います。ただ個人的にプロトコルの詳細およびしくみをよく理解していないので
そのへんの勉強していきたいと思っております。
414デフォルトの名無しさん:2001/05/10(木) 16:08
age
415ころ:2001/05/13(日) 01:41
>409
自分では組めないと思っていたプログラムを過去になんとか
完成させたことがありますので、多少時間はかかるかもしれませんが
がんばってみます。ただウインドーズ系のプログラムがほんと初めてなので
その辺でとまどっていますが、すこしづつ理解しつつあります。
416>415:2001/05/13(日) 01:45
>ウインドーズ系
カコイイ
417デフォルトの名無しさん:2001/05/13(日) 02:50
>>403
TELNETプロトコル以外ならな
TELNETプロトコルのときは端末性能のチェックとかするだろ
418ころ:2001/05/13(日) 20:58
とりあえず、データも完璧とはいえませんが、受信できました。
しかし、受け取る量がでかいのかわかりませんが、うまく表示できていません。
あとはすこしVBの勉強でもすればなんとかなるかなと、思っています。
あまいでしょうか。完璧にするには、あとしばらくかかると思いますが、
なんとかなると思います。結局、ここでは何も教わりませんでしたが
やる気みたいなものを与えてくれたことを感謝いたします。
419ころ:2001/05/13(日) 23:26
サーバーからのデータは受け取れるのですが、
こちらからの送信した内容を相手が処理してくれません。
このあたりから難しいですね。テルネットは。
420デフォルトの名無しさん:2001/05/13(日) 23:52
ころくんはtelnetがなんなのかわかっているのかな?
421デフォルトの名無しさん:2001/05/14(月) 17:46
火葬短足
422承認のロジックについて教えてください。:2001/05/15(火) 10:46
承認のロジックについて教えてください。
acceptした後、その相手が対象のソフトからであるかどうかの
チェックはどのようにやってますか?

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

皆さんはどのような方法をとっていますか?
423デフォルトの名無しさん:2001/05/15(火) 15:11
acceptでソケットが生成されたら、
認証用スレッドに回し、そこからキーデータを送信、
相手がキーに対応したデータを返したら承認。
424デフォルトの名無しさん:2001/05/15(火) 22:34
Winsock難しいすぎないか?
425デフォルトの名無しさん:2001/05/17(木) 00:22
アギョ
426デフォルトの名無しさん:2001/05/17(木) 07:29
UNIXのUDPマシン間通信で サーバ落ちてたりして、パケットが帰ってこなかった場合
どのようにタイムアウト処理をすればよいでしょう? select() を使うべきですか?
それとも他にいい手段ありますか?
427デフォルトの名無しさん:2001/05/17(木) 09:11
>>426
select()がいやならalarm()つかえば?
どっちがいいのかはよくわからん。
428デフォルトの名無しさん:2001/05/17(木) 10:01
伝統的にselectかpollじゃない?
単純なタイムアウトなら簡単だし。
複数だと結構めんどくさいけどね。
429426:2001/05/18(金) 03:03
なるほど alarm() poll() なんて関数があったんですね 調べて試してみます
ありがとう
430デフォルトの名無しさん:2001/05/18(金) 15:44
つか、帰ってくるとなぜ解る?
431デフォルトの名無しさん:2001/05/18(金) 15:46
初カキコなんですが、ビギナーみたいなこと聞いていいですか?
432ころ:2001/05/19(土) 17:36
テルネットのプログラムで愚問いばかりしていたものです。
結局のところいきついたところはRFCでした。やはりRFCを読まずに
なんとかしようと思ったのは馬鹿でした。
はじめにRFCを読めっていってくれた方に感謝いたします。
だいぶ、テルネットのプロトコルについて分かってきました。あとは
トライ&エラーでがんばっていきたいと思います
>431
とりあえずなにが知りたいのですか。愚問いでもなにか、突破口みたいな
ものは開けるかもしれません。
433デフォルトの名無しさん:2001/05/24(木) 18:24
一応優良スレですので、
434Winsock:2001/05/24(木) 19:30
一度 listen開始したソケットのlistenを止めるには
どうしたらよいのでしょうか?
435デフォルトの名無しさん:2001/05/24(木) 22:44
listenを0にすれば?
436434:2001/05/24(木) 23:27
えー?
でも、引数に指定する数は1〜5ってあったよ?
大丈夫なのかなあ?
437デフォルトの名無しさん:2001/05/25(金) 04:42
>>434
close()
438ころ:2001/05/26(土) 09:50
テルネットのクライアントできました。送受信ともにokになりました。
割と簡単にできたのでびっくりでしたが。ほとんどwinsockの知識はないんですが
なんとかなるもんなんですね。
439デフォルトの名無しさん:2001/05/28(月) 22:01
WindowsでIRCクライアント作ってるんだけど、思ったより難しいなあ。
一つのチャンネルだけなら問題無いんだけど、二つ以上のチャンネルの処理が
全然分からない・・・。
440デフォルトの名無しさん:2001/05/31(木) 16:27
メールソフトみたいにmail.hoge.comと指定すれば、
サーバに接続して受信するプログラムを作ろうとしましたが、
connect()で指定するのはIPアドレスなので、
ドメイン名からIPアドレスに変換する方法がわかりません。
変換する関数や、アルゴリズムを教えてもらえませんでしょうか?
Windows,UNIXどちらでも結構です。開発言語はC言語です。
よろしくお願いします。
441デフォルトの名無しさん:2001/05/31(木) 16:31
>>440
gethostbyname
442デフォルトの名無しさん:2001/05/31(木) 16:46
>>440
それぐらいは、googleででてきますよ。
443440:2001/05/31(木) 17:32
>>441
gethostbyname
使ってみましたが、HOSTSファイル内での検索しかしていないみたいです。

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

もう少し自分で調べてから書き込もうね。
445デフォルトの名無しさん:2001/05/31(木) 20:04
nslookupのソースを読もう
446443:2001/06/01(金) 11:06
>>444
リゾルバ
この単語、初めて聞きました。
これを元に何とかなりそうです。
ありがとうございました。

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

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

このタイムアウトするまでの時間を短縮する事は可能なのでしょうか?
可能であれば方法を教えて下さい。宜しくお願いします。
449448:2001/06/08(金) 15:47
sageてどうする>俺
450デフォルトの名無しさん:2001/06/08(金) 16:23
451デフォルトの名無しさん:2001/06/08(金) 17:01
VCでwinsockの使い方をおしえてください
452デフォルトの名無しさん:2001/06/08(金) 17:01
VCでwinsockの使い方をおしえてください
453デフォルトの名無しさん:2001/06/08(金) 17:09
>>452
何をどう教えればよいのか教えてください
454448:2001/06/08(金) 17:42
>>450
connect前にsignalしかけてalarm()置いたらばっちり期待通りの動作になりました。
回答有難う御座いました。
455452:2001/06/08(金) 18:30
>>453
どんなことでもいーんです
おねがいします
456デフォルトの名無しさん:2001/06/08(金) 18:51
>>455
じゃぁ一つだけ教えてやろう。

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

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

#あとWWWクライアントでSSL実装してるソースなんか落ちてたら教えて頂けませんでしょうか。
464458:2001/06/09(土) 00:51
>>460
afxwin.h はMFCがらみじゃなかったっけ?
465&Hearts;:2001/06/09(土) 01:31
2chのIDから、IPを割り出すにはどーすればいーのですか?
466デフォルトの名無しさん:2001/06/09(土) 01:39
>>465
ご自分でお調べなさい
http://www.google.com/
467♥465♥:2001/06/09(土) 01:41
サンクス >>466
468デフォルトの名無しさん:2001/06/09(土) 01:56
469超初心者:2001/06/09(土) 03:01
UNIXで使用しているUDPのポート番号の範囲を調べるにはどうすればよいでしょうか?
470超初心者:2001/06/09(土) 03:33
>>469
ポートスキャンすればいいんでしょうか?
ほんと何も知って無くてすいません
471デフォルトの名無しさん:2001/06/09(土) 03:34
APIをフックして、ファイヤーウォールみたいなものを作る事って可能でしょうか?
472デフォルトの名無しさん:2001/06/09(土) 03:42
>>469
netstat

>>471
可能。つーか何がしたい?
473471:2001/06/09(土) 05:00
>>472
どこかへ勝手にアクセスしているかどうか調べたいのです。
他人の作ったツールは怖くて使えません。
474デフォルトの名無しさん:2001/06/09(土) 19:46
>>473
ログがとれるルータ買えば?
475デフォルトの名無しさん:2001/06/10(日) 01:18
WinInit って WinSockを使わないでインターネットにアクセスしていませんか?
WinInit.dllをデバッガで見ると、WSock32.dll から関数をインポートしていません。
476デフォルトの名無しさん:2001/06/10(日) 02:04
>>475
ほんと?
他のDLLやコンポーネント経由とかじゃなくて?
477デフォルトの名無しさん:2001/06/10(日) 03:26
ほんとだ。 モジュールとしてロードされていない。
478デフォルトの名無しさん:2001/06/10(日) 05:14
selectについて詳しいサイトって無いですか?
479デフォルトの名無しさん:2001/06/10(日) 05:40
>>478
socket, poll, pipe というキーワードと一緒に検索すると
いいかもしれない。
480デフォルトの名無しさん:2001/06/10(日) 05:50
>>478
ありがとうございます。
色々出てきました
481デフォルトの名無しさん:2001/06/10(日) 06:46
windowsのselectって、
openやpipeとかのハンドルも認識する?
482デフォルトの名無しさん:2001/06/10(日) 07:12
>>481
winsockのselectに入れられるのは、winsockで作ったソケットだけだと思う。

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

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

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

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

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

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

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

とりあえず、WSAGetLastError()で理由を調べてみましょう。
499496:2001/06/11(月) 01:54
WSAStartup()を忘れていました。
うまく行きそうです。
487さん、498さんありがとうございます。

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

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

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

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

ついでにパイプやコンソールもselect出来るようになれば
嬉しいね。何でCreatePipeのハンドルをpolling出来ない
仕様にしたんだろうね。まったく。
509デフォルトの名無しさん:2001/06/12(火) 23:53
標準入出力モナー>508
select使えなさスギ
510デフォルトの名無しさん:2001/06/13(水) 04:25
__WSAFDIsSetって何に使うのですか?
511デフォルトの名無しさん:2001/06/14(木) 04:34
WinSockを使わないとすると、インターネットへのアクセスはどうなるのでしょうか?
直接デバイスドライバとやり取りするのですか?
でも、これだとハード毎に異なりますよねぇ〜。
WinSockのフックは出来たのですが、検出できないアクセスがあるもので…。
512デフォルトの名無しさん:2001/06/14(木) 20:18
rawソケットを使ってTCPソケットと同じことをやろうとした場合、
パケットの送受信って何を使えばいいのでしょう?
513デフォルトの名無しさん:2001/06/16(土) 04:49
Windowsでソケット使う場合ってBSDスタイルのワーカスレッド形式が良いですか?
514デフォルトの名無しさん:2001/06/16(土) 04:52
test
515超初心者:2001/06/16(土) 23:43
pingのTオプションについて教えてもらえませんか
どうやって指定するのでしょう。マルチキャストがいまいち・・・

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

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

fオプションはないみたいですね。
519デフォルトの名無しさん:2001/06/17(日) 01:56

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

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

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

具体的に言うとマイクロソフトメッセンジャーなどは1:1で会話や通信できるのに
(どこかでサーバ介している??)
DirectPlayを使うと(というよりわたしの技術では)東急ケーブルなどのローカルIPなプロバイダの人とは
ネットワークゲームが出来なかったりするのです。(どうにかNATeにも対応させたいし、、)
回避する方法はないのでしょうか。。
資料などありましたらこのバカにも判りやすく具体的によろしくお願いします
(ここの何処にあるとか。。)
539デフォルトの名無しさん:2001/07/02(月) 12:30
TCP/IPのパケットデータを覗くソフトってあるんでしょうか?
Win2000使ってます。
540デフォルトの名無しさん:2001/07/02(月) 14:34
541デフォルトの名無しさん:2001/07/02(月) 19:59
フリーウェアならethereal、Analyzerがあります。
メニューなどが英語ですけど十分使えます。
Analyzerの英語(日本語ならベターだけど)ドキュメントが欲しいところ。
542デフォルトの名無しさん:2001/07/03(火) 13:11
>>538
NATって何なのかもう少し理解してから書き込んで下さい
543デフォルトの名無しさん:2001/07/03(火) 15:32
NATの理解がNATらん
544デフォルトの名無しさん:2001/07/03(火) 23:59
>>543
回線で足つってください。
545デフォルトの名無しさん:2001/07/04(水) 00:38
NATく行かん
546デフォルトの名無しさん:2001/07/04(水) 00:56
>>545
回線で足つって氏んで下さい
547デフォルトの名無しさん:2001/07/05(木) 19:41
厨房質問ですいません。
ftp-data 20/tcp

netbios-dgm 138/tcp nbdgm
netbios-dgm 138/udp nbdgm
のように実際のセッションがあるときにしか使われないポートが
開いているかどうかを調べるには対応する
ftp 21/tcp
とか
netbios-ssn 139/tcp nbssn
が開いていることで判断すればいいのでしょうか?
それとも上記のデータ送信ポートが開いていることを
セッションを作らずに直接調べる方法があるのでしょうか?
548s:2001/07/05(木) 19:54
おまえらたいどがNATらん.
549デフォルトの名無しさん:2001/07/06(金) 00:44
厨房警報NATるで
550デフォルトの名無しさん:2001/07/06(金) 00:49
怪傑ズNAT
551デフォルトの名無しさん:2001/07/06(金) 01:05
(ソケット使うならTCP/IPって普通に勉強するもんじゃなかったのか。。。
552デフォルトの名無しさん:2001/07/06(金) 02:16
>>545
激しくワラタ
553デフォルトの名無しさん:2001/07/06(金) 05:28
>>551
ソケット使う「だけ」ならそれほど勉強する必要はない。
554デフォルトの名無しさん:2001/07/06(金) 11:03
1、CGIでURLエンコードするときのデフォルトの文字コードは決まってるんでしょうか?
2、SJISのエンコードは %XX で言いと思うんですが、他の文字コードのエンコードは
  どうやってやるのでしょうか?
UNICODEとかの場合は %XXXX で良いのでしょうか?
555デフォルトの名無しさん:2001/07/06(金) 12:53
>>554

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

デフォルトの文字コードはどうなんだろうね。発信元依存じゃないのかな?
556デフォルトの名無しさん:2001/07/06(金) 13:13
>>554
URL-Encode は単にエンコード方式を規定しているだけで、charset の規定はない。
557554:2001/07/06(金) 20:05
555さん556さん、ありがとうございます。
わかりましたです。
558デフォルトの名無しさん:2001/07/07(土) 00:06
このスレ、レベル低いね。
559デフォルトの名無しさん:2001/07/07(土) 01:27
甘NATう
560七夕:2001/07/08(日) 01:05
願いがかNATいいね
561デフォルトの名無しさん:2001/07/09(月) 12:56
NATって大豆を水につけて煮たものに納豆菌をつけてワラの中に入れて発酵させたものでしょ?
562デフォルトの名無しさん:2001/07/09(月) 17:09
そら納豆や
563デフォルトの名無しさん:2001/07/09(月) 23:20
NATゃん
564デフォルトの名無しさん:2001/07/10(火) 12:55
age
565デフォルトの名無しさん:2001/07/10(火) 17:05
おもしろかった
566デフォルトの名無しさん:2001/07/10(火) 17:19
Windowsで、WinInet使わずにWinSockでHTTPするのはバカですか?
567デフォルトの名無しさん:2001/07/10(火) 17:30
・WinInetのバージョンに左右されたくない
・IEが入ってなくても使えるようにしたい
等の理由があれば馬鹿じゃないだろ
568デフォルトの名無しさん:2001/07/10(火) 18:39
わたしもWinsock派だよん
569デフォルトの名無しさん:2001/07/10(火) 18:43
>>567
なるほど、じゃあ、そういうことにしておきます。

プロトコル調べて、自力で動かすのが楽しいからやってただけなんですが(笑)
570デフォルトの名無しさん:2001/07/11(水) 11:54
すにっふぁしたあい('-`)
571デフォルトの名無しさん:2001/07/11(水) 12:03
proxy とか使ってる人がいるかもしれないから、
WinInet 使えるんなら使っておいたほうが良いと思う。
572デフォルトの名無しさん:2001/07/11(水) 12:32
winsock2使えアホボケ
573デフォルトの名無しさん:2001/07/11(水) 12:37
>>571
proxyも自分でつないじゃ駄目?
574デフォルトの名無しさん:2001/07/11(水) 13:02
>>573
IEの設定を使いたいって事でしょ
自力で探ると結構面倒だし
575デフォルトの名無しさん:2001/07/11(水) 14:13
JavaScriptで自動構成とかされてると自力じゃどうやっても取れない。
厳密にはJavaScriptエンジンまで作れば取れるだろうけどそこまでする
ならWinInet使うぞ。
WinInetで困ったのがIE5あたりで追加されたフラグをうかつに立ててると
IE3環境でERROR_INVALID_PARAMETERになること
576デフォルトの名無しさん:2001/07/11(水) 14:27
あと https がタダで使えるのも美味しいぞ>WinInet
577デフォルトの名無しさん:2001/07/12(木) 03:20
Winsockのselectは効率割悪いってよ。>使ってる人
詳しくはアスキーのマルチスレッドプログラミングって本参照
578デフォルトの名無しさん:2001/07/12(木) 06:13
IriaやらRegetのレジューム機能
ってどうやって実現されてるの?
579デフォルトの名無しさん:2001/07/12(木) 06:36
>>577
NTならIO完了ポートを使うのが常識。
580デフォルトの名無しさん:2001/07/12(木) 06:38
>>578
要求ヘッダで「ここの位置からのデータを頂戴」と書いてサーバーに伝えてるだけです。
詳しくはIriaやRegetのログ出力を見れ。
581デフォルトの名無しさん:2001/07/12(木) 10:34
>>578
その手ことが知りたいならRFC嫁やゴラァ
582デフォルトの名無しさん:2001/07/14(土) 01:29
winsockレベルでproxy経由でアクセスってどうやるんですか?
583デフォルトの名無しさん:2001/07/14(土) 02:31
GET http://www.2ch.net/ HTTP/1.0
584デフォルトの名無しさん:2001/07/14(土) 12:29
HTTP1.0/1.1のRFC読めって?
585デフォルトの名無しさん:2001/07/14(土) 12:37
>>582
おいおい(ワラ
586デフォルトの名無しさん:2001/07/14(土) 14:41
プロキシサーバに接続した後、>>583 みたいに URI 部分に
スキームやホスト名まで指定してやれば可能。プロキシが
対応していれば ftp:// ってのも HTML 形式で返してくれるぞ。
あとは Cache-Control とかだな。
587デフォルトの名無しさん:2001/07/15(日) 00:19
>>585はなんでワラってるの?
588デフォルトの名無しさん:2001/07/15(日) 01:24
>>587
winsock使ってる時点で、自力で串とお話する以外ないからだろ?
589デフォルトの名無しさん:2001/07/15(日) 01:28

そのやりかたを教えてくれって言ってるんじゃないの?>588
590デフォルトの名無しさん:2001/07/15(日) 01:36
>>589
winsock使ってる時点で、プロキシ経由しようが
しまいがあんまり変わんないんだよ。
591デフォルトの名無しさん:2001/07/15(日) 01:40
>>589
ということで、それを聞くということは、
プロキシ経由しないやり方もよく分かってないんじゃないかと
思うわけさ(ワラ
592デフォルトの名無しさん:2001/07/15(日) 02:26
で、>>589>>591はなんでワラってるの?
593デフォルトの名無しさん:2001/07/15(日) 02:37
Raw Socket反対!!!!
IPヘッダー書き換える
馬鹿なクラッカーが増えるだけ!!!
594デフォルトの名無しさん:2001/07/15(日) 05:50
包丁反対!!!!
人を刺す
馬鹿な犯罪者が増えるだけ!!!
595デフォルトの名無しさん:2001/07/15(日) 10:24
Raw SocketないとPingもできないから困る
596デフォルトの名無しさん:2001/07/15(日) 10:26
HTTPわかってない奴は無理にSocketでHTTPを実装しようとするな。
RFC読めとまではいわないからせめて本でも買って仕組みを勉強しろ!
597デフォルトの名無しさん:2001/07/17(火) 00:29
HTTP1.1のRFCは日本語訳もあるし、本など不要
それすら読まない奴は、公害垂れ流しになるから、
インターネット上にパケットをとばすプログラムは組むな
598デフォルトの名無しさん:2001/07/17(火) 00:33
>>595
Windowsに関しては生ソケットを使わなくても、PINGはとばせる
599デフォルトの名無しさん:2001/07/17(火) 19:34
>>598
Windowsに関してはっていってもどうせWinsock2のRawソケットじゃたいしたことできないから関係ないな。
600デフォルトの名無しさん:2001/07/18(水) 20:51
ソケットの持ってるバッファのサイズって知ることはできますか?
また、変更することはできますか?
601デフォルトの名無しさん:2001/07/18(水) 22:43
>>600
getsockopt
602デフォルトの名無しさん:2001/07/19(木) 00:12
>>594
料理できねーよ。
603デフォルトの名無しさん:2001/07/19(木) 12:19
>>599
たいしたことできないって何が?
604デフォルトの名無しさん:2001/07/22(日) 00:29
Windows 上で現在の DNS サーバー名を取得するにはどうすれば良いのでしょうか?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

winsockの場合は、WSAAcceptにコールバックを渡して、実際にaccept動作を
する前にフィルタさせるような事も出来るみたいです。こちらの方法は試した
事がないので、実際に出来るかどうかは知りません。
662デフォルトの名無しさん:2001/07/29(日) 01:29
東風荘の通信を監視して、自分がなにをツモッたかなどを
知るにはどうすればいいの?
663デフォルトの名無しさん:2001/07/29(日) 01:44
自分のつもなら普通にやっててもわかるがな
664デフォルトの名無しさん:2001/07/29(日) 02:11
WinMX のプロトコルの詳細を知るのに良いページとかありませんか?
665664:2001/07/29(日) 04:21
調べてみたらポートの 1025 が空いてたな、
でも、これかどうか分からないしな…
666デフォルトの名無しさん:2001/08/04(土) 14:21
667デフォルトの名無しさん:2001/08/06(月) 10:03
http://homepage2.nifty.com/katuya/index.html
ネットワークRPGの作り方がのってる。
668デフォルトの名無しさん:2001/08/07(火) 00:58
超初心者でもわかるFTPプログラム(C/S両方)のソースと解説のある
サイト、もしくは本を誰か教えてください!!できればUNIX系で
669デフォルトの名無しさん:2001/08/07(火) 02:40
>>660
>INADDR_ANYはどこからの接続でも受け付けるという意味です。

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

>501 Invalid domain name

と出るのですが、なにか対処法ご存知の方いらっしゃいますか?
709デフォルトの名無しさん:2001/08/19(日) 12:52
クライアントがポートを7000に設定して接続したら、
サーバーは、ポート7001と返してきたが、どうして?
クライアントもサーバも同じ7000でいいのでは?
710デフォルトの名無しさん:2001/08/19(日) 17:12
TCPの話?
711デフォルトの名無しさん:2001/08/19(日) 19:47
>>708

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

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

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

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

サンプル等も探したのですが、見当たりません。
なにか情報があったら教えてくださいませ
718717:2001/08/20(月) 04:07
と思ったら、ちょうと知ってそうなお方がそこに・・・!

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

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

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

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

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

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

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

以下、readn

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

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

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

とするとできるのに

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

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

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

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

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

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

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

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

相手のマシンが ただLANにつながっているだけ、
という状態では こちらのソフトからファイルを送り込む事は不可能ですか?
>>751不可能
753751:01/09/14 13:21
>>752
やっぱりだめですね
ありがとうございました
>>751は何を企んでいたのだろう?
755751:01/09/14 18:56
別に企んでません(ワラ

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

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

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

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

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

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

いじょ
この発言をコピペしていただければ幸いです。
764761:01/09/22 18:39
>>763
あのさあ、検索しても見付からないからここで聞いてるんだけどさ。
765デフォルトの名無しさん:01/09/22 18:50
今だ!765ゲットォォォォ!!
 ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄       (´´
     ∧∧   )      (´⌒(´
  ⊂(゚Д゚⊂⌒`つ≡≡≡(´⌒;;;≡≡≡=
         ̄ ̄  (´⌒(´⌒;;
      ズザーーーーーッ
766765:01/09/22 18:51
Rubyはクソです。ゴミ箱逝きです。
 ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄       (´´
     ∧∧   )      (´⌒(´
  ⊂(゚Д゚⊂⌒`つ≡≡≡(´⌒;;;≡≡≡=
         ̄ ̄  (´⌒(´⌒;;
767765:01/09/22 18:53
sage忘れた。スマソ
 ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄       (´´
     ∧∧   )      (´⌒(´
  ⊂(゚Д゚⊂⌒`つ≡≡≡(´⌒;;;≡≡≡=
         ̄ ̄  (´⌒(´⌒;;
質問した事があるのですが、質問した事を忘れてました。
敢えて何番の者かは申しませんが親切に答えてくれた方ありがとうございました。
770デフォルトの名無しさん:01/09/23 01:04
>>768
おお!ありがとう。
しかしこれはサブリミナルオプションらしいですね。
telnetそのもののRFCの日本語訳を希望。
わがままいってごめんちょ
礼儀正しいんだか無礼なんだか…デモチョトワラタ。
…敢えて何番へのレスかは申しませんが…。
770がチョット可愛くみえた。(笑
              / ̄ ̄ ̄ ̄ ̄
     ,__     | >>770>>768のjokeに気付きますように。
    /  ./\    \_____
  /  ./( ・ ).\       o〇       ヾ!;; . iii|//"
/_____/ .(´ー`) \   ∧∧   .       |;;; :.iii|/゙
 ̄|| || || ||. |っ¢..|| ̄   (,,  ) ナムナム   |;;; ,:iii|
  || || || ||./,,, |ゝ iii~   ⊂  ヾwwwjjrjww!;;;;:::iii|jwjjrjww〃
  | ̄ ̄ ̄|~~凸( ̄)凸 .(  ,,)〜 wjwjjrj从jwwjwjjrj从jr
774デフォルトの名無しさん:01/09/24 09:30
以下のようにして、受信ループをまわしているのですが、
クライアント(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);
}
>>774
recv()が-1を返したときも、上のコードだとループは回り続けるけど、
if (len < 0) {...} みたいなコードは省略済み?
ちなみに、16777215は0x00ffffffだけど、
本当にこの値をrecv()が返してきてるの?
lenの値が16777215だった場合の領域破壊はこの際置いておくとしても、
そこのとこどうよ。
776デフォルトの名無しさん:01/09/24 16:19
telnetのソースコードありますか?あったら下さい。環境はLinuxです。
そんなものはどこにでもころがってます。
778デフォルトの名無しさん :01/09/24 17:58
ソケットに関してというわけではないので、恐縮なのですが。。。
VBで、InetコントロールのOpenURLメソッドで取得したHTMLデータ
をシーケンシャルファイルに保存すると、2バイト文字が化けて
しまいます。これを回避する方法がありましたら、ご教授ください!
よろしくお願いします!!!
779デフォルトの名無しさん:01/09/24 19:57
>>777
777getおめでとう。

で、ください。くださいと言ってます。
780デフォルトの名無しさん:01/09/24 19:58
FTPのLISTコマンドでファイル一覧を表示すると、.ファイルなどの隠しファイルが表示されませんが、隠しファイルまで表示するにはどうすればいいでしょうか?
781デフォルトの名無しさん:01/09/24 20:05
-a
782デフォルトの名無しさん:01/09/24 20:23
>>781
それはUNIXのlsコマンドの話でしょう。
自分が言ってるのはFTPの応答コマンドの話。
うちではだまってても .* 全部見えるな
784デフォルトの名無しさん:01/09/24 20:29
>>782
LIST -aとか
NLST -aとかやってみ。
785780:01/09/24 22:01
LIST -a でできた
すんませんね>>781
アリガトサン>>784
786780:01/09/24 22:04
しかしRFC959にはそんなこと一言も書いてないね。
なぜだろう?
959はObsoleteだから。
788759:01/09/25 00:03
>>760
ありがとうございます
遅レスで申し訳ない上に、さらに質問ですが、

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

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

selectループはそのままに、
recv() が 0 の時 切断処理を行うようにしたら、うまくいきました
ありがとうございました
>>788
ここ一遍目を通しておくとよいよ。
http://www.kt.rim.or.jp/~ksk/sock-faq/indexj.html
795デフォルトの名無しさん:01/09/28 00:56
winCEとwin32のソケット通信に関する質問を
WinCEスレに書いたのですが、
もしかして、こっちのスレに書いたほうが良かったのかなーなどと
思いはじめ、
図々しくもリンク貼ります
CEスレの93です

http://piza2.2ch.net/test/read.cgi/tech/998569580/93
796デフォルトの名無しさん:01/09/28 01:20
MFC(WinInet)にてサーバにHTTPS経由でファイルをアップロードしてます。
500MBのファイルを1MBで分割して500回POSTしてるんですが
400回目あたりを過ぎたところで受信要求がタイムアウトして
しまいます。。。んでリトライして行うとまたタイムアウト
んでまた・・・の繰り返しで
8回あたりリトライするとサーバから受信要求が返されます。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

サーバー側は、一度ソケットを閉じないで
そのままlistenしても良いのですか?
閉じろ
>>810
接続受付用のソケットとデータ通信用ソケットの違いを理解していない奴が多すぎる
813810:01/10/03 02:20
じゃあ、
閉じる(closesocket) -> socket生成(socket) -> bind ->
listenで良いのですか?
>>810
acceptで受け取ったsocketは閉じるとして、
bindした方は閉じる必要無いのでは?
>>813

812が言っていることに対して勉強し直せ。
816810=813:01/10/03 09:27
やっとわかりました。自分の大ボケぶりが恥ずかしい。

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

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

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

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

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

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

分かった?
>>821

その0.1%のバグもほぼ対処法がある。
その対処を知らない/行っていないのはやっぱり開発者の責任。
829元PG:01/10/04 19:46
>828

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

IAC BRKを送る。"\255\243"
http://www.iij.ad.jp/pub/RFC/rfc845.txt
File Not Found
837 デフォルトの名無しさん:01/10/06 20:15
>>835
> http://www.iij.ad.jp/pub/RFC/rfc845.txt

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

でした。(記憶で書いたたら番号も間違えていた…)
838デフォルトの名無しさん:01/10/07 01:01
>>835

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

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

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

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

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

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

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

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

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

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

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

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

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

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

あ、Win9xとWin2000のVC6です。
netstat逆汗しれ
880877:01/11/02 19:48
>>879
サンクスね

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

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

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

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

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

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

勉強いっぱいしました。

実装してないだけだい!

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

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

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

それか受けとった後に'\0'を探して…
896質問。:01/11/12 16:03
>>895

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

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

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

ありがとうございました。
>>899
sendとrecvが1:1に同期しながら動く?
それは、そもそも無理では?

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

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

・・・それとも、ネットワークとは関係なく、単にCPUパワーを得たいだけ?
>>906

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

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

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

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

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

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

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

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

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

の時によ、

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

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

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

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

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

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

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

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

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

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

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

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

すべてのログ見るのに疲れた(はぁ〜
950foovar:02/01/07 17:06
すみませんが、どなたか教えてください。

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

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

ネットワークプログラミング相談室 Port2
http://pc.2ch.net/test/read.cgi/tech/1006258198/