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

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

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

1 :デフォルトの名無しさん:03/05/05 12:47
主にソケットに関しての質疑応答スレです。

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

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

過去スレ:
Port1 http://pc.2ch.net/tech/kako/970/970344582.html
Port2 http://pc.2ch.net/tech/kako/1006/10062/1006258198.html
Port3 http://pc3.2ch.net/test/read.cgi/tech/1023359282/
Port4 http://pc3.2ch.net/test/read.cgi/tech/1034236536/
Port5 http://pc2.2ch.net/test/read.cgi/tech/1040220302/

関連リンクは>>2-10辺り

102 :デフォルトの名無しさん:03/05/22 17:45
>>101
んなことない

103 :デフォルトの名無しさん:03/05/22 18:57
Cにも省略の美学みたいのないか?

104 :デフォルトの名無しさん:03/05/22 19:04
スレ違い警報&コーディングスタイル論争警報

105 :デフォルトの名無しさん:03/05/23 13:58
質問です。
Linux で socket 使ってますが、受信バッファを
クリアする関数ってないようなのですが・・・

無効なコマンドが到着したらバッファクリアしたいよー。

106 :デフォルトの名無しさん:03/05/23 14:37
recvすれば?

107 :デフォルトの名無しさん:03/05/23 15:26
なんでクリアしたいの? どうせ、次に受信した
データで上書きされるんだし。

クリアしたいなら、bzero(buf, sizeof(buf));
とかやっとけば? ゼロクリアの場合だけど。


108 :デフォルトの名無しさん:03/05/23 16:08
>>106-107
あぁ・・・
質問の仕方がマズーですね。
アプリ側のバッファじゃなくて、socket の受信バッファなんですけど・・・
受信ルーチンであるサイズ分のデータだけ読んで
正常コマンドなら残りを読むって作ってます。
んで、未知のコマンドなら socket バッファに残ってる分をクリアしたい、と。
socket バッファより大きなデータん時はそんとき考える、と・・・


109 :デフォルトの名無しさん:03/05/23 16:13
>>108
STREAMなソケットなら、クリアしたとしても
未取得のどこまでバッファに届いているかわからないので
途中がぶった切られることになるんだが。
中身を見ずに任意の途中を抜いても後続データを回復できるような手順なの?

110 :デフォルトの名無しさん:03/05/23 16:53
>>109
どもです。
はい、出来ません。
今は socket バッファより小さいんで大丈夫かと。
仕様変わったらどうしょ。

別の質問ですが、不定長データのやり取りで
でたらめなデータを受信した場合ってどうやってます?
blocking mode なんですけど・・・


111 :107:03/05/23 17:16
>>108
とりあえず、読みたい先頭数byteだけのバッファを用意して、
recv() の MSG_PEEK フラグ使えば?
それも途切れてくる可能性があるんなら、MSG_WAITALL フラグ
も一緒に使う。

んで、正常なメッセージっぽかったら受信して処理すればヨシ。
異常だったとしても、一旦読み込むしか方法は無いよ。


112 :デフォルトの名無しさん:03/05/23 17:25
>>110
>不定長データのやり取りででたらめなデータを受信した場合
識別用ヘッダ・データ長・データ・チェックサム
というデータ形式にして常時チェック

113 :デフォルトの名無しさん:03/05/23 17:47
>>111
>異常だったとしても、一旦読み込むしか方法は無いよ。
そですか。

>>112
はい、今そうしてます。
この件についてはちょっと考えすぎだったようです。

みなさんどうもでした。
このスレは親切な人達で一杯ですねー。
こんなヘタレでもレスがもらえる・・・


114 :デフォルトの名無しさん:03/05/23 17:49
>>111

MSG_PEEKは、すくなくとも WinSockの場合、酷い目に遭う可能性あり。
(特に、Win98のWinSock)
WinSockFAQにも、PEEK は危険と、載ってたんじゃなかったかな。

115 :デフォルトの名無しさん:03/05/23 18:14
>>113
スレ違いの話が横行してたからな。運が良かったと思え。

116 :デフォルトの名無しさん:03/05/24 11:12
>>110
> 不定長データのやり取りで
> でたらめなデータを受信した場合ってどうやってます?

server/client共に開発主である場合。

1. そんなことがないようにprogrammingする。(これが解決策第一候補)

相手は別の開発主である場合。(相手が糞なら↑は無理)

A. '\0'をデータ区切りとして利用する等、境界をはっきりさせることを徹底する。
B. それでもやばそうな場合は、接続を捨てることとし、
  再接続関連をprotocol仕様に含める。

ちなみに>>110はTCPがbyte streamを提供するということを理解してないようなので、
良く勉強するように。TCPをSOCK_SEQPACKETと勘違いしているようだ。

> 今は socket バッファより小さいんで大丈夫かと。

の発言とかかなり疑問。

以上SOCK_STREAM(TCP)に限った話でした。


117 :デフォルトの名無しさん:03/05/28 10:43
NLSTコマンドで
NLST -alL public_html/aaa/
などとしてフォルダ内のファイル一覧を取得しているのですが
このコマンドでフォルダのみを抽出するほうほうはありますか?
宜しくお願いします。

118 :山崎渉:03/05/28 12:27
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎――◎                      山崎渉

119 :デフォルトの名無しさん:03/05/28 17:19
TCPで大量のデータを送信する場合、
sendで指定するサイズはヘッダ込みで
1500バイト以下に抑えろと言われたのですが
それで転送速度が上がるものなのですか?

120 :デフォルトの名無しさん:03/05/28 17:27
>>119
何 故 試 さ な い ?

121 :デフォルトの名無しさん:03/05/28 17:54
途中のフラグメントを抑えるためだろ

122 :デフォルトの名無しさん:03/05/28 20:43
>>121
関係ないと思われ。

多分、>>119 にその入れ知恵をしたヤツは、Nagle アルゴリズム
と遅延 ACK による送信遅延を起こさないように、という意図で
入れ知恵したんだろう。ところが >>119 はそのことを理解してな
いので、かなり端折った表現になってるだけだと思う。

それで転送速度が上がるんじゃなくって、送信遅延を防ぐんだ。

が、これまた、その入れ知恵したヤツがホントに >>119 に書い
てある通りのことを言ったんだとしたら、アフォだな。
ちいさいサイズずつ send() したら、モロに送信遅延しちゃうよ。
遅延させたくなけりゃあ、デカいサイズで一気に send() しろ。
下が Ethernet だとしても、1500 超えても問題なし。TCP が
1460 byte ずつ回線に流すから。遅延無しで。


123 :デフォルトの名無しさん:03/05/28 22:51
>>119
馬鹿な先輩は無視するに限る。
それだけじゃ実際のところは分からないが多分馬鹿。



124 :名無しさん@Meadow:03/05/29 01:02
>>117
NLST って、FTPのコマンドか? なら無理だと思われ。

そもそも FTP のプロトコル上 NLST の引数の解釈について明確な記述は無いので、
実は -al が期待通りに動くかどうかさえサーバ側(ftpd)の実装依存。

まあそれを踏まえたうえで、できることは -l の出力を grep '^d' するくらいじゃない?


125 :デフォルトの名無しさん:03/05/29 01:26
>>119
あるいはUDPについてだったとか。
UDP で Ethernet 前提なら、無駄なフラグメントを減らす
(でパケット喪失の確率を減らす)ように、最大1500バイトってのはありかも。


126 :デフォルトの名無しさん:03/05/29 08:19
そういう勘違いをする奴がUDPなんか使うとロクなことにならんと思う

127 :デフォルトの名無しさん:03/05/29 18:58
前にも>>126のような馬鹿なレスしてた奴いたよなw

128 :デフォルトの名無しさん:03/05/30 16:40
FTPのLISTコマンドでファイルの日時が表示されますが
ファイルによって時間だったり年だったりしているのですが
どちらかに統一できないのでしょうか?
できてば年月日時分が取得できればいいのですが

129 :デフォルトの名無しさん:03/05/30 17:01
> FTPのLISTコマンド

ファイル名以外の情報については規定が無かったらしく、
クライアント作成者は皆ハマる、と以前聞いたよ。

130 :デフォルトの名無しさん:03/05/30 17:01
と思ったら>>124も書いてるやん

131 :デフォルトの名無しさん:03/05/30 17:04
あららそうですか・・
FtpFindFirstとか使えば日時は取得できるのですが
それをやっちゃうと今度はパーミッションが取得できないんですよね・・
LISTとAPIを両方行えばいいのですがそれだとリスト取得に倍の時間がかかってしまうし・・

132 :デフォルトの名無しさん:03/05/30 17:22
>>131
何か勘違いしているようだが
相手先のサーバが情報を返さないのであれば、
APIを使っても当然取得できない

133 :デフォルトの名無しさん:03/05/30 19:07
>>132
いや勘違いしてるかもしれないが試したことを言っている。
APIで取得できてLISTコマンドとかでは>>128ってなる

134 :デフォルトの名無しさん:03/05/30 21:02
>>133
そのFtpFindFirst APIが実際にどのコマンドを発行してるかを調べるしか。
FTPってコマンドはテキストで流れるから脳

135 :デフォルトの名無しさん:03/05/30 23:34
>>132
まあ、人の言うこと聞かない奴は放置するしかないよ。

>>134
と言うか、CUI で ftp クライアント使ったことないのか ?
debug モードにすれば、送ってるコマンドとかも表示されるぞ。

136 :デフォルトの名無しさん:03/05/31 01:44
サーバによってはSIZEとかMDTMというコマンドをサポートしていて
いろいろ取得できる場合もある

137 :デフォルトの名無しさん:03/05/31 19:29
>>131
> それをやっちゃうと今度はパーミッションが取得できないんですよね・・

Authorizationなんか、システムによって仕様が違うもんな。
ftp protocolで決めようないわな。

serverがUNIX系だと仮定した時、出来るベストのことはなんでしょう、
くらいの質問に切り替えた方がいいと思われ


138 :デフォルトの名無しさん:03/06/06 11:06
UDPで受信側PCで受けの体勢を取っていない場合(受信するソフトを起動していない)
送信側からドンドンデータを送っても受信側PCには何も影響ないでしょうか?

139 :デフォルトの名無しさん:03/06/06 11:16
無駄な負荷が若干かかるくらいで、
誤動作することはないよ。

140 :デフォルトの名無しさん:03/06/06 11:19
>>138
馬鹿なシステムの場合、DoSとなる可能性あり。

141 :デフォルトの名無しさん:03/06/06 19:14
UDPってローカルIPだけで有効なんですか?

142 :デフォルトの名無しさん:03/06/06 19:31
アハァ?

143 :デフォルトの名無しさん:03/06/06 19:32
>141
んな訳ねぇべよ。それじゃDNS届かないじゃん。

144 :デフォルトの名無しさん:03/06/06 19:56
だれかJAVAでやってる香具師いる?Cが多いみたいだけど。

145 :デフォルトの名無しさん:03/06/06 19:59
TCP/IPソケットプログラミング C言語編 Java編出版記念age
これ単なるライブラリの説明だけじゃなくパフォーマンスとかを含めた
ノウハウも説明している貴重な本だよ。値段も安いし。

146 :デフォルトの名無しさん:03/06/06 20:55
>>145
UNIXネットワークプログラミング 第2版 Vol.1より良い?!


147 :デフォルトの名無しさん:03/06/06 20:58
>>145-146
スレ違い

148 :デフォルトの名無しさん:03/06/06 21:00
>>147
スレ違いと言い切ってしまうお前に乾杯。

149 :145:03/06/06 21:01
それと比べちゃいけない。って説明が悪かったか。
こっちは200ページ弱の大学生用の入門書だよ。

150 :デフォルトの名無しさん:03/06/06 21:01
>>148
http://pc2.2ch.net/test/read.cgi/tech/1051496506/

151 :デフォルトの名無しさん:03/06/06 21:04
>>150
知ってる。だから「言い切ってしまう」って書いた。

152 :デフォルトの名無しさん:03/06/06 21:07
>>147
邪魔だ

153 :デフォルトの名無しさん:03/06/06 21:08
やっぱり多重継承は必要ってことだな

154 :デフォルトの名無しさん:03/06/06 21:10
>>153
なこたーない。

155 :デフォルトの名無しさん:03/06/06 21:15
多重継承ってなに?

156 :デフォルトの名無しさん:03/06/06 21:18
>>155
ネットワーク推薦図書スレを立てろってことだよ。

157 :デフォルトの名無しさん:03/06/06 21:19
>>156
ハァ?

158 :デフォルトの名無しさん:03/06/06 22:12
nntpみたいにクロスポストの仕組みがあればいいのに

159 :デフォルトの名無しさん:03/06/06 23:39
業者がますますウザイだけ

160 :デフォルトの名無しさん:03/06/06 23:56
javaでアプレットのLAN対戦とか、できる?
socket使うのんだろうけど・・どうやるんだ?

161 :デフォルトの名無しさん:03/06/06 23:57
webブラウザで見るアプレット?

162 :デフォルトの名無しさん:03/06/07 00:52
IEでみれれば^^;

163 :デフォルトの名無しさん:03/06/07 01:08
>>160
webサーバと通信サーバを同じマシンに置けば?

164 :デフォルトの名無しさん:03/06/07 11:59
そのソースください・


165 :145:03/06/07 21:51
>>149
買ってみました、UNIXネットワークプログラミングより
薄いし、安いし、FAQとの組み合わせで結構いけるかも。
#ただ、コーディングスタイル合わなかった。

166 :デフォルトの名無しさん:03/06/08 23:58
x-deflate はどんなエンコーディングですか?
google しても、適当な解説が見当たらなかったのですが。

167 :デフォルトの名無しさん:03/06/09 01:01
VBのWinsockコントロール・UDPプロトコルで通信プログラムを作成
しているのですが、データをバイト配列に代入してから小出しにして送信
したいのです。しかし、いかんせんやり方がよく分かりません。知っている
方がいたら教えてください。(VBのスレの方でも聞いたのですが、こっち
で聞けば?と言われたのでこっちで聞いてみました)

168 :デフォルトの名無しさん:03/06/09 01:07
何がわからないのかさっぱりわからん

169 :デフォルトの名無しさん:03/06/09 01:19
>>168
説明がよくわからなかったかもしれないので端的に言うと、
データをバイト配列に代入して、それを分割してSendDataするには
どうすればよいか教えてくださいという事です。


170 :デフォルトの名無しさん:03/06/09 05:58
>>166
zlibにinfrate()がある。続きは圧縮スレで。
>>169
それVBのprogramming作法の問題じゃん。

171 :デフォルトの名無しさん:03/06/09 06:00
>>170
だからどうした? スレ違いだと言いたいのか?

172 :デフォルトの名無しさん:03/06/09 06:19
>>170
> zlibにinfrate()がある。続きは圧縮スレで。
inflate ですね。

173 :_:03/06/09 06:29
http://yomi.kakiko.com/hiroyuki/jaz_b01.html

174 :デフォルトの名無しさん:03/06/09 07:10
811 :デフォルトの名無しさん :sage :03/06/05 05:28
ちょっと質問なんですが、WinsockコントロールでTCPでは普通に送れていた
データがプロトコルをUDPにしたら、「データグラムはバッファより大きい
ため切り詰められます」と出るようになってしまいました。内容はそのままんま
なのかもしれませんが、これを解決するにはやはり小出しにして送るしか
ないのでしょうか?やはりこれがプロトコルの違いなんですか?


175 :直リン:03/06/09 07:13
http://homepage.mac.com/yuuka20/

176 :デフォルトの名無しさん:03/06/09 08:24
そのままんまなのが良くないんだろうね
言葉の意味は分からないが

177 :デフォルトの名無しさん:03/06/09 11:51
>>174
> やはりこれがプロトコルの違いなんですか?

そだね、プログラミングモデルを替えないとね。
バーチャルサーキットからデータグラムに変るわけだから。

178 :デフォルトの名無しさん:03/06/09 19:48
ネットワークの「ネ」の字も知らない初心者です。
一応、C/C++言語でグラフィック、サウンドプログラム等をしてます。
今さらながら、ネットワークプログラミングを勉強したいのですが、
最初に何から始めれば良いでしょうか。

お勧めのソースや環境や書籍等あったら教えてください。

179 :デフォルトの名無しさん:03/06/09 20:02
>>145

180 :デフォルトの名無しさん:03/06/09 20:32
>>170
> >>166
> zlibにinfrate()がある。続きは圧縮スレで。
あとで調べてみます。


181 :デフォルトの名無しさん:03/06/09 23:20
WinSock2.0プログラミング―Window Socket APIによるネットワークプログラミングのすべて
http://www.amazon.co.jp/exec/obidos/ASIN/4797306882/ref%3Dpd%5Fsims%5Fdp%5F%5F1/249-7083274-8757158

この本買った人いますか?内容はどんな感じでしょう?
当方Windows-style API+シングルスレッドでサーバを作ったのですが
Berkeley-style API+マルチスレッドで作り直したいのですが挫折しています.

182 :デフォルトの名無しさん:03/06/09 23:26
>>181
WinSock2.0の書籍ってそれしかないから迷わず買うしか。
APIを一通り説明してある。ついでにここもあわせて読むべし
http://www.kt.rim.or.jp/~ksk/wskfaq-ja/

183 :181:03/06/09 23:30
>>182
レスありがとうございます.
一応Webは一通り調べてみたんですけど良いサンプルは
そのHPぐらいですよね.
とりあえず買ってみようかな,ちょっと高いけど...

184 :デフォルトの名無しさん:03/06/10 00:00
なるべく書籍の話題は専用スレでやってほしい。

185 :デフォルトの名無しさん:03/06/10 04:55
昨日からちょっと潔癖すぎない?関係ない話でも無いんだし…。

186 :デフォルトの名無しさん:03/06/10 07:20
あんまり話題がないんだし、
書籍の話とかでも関係があれば構わないのでは。

187 :デフォルトの名無しさん:03/06/10 07:51
一人が騒いでるだけだろ、ほっといてやれよ。

188 :デフォルトの名無しさん:03/06/10 11:16
>>185
昨日から?>>170か?

189 :魔法使い:03/06/11 00:59
ボケ防止にサーバーを作ろうと考えてます
UNIXだとデーモン、窓だとサービスね。一応マルチプラットホーム予定
一応 ソケットのソの字はわかってるつもり。
TCPのサーバ(Winsocでマルチスレッド)は作った事あるけど
今度は、メールサーバ DNS みたいなのを作りたいと思います
で 質問ですが 複数接続の時
・セキュリティーを考えてfork() あるいはexec()を行い、データのやり取り必要ならIPCするのが良いか
・スレッドを使うのが良いか

どう思いますか?

190 :デフォルトの名無しさん:03/06/11 01:00
頭使うのが嫌なら前者、パフォーマンス上げたきゃ後者。

191 :デフォルトの名無しさん:03/06/11 01:12
win32でforkやるのはしんどいと思う

192 :魔法使い:03/06/11 01:21
不慮の事故とか(一般保護エラーなど)でCrashを考えた場合
落ちる可能性の高い、クライアントとの通信部を
別プロセスにしたら親に被害が出なくて良いかな?って悩んでたのです
スレッドにすればTCPプログラムなら簡単そうですね
IPCも考えなくていいし
UDPだとパケットの識別->スレッドへ配送 とか考えないとね・・

193 :デフォルトの名無しさん:03/06/11 01:55
udpなら、多重化する必要はないとおもうけおど、、

194 :デフォルトの名無しさん:03/06/11 02:14
>>193
多重化は(必要な時は)しないまずいでしょ。
DNSのproxy serverなんかだと、domainごとに応答時間が違うから、
query/responseのprocessをoverlapして処理する必要がある。


195 :デフォルトの名無しさん:03/06/11 09:13
>>189
自分で考えずに他人に頼る時点でボケ防止にならない
諦めて徘徊でもしてろ

196 :デフォルトの名無しさん:03/06/11 09:23
>>191
つか、win32 って fork() できるんですか?
UNIX 育ちの俺は、以前仕事で WinNT 4.0 上で動く
デーモン (サービス) 書いた時に、fork() が無くて
キレそうでした。子プロセスを起こすのって、
fork/exec がセットになったような API しか無くって。

最近のWindows 事情はさっぱり知らないんですけど。


197 :デフォルトの名無しさん:03/06/11 10:59
>>196
Win32サブシステムには無いがPOSIXサブシステムには存在する。

あと、CygwinはWin32サブシステム上で色々小細工してfork()を実現
してる。(つか、実現しないとアプリが移植できないし)
かなり遅いけどね。

198 :デフォルトの名無しさん:03/06/11 12:23
まあPOSIXサブシステムではsocketが使えないという罠があるわけだが
(Interixなら使える)

199 :デフォルトの名無しさん:03/06/12 02:22
WINSOCKとかを使ったソフトでのエラー処理とかが詳しく載っている
ようなサイトをどなたか知らないでしょうか?

200 :デフォルトの名無しさん:03/06/12 02:23
msdn

201 :デフォルトの名無しさん:03/06/12 18:59
FAQみたいなのが見たいんじゃないの?
なんでもかんでもmsdnとか言うのはイクナイ!

>>199
msdn見ればイイと思うよ。

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

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.02 2018/11/22 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)