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

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

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん ◆OaTCP/IPW6 NGNG
主にソケットに関しての質疑応答スレです。

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

Winsock Programmer's FAQ (日本語訳)
http://www.kt.rim.or.jp/~ksk/wskfaq-ja/

過去スレ:
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/tech/kako/1023/10233/1023359282.html
Port4 http://pc3.2ch.net/tech/kako/1034/10342/1034236536.html
Port5 http://pc2.2ch.net/tech/kako/1040/10402/1040220302.html
Port6 http://pc5.2ch.net/tech/kako/1052/10521/1052106444.html
Port7 http://pc5.2ch.net/test/read.cgi/tech/1063035045/
Port8 http://pc5.2ch.net/test/read.cgi/tech/1073560271/
Port9 http://pc5.2ch.net/test/read.cgi/tech/1080658835/
Port10 http://pc5.2ch.net/test/read.cgi/tech/1090385857/
Port11 http://pc5.2ch.net/test/read.cgi/tech/1096187183/
関連リンクは>>2-10辺り
足りなかったら適当に付け足してね
0002デフォルトの名無しさんNGNG
図書コーナー!(^O^*)

UNIXネットワークプログラミング〈Vol.1〉ネットワークAPI:ソケットとXTI
http://www.amazon.co.jp/exec/obidos/ASIN/4894712059/
詳解TCP/IP〈Vol.1〉プロトコル
http://www.amazon.co.jp/exec/obidos/ASIN/4894713209/
The Implementation (TCP/IP Illustrated, Volume 2)
http://www.amazon.co.jp/exec/obidos/ASIN/020163354X/
Linuxソケットプログラミング―ネットワークプログラミングにおける実践技法
http://www.amazon.co.jp/exec/obidos/ASIN/4894714671/
TCP/IPによるネットワーク構築〈Vol.3〉―クライアント‐サーバプログラミングとアプリケーション
http://www.amazon.co.jp/exec/obidos/ASIN/4320028007/
Webプロトコル詳解―HTTP/1.1、Webキャッシング、トラフィック特性分析
http://www.amazon.co.jp/exec/obidos/ASIN/4894715414
WinSock2.0プログラミング
http://www.amazon.co.jp/exec/obidos/ASIN/4797306882/
猫でもわかるネットワークプログラミング
http://www.amazon.co.jp/exec/obidos/ASIN/4797323604/
IPv6ネットワークプログラミング
http://www.amazon.co.jp/exec/obidos/ASIN/4756142362/
0003デフォルトの名無しさんNGNG
★図書追加
TCP/IPによるネットワーク構築〈Vol.1〉原理・プロトコル・アーキテクチャ
http://www.amazon.co.jp/exec/obidos/ASIN/432012054X/
0004デフォルトの名無しさん ◆TCP/IPmFAM NGNG
今までに出てきたURL抜粋

RFC 日本語版リスト
http://www5d.biglobe.ne.jp/~stssk/rfcjlist.html
C10K ヘヴィーロードサーバ
http://www.kegel.com/c10k.html
JPNIC RFC関連リンク集
http://rfc-jp.nic.ad.jp/link/
RFC 2616 "Hypertext Transfer Protocol -- HTTP/1.1" 日本語訳
http://www.studyinghttp.net/rfc_ja/2616/rfc2616_ja.html
IANA Well known port numbers
http://www.iana.org/assignments/port-numbers
MSDN
http://msdn.microsoft.com/library/en-us/dnsitehelp/html/tochelp.asp

ツール類
tcpdump
http://www.tcpdump.org/
Windump
http://netgroup-serv.polito.it/netgroup/tools.html
pathchar
ftp://ftp.ee.lbl.gov/pathchar/
pchar
http://www.employees.org/~bmah/Software/pchar/
0005デフォルトの名無しさんNGNG
今までに出てきたURL抜粋

RFC 日本語版リスト
http://www5d.biglobe.ne.jp/~stssk/rfcjlist.html
RFC Editor
http://www.rfc-editor.org/
HTMLなRFC (セクションを直に示すのに便利)
http://www.freesoft.org/CIE/RFC/
JPNIC RFC関連リンク集
http://rfc-jp.nic.ad.jp/link/
RFC 2616 "Hypertext Transfer Protocol -- HTTP/1.1" 日本語訳
http://www.studyinghttp.net/rfc_ja/2616/rfc2616_ja.html
IANA Well known port numbers
http://www.iana.org/assignments/port-numbers

C10K ヘヴィーロードサーバ
http://www.kegel.com/c10k.html
Raw IP Networking FAQ
http://www.whitefang.com/rin/
- Randomness Recommendations for Security
http://www.faqs.org/rfcs/rfc1750.html

MSDN
http://msdn.microsoft.com/library/en-us/dnsitehelp/html/tochelp.asp
0006デフォルトの名無しさんNGNG
御免、かぶっちゃった、まかせます。
0007デフォルトの名無しさんNGNG
問題ありのサイト

ネットワークプログラミングの基礎知識
http://X68000.q-e-d.net/~68user/net/
0008デフォルトの名無しさんNGNG
乙。
0009デフォルトの名無しさんNGNG
追加分

★図書
TCP/IPによるネットワーク構築〈Vol.1〉原理・プロトコル・アーキテクチャ
http://www.amazon.co.jp/exec/obidos/ASIN/432012054X/

★ツール
Packetyzer
http://www.networkchemistry.com/products/packetyzer/
ethereal
http://www.ethereal.com/

★プログラミング
Raw IP Networking FAQ
http://www.whitefang.com/rin/
0010デフォルトの名無しさんNGNG
★規格
RFC Editor
http://www.rfc-editor.org/
HTMLなRFC (セクションを直に示すのに便利)
http://www.freesoft.org/CIE/RFC/
- Randomness Recommendations for Security
http://www.faqs.org/rfcs/rfc1750.html

★プロトコル
TTCP
http://www.sean.de/Solaris/ttcp.html
http://www.kohala.com/start/ttcp.html

★IP, TCP実装
http://www.iti.fi/documentation/miniip.html
http://www.sics.se/~adam/uip/
http://www.codeguru.com/Cpp/I-N/network/tcpip/article.php/c5447/
http://www.geocities.jp/bruce_teller/security/garakuta.htm

★その他
パタリロ〜クックロビン音頭〜
http://www.fileup.org/file/fup2930.mp3
通報
http://www.cyberpolice.go.jp/
0011デフォルトの名無しさんNGNG
こんなもんかな(・_・)
0012デフォルトの名無しさんNGNG
BoostSocket
http://www.crystalclearsoftware.com/cgi-bin/boost_wiki/wiki.pl?BoostSocket

The Code Project - Internet & Network programming
http://www.codeproject.com/internet/
0013デフォルトの名無しさんNGNG
なんでクックロビン音頭が
0014デフォルトの名無しさんNGNG
質問です。win9xで動くパケットフィルタを作るのに何か良い方法はありませんか?
調べてもwin2k/XP用の情報しか見つからなかったので。
0015前スレ808NGNG
送信する際に、送信パケットの先頭にプレフィックス(2byte)を付ける事にしたのですが、受信の仕方について少し質問があります。
受信する際に、プレフィックス分(2byte)を先にrecv()して、そのデータから次にくるサイズを判断して、そのサイズ分recv()するというコードを組んだのですが、
FAQを読み返すと、silly window syndromeが発生しそうなのですが、こういったコードは止めた方が良いのでしょうか?
それと関連して、recv()する際のバッファの大きさというのは、どれくらいが理想なのでしょうか?極端な話、1Mくらい取っても平気なのでしょうか?
0016デフォルトの名無しさんNGNG
大きくしても平気だが、中に1MBぶんのデータが入っているとは限らない。
0017デフォルトの名無しさんNGNG
>そのデータから次にくるサイズを判断して、そのサイズ分recv()するというコードを組んだのですが、
ここが問題
0018デフォルトの名無しさんNGNG
>>14
winsock使え
0019前スレ808NGNG
>>16
あぁ、それはわかっているのですが・・・。
えーと、少し言葉が足りなかったみたいですいません。
速度的に、recv()に指定するバッファの大きさで違いが発生するのか知りたかったのです。
0020デフォルトの名無しさんNGNG
>>15
受信部のモジュール化がちゃんとしていれば、
後から幾らでも書き換えられるから気にすることはない。
0021デフォルトの名無しさんNGNG
>>19
silly window syndromeの分は理解しているとして、
バッファーが大きいと遅くなるかって事か?
ならんよ。仮想記憶上のメモリ食うのは食うけど、速度とはほとんど無関係。
0022前スレ808NGNG
>>17
ということは、やはり、ある程度の大きさのバッファにrecv()した後に、
最初の2byteを見て、その後に続くバッファを切り分ける方法で良いのですかね?
0023前スレ808NGNG
って、書き込む前にリロードしたほうがいいですね。

>>20
ありがとうございます。
今回のプログラムの場合は送信側が、1/60秒間隔で送る仕様なので、あまり気にしない事にします!

>>21
速度は、無関係なのですね!ありがとうございます。
0024デフォルトの名無しさんNGNG
>>22
今回問題無さそうだけど、Unix系のプラットフォームなら、fdopen と setvbuf で
バッファ管理をライブラリに任せてしまえば手間要らずで簡単だと思う。
0025前スレ808NGNG
>>22
なるほど、そういった方法もあるのですね。
余裕があったらやってみたいと思います!
ありがとうございました。
0026前スレ808NGNG
>>25の>>22は、>>24の間違いです。
002714NGNG
>18
Winsockで具体的にどうやるんですか?もう少し詳しく聞かせてください。
0028デフォルトの名無しさんNGNG
winpcap&windump使っとけ
0029デフォルトの名無しさんNGNG
ミニファイルサーバー作ってるんですが
サーバー側で
while(){
send(char buff)
}

クライアント側で

while(){
reeive(cahr buff)
}

みたいなルーチンで大丈夫なんでしょうか?
なんか失敗することがあるんですが
0030デフォルトの名無しさんNGNG
>>29
> reeive(cahr buff)

> なんか失敗することがあるんですが
0031デフォルトの名無しさんNGNG
馬鹿は無理してレス付けないでいいですよ。
0032デフォルトの名無しさんNGNG
>>29
send や recv のドキュメント読めばだいたい書いてあると思うけど。
受け取った中身自体は、TCPの場合だいたい信頼するのが普通。
チェックしろという要件があるなら、自前でCRCでもつけとく。
0033デフォルトの名無しさんNGNG
受信の失敗の心配してねえんだよばか
0034デフォルトの名無しさんNGNG
>>29
関数の戻り値を全てチェックして発生しうるエラー全種類に対して適切な対応しろ。
以上。
0035デフォルトの名無しさんNGNG
前スレ最後の方でアホな質問をしていた者です。さきほどは失礼しました。
バイナリデータを含むBYTEデータを送信してみたところ受信した結果と違いがありました。

/* 送信側 */
BYTE buf[1024];
buf[0] = 0x00;
buf[1] = 0x00;
buf[2] = 0x01; // 10進で1
buf[3] = 0xAO; // 10進で160
buf[4] = …
long rtn = send(soc, buf, sizeof(buf), 0);

/* 受信側 */
BYTE data[1024];
long rtn = recv(soc, (char *)data, sizeof(data), 0);

/* 受信結果 */
data[0] = 0
data[1] = 0
data[2] = 1
data[3] = 148
buf[4] = …

受信データの3バイト目に148が入っていますが、
送信データの3バイト目は160です。
なぜ送受信したデータに違いが発生してしまうのでしょうか?

recv()の戻り値の受信バイト数は送信バイト数と異なっていました。
おかしいと思い送信の仕方や使用するデータ型をcharに変えたりしましたが
状況は変わりませんでした。
本当に困っています。どなたかアドバイスお願いします。
0036デフォルトの名無しさんNGNG

7 :デフォルトの名無しさん :04/12/07 23:01:19
問題ありのサイト

ネットワークプログラミングの基礎知識
http://X68000.q-e-d.net/~68user/net/


これ、前スレテンプレにもありましたが何が問題?
0037デフォルトの名無しさんNGNG
>>36
わかるまで勉強シロ
0038デフォルトの名無しさんNGNG
理由添えずにさらしてるだけなのはただの中傷
0039デフォルトの名無しさんNGNG
ネットワークルプロルラリングにはRubyが最適!
0040デフォルトの名無しさんNGNG
>>36
Perl使ってるから。
Rubyを使わない奴はただのDQN
004136NGNG
>>37
勉強はしてるんですが・・・

>>40
マジですか w

前スレにはこれについてのカキコは無いですよね?
ポイントだけでも教えて。
0042デフォルトの名無しさんNGNG
>>35
C言語の勉強からやり直しー
0043デフォルトの名無しさんNGNG
webDAVに関してですがjakarta slideは
SSLやproxyに対応していますか?
0044デフォルトの名無しさんNGNG
知らない奴はレスしないで下さい。ウザイだけですから
0045デフォルトの名無しさんNGNG
Rubyは採鉱言語
0046デフォルトの名無しさんNGNG
Ruby!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
004735NGNG
>>42
Cのデータ型を勉強したほうがいいでしょうか?
0048デフォルトの名無しさんNGNG
>>47
>send(sock, net_byte+data, sizeof(data)+4, 0)

net_byte+data
ってなに?
004935NGNG
>>48
ポインタに整数を加算しようとしていますからおかしいです。

send()でBYTE型を使いバイナリデータを送信し、
recv()で受信するとバイナリデータが壊れている(違う数値になっている)
のは私がデータ型を分かっていないからなんでしょうか?

BYTE buf[1024];
long rtn = send(soc, buf, sizeof(buf), 0);

BYTE data[1024];
long rtn = recv(soc, (char *)data, sizeof(data), 0);
005035NGNG
連続書き込み失礼します。

メモリウィンドウで送信したデータと
受信したデータを比較しましたが、やはりバイナリデータの部分だけ
壊れていました。一応報告まで。
0051デフォルトの名無しさんNGNG
その配列のデータが本当に受信したものなのかただのゴミなのか区別してるのか?
rtnを越えた部分のデータはゴミだぞ。
0052デフォルトの名無しさんNGNG
>>49
データのIOについてよく分かってないなら、まずネットワークへの出力より先に
ファイル出力で試しをやってみたら?writeも似たような書式なわけだし。大した
差はないけど、ネットワーク絡みの問題を避けて、基本部分のチェックができる
から。
0053デフォルトの名無しさんNGNG
0とOの区別がつかないなら眼科に行ったほうがいい。
0054デフォルトの名無しさんNGNG
>>49=35
51が正しい指摘してるよ。
送った分だけ受信するには、送ったバイト数受け取るまでループして受信を続けなくてはならない。
0055デフォルトの名無しさんNGNG
つーかsocketのAPIなんて数少ないんだから先にリファレンス嫁と。
0056デフォルトの名無しさんNGNG
質問です。
ソケット・ディスクリプタを別の実行プログラムに引き渡す方法として、
値をそのままプログラム引数で引き渡してやるとRedHat、Windows 2000/XP
で正常に動作してるようなのですが、これは正しい方法でしょうか?

<プログラム起動側>
sock = socket(AF_INET, SOCK_STREAM, 0);
・・・bind,listen,acceptした後、send,recvを実行・・・
char cmdbuff[512];
#ifdef WIN32
sprintf(cmdbuff, "start hogehoge.exe %d", sock);
#else
sprintf(cmdbuff, "hogehoge %d &", sock);
#endif
・・・
<プログラム起動側>
main関数のargcで受け取ったソケット・ディスクリプタの値をSOCKET変数
に代入し、それを使ってsendやrecvしても問題なく動く

Linuxならdupした後、forkの子プロセスからexecする方がいいのでしょうか?
また、Windowsでは、ソケット・ディスクリプタをプロセス超えて複製する
正しい手順などあるのでしょうか?
005756NGNG
すいません、少し訂正です。

<system関数で別プログラムを起動する側>
sock1 = socket(AF_INET, SOCK_STREAM, 0);
・・・bind,listen
sock2 = accept(sock1, (LPSOCKADDR)&addrLocal, (size_t*)&addrLen);
acceptの後、sock2を使ってsend,recvを実行・・・
char cmdbuff[512];
#ifdef WIN32
sprintf(cmdbuff, "start hogehoge.exe %d", sock2);
#else
sprintf(cmdbuff, "hogehoge %d &", sock2);
#endif
・・・
<system関数起動される側>
main関数のargcで受け取ったsock2の値をSOCKET変数に代入し、それを使って
sendやrecvしても問題なく動く
0058デフォルトの名無しさんNGNG
GyRCI1IjdSNiI3khKiEqISohKiEqISohKiEqISohKiEqISohKiEqISohKiEqISohKiEqISohKiEq
ISohKiEqISohKiEqISohKiEqISohKiEqISohKiEqISohKiEqISohKiEqGyhC
005936NGNG
>>56
なにを持って正しいとするか。
動けばいい、ならば動作すれば正しい。
作法が重要、ならば正しい作法で。
上司が大変、ならば退職届を書く。
0060デフォルトの名無しさんNGNG
ファイルデスクリプタを得た後で起動する子プロセスについては正しい。
ttp://www.adl.nii.ac.jp/~moro/unix-programmer/faq-j_2.html#SEC2
0061デフォルトの名無しさんNGNG
>>59
役だたねぇ回答乙。オナニーは自宅でやれな。
0062デフォルトの名無しさんNGNG
>>56
前のほうの質問。
fork して exec すれば引き継いだり dup で複製したり確実にできる。
system関数はシェル起動までは引き継がれるだろうが、
その先どうなるかシェルが何なのか解らないとわからない。

後のほうの質問。
CreateProcessで作るプロセスには bInherit を指定して、ハンドルを引き継がせることができる。
このときはハンドルの値も同じ。(system とか exec はデフォルトで TRUE だっけ?)
関係ない他所様プロセスにハンドルを渡したい場合は、DuplicateHandle or WSADuplicateSocket。
006336NGNG
女房のボインに毒を塗ったら





翌日隣の家の親父が死んだ
0064デフォルトの名無しさんNGNG
>>59, >>63
ID が出ない事をいいことに人の番号を騙らないで下さい!!
なんか雰囲気悪いですね、このスレ。

>>63
でもチョトだけワロタ
006514NGNG
>>28
winpcapはキャプチャだけじゃなくて、パケットを破棄したり書き換えたりできるんですか?
0066デフォルトの名無しさんNGNG
>>65
おまえには一生無理だ
そのレスがどれだけアホなものかをわかったとき
お前は死ぬ
0067デフォルトの名無しさんNGNG
死ぬんかいw
0068デフォルトの名無しさんNGNG
>>66
パケットフィルタリングしたいと言っているのに pcap を紹介する
馬鹿さ加減を 14 は揶揄したかったんでしょ。
006956NGNG
>>62
Linux側、確実に動く方法で書き換えました。
WSADuplicateSocketの情報も助かりました(このAPI知りませんでした)。
どうもありがとうございました。
0070デフォルトの名無しさんNGNG
>>62
> その先どうなるかシェルが何なのか解らないとわからない。

POSIXではsystem(3)は/bin/shを起動するものと決まってるんだが。
だいたいシェルが何かわからないんじゃsystemの引数も書けないだろ。
0071デフォルトの名無しさんNGNG
>>56
> main関数のargcで受け取ったソケット・ディスクリプタの値をSOCKET変数
> に代入し、それを使ってsendやrecvしても問題なく動く

close(2)せずに子プロセスで同じディスクリプタ番号使えばもちろん問題ないわな。
0072デフォルトの名無しさんNGNG
>>71

>>56 はdupした後は親の方でclose死体と言っているので
その答えは無意味。
0073デフォルトの名無しさんNGNG
某A社の通信ライブラリを使ってて,そこにはこんな感じのAPIがあるんだけど
 int sendData(const void *data, int length, int *sleep);
 戻り値 OK .. エラー無し
      WOULDBLOCK .. 非ブロック処理続行
      IOSLEEP .. スリープ可能
      ERROR .. その他エラー
「スリープ可能」って,どういう意味だかピンとくる人います?
この値が帰って来たら,何をすればいいんだろう?
0074デフォルトの名無しさんNGNG
>>73
つーかマニュアル読め厨房
0075デフォルトの名無しさんNGNG
>>73
それだけの記述から正確な意味や意図が汲み取れるわけないだろ・・・
007673NGNG
やっぱりなあ(;´Д`)いやそうだとは思ってたですよ。
一昨日,上に相談したんだけど,「ちょっと待っててね」ばかりだし。。。
リファレンス読んでも「スリープ可能」しか書いてないし。。。
サンプルコードもないし。。。
あー。。。
0077デフォルトの名無しさんNGNG
逆汗汁
0078デフォルトの名無しさんNGNG
>>72
最後のひとつがcloseされるまで使えるよ
0079デフォルトの名無しさんNGNG
>>73
第三引数の説明もないのか?
0080デフォルトの名無しさんNGNG
マトモな実装なら、とりあえずsleepをNULLにすればIOSLEEPは戻らない。
0081デフォルトの名無しさんNGNG
♪
0082デフォルトの名無しさんNGNG
非同期か同期か
0083デフォルトの名無しさんNGNG
ストリームソケットで質問です。

char buf[ 600] = {0};
//bufに値を入れる。
memcpy( buf, ???, sizeof( ??? ) );
send( buf, 600 );
とクライアント側で送信。

char buf[ 600] = {0};
int iLen = recv( buf, 600 );
とサーバー側で受信。

これを連続して行っているのですが、recv()の戻り値が600以下で返ってくる場合があります。
send()って、バッファサイズに指定したサイズを一気に送るのではないのでしょうか?
008483NGNG
あ、すいません、FAQにありました。
スレ汚しスマソ。
0085デフォルトの名無しさんNGNG
基本中の基本だ
008686NGNG
下記の感じでHTTPクライアントを作ったのですが、
GETではうまく取得できてもPOSTではうまく取得できません。
ネットでも結構調べてみたのですが、POSTのサンプルを見つけることが
できませんでした。使用言語はCです。ご教授お願いできないでしょうか。
008786NGNG
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <winsock2.h>
#include <io.h>

#define BUF_LEN 255+1 // 一時退避のサイズ

// argc 引数の総個数
// argv 引数の文字列を指すポインタの配列

int main(int argc, char *argv[]){
// 変数宣言
int s; // ソケットのためのファイルディスクリプタ
hostent *hostent; // ホスト名と IP アドレスを扱うための構造体
sockaddr_in sockaddr_in; // ソケットを扱うための構造体
servent *servent; // サービス (http など) を扱うための構造体
WSADATA wsadata;

char send_buf[BUF_LEN]; // サーバに送る HTTP プロトコル用一時退避
char host[BUF_LEN] = "Localhost"; // 接続するホスト名
char path[BUF_LEN] = "/"; // 要求するパス
unsigned short port = 0; // 接続するポート番号

char host_path[BUF_LEN]; // ホストのパス名
char *p; // /の位置格納ポインタ
int errCode; // エラーコードを格納

char recv_buf[BUF_LEN]; // サーバから受け取る HTTP プロトコル用一時退避
int numrcv; //recvのエラーコード獲得
008886NGNG
// 初期化を行う関数
if (WSAStartup(MAKEWORD(2, 0), &wsadata)) {
printf("WSAStartup関数失敗です\n");
return -1;
}

if ( argc > 1 ){ // URLが指定されていたら(引数2個目がURLになる)
if (strlen(argv[1]) > BUF_LEN-1 ){
fprintf(stderr, "URL が長すぎます。\n");
return 1;
}
// http:// から始まる文字列で
// sscanf が成功して
// http:// の後に何か文字列が存在するなら
if (strstr(argv[1], "http://") && // argv[1]の先頭からhttp://を探す
sscanf(argv[1], "http://%s", host_path) && // %sにhost_pathを読み込む
strcmp(argv[1], "http://" )){ // argv[1]がhttp://なら処理をする

p = strchr(host_path, '/'); // ホストとパスの区切り "/" が含まれているか
// 先頭から/を探しポインタの位置を返す
if ( p != NULL ){
strcpy(path, p); // "/"以降の文字列を path にコピー
*p = '\0'; // ポインタを初期化
strcpy(host, host_path); // "/"より前の文字列を host にコピー
} else { // "/"がないなら=http://host という引数なら
strcpy(host, host_path); // 文字列全体を host にコピー
}
008986NGNG
p = strchr(host, ':'); // ホスト名の部分に ":" が含まれているか
// 先頭から:を探しポインタの位置を返す
if ( p != NULL ){
port = atoi(p+1); // ポート番号を取得

if ( port <= 0 ){ // 数字でない (atoi が失敗) か、0 だったら
port = 80; // ポート番号は 80 に決め打ち
}
*p = '\0'; // ポインタを初期化
}
} else {
fprintf(stderr, "URL は http://host/path の形式で指定してください。\n");
return 1;
}
}
printf("http://%s%s を取得します。\n\n", host, path);
// ホストの情報(IPアドレスなど)を取得して、hostentにセット */
hostent = gethostbyname(host);
if ( hostent == NULL ){
errCode = WSAGetLastError();
fprintf(stderr, "[%s] から IP アドレスへの変換に失敗しました。エラーコードは%dです\n", host,errCode);
return 0;
}
memset(&sockaddr_in,0,sizeof(sockaddr_in)); // 構造体をゼロクリア
sockaddr_in.sin_family = AF_INET; // アドレスファミリ 固定で決まっている
// IPアドレスを示す構造体をコピー
// 指定されたバイト数をhostent->h_addrから&sockaddr_in.sin_addrにコピーする
memcpy( &sockaddr_in.sin_addr,hostent->h_addr, hostent->h_length);
0090nbuharutumrikaNGNG

009186NGNG
if ( port != 0 ){ // 引数でポート番号が指定されていたら入れる
sockaddr_in.sin_port = htons(port);
} else { // そうでないなら getservbyname でポート番号を取得
servent = getservbyname("http", "tcp");
if ( servent != NULL ){ // 成功したらポート番号をコピー
sockaddr_in.sin_port = servent->s_port;
} else { // 失敗したら 80 番で固定
sockaddr_in.sin_port = htons(80);
}
}

// ソケット生成
if ( ( s = socket(AF_INET, SOCK_STREAM, 0) ) < 0 ){
errCode = WSAGetLastError();
fprintf(stderr, "ソケットの生成に失敗しました。エラーコードは%dです\n",errCode);
return 1;
}
// サーバに接続
// SOCKADDR 構造体は、Windows ソケット通信に参加しているマシンの
// IP (インターネット プロトコル) アドレスを格納するのに使います。
if ( connect(s, (struct sockaddr *)&sockaddr_in, sizeof(sockaddr_in)) == -1 ){
fprintf(stderr, "connect に失敗しました。エラーコードは%dです\n",errCode);
return 1;
}

// HTTP プロトコル生成 & サーバに送信
sprintf(send_buf, "GET %s HTTP/1.1\r\n", path); // send_bufにGET path HTTP/1.1の文字列ができる \r行の先頭へ移動
// send(接続されたソケット,送信すべきデータへのバッファへのポインタ,,バッファのバイト数,オプション設定)
send(s, send_buf, strlen(send_buf),0); // 送信 送信オプションの指定はしない
printf("送信内容1:%s\n" ,send_buf);
009286NGNG
sprintf(send_buf, "Host:%s:%d\r\n", host, port); // send_bufにHost: host;portの文字列ができる \r行の先頭へ移動
send(s, send_buf, strlen(send_buf),0); // 送信 送信オプションの指定はしない
printf("送信内容2:%s\n" ,send_buf);

sprintf(send_buf, "\r\n"); // send_bufに\r行の先頭へ移動
send(s, send_buf, strlen(send_buf),0); // 送信 送信オプションの指定はしない
printf("送信内容3:%s\n" ,send_buf);
// 受信して表示
while (1){

// recv(接続されたソケット,受信データへのバッファへのポインタ,バッファのバイト数,オプション設定)
// 受信したバイト数が戻り値
numrcv = recv(s, recv_buf,sizeof(recv_buf)-1,0);
if ( numrcv > 0 ){
recv_buf[numrcv] = '\0';
printf("受信内容:%s\n" ,recv_buf);
} else {
break;
}
}
// ソケットのクローズ
closesocket(s);

// Winsockの後処理
WSACleanup();
return 0;
}
0093デフォルトの名無しさんNGNG
wgetのソースでも読めば?
0094デフォルトの名無しさんNGNG
GPL!GPL!
0095デフォルトの名無しさんNGNG
こんなところに長々と何レスも使って見にくいソース貼るなよ
そんなに長いソース見てもらいたいならどこかにファイルで上げろ
009686NGNG
すみません。開発環境を書くのを忘れていました。
WindowsXP SP2で、C++ビルダー6.0で開発しております。
Unixだと結構書き直しがいるみたいでしたので。
Unixのようですが一応wgetとGPLも調べて参考にさせていただきます。
0097デフォルトの名無しさんNGNG
libcurlでも使ったら楽だ。
009886NGNG
95>>配慮に欠けておりました。申し訳ありません。
0099デフォルトの名無しさんNGNG
etherealで、ブラウザがPUTしている時のパケットを覗き見て参考に。
自分のプログラムとの違いを調べてみれば?
その前にHTTPのRFCはちゃんと読んで欲しいが。
0100デフォルトの名無しさんNGNG
hoge.tgz
eNq9WNtrG1cafzf4fzhVsTPjjmMpUChObFZJ3DTUudlKk67teGVpLA2VR2JmbJOkLugc2NqOrUi2
HENh+xBCIWq2y1ISL7TJ0hKndZHpS8guIWkWFhy7D4tCH3YpfdjvO+fMRbbcpJRd8GV05rtfft93
9LJhJjLjSZ0csJ2kkd2b7m5uejlwZhlmasdhMmOMbDucNEw7m3hn37ZjKRGOkvqoYerk4OnXh3t7
jpN9r776SoR0dJDp7wsflr4r12iVxdgh9jYSw3HcSiXI9H+KZVotzc99WSy7pxPydOlW4YPlZ7RW
mKQr7F3gXGTnaLV8YfkZSjBMh4zFDVPBB5SlkUQ6bpE2lDAwpF7k4pa+LZaLW3N3BL29H+1hg+wk
G2EpWqW36ROwymG/AemX2Cg7yM6y42yWTbBzzU3prO3owNUmHwTzBSBJXfmc3iNHTxIWZWk2x87S
2vRNek2Imx8sXS1Vm5swWPFk0ho2TBJ4rjehEZ9uTXC18kEwxPIDzGJniZJ2nByhX9OvVNKI+0x/
9HA0FiWTdjwZd+L7MVQ8LrZuJodHxkcHZH6GfLlZulZaplvkjVgMXJpg8yzF+til5ZybOSkC4+Cx
ky4S6s0m4hk8DXFhxYelP9MVuuXGSLLl4k66jq1DkC9PXMpz8hw729w0btpGytSTxE5nLYfk8E8X
CdcLfhesTZXvz//ecwu1D9dpCKQJcguyPUPacvxdB61Of7MwPmuUB9yyEuWhW9ahbFIXAo6wGVDW
B79pWkNaT6WlJyZ2jeR1+rTwA/1TYePn44nqzPExKzGBzCgRbA2onM0s3pF9cnlm9seZz2ht3qbX
Zh9gmxijRIE89ztxyxnPKceib/acOdF3WNmnkbCqkVaZe1Ul0AQ56G9nVAn5DCik8JeyTVfpyqAZ
UqFGLN0Zt0zSHoHnKd5doEJ0aDeJEPUieni6r5dWCpMLm/RT+j29S69C5T1VeK+emvvyykNaQYo1
qM0tVUgAcMnopsI7MjKkgiwZsnaU2dw0Ko0DvIHYayQEAgitLKxAsm/QR3Qlf7DeQGkfGINt0An/
ecBNoN2ScLHKX9t2Im6Ogqzijbl/05v0bj1Tde6fdG3mNr0umSqlW/OPscLA+Kee7fDj2g62SeaQ
SlpbiUQqeEOrxY3FCpohCWhtIUZXoI+5CTsFtNghzS9bV1qLTde8Q1pb/Io+nv+QfgdiHCsxlmtg
B1FFWlw7Kq5+cOHy9PIfaA0dwmTmoJFQTNpSPBUa2dOxRw32yj3sFVq9tFH8O93EJoXozT6CyIpc
b9HrPIaut8LPmz4wY0/R2tJ99J2XT4681EWOn+7t5blGA3LnFaE7JzSDkumv59/zoZ5jBaFr0C52
HjquDU3fMxjeIwx1ddVET3hC0atgTF3hdINulk4ExCNJQPwU0TO2Ti665BWI3VWMXz4vgykY7sHp
NV7ovDx+TqtQVeovVRuoa5AMyENnXR5gtFSXyksVukZCnc/JQecvzIEE1biTNZTcKxGp1gNVGLUb
0101デフォルトの名無しさんNGNG
AnYEL1IfAAyW/Q+o8QFgBoSIKCgCbEMYgTl0PR8NE3qHfoGI4Kl5Lbxd/jqcQTzmpumT0ir9K4/I
81I85adpN8BYJ4FsdYgSqs79rvAJXeVwBe1P/wjmfUqv7gIoUz5Oel3aYhMREOCXUAS8IuEaERnn
2XBnzeV/LT1Tjp70dgKc0Z6Eu/moXCOgHn6Ls5+0dfg7RhdJ6Q5+GDlvxsd0XhoonifCIwqkUs4q
YARgP6I7vXHb6bGsrKUg2444DbTYQxwr67aWB1Bq386u0DU+DtDNm/R2/mDd7FtvScpBIV2XmgNB
DIsgjuljtu4orYFlRwtrtnFBz4Il/qEq6k5sLLTGBmBA4tIVrduZ9tqGOTwaHzMy58HJ6OvDR4/3
xESNSPP53vYemyVzq5DkVaiqR1CBvE94XgKpqBU+oiueQtmOQOJNs9ssC4WXgg6vyWi3d6eH0RQM
Wut2u/gL2dcCZcF5xATSkFTbJlMjgQOYkClRS8G+e8nvOw48q4E22jGEF3+C562d4ZONmHaypq3g
B9QSBD36GeyPqy7qYQ3i0ilqkNTplNDgLqdd9bSibaBCQk4iF/IK16X2MYjjiBjJYHdQvpuVXXyQ
otq7bX6yzQ9ZvyASEaZ8H6oBauI5AXktrHrdLxpZbuXFW8Ub0gPwAZWDGKhsWYQa6T9x6M3h/lhf
T/QYrlxEJQd4tn5xW/pXEdT5on24swP9vchd6HFl5gdoa/Tw4T6339bz0TOGmcxO2p6/C98Uj4Hu
UzNfcKiE/mFT7C22SKuyj4giUBlEZzh0+UutGrgD4ZbMl6gqSEuBHA6bMpKJrGnqCUexNb5bjScc
71ZE2tQ60CCNMAPRb7e1UcomvzqA3N9taztmhrQGbkrFY1BYrgnyVgVGHOmJwRbHuTsieyODFodM
fzNwSekaUvIp5dJ6G0oFLPwYbg6DFmz7YrF8MP1w8ROx04IAhV+FBGLJ7GloEYT9b/RjNgo2nkNY
BzgbQXzkz3Kmapp3WnXhTmNHwdO32Ptssfh4YVPFDgctkCTfM7nFuweqFhYOoV7+x5dBqxya1iH8
gCn+UEWqxX8s6/RkZ4sNcSGaJ43jXoNwvgEICcSdLUkZSTl3OYrVx5OT8vf78fULRPN/6+SpF3aS
u7bdnf+3uX2NzEVQ/QHqCgBhabDwUXPTZNrI6ESJYAPy13hpbVSOyPacQnyROvQN8Gdz5coTurmQ
aW4SV2dAWW4ERMa9k7vrhvtZbY9oYW8eSbZuCdbeRV6cD7mLqB8jtABj5EbIE7s/uJWOWHr8HW+U
1H3DBIvNPITi7eamRCZr63KQ2KIggPKM+FINL6R4Z+Pf3xzK6HET7vU7N6z/Asib6Pk=
0102デフォルトの名無しさんNGNG
>>86
POST するデータ本体を send していない。
POSTするデータのContent-TypeもContent-Lengthも送っていない。

そういうの無しでPOST動作可能なのCGI相手なら、上手く動くでしょ。
一般的にはPOSTでContent-TypeもContent-Lengthも無しで「うまく」動くCGIは無いと思うけど。
0103デフォルトの名無しさんNGNG
>>102
x-www-form-urlencoded 前提の CGI プログラムなら
大抵 Content-type なしで動くでしょ。別に薦めているわけじゃないけど。
0104デフォルトの名無しさんNGNG
part11でちょっとだけ出ていた通信手段としてDBを使うってネタなんだけど、
この場合の信頼性に関して情報が欲しい。
そういう設計を許すべきかどうかについて判断をする必要があるんだけど、
データの変更が他のクライアントへ反映されるタイムラグや
ネットワークの帯域の飽和時の挙動などの不安要素が大きいんで悩んでる。
0105デフォルトの名無しさんNGNG
webベースでのシステムのときに検討の候補になる程度
それ以外の用途には検討すらされない
0106デフォルトの名無しさんNGNG
>>104
> データの変更が他のクライアントへ反映されるタイムラグや

RDB使うかどうかに関係しない。
0107デフォルトの名無しさんNGNG
やっぱ反対するのがデフォですか?
それだとダメって言うときの決定的なセリフが見つからなくて
理屈こねられるとどうにも。
0108デフォルトの名無しさんNGNG
その前に、DBを使わないと、

> データの変更が他のクライアントへ反映されるタイムラグや
> ネットワークの帯域の飽和時の挙動などの不安要素が大きいんで悩んでる。

が解決する理由を述べよ。

ODBCやJDBCを使ったシステムは、

> 通信手段としてDBを使

っていると考えることができる。
Information integrityをDBに任せる設計。
0109デフォルトの名無しさんNGNG
>>108
データの変更を通知する場合、ソケットなら相手がフリーズしていれば
確実にタイムアウトするけれども、DBなら相手が止まっていても
データの挿入やNotify通知は入れられる。
そして、closeできた時点で相手がrecvしたことが分かる。
0110デフォルトの名無しさんNGNG
commitされるなら問題ないじゃない。
0111デフォルトの名無しさんNGNG
>>109
> ソケットなら相手がフリーズしていれば
> 確実にタイムアウトするけれども、

…
0112デフォルトの名無しさんNGNG
>>110
受信すべき相手が死んでいても正常に送信できるのはやばくないかな?
0113デフォルトの名無しさんNGNG
「接続中」 という表現で想像するのはどっち?
接続処理をしている状態か、接続が完了し通信可能な状態か
0114デフォルトの名無しさんNGNG
>>113
インタフェース・メッセージとしてなら処理中の意味が強いのでは?
connecting...
の訳語として

ネットワーク動作の説明として文章の中に登場するなら後者の意味が強いかも
0115デフォルトの名無しさんNGNG
>>112
そりゃcommitされないでしょ。DBのトランザクション分からないの?

>>113
connectingとconnected。接続中は両方。

0116デフォルトの名無しさんNGNG
>>115
いや、データを受け取るべき相手が停止していて、
DBだけが動いてればcommitするでしょ。
目的がデータをDBに入れることではなくて、
DBを読み込んでいる相手に伝えることだとまずいでしょ。
0117デフォルトの名無しさんNGNG
仮にだ、
エレベータを監視するプログラムA
玄関のドアロックを監視するプログラムB
があるとして、

「エレベータが一階で停止したら玄関のドアロックを開く」
これを実現するプロセス間通信の手段が
「オラクルでinsert into ドアコマンド(命令) values ('OPEN')」
だったら変だと思わない?
0118デフォルトの名無しさんNGNG
>>116
普通は「リクエストをDBに登録したら、先方はその応答をまた登録する」っていう設計になってると思う。
んで、一定の時間内に応答が無ければエラー処理。

まともなRPC使ってる人にしてみりゃDB経由ってのはバカらしいことが多いんだけれども、
いろいろな事情で接続性の低いアレコレをつなぐときにはよく用いられていると思う。
0119デフォルトの名無しさんNGNG
>>116
相手の読み取り確認をDB使ってやれば?
0120デフォルトの名無しさんNGNG
まともな分散処理やってる人にしてみりゃDBの処理は分散処理に良く合うことが分かる。
処理完了確認、ACK処理が極めて重要な位置を占めるから。

具体的な分散システムの例だと、OO初期の研究で有名なリスコフさんのArgusなど。
トランザクションRPCを基本処理としている。

0121デフォルトの名無しさんNGNG
2相コミット
0122デフォルトの名無しさんNGNG
なんだか、「歩いて10分の隣町に地下鉄を乗り継いで一時間で到着」な感じ。
0123デフォルトの名無しさんNGNG
新宿から丸の内線で池袋まで行くとそんな感じになるね。
0124デフォルトの名無しさんNGNG
このスレって低水準I/Oばっかで、他は弱い人多いのかな。

要件にもよるんだろうけど、データの整合性や一貫性が重要な場合で、
DBMSを使わないことなんてありえないと思う。同程度の水準を自分で
書くなんて不可能とは言わないまでも、そうとう厳しいんじゃないの?

1リクエスト(1メッセージ)の応答時間がミリ秒単位を求められていて、
DBMSに問い合わせている時間がない、って場合はともかく、
複数台のサーバーで共有する場合なんかは必須になるでしょ。

DBMSだと基本的に毎回クエリ投げる形になっちゃうけど、キャッシュ
(専用DBMSやEJB等)で解決できる場合も少なくないだろうし、安易に
ファイルベースを選択するのもどうかと思うぞ。

>>122
それが必要になるのが、データの整合性の確保なんだよ。
トランザクションや2PCの考え方は理解してるの?
0125デフォルトの名無しさんNGNG
>>124
場合によっては重要なのは借方と貸方の整合性じゃなくて
相手の状況の確認と命令の確実な伝達なんだって。
火災報知機CPUからドアロック制御PCへ開けという命令がきた場合、
必ず即座に開錠しないと人が焼け死ぬでしょ。
0126デフォルトの名無しさんNGNG
>>125
> 借方と貸方の整合性
> 相手の状況の確認と命令の確実な伝達

同じ概念で包括的に考えられると気づけ

まあDBでなんでもってのも馬鹿げているけど、
>>109みたいな安易な考え方も設計上の問題は大きく、
実装じゃなくて、仕様自体不安定になりやすい。
0127デフォルトの名無しさんNGNG
問題はデータの更新の他プロセスへの反映が何秒後になるか予測できないことだな。
ソケットであれば少なくとも相手がlistenしていることは即座に確認できるわけで。
0128デフォルトの名無しさんNGNG
>>124-127
なんかそれぞれが目的や方向性の違う話をしているような希ガス。
もう一度、要件定義を整理してみようよ。

>>104
>part11でちょっとだけ出ていた通信手段としてDBを使うってネタなんだけど、
>この場合の信頼性に関して情報が欲しい。
>そういう設計を許すべきかどうかについて判断をする必要があるんだけど、
>データの変更が他のクライアントへ反映されるタイムラグや
>ネットワークの帯域の飽和時の挙動などの不安要素が大きいんで悩んでる。
0129デフォルトの名無しさんNGNG
>>127
( ゚д゚)ポカーン
0130デフォルトの名無しさんNGNG
つーか元のコメント自体がかなり抽象的なのによくここまで話が発展するなあ
という傍目の印象
0131デフォルトの名無しさんNGNG
>>130
だってサブシステム間の通信にDB使うなんて、ごくあたりまえに実装されてるもん。
ちょっと大規模なシステムのSIやらコーディングやらした人ならすぐピンとくる。
0132デフォルトの名無しさんNGNG
>>114
connectingが「接続中」だとすると、connectedはなんて表現しましょうか。
接続維持中? なんかけったいな感じがするし・・・
0133デフォルトの名無しさんNGNG
>>132
connection established
に対して「接続確立」とかあるけど

ネットワーク系の用語はケース毎に置き換えで対応してる感じだし
正確さとか明解さを重視すると英語そのままになる
0134デフォルトの名無しさんNGNG
「つなげています」→「つながりました」(つながっています?)
「接続しています」→「接続しました」
「接続を開始します」
「接続の準備中です」
0135デフォルトの名無しさんNGNG
>>133
なんか、ウソでもいいからJISあたりに規格無いものかな
0136デフォルトの名無しさんNGNG
あえて日本語にする場合は、接続処理中、接続中、切断処理中、切断中とかにしてるなぁ。
0137デフォルトの名無しさんNGNG
C言語です。IPアドレスを指定して、そのIPアドレスを持つホストが起動しているか
を確認するプログラムを作りたいのですが、どうやって起動しているか判断すればいいのでしょうか?
0138デフォルトの名無しさんNGNG
こたえがかえってこなかったら
0139デフォルトの名無しさんNGNG
>>137
pingじゃだめ?
0140デフォルトの名無しさんNGNG
C言語さんこんにちは。
0141デフォルトの名無しさんNGNG
>>137
ポート全スキャンして、反応があるかどうかを確認する。
0142デフォルトの名無しさんNGNG
UDPでファイルの送受信をしているのですが、画像など,100KBくらいを超えたデータになると受信できなくなります。
理由としてどのようなものが考えられますか?
ちなみに,パケットサイズは160としています。
0143デフォルトの名無しさんNGNG
一部が欠けて困るようなデータをUDPにするなと何度言わせれば・・・
しかもサイズ160って・・・
0144デフォルトの名無しさんNGNG
「受信できなくなります」じゃ状況がいまいちわからん
0145デフォルトの名無しさんNGNG
例えば,「a」を1000個くらいテキストファイルに書いて送ると,受信側では10個くらいになってしまっているんです・・・。
0146デフォルトの名無しさんNGNG
UDPはデータが減っても文句は言えない
0147デフォルトの名無しさんNGNG
それどころかabcdefgになっても文句は言えない
0148デフォルトの名無しさんNGNG
さらに1500個になっても文句は言えない
0149デフォルトの名無しさんNGNG
>>145
まずUDPとは何かをよーく調べろ。
0150デフォルトの名無しさんNGNG
なぜUDPを選択したんだ?
0151デフォルトの名無しさんNGNG
簡単そうとでも思ったんじゃない?
0152デフォルトの名無しさんNGNG
あ、どうもUDPです。
0153デフォルトの名無しさんNGNG
どうせものすごい勢いで送りまくってるんだろうな。
送信元PCのバッファから外に出て行ってない悪寒。
0154ヤギの配達人NGNG
>>152
お前がUDPか!
何回言えば分かるんだ。
今度IPも連れてきなさい。
0155TCPNGNG
ああ、またUDP君、怒られてるぅ
僕に頼めばいいのにぃ

マターリ砲発射!

_| ̄| (((●コロコロ
0156デフォルトの名無しさんNGNG
UDPとTCPの中間みたいなプロトコルないかねぇ?
データグラム型でデータの保障アリの・・・
0157デフォルトの名無しさんNGNG
>>156
それはUDPだろ
データの管理は自分でサポートしなければいけないだけで
0158137NGNG
>>138
答えが返ってこなかったらとは具体的には何を実行して答えを待てばよいのでしょうか?

>>139
プログラム中でpingとかできるんですか?

>>140
こんばんわ

>>141
ポートスキャンすればいいということでしょうか?もしサーバが起動していなくても
ポートスキャンは可能なんでしょうか?
0159デフォルトの名無しさんNGNG
>>156
SOCK_SEQPACKET?
0160デフォルトの名無しさんNGNG
UDPって言ってるんだから、PF_INETで
PF_INETにSOCK_SEQPACKETは無いだろ?

順序保障されたDGRAMがほしければRTP使えば?
ってのをどこかで見たおぼえはある。
0161デフォルトの名無しさんNGNG
>>158 == >>137
ICMP
0162デフォルトの名無しさんNGNG
>>158
> プログラム中でpingとかできるんですか?

pingは単なるraw socket programです。
0163デフォルトの名無しさんNGNG
SOCK_STREAMで一度に遅れるのは何バイトまでですか?
0164デフォルトの名無しさんNGNG
>>163
遅れるか遅れないかは環境次第です
0165デフォルトの名無しさんNGNG
RPC使えば?
0166デフォルトの名無しさんNGNG
ローカルで動くパケットフィルタを作るためにはどんな方法がありますか?
そのPCに届いたパケットのIPをチェックして特定のものを破棄する、というような事がやりたいのですが。
0167デフォルトの名無しさんNGNG
OSすら指定しませんかそうですか
0168デフォルトの名無しさんNGNG
あ、間違い>>163は
SOCK_STREAMで一度に送れるのは何バイトまでですか?って事ですから
0169デフォルトの名無しさんNGNG
すみません、Win2k/XPで。言語はC。
0170デフォルトの名無しさんNGNG
2Gバイトぐらいまで大丈夫じゃなかろうか。
0171デフォルトの名無しさんNGNG
>>166
Filter-Hook Driver
0172デフォルトの名無しさんNGNG
>>163
何バイトか想定してはいけない。
0173デフォルトの名無しさんNGNG
>>168
実装依存、環境依存。
0174デフォルトの名無しさんNGNG
ストリームに「一度に送る」なんて概念はないわけだが
0175デフォルトの名無しさんNGNG
24シーズン3でドメイン名からIPアドレスを検索できないように
してるってのがあったんだけどどうやるの?
0176デフォルトの名無しさんNGNG
JPNICに登録しない。
0177デフォルトの名無しさんNGNG
>>175
お名前.comで代行サービスもやってるけどな
http://www.onamae.com/other/news/onamae/#041214
0178デフォルトの名無しさんNGNG
ごめんIPアドレスの話か、登録情報と勘違いした。スマソ
0179175NGNG
でも接続した時点でnetstatすればばればれだよね?
0180デフォルトの名無しさんNGNG
もっと勉強しろ。
0181175NGNG
24シーズン3みんな見た?
0182デフォルトの名無しさんNGNG
スレ違い
0183デフォルトの名無しさんNGNG
プログラミングに関係ない。
0184175NGNG
ム板は真面目過ぎ
0185デフォルトの名無しさんNGNG
>>184
DNSがいるから名前が引けるんだよ
0186デフォルトの名無しさんNGNG
ローカルの話としてDNSをいじってアドレスの解決ができないようにすることは
可能だけど、それやっちゃうとアドレスとしての意味がなくなるわけだからグロ
ーバルでは無理。

確か「24」って何かのときに出てきたスクリーンに8bit超える数字がIPアドレスで
使われたりしたからあんまり技術面に詳しくないんだろうなと思った。192.0.2.x
を使うべきなんだけどね。
0187デフォルトの名無しさんNGNG
> 192.0.2.xを使うべきなんだけどね。

それは私の所有するアドレスです。勝手につかわないでください。
0188デフォルトの名無しさんNGNG
192.168.0.2は俺のだから、みんなそこヨロシコ。
0189デフォルトの名無しさんNGNG
>>186
スレ違いな上に内容も浅い。
0190175NGNG
落ち着け
0191デフォルトの名無しさんNGNG
>>175
24のとは違うけどモデム経由でuunet接続すれば、メールやNetNewsに
限ってはIPアドレスなしのドメイン名でアクセスできる。
いまだに運用されている地域があるかどうかはわからないけど・・・
0192デフォルトの名無しさんNGNG
>>186
っていうか
漫画とかで車のナンバーが5桁になってたりするのと同じで
実アドレスにならないようにわざとはずしたんじゃないかと。
0193デフォルトの名無しさんNGNG
WinSockの質問です。
javaやUNIXでは行単位で受信する方法がありますが、WinSockで
同じようなことをしようと思ったら手作りするしかありませんか?
sockstream >> recvbuff; とか、sock.getline(recvbuff); の
ような使い方ができるものがあれば使いたいのですが・・・
# MSDNを見た限りでは、見当たらなかったので。
0194デフォルトの名無しさんNGNG
へー、BSD socketには行という概念があったのか。
Javaはラップしてるだけだし。
0195デフォルトの名無しさんNGNG
windows上でjavaを使えばいい
0196デフォルトの名無しさんNGNG
192.0.x.x
とか
192.1.x.x
とか
192.2.x.x
が設定されている環境を何度か見たけど、
このあたりがローカルIPだという迷信はいつ頃広まったの?
0197デフォルトの名無しさんNGNG
そう設定してる人や
そういう噂を広めた人に聞かないと
0198デフォルトの名無しさんNGNG
>>194
socketをfdopenすれば、あとはfgetsでいけたりする。
0199デフォルトの名無しさんNGNG
そんなことは分かってる。
問題は、それがsocketの機能なのか、ということ。
「行」の扱いは、stdioのライブラリがやってることだろ。
0200198NGNG
>>199
べつに193は「socketに」なんて言ってないが。「UNIXでは」といっているだけ。

くだらない突っ込みする前にソリューションを示したら?
0201デフォルトの名無しさんNGNG
くだらない突っ込みする前にソリューションを示したら?
0202デフォルトの名無しさんNGNG
なるほど、>>198に書いてあるのが
くだらない突っ込みではない
的確な解決法というわけですね。
0203193NGNG
どうやら自分で作らないとだめなようですね
いろいろどうも。
0204デフォルトの名無しさんNGNG
>>199
↑また馬鹿が登場した。
0205デフォルトの名無しさんNGNG
>>202 回答できないくせに吠えるアフォって多いよな。この世界。
人をバカにするだけで役に立たないやつ。
0206デフォルトの名無しさんNGNG
Windows はソケットハンドルとファイルハンドルが別物なんだよねえ。
不便だ。

0207デフォルトの名無しさんNGNG
実は、NT系なら、SOCKETに対してReadFile(),WriteFile()等が出来たはず。
が、、fdopen()等がHANDLEを受けるインターフェースじゃないので渡せない。
0208デフォルトの名無しさんNGNG
>>206
それは、Winsockが出始めたころの話。
いまは、同じだよ。
0209175NGNG
ネットワークプログラミングって楽しいね
0210デフォルトの名無しさんNGNG
>>207
_open_osfhandle( )して_fdopen( )
Windowsってややこしいね。

STLPortのbasic_fstream::open( )はハンドルを受け取るバリエーションが
あったと思った。
それが、Windows HANDLEか、CRTのファイルハンドルか
stdioのFILE*かは忘れた。
STLPortの拡張で標準にはないね(たしか)。

いずれにせよ、SOCKETを_open_osfhandle( )かfdopen( )かそのままか
してbasic_fstream::open( )にすれば、
>>193 のやりたいことはできると思う。
0211デフォルトの名無しさんNGNG
>>192
ttp://www.networksorcery.com/enp/rfc/rfc3330.txt
0212206NGNG
>>207 >>208
なんと、知らんかった…。
だいぶ古い知識のまま不便だと思いこんでたのね…orz
0213193NGNG
>>210
情報ありがとうございます。
XP Pro SP2環境でWinSock2.0で試しに以下のように書いてみました。
特にエラーはでないのですが、fgetsでまったくデータを読めません。
recv関数に置き換えると読めます。
通信相手からはCRLFの付いたデータを送信しており、受信側がデータ
を読めないときでも送信バイト数分きっちり送りきっています。
fgetsをfreadに変えて読取りバイト数を確認すると0バイトでした。
何か勘違いをしているのかと思いますが、お気づきの点があれば
ご指摘願えないでしょうか?

connect(sock, ...);

int handle = _open_osfhandle(sock, _O_RDONLY | _O_BINARY );
if(-1 == handle)
{
 printf("_open_osfhandle = %ld\n", GetLastError()); exit(-1);
}

FILE* fp = fdopen(handle, "r");
if(NULL == fp)
{
 printf("fdopen = %ld\n", GetLastError()); exit(-1);
}
setvbuf(fp, buffer, _IOFBF, sizeof(buffer));

char recvbuff[81]; memset(recvbuff, '\0', 81);
fgets(recvbuff, 80, fp);
printf("[RECV] %s\n", recvbuff);
0214デフォルトの名無しさんNGNG
>>196
それがSunのグローバルIPとかぶってたせいで
Sunのサイトにアクセスできないという物凄い環境もありますた
0215デフォルトの名無しさんNGNG
>>214
ワロタ
0216デフォルトの名無しさんNGNG
>>196

192.0.0.0/24 - This block, corresponding to the numerically lowest of
the former Class C addresses, was initially and is still reserved by
the IANA. Given the present classless nature of the IP address
space, the basis for the reservation no longer applies and addresses
in this block are subject to future allocation to a Regional Internet
Registry for assignment in the normal manner.

192.0.2.0/24 - This block is assigned as "TEST-NET" for use in
documentation and example code. It is often used in conjunction with
domain names example.com or example.net in vendor and protocol
documentation. Addresses within this block should not appear on the
public Internet.

とは関係ないのですね。 :-)
0217デフォルトの名無しさんNGNG
>213
俺も全然知らないんだけど、、
まず、_open_osfhandle()で得たhandleで_read()が出来るか、から試してみたら?
http://www.kt.rim.or.jp/~ksk/wskfaq-ja/articles/bsd-compatibility.html
0218デフォルトの名無しさんNGNG
>>214
ワロタ
0219デフォルトの名無しさんNGNG
○IPアドレスを元に所属する国を判断するプログラムを
 作成したいと思っています。

当初案としては…
 whoisコマンドで得られる項目「country」や「address」
を元に判断しようと思っていたのですが、

1.1つのwhoisサーバで検索できる範囲が決まっている。
2.whoisサーバが大杉。
3.whoisサーバがコロコロ変わる。
4.whoisサーバのレスポンスがサーバごとに異なる。
5.複数のwhoisサーバを使い分けるプログラムを書くのは激しく面倒。

一部のwhoisサーバは副問合せを実行して、他のwhoisサーバからの
レスポンスを返してくれるものもあるようなんですが。

ということで、他に何か良い手立てはありませんかねぇ。。
そんなに判定精度を求めるプログラムではありません。

・もうすでにそういったプログラムをOSSとして配布してたり
・全てのIPaddressに対して対応しているwhoisサーバがあるとか

どなたかよろしくお願いします。
0220デフォルトの名無しさんNGNG
>>219
ネームサーバでIPアドレス逆引きして、FQDNの終わりの.jpとかで
判断する方法ではどうでしょうか?
0221219NGNG
>>220

レスどうもです。
その方法だと逆引きできないIPアドレスに対しては
判断できないためちょっと難しいです。

日本国内が中心であれば、大概は逆引きできるのですが、
外国のIPアドレスは逆引きできないのが相当な割合で
存在します。私が持っているものでは半分以上は
逆引きできませんでした。。。

言葉足らずで申し訳ないです。。
0222デフォルトの名無しさんNGNG
>>219
普通arinに訊いてそこになかったら他の三つに回してくれるし
それで再検索かければ国名までは分かるだろ
0223デフォルトの名無しさんNGNG
国ごとに割り当てられたアドレスの表がどこかにあるからそれを探せ。
0224219NGNG
>>222
サンクスです!
今までJavaで作成したテストプログラムで
whois.arin.netに問合せをしたときは1回しか
問合せをしてくれなかったので、勘違いしてました。
DOSプロンプトでwhoisコマンド叩くと確かに
副問合せをしてくれますね。いくつか試したところ
全部問合せをしてくれました。素晴らしい。

なぜ自分で作成したプログラムだと副問合せを
しないのかは謎ぉ〜

>>223
どこかのサイトで商用として(Apacheログから
所在国を判断するため?)有料で売ってたところは
あったような気がしますが、無料でもありますかねぇ。。

0225デフォルトの名無しさんNGNG
>>224
> なぜ自分で作成したプログラムだと副問合せを
> しないのかは謎ぉ〜

だから返ってきたorgID見て他の三つなら自分でそっちへまたリクエスト送るんだよ
0226219NGNG
>>225
なんと!そういうことでしたか。DOSプロンプトの
whoisコマンドは勝手に副問合せをしてたのですね。
whois.arin.netが勝手にそっちに問い合わせてくれて
返してくれるのかと思ってしまいました。

となるとちょっと疑問。
・orgIDと問合せ先のサーバNameの対応表はどうなるんでしょう?
・各サーバに自分で問い合わせるとなると、
 やっぱり各サーバごとにレスポンス形式(フォーマット)は
 異なってしまうのでしょうか?
 (counry項目だけでは国が判断できなくなったりするのかなぁ・・)

どなたか教えてくださいませんか。
0227デフォルトの名無しさんNGNG
GNU whois がwhoisサーバのテーブル持ってたり。http://edge.on.arena.ne.jp/sugar/whois.html
perlにまんまwhoisってモジュールがあったり。
ソースコード見れば参考になるかも。
0228219NGNG
>>227
なるほどぉ、すでにそういったプログラムが存在しているのですね。
CやPerlは久しぶりですが、頑張って読んでみたいと思います。
どうもありがとうございました。
0229デフォルトの名無しさんNGNG
そもそもIPアドレスの管理組織って言ったら上位4つしかないんだが。
ARIN、LACNIC、RIPE、APNIC。それが分かってないんだろ。
0230TLDでNGNG
> 所属する国

ってのが…
0231デフォルトの名無しさんNGNG
そもそもネットワークプログラミングなのか、これは。
0232デフォルトの名無しさんNGNG
>主にソケットに関しての質疑応答スレです。
0233デフォルトの名無しさんNGNG
>主に
0234デフォルトの名無しさんNGNG
いつのまにかLACNICなんてできてたのか
0235デフォルトの名無しさんNGNG
HTTPについて質問なんですけど
ETag:ってなんなんでしょうか?

チェックサムみたいなものと思うんですが
Etagを算出するコードはどうやってかくんでしょう?
0236デフォルトの名無しさんNGNG
読めよ。ユニークIDだよ。
Hypertext Transfer Protocol -- HTTP/1.1
http://mlv.lolipop.jp/W3C/HTTP/spec/rfc2616_ja.txt

>>5のページはリング切れだな。
0237デフォルトの名無しさんNGNG
>>227
つーか、いまどきは whois-servers.net から CNAME ひっぱって、
そこに whois して終わりだろう。DOS の whois が対応しているか
どうかは知らんけどね。
0238210NGNG
>>213
そんなバカなと思って、いろいろ試したら
ReadFile(ReadFile((HANDLE)socket, buf, sizeof buf, &read_size, NULL)
するとERROR_INVALID_PARAMETERで失敗するのね。

MSDNのReadFileの説明にはsocketが適応できるようなことかいてあるし、
ERROR_INVALID_HANDLEでないから、どこかパラメータが気に入らないんだろうと
あれこれやっていたら、なんとReadFile()の最後の引数にOVERLAPPED構造体を
指定してやるとOKになることがわかった。
Cランタイムルーチンでもおそらくこれが引っかかってるんだろう。
(Cランタイムルーチン内部ではReadFile()の呼び出しで
OVERLAPPED構造体をNULLにしている)

なぜ?と思ったら
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winsock/winsock/default_state_for_a_socket_s_overlapped_attribute_2.asp
てなわけか。
socket()の呼び出しは、WSA_FLAG_OVERLAPPEDをセットする。。。
だからOVERLAPPED構造体を要求するのか。

なので、最初のsocket()の呼び出しを
WSASocket(AF_INET,SOCK_STREAM, IPPROTO_TCP, NULL, 0, 0)
にしたらうまく行ったよ。
socketを_open_osfhandle()してfdopen()してfgets()で
改行までをバッファリングして戻るようになった。

しかしwinsockって、だせえ実装だな、おい。
なんでsocket()はWSA_FLAG_OVERLAPPEDをセットするんだ?
 >>microsoft
0239210NGNG
いわずもがな
ReadFile(ReadFile((HANDLE)socket, buf, sizeof buf, &read_size, NULL)
は
ReadFile((HANDLE)socket, buf, sizeof buf, &read_size, NULL)
のまちがいね。
0240デフォルトの名無しさんNGNG
>なんでsocket()はWSA_FLAG_OVERLAPPEDをセットするんだ?
> >>microsoft
リンク先に書いてあるじゃないか。
backward compatibilityって。
0241193NGNG
>>238
ありがとうございます。socket()の代わりにWSASocket()を使うことで、
fgetsでデータを読めるようになりました。
こちらも_open_osfhandle()で得たhandleでの_read()を試したのですが、
同様にGetLastError()で[00087: パラメータが間違っています。]が戻って
いたため、いろいろ実験していたところでした。

WSAStartup()でバージョン指定するのだから、socketも下位互換性のある
ものとWSA_FLAG_OVERLAPPEDをセットしないWSASocket()を呼び出すものに
切り替えてくれればいいのに、と思ってしまいました>Winsock

ともあれ、>>238さんのおかげでUNIX用ソースをあまりいじらずWinに持って
いくことができました。感謝いたします。助かりました。
0242238NGNG
お礼はエロ画像のリンクで頼む。
0243デフォルトの名無しさんNGNG
>>7 のページですが、具体的にどのページが問題有りなのでしょうか? それとも全部って事ですか?
間違いを探そうにも結構ページが多いので・・・
0244デフォルトの名無しさんNGNG
まぁそもそも最初の発言が煽りだったからなぁ。

「こんなページダメだ。俺が代わりに書いてやるよ」つって結局音沙汰なし。
どこが間違いなのかもはっきりと提示してなかったと思うよ。で、スレ立て人が
ああいう書き方をしたと。

間違いがないとは思わないけど (ちゃんと内容は見てないが)、間違いあるかもね
と思いながら見てればいいんじゃない?
0245デフォルトの名無しさんNGNG
過去スレで具体的に指摘されてるから読んでね。
0246デフォルトの名無しさんNGNG
dat落ちしているって
0247デフォルトの名無しさんNGNG
>>246
●買いなよ
0248デフォルトの名無しさんNGNG
ほれ。http://makimo.to/2ch/pc5_tech/1080/1080658835.html
0249248NGNG
返り血見てないってのを除くと、具体的に指摘しているようには見えないね。
どうやら粘着っぽいのも混じっているようだし、なんだかな。

ちゃんと問題点を提示できるなら (あるいは返り血見てないのが致命的だと
思うなら) テンプレから外せば?
思わせぶりなこと書くから、この話題が何度も出てくるんだよ。
0250デフォルトの名無しさんNGNG
>>249
テンプレ、あれはあれでいいんだよ。
0251デフォルトの名無しさんNGNG
>>249
それは逆で、テンプレにない時には、何度も推薦する奴が出てきたんだよ。
結構な量書いてあるから、かわいそうな気もするけどね。
0252248NGNG
残すなら残すでいいけどさ、同じ話題が繰り返されるのは勘弁してよ。
もう 3回くらい見たような気がするもん。

「返り血チェックが甘いなど、まずい点があることに注意」とか書いとけば
いいんじゃね?
0253デフォルトの名無しさんNGNG
>>252
あんた、何もわかっちゃいねえよ。
0254248NGNG
>>253
うん、わからんねぇ。

テンプレに書く価値がないなら削ればいいし、テンプレに書いてもいいけど
問題があるっていうことなら、こういうところがダメって書けばいいだけ
じゃないの? 違うの?
0255デフォルトの名無しさんNGNG
前スレにあったものをそのままコピペしただけなんじゃないの。
0256デフォルトの名無しさんNGNG
とにかくただ「問題あり」なんて書いてそのままってのは良くないだろう
0257デフォルトの名無しさんNGNG
>>254
> こういうところがダメって書けば

マンドクセ
0258デフォルトの名無しさんNGNG
>マンドクセ
無内容なレスで粘着する暇と気力はあるのにな。
0259デフォルトの名無しさんNGNG
批評・批判は自由だけど、「問題あり」だけで終わらせちゃダメだよ。立証責任は
批判する側にある。
0260デフォルトの名無しさんNGNG
いいんだよ。問題ありだけで。
0261デフォルトの名無しさんNGNG
具体的指摘がマンドクセという人って、
指摘したらそれが批判の対象にさらされるのがわかっていて
嫌がってるだけでしょ

批判する人は批判する人の性質をよくわかっているだけにね。
0262デフォルトの名無しさんNGNG
校正する義務もないし…
0263デフォルトの名無しさんNGNG
指摘するのがマンドクセって言うならテンプレから外せばいいだけでしょ。
それすらもマンドクセ、か?
0264デフォルトの名無しさんNGNG
あのままのソースじゃ使えませんよと伝わればそれでいいんだよ。
0265いいかげんうざい・・・NGNG
やれやれ言ってもやらないやつは絶対にやらないし
やれやれ言ってるだけで何もしないやつも糞。
特に後者は役に立つことを言ってるつもりになっている分特に有害。失せろ。
0266デフォルトの名無しさんNGNG
>>265
イミフメ
0267横やりすまそ。NGNG
マジメに勉強する香具師ならそのサイトを参考に自分で組んでみる。
なにか問題があったらその時に嫌でも気付く。

「どこが問題なの?」とか言ってる香具師は自分では何も組んでいない
と言っているようなもんだと思うのだが。

それはさておき、技術スレが技術と関係ない話題でレスを消費するのは
困るのでここらへんでやめてはくれないか?>議論している人
0268デフォルトの名無しさんNGNG
そこのサイトの管理人が粘着しているだけだから。
0269デフォルトの名無しさんNGNG
C言語なら俺に聞けスレでこっちに池と言われたので
こちらで質問させて頂きます。

C言語のacceptのエラー処理で、

while (1){
 struct sockaddr_in client_sin;

 memset((void *)&client_sin, 0, sizeof(client_sin));
 len = sizeof(client_sin);
 accepted_socket = accept(listening_socket, (struct sockaddr *)&client_sin, &len);

 if (accepted_socket == -1) {
  if (errno != EINTR && errno != ECONNABORTED) {
   perror("accept");
   exit(1);
  }
  continue;
 }

 break;
}

と、書いてみたのですが、
acceptの正しいエラー処理がわかりません。
どのような処理を施せばよいでしょうか。
0270デフォルトの名無しさんNGNG
acceptの挙動はOSにより異なる。

というか、なぜ正しくないと思ったの?
0271デフォルトの名無しさんNGNG
定石を知りたいだけだろ
0272デフォルトの名無しさんNGNG
定石
http://www.amazon.co.jp/exec/obidos/ASIN/4894712059/
0273デフォルトの名無しさんNGNG
UDPのサーバープログラムで、データを送ってきた端末のIPを特定するのは、
何の関数を使えばできるのでしょうか?
結構いろいろ調べてみたのですが、わかりませんでした。
宜しくお願い致します。
0274デフォルトの名無しさんNGNG
そういうのはきちんと学んでいれば当然知ってるはずなので、
断片的・場当たりに検索してすませるんじゃなくて
ちゃんと解説した本を買って通読するのを強く勧める。

きっと間違えてる部分や解決したつもりで穴になってる部分が沢山あるだろう。
0275デフォルトの名無しさんNGNG
>>273
UNIX なら recvfrom の引数 (struct sockaddr *)。Windows は知らん。

>>274
このスレの存在意義ないじゃん。
0276デフォルトの名無しさんNGNG
>>275
> >>274
> このスレの存在意義ないじゃん。

正気か?
0277275NGNG
説教厨うざい。
0278デフォルトの名無しさんNGNG
まぁ、基礎的な亊がNGって言っても
ここで高度な亊聞いても、誰も答えられないじゃん。
0279デフォルトの名無しさんNGNG
高度なことって?
0280デフォルトの名無しさんNGNG
>>278
> 亊
なぜ俗字? (旧字じゃないよね?)
0281デフォルトの名無しさんNGNG
>>267
卑怯者の論理だな。
0282デフォルトの名無しさんNGNG
バカにつける薬なし。
必要な知識は質問されるとは限らないってことがわからないということは、
>>275は人を使った経験はないのだろうな。
0283デフォルトの名無しさんNGNG
冬休みが終わるまではどうにもならないよこのスレ。
0284デフォルトの名無しさんNGNG
最高言語RubyこそUNIX精神の欠如です。
0285デフォルトの名無しさんNGNG
>>280
「基礎的な事」をNGワードにしている奴がいるかもしれないから。
0286デフォルトの名無しさんNGNG
それをわざわざ回避するほどの内容じゃないと思うが。
0287275NGNG
>>282
> 必要な知識は質問されるとは限らないってことがわからないということは、

必要な知識は、必要になったときに身につくもの (基礎知識が
備わってれば)。

おまいさんがわざわざ質問者のためを思って勉強の機会を作って
やる必要はない。答えたくないなら黙ってろ。ウゼー
0288デフォルトの名無しさんNGNG
UDP使うのにrecvfrom()使うだろ。
パラメータも知らないでどうするよ?って事だろ。
0289デフォルトの名無しさんNGNG
recvfrom じゃなくて recv 使ってるとか。
C 以外で recv ってるとか (perl なんかは戻り値で返される)。
まぁ推測でしかないけどね。
0290デフォルトの名無しさんNGNG
多くのケースで端末のIPアドレスじゃなくて先方のrouterのIPアドレスしか得られません、
どうすればいいんですか、とかそういう釣りだろ。
0291デフォルトの名無しさんNGNG
287は基礎知識が備わってればってので逃げを打ってるつもりかも知れないけど、
recvfromの引数の意味を知らん奴にそれを期待するのは無理があるような。
273のような質問者に対して当然指摘すべき注意もしてないし。

自分も場当たりな寄せ集め知識だけで生きてきたもんだから
自分が攻撃されたように感じて慌てて飛び出したって感じがするな。
0292デフォルトの名無しさんNGNG
基本的に入門者に必要なのはキッカケ。
全くネットワークプログラミングをやった事無い人が、突然UDPでコードを書く時に
キッカケとなる知識を得ないと不安でしょうがなくなる。どんなに簡単な事でもね・・・
その最初のキッカケがrecvfrom()の引数だったか、WinSockの初期化だったかは人によるだろうけど・・・

素質の有る人は、そのキッカケさえつかめば自力で知識を蓄積していけるよ。

俺も、昔聞いたさ
「DirectXの*.xファイルを読み込んで表示するにはどうすれば良いんですか?」
そんな俺も今や3Dエンジンを組むプロだよ。
0293デフォルトの名無しさんNGNG
>>10
クックロビン音頭が消えてるんですが、どなたか補完お願いします。
0294デフォルトの名無しさんNGNG
whoisサーバーの仕様書を日本語でかいてあるのを
おしえて!!!!!!!!!1
0295デフォルトの名無しさんNGNG
英語くらい読もうね
0296デフォルトの名無しさんNGNG
[Shift] キーくらい最後まで押そうね
0297デフォルトの名無しさんNGNG
>>294,296
ワロス
0298デフォルトの名無しさんNGNG
P2Pで相互で送受信(非同期の通信)を行うプログラムなのですが、
このような場合、送信のソケットと受信のソケットを
別々に持つ必要があるのですか?

初歩的な質問で申し訳ございません。
0299デフォルトの名無しさんNGNG
ソケットは双方向通信。片方shutdown()するまでは。
0300298NGNG
BeginReceive()とBeginSend()が同時に使えるということでしょうか?
0301デフォルトの名無しさんNGNG
1つのソケットでsendもreceiveもできる。電話と一緒。
電話機=ソケット
0302デフォルトの名無しさんNGNG
ソケットはプログラムインタフェースで、送受できると規定しているのはプロトコルだけどね。
0303デフォルトの名無しさんNGNG
BSDソケットはプログラミングモデルで、
socket()の帰り値を使って読み書きできます。
0304デフォルトの名無しさんNGNG
誰か翻訳してくれ。

0305デフォルトの名無しさんNGNG
BSD插座以程序編製模型,使用socket()的回來價?用讀寫來。
0306デフォルトの名無しさんNGNG
中文なら中文でもいいが意味のわかるまともな文章にすれ。
0307デフォルトの名無しさんNGNG
A BSD socket can be written by the programming model using the return value of socket().
0308デフォルトの名無しさんNGNG
BSD ???????? ???,
socket()? ???? ??? ?? ?? ? ? ????.
0309デフォルトの名無しさんNGNG
BSD Socket is a programming model with which you can send or receive data,
using an object - called socket - returned by socket() function call.
0310デフォルトの名無しさんNGNG
    |l  |l l |l | |i
   |i  l |i l| li  |
        ∩
    _,,..,,n,r'゙ <⌒つ
   ./ ゚ 3  ヽ )´   
 ) l ゚ ll ∩ ノ そ
Σ `'ー---‐''  (
  ⌒ヽ/V⌒v、/⌒ ビダァァァン!!

    _,,..,,,,_
   ./ ゚ 3  `ヽーっ
   l ゚ ll ⊃ ⌒_つ
   `'ー---‐'''''" 
0311デフォルトの名無しさんNGNG
質問です。

Windows、VC++ において、ネットワークプログラミングを解説している本、
またはサイトはありませんでしょうか?

UNIX における C言語を用いたネットワークプログラミングなどはよく見かけますが、
例えばポートを監視するとき、while 文でまわす代わりに
SetTimer などを使ってメッセージ処理をしないのか、とか、
ファイル入出力を扱うのに CFile があるように、
ソケットを扱う便利なクラスはないのか、などといった疑問が残っており、悩んでいます。
0312デフォルトの名無しさんNGNG
重複I/O使えよ・・・
0313デフォルトの名無しさんNGNG
スレッド複数回すのがイマ風かと思われ。
acceptの再にスレッド起動、クライアント切断時にスレッド終了
0314デフォルトの名無しさんNGNG
>>311
CAsyncSocket
0315311NGNG
>>312-314

それらの単語でぐぐったら、知りたい情報がいろいろと出てきました。
ありがとうございます。
0316デフォルトの名無しさんNGNG
>>313
んなこたーない。J2SE 1.4にNIOが加えられた必然性は何?
マルチスレッドで正確に作る難易度の方が低いとは思えない。
0317デフォルトの名無しさんNGNG
P2Pアプリ(ny,mx等)や、ネットゲームのほとんどは、
ルータに任意(もしくは指定された)ポートを空ける必要が
あるかと思います。
これは、クライアントPC(ローカルPC)で起動している、
アプリ(P2P,ネットゲーム)が空けているポートと一致させる
必要があります。
で、この空けているポートですが、なぜ、空ける必要が
あるのでしょうか?
下に続く...。
0318デフォルトの名無しさんNGNG
前振りが長くなってすみません。
他のPC上で動作しているアプリと通信するために、
ポートを空けることは分かっています。
...ここまで書いて申し訳ないのですが、
P2Pはこの話からはずしてください。
ネットゲームもしくは、C/S形式のアプリに限定させてください。
下に続く...。
0319デフォルトの名無しさんNGNG
終了。
0320デフォルトの名無しさんNGNG
C/Sシステムで、以下のような手順を踏んで、
通信経路を確立すれば、ルータにポートを開ける
必要がないのではないのでしょうか?
1.クライトから、サーバへ接続要求する。
2.サーバはクライントに接続応答する。
上記、1,2で、クライントに待ち受けポートが
出来上がると思います。
この、勝手に出来る(?)ポートで、通信を行えば、
よいかとおもうのです。
確かに、この勝手に出来る(?)ポートは、
ルータでポートを開ける必要があるのですが、
これは、ルータの設定次第ですが、勝手にポートが
開くと思います。
しかしなぜ、ネットゲーム等は、固定のポートを
あける必要があるのでしょうか?
0321デフォルトの名無しさんNGNG
長いから要約してくれ
0322デフォルトの名無しさんNGNG
UDP hole punching のことを言ってるんだと思う。
0323デフォルトの名無しさんNGNG
質問の仕方が下手ですね。すみなせん。
例えば、winny2であれば、自分のIP&Portを
他のwinny2ユーザに教えますよね。
(教えなくても使えますが...。)
これは、他のユーザ(IP&Portを教えてもらった方)が、
教えてもらったIP&Portに対して接続を行い、
ファイル検索&ファイル転送を行うために使用される為だと
思います。
言い換えれば、
『IP&Portを公開しているwinny2ユーザがサーバとなり、
 公開さしているIP&Portに他のwinny2ユーザが接続することで
 他のwinny2ユーザがクライアントとなり、ファイルを共有する。』
  ※話は変わりますが、ここまで書いていて思ったのですが、
   P2Pとは、
    「ネットワークに接続されている何れのノードもサーバになりえる」
   ということなのでは?
となるかと思います。
下に続く...。
0324デフォルトの名無しさんNGNG
>>323
Port0
0325デフォルトの名無しさんNGNG
誤字が多くてすみません。
1行目:…すみなせん。⇒すみません。
7行目:…使用される為だと⇒使用される物だと
11行目:…公開さしている⇒公開している

以下、続き。
>>323で書いている内容が間違っていなければ、
『ネットワークを介して他のノードから接続を
 受けるようなアプリは、サーバとしての
 位置付けが要求されるような場合』
となります。
だとすれば、なぜ、世にあるネットゲームは、
ポートを開ける(≒サーバになる)必要があるのでしょうか?

長くなってすみません。で、TCP/IP接続での話です。
0326デフォルトの名無しさんNGNG
>>316
非同期I/Oは、10Kスレッド問題を回避するのが最も大きな目的でしょう?
作る容易さのためじゃないと思うよ。実際デバッガは非同期I/Oの相手が苦手。
0327デフォルトの名無しさんNGNG
>>325
一度でも、クライアントサーバやP2Pのソフト作ってみればわかるよ
0328デフォルトの名無しさんNGNG
>1.クライトから、サーバへ接続要求する。
>2.サーバはクライントに接続応答する。

>上記、1,2で、クライントに待ち受けポートが出来上がると思います。
0329デフォルトの名無しさんNGNG
>>327
作ったことありますよ。
その上でのことです。
質問ですが、端的にいうと、
 『なぜ、クライアント側が待ち受け専用ポートを作る必要があるのか?』
~~~~~~~~~~~~~~~~
『専用ポート』が重要なのです。
>>328にもあるとおり、クライアントとサーバへ接続が確立されれば、
クライアント側にもポートができあげる。そのポートを使って、
データの受信を行えばよいと思うのです。
0330デフォルトの名無しさんNGNG
"~"の位置がずれました。書き直します。

>>327
作ったことありますよ。
その上でのことです。
質問ですが、端的にいうと、
 『なぜ、クライアント側が待ち受け専用ポートを作る必要があるのか?』
               ~~~~~~~~~~~~~~~~
『専用ポート』が重要なのです。
>>328にもあるとおり、クライアントとサーバへ接続が確立されれば、
クライアント側にもポートができあげる。そのポートを使って、
データの受信を行えばよいと思うのです。
0331デフォルトの名無しさんNGNG
>>330
書いたプログラムも不必要な再送ロジックばかりの人。
0332デフォルトの名無しさんNGNG
>>330
専用ポートの要らない実装も十分考えられるし、実際にあるんじゃない?

ただ、コマンド・レスポンス的に行われるサーバとの対話と別チャネルでサーバ側から
一方的な通知を行おうとすると、1本のチャネル上に仮想的に複数チャネルを構築するより、
受信専用ポートで通知を受けたほうが楽だから使ってるんでは?

あと世にあるネットワークゲームはサーバ・クライアント間でTCP/IPでコネクション張って、
って風には作ってないものも多いと思う。実際にやってみたならわかると思うけど、UDPも
結構ちゃんと届くことが多いし、その場合やっぱりTCPよりずいぶんリソース的に軽いから。
0333デフォルトの名無しさんNGNG
>>330
作った事が無いのがバレバレですね
0334デフォルトの名無しさんNGNG
>これは、ルータの設定次第ですが、勝手にポートが開くと思います。
0335デフォルトの名無しさんNGNG
自分で勝手に想定した脳内仕様にそぐわないなら、普通は脳内仕様を疑うもんだが。
0336デフォルトの名無しさんNGNG
>>331「再送ロジック」とはどんなロジックですか?
>>333ほんとに作ったことあるよ。
クライアント:Flash(XMLソケット)
サーバ   :Java(NIO)
>>335自分の考えを疑ったのですが、答えが出ませんでした。
何か解っていることがあれば、教えてください。

>ただ、コマンド・レスポンス的に行われるサーバとの対話と
>別チャネルでサーバ側から一方的な通知を行おうとすると、
>1本のチャネル上に仮想的に複数チャネルを構築するより、
>受信専用ポートで通知を受けたほうが楽だから使ってるんでは?
こういうレスがほしいです。
0337デフォルトの名無しさんNGNG
>>336
ポート開けて個々のPCがサーバとして(というと語弊あるが)しないと
1つのサーバで全てのクライアントのファイル転送やったと考えたら
どんだけ太い回線でも辛いだろ
0338デフォルトの名無しさんNGNG
僕が満足するような議論はできないようですね。
バイバイ。
0339デフォルトの名無しさんNGNG
>>337
そのとおりだと思います。また、回線速度だけではなく、
 1.クライアントAからサーバに共有ファイルをアップ。
 2.クライアントBがサーバから共有ファイルを落とす。
となった場合、サーバへの負荷も考えると、直接、
クライアント同士(A、B)がやり取りする方がよいと思います。
しかし、それは、P2Pアプリ(winny2等)の場合だと思います。

>>332にある、
 『コマンド・レスポンス的に行われるサーバとの対話』
には、受信専用ポートは必要ないと思うのです。
なぜ、クライアントからサーバへ接続する際に出来上がる、
ポートだけで通信を行わないのでしょうか?
⇒言い換えれば、どうしてサーバからクライアントに
 対して接続を行う必要があるのでしょうか?
0340デフォルトの名無しさんNGNG
ポート開けるのはクライアント同士が接続してるだけだ
0341デフォルトの名無しさんNGNG
自分の思い込みと客観的根拠を区別できない奴だな。
0342デフォルトの名無しさんNGNG
調べてて、こんなのを見つけました。
 >たとえばユーザAとユーザBがアクションゲームのような
 >即時性が要求されるゲームをしたとします。
 >通常の場合、ユーザBはユーザAの状態をサーバを通して
 >知ることになります。
 >サーバを通過する必要があるということは、
 >そこで遅延が発生する事になります。
 >ユーザAが必殺技でユーザBを倒したはずなのに遅延の影響で
 >逆にユーザBに倒された、なんてことがあるかもしれません。
 >仮にゲーム情報がユーザAとユーザAでP2Pでやり取りできれば
 >ユーザ間の情報の遅延が少なくなり、このような即時性が
 >要求されるゲームは作りやすくなると思えます。
 (ttp://homepage3.nifty.com/toremoro/p2p/trend2.html から抜粋)
こういうことなら解ります。
各ユーザ(クライアント)がポートを開ける必要がある。
他にある?
0343デフォルトの名無しさんNGNG
>>342
何が納得いかないんだ
言ってみろ
0344デフォルトの名無しさんNGNG
>>343
ぎゃー、ほやで何回も言ってるやん。
説明が下手なんかな〜。
『コマンド・レスポンス的なネットゲームを作ろうとした場合、
  ・サーバ   :クライアントからの接続要求を受けるポート
  ・クライアント:サーバとの接続が確立された際に作成されるポート
 で、十分だと思う。
 (クライアント側のサーバとの接続が確立された際に作成されるポートで
  サーバ⇒クライアントのデータは受信できる。)
 しかし、世のネットゲームは、上記のポート以外にクライアント側が
 他のノードから接続できるようなポートを準備しているがそれはどうして?』
って聞いてるんやん。
ネットゲームってあんまりせんけど、してる人ってこいうの疑問に思わないん?
訳も解らず、ルータのポート開けてるん?
訳も解らず、ネトゲーのアプリインストールしてるん?
訳も解らず、質問してる俺は、アホー?
訳も解らず、ドンキに火つけてるのは誰や!!
訳も解らず、ドンキは警察に怒られてるのはどういうことや!!
火付けたやつが悪いんや!!そんなんあたり前や!!
っと、思うよ〜。
あと、訳解らんレス大杉。


0345デフォルトの名無しさんNGNG
おまいこそ自分の脳内仕様に抜けがあるとなぜ疑わないのか。
0346デフォルトの名無しさんNGNG
>>344
ホームラン級の馬鹿だな
0347デフォルトの名無しさんNGNG
冬ボーは放置の方向で。
0348デフォルトの名無しさんNGNG
なんで大阪弁なのよ?
0349デフォルトの名無しさんNGNG
>>345だから、それを教えて欲しいって言ってるやん。
な〜、教えて。どこが抜けてるん?
な〜、教えて。
はっ、は〜ん、さてはおまえも解らんのやな〜。
って煽ってもムダなん?
0350デフォルトの名無しさんNGNG
>>346王選手を超えた?ってそんなんじゃなくて、
そんなんじゃなくて、教えて。馬鹿なら馬鹿でいいから。
解ってるから、そんな風に言ってるんやろ?
なら、オシエテー。
>>347はぁ〜、寂しいなぁ〜。自分、そんなん言われたら、
かなり寂しいよ。
>>348かしこまった言い方が面倒になった。
ってか、解ってるやついるんなら、答えて欲しんやけど。
0351デフォルトの名無しさんNGNG
108番目で不吉だからageよう
0352デフォルトの名無しさんNGNG
>>344
P2Pでなくて、中央のサーバ噛ますネットゲームなのに、なぜ
クライアント側がポートに穴開けなければいけないの?ってことだよね?
0353デフォルトの名無しさんNGNG
>>352
だまれ
0354デフォルトの名無しさんNGNG
>>352そう。そうやねん。まさしく、そういうことやねん。
なんでなん?
>>353お前がだまっとれや
0355デフォルトの名無しさんNGNG
「ポートなんか開けなくても、50万人が同時にプレイするゲームだと
サーバーが50万個のコネクションを維持すれば良いだけだろ?」
と言っているようです。
0356デフォルトの名無しさんNGNG
>>354
俺ネットゲーやったことないからそこまで分からん。そのゲームの仕様で、
P2Pを使うこともあるからじゃないのかな?発売元に問い合わせてみたら。
一切P2P使わないゲームで中央サーバが一括管理してるならポートに穴
開ける必要は無い。クライアント側(プレイヤー側)は、中央サーバに接続しに
いけばいいだけだから。
0357デフォルトの名無しさんNGNG
>>355はあ?誰がそんなこといった?
>>356わからんなら口をはさむなボケが。
0358デフォルトの名無しさんNGNG
実際にそのネットゲーやってファイアウォールのログとか
パケットキャプチャとかで何やってるか観察してみりゃいいじゃん。
0359デフォルトの名無しさんNGNG
囲碁とか将棋なんかはポート開けないのが多いよね。
Javaアプレットだったりするし。
0360デフォルトの名無しさんNGNG
>357
だって、サーバー側からの「何かが起こったよ」という通知はどうするのさ。
クライアント側から張ったTCPのコネクションを維持するか
サーバー側からUDPorTCPでクライアント側にデータを送信するかしかないのに。

ポートを開けない=後者のやり方は不可能なんだから
「全ユーザーとのセッションを維持しつづける」以外にどうしろと。
0361デフォルトの名無しさんNGNG
>>360質問の意味がわかってないじゃん
0362デフォルトの名無しさんNGNG
>>355
やっと >>350 が何を言ってるのかが解った。
このままでは気になって夜しか寝られないところだった。
0363デフォルトの名無しさんNGNG
冬休みは既に始まっている、というのはよく分かった。
支離滅裂な日本語を解読するための、無駄な労力を使おうなんて思わないし。
0364いややね、なりすまし ◆ztMasRA.j2 NGNG
>>355いい。こういうの待ってました。
>>360このレスもいいね。すごくうれしい。
2つをまとめると、
 『サーバ側でたくさんのコネクションを保持しつづけるのは
  厳しい。だから、クライアントからのコネクションを
  保持し続けずに、サーバ側からクライアント側に何かを
  伝えるためにクライアント側に口を開けてもらっておいて、
  サーバ側からその口に向かってデータを送信する。』
ってこねやね。

ここで気になるのは、
 『サーバ側がクライアント側にデータを送信する際、
  毎回、接続を確立する必要がある。』
やねん。これって、時間かかるんとちゃうの?

>>356そうやねん。俺もそう思ったん。でも、↑のことが
問題らしい。

>>358実際のネットゲームはした事ない。
したいと思えない。でも、仕組みは気になる。
言い訳やね。でも、ログみても俺には分からんと思う。
あ〜、これも言い訳やね。ごめん。

>>357お前は誰やねん?トリップつけたろ。
いややね〜、成りすまし。あ〜いや。サブイボでてくるわ。
0365デフォルトの名無しさんNGNG
> 『サーバ側がクライアント側にデータを送信する際、
>  毎回、接続を確立する必要がある。』

UDPなら(少なくとも毎回は)やらなくてもOK。
漏れ小規模にUDPのクライアントを抱えるサーバを運用してるけど、
そこそこちゃんと届くからちゃんと作ればやっぱりTCPより効率良いよ。
少なくともサーバ側リソースという観点では。
0366いややね、なりすまし ◆ztMasRA.j2 NGNG
>>362>>363すんませんね。説明、わかり難かった?
これからは、気をつけますね。
でも、ま〜、分かったんならええやん。な、ええやろ。

>>365良いよ。これも大変良い。
俺、UDPって使ったことないから、よう知らんのやけど、
やっぱ、TCPより軽いんやね。

と、>>365を読んでいてまた疑問が沸いてきたわ。
>>364でも書いたけど、サーバ側でクライアント側からの
接続を保持しつづけないとしたら、
 クライアント⇒サーバ
へのデータ送信も毎回、クライアントからサーバへコネクションを張ってるん?
(UDPはコネクションを張らなくてもいいことは今、教わったから分かってる。)
もし、この脳内仕様(←この言葉気に入ったから使わせてもらうわ)が正しければ、
俺がずーっと質問していた、クライアント側にポートを開ける必要のあるネトゲーは、
クライアント⇔サーバ間の通信はTCPではなく、UDPを使うってことになると
思うやけど、おうてますか?
0367デフォルトの名無しさんNGNG
>>366
あっていない。
UDPではなくTCPのポート開けるように求めているゲームがあるだろ。
0368デフォルトの名無しさんNGNG
365はどうでもいいけど、サーバで多数のコネクションを保持するのって
どれくらい負担なんでしょうか。

起動できるワーカープロセス数(W)
ワーカープロセス当たりのTCPに使える最大デスクリプタ数(D)
から単純に計算すると W*D ですが、
OSが保持できるコネクションの数(C)に制限はあるのかな?

カーネルでTCPに利用できるメモリ量(M)
コネクションあたりのカーネルのメモリ使用量(m)として、最大同時接続数は
max(C,W*D,M/m)
ってところでしょうか?

ネトゲのサーバとかって大体一台で最大同時接続数をいくつくらい受けつける
ようになってるものなんでしょう(アクセラレータを抜きにして)。
0369デフォルトの名無しさんNGNG
>>366
UDPで何か作ったことあるならわかると思うけど、単一のUDPパケットでは送れないような
(あるいは送りたくないような)データを送る最も単純な方法は、TCPを使うことなわけ。
もちろん「何らかの自前プロトコル over UDP」でもいいんだけど、たまにしかこういうことが
起きないとするならほんの少しの効率の低下を受け入れてTCPを使っても良いわけだし、
TCPは既に実装されていて、バグフリーでタダで使える。

世界一大規模に使われている分散DBであるところのDNSプロトコルもそうしている。
0370デフォルトの名無しさんNGNG
ttp://akiba.ascii24.com/akiba/game/interview/2002/02/24/633792-000.html
一度読んだら?
0371デフォルトの名無しさんNGNG
>>369
おい、DNSはTCPも定義されているけど、(domain=53)
使われているのは事実上UDPのみだ。
0372デフォルトの名無しさんNGNG
>>371
うん。だから
>たまにしかこういうことが起きないとするなら
と書いてるわけ。
0373デフォルトの名無しさんNGNG
あ、でもDNSの場合はinboundのTCPは使わないか・・・
0374デフォルトの名無しさんNGNG
>>372
そもそも何言っているのか知る気を起こさせない文章(369)だが、
> TCPは既に実装されていて、バグフリーでタダで使える。
これも問題だな。
0375デフォルトの名無しさんNGNG
>>374
374の使ってるOSでは既存のTCPプロトコルスタックに(既知の)バグがあったり、
既存のがなくて自前で工数かけて実装する必要があったりするわけ?
0376デフォルトの名無しさんNGNG
374ではないが
わけもわからずバグフリーってのはどうかと。
いやバグは無いだろうねバグは。

ただこういうこと言うやつって
自分自身がバグだったりする例が多いんだよね。

UDPにはないTCPの特性や状態遷移図くらいはわかっているとか
ならいいけどね。それもわからずに闇雲にTCPはバグフリーというのは
どうかな?とは思う。


そうは言っても、素人はTCP使えば?ってのはあたっているが。
0377デフォルトの名無しさんNGNG
>>376
で、何が言いたい?
0378デフォルトの名無しさんNGNG
>>377
376ではないが
分からないのか?
0379デフォルトの名無しさんNGNG
>>378
わからないな
説明してくれ
0380デフォルトの名無しさんNGNG
>>376読んで勉強しろよ。
0381376NGNG
バグかどうかわかるくらいTCPがわかっているのか?
ということだよ。
0382デフォルトの名無しさんNGNG
>>381
意味がわからない
全てのプロトコルやレイヤーを熟知していないとネットワークプログラミングを
するなという事か?
0383376NGNG
>>382
いや、知らないでもできるよ。
だから素人はTCP使えって言ってる。

ただトラブルがあったときに対処不能だろ。
素人や学生のプログラムならそれでもいいが
実際に金をもらってコード書いている立場だと、
「対処できません」っていえないけどな。
0384デフォルトの名無しさんNGNG
>>382
詭弁の一法: 意味拡大
0385デフォルトの名無しさんNGNG
>>383
で、あなたは対処できるんですか?
>>384
どこが?
0386デフォルトの名無しさんNGNG
>>368の疑問に参考になりそうな数字がWinsockFAQに出ていたような気がするんだけど
なんか今繋がらない。
確か、IOCPを使って2-3万とかだったような気がする。

で、BSD socketでも(実装に依るだろうけど)Winsockとそう極端には変わらないんじゃないかと。
違っても1/3とか3倍とかその程度じゃないかと。
それより、マルチプロセスやマルチスレッドだと
そっちのリソースの制限の方がきつそうだから
必然的にselectを使うことになって
この規模だとselectの非効率性も問題になるような。
で、互換性のない拡張に頼ることに。
0387デフォルトの名無しさんNGNG
369 は「おまいが UDP に順序保証機能や再送機能なんかをつけるより、
枯れている TCP を使った方がなんぼか信頼性の高いものがでない」という
意味で言ったことは明らかだろ。ただしこの場合、「バグフリー」という言葉は
不適切だが。

で、376 は「TCP のバグ」っていうのが気にいらなかったんだろ。「TCP のバグだ」
なんて言うやつは、大抵自分が勘違いしていることがほとんどだ、と

376 の言うことはそれはそれで正しい。でも、全然話の流れと関係ない。
このスレで「TCP にバグがある」なんて誰も言ってないじゃん。
0388デフォルトの名無しさんNGNG
> UDP に順序保証機能や再送機能
またこのネタやってんのかw
アホかお前らww
0389376NGNG
>>385
まあ、なんどかくぐったよ。

>>387
俺もバグが有るなんていっていなかったと思ったが。
まあ、話の流れも知らんで噛み付いた俺も悪いが。
0390いややね、なりすまし ◆ztMasRA.j2 NGNG
いや〜。うれしいね。何がうれしいって、
"みんな、考えてくれてる"
ってのがひしひしと伝わってくる。
思い込みかも知れんけど、うれしい。
最初は、全く相手にされへんかったけど。
(ま〜、説明が下手だったからかなぁ〜)

途中(>>369-389)、難しいそうな話が話があったけど、
半分も分からんかったかな。
分かった範囲でめっちゃ簡単にまとめると、
TCP…初心者向け。なんでかって言うと、いろんなことを
   プロトコル(下位階層?)がやってくれるから。
   いろんなことって言うのは、送ったデータ(パケット?)が
   相手にちゃんと届いてるとか、とか、とか。
   ⇒初心者向けっていうか、作りやすい、って感じかな?
UDP…玄人向け。なんでかって言うと、いろんなことを
   プロトコル(下位階層?)がやってくれないから。
   だから、独自プロトコル(順序保証機能や再送機能)みたいなの
   を考えなくちゃいけないから。
   ⇒結局、独自プロトコル(順序保証機能や再送機能)をすると、
    UDPの"軽い"っていう長所がなくなってしまうと思うけど。
って感じなんかな?
続く...。
0391デフォルトの名無しさんNGNG
順序保証機能や再送機能が不要な場合UDPで、
必要ならTCP使えばいいってだけのことだろ。
特に新しい物を作らないのであれば。
0392デフォルトの名無しさんNGNG
UDPの使用を考えるならこういう場面かな?

1.上位のプロトコル自身が要求&応答というシーケンスになっている。
(UDPの到達確認や順序保障が無くても関係なし)
例:DNS, DHCPなど

2.どうせ繰り返し送るので、抜けたって泣かない。
例:RIP, NBT

3.ブロードキャストが普通だったりする。
例:RIP, NBT

4.抜けたからって再送されてももう遅い。
例:リアルタイムストリームのビデオや音声(RTP? 自信なさげ)

くらいかな?だれか補足して。
0393デフォルトの名無しさんNGNG
5.UDP hole punching
0394いややね、なりすまし ◆ztMasRA.j2 NGNG
>>370読んだ。
これって、わざわざ探してきてくれたん?
そんなわけないか...。でも、参考になった。
ありがとう。
で、読んだのですが、も〜、何がなんだか...。
 CaseByCaseで
  UDPorTCP&サーバorクライアントがポート開く
 を組み合わせて使う。
って感じなんかな?
あかんわ、全然、解決しとらん。
そもそも、最初は、
 『なんで、クライアント側が口あけとかんと駄目なん?』
だった。で、この時点では、クライアントがTCPorUDPの
どっちの口かは問題にしてなかった。

で、クライアントのあける口がUDPであれば、
サーバ側もUDPの口あけてやって通信する。
こうすれば、サーバ側で沢山の接続を維持しなくても
よくなる。(TCPであれば、維持し続けなくてはいけないから。)
って、おもった。
続く...。
0395デフォルトの名無しさんNGNG
>>394
しばらく書き込み止めて勉強してくれ。まじで。
0396デフォルトの名無しさんNGNG
>>394
なんとゆーか、勉強熱心なのは感心なのだが、、、
君の問い掛けはネットワークの基礎知識であって、
ネットワークプログラミングとは関係無いと思うのだが。。。
0397いややね、なりすまし ◆ztMasRA.j2 NGNG
でも、>>376ですわ。
これが問題なん。
 サーバが維持する接続をなくしたい
   ↓
 クライアントが接続を維持する必要のないUDPの口を開ける
が、俺の書いた絵なんやけど、>>376で
この絵は駄目になったん。

サーバが口を開けて待ってるところへ、
クライアントが接続して、その接続を
サーバが維持(保持?)する。
ってのと、
クライアントが口を開けて待ってるとことへ、
サーバが接続して、その接続を
サーバが維持(保持?)する。
ってのは、サーバ負荷(維持(保持?)及び監視する)ということでは、
同じなのではと思ってまう。
多分、この部分がおかしい、ってか分かって
ないんやと思うんやけど、そやろ?
0398デフォルトの名無しさんNGNG
>>397
その答えはかなり前に答えが書かれてる。
人の話を聞く気が無いなら質問するな。
0399デフォルトの名無しさんNGNG
通信は糸電話みたいなもんだと思いなよ。
待ち受ける方は糸の繋がった紙コップを持って待ち構えてなきゃいけない。
繋ぐ方は自分の紙コップから延びた糸をそこに繋ぐイメージ。

サーバがポートを開けて待つのだったら、サーバは物凄く大量の紙コップを
持ってなきゃいけない。

一方、クライアントがポートを開けて待っていれば、サーバは紙コップを
1個だけ持ってて、必要な時に必要な相手の糸に繋ぐだけ。やりとりが
終わったら糸を切ればいい。
0400いややね、なりすまし ◆ztMasRA.j2 NGNG
>>395あのな、自分、もし、学校のセンセにそんな風に
いわれたら、ヘコムやろ。絶対、ヘコムわ。
あ〜、悲しいなぁ〜。そんな言い方は悲しい。マジで。

>>396そやろ、僕、勉強熱心やねん。だから、教えて欲しいの。
厨房でもなんでもいいから、知りたいねん。
センセ、教えてください。m(_ _)m
0401デフォルトの名無しさんNGNG
>>400
お前、頭悪すぎだ。どうしようもないクズだ。
0402396NGNG
お前は聞く耳を持たん厨房でみんな迷惑しとるんやから二度とここに来んな。
ネットワーク“プログラミング”の話題ができるようになったら来い。

あとなぁ、公共の場で方言使うな。同じ関西人としてめっちゃウザい。
関西人がみんなお前みたいな奴やと思われたら迷惑じゃ。
0403デフォルトの名無しさんNGNG
まあ馬鹿と天才は紙一重と言うしな
ここまでのやりとり見ると馬鹿のほうだが
0404デフォルトの名無しさんNGNG
教えて厨と勉強熱心とは違うんだけどな。
勉強熱心じゃない人間にはそれが理解できないという、
まあよくあるメタ認知の問題だね。



0405いややね、なりすまし ◆ztMasRA.j2 NGNG
>>398すんません。言われるまで気付きませんでした。
>>368,386
のやり取りのことやね。ホント、すんません。
で、それを分かりやすく説明してくだれたのが、
>>399ですね。
ホント、すんません。

ということで、疑問は全て解決しました。
はぁ〜、ホント、みなさん、すんませんでした。
で、ホント、ありがとう。

>>401そやね。そう思われても、しゃーないね。
>>368,386を見逃してる時点でアホ確定ですわ。
>>402『聞く耳もたん厨房』かぁ〜。
そやね、それもしゃーないね。
やっぱり、>>368,386を見逃して、>>397の質問する時点で
アホ確定ですね。
あと、心配せんといて。俺、関西人やないから。
>>403どう、ちょっとは、天才の方に傾いたやろか?
>>404またまた、厳しいなご指摘やな〜。お〜コワッ。
俺みたいな厨房の分かりにくい文章を読んで、考えて、意見してくれて
叩いてくれて、ホント、みなさん、ありがとう。
相手してもらってうれしかったわぁ〜。
ほな、まいどさ〜ん。
0406デフォルトの名無しさんNGNG
かまってちゃんキタ━━━━(゚∀゚)━━━━ !!!!!
0407デフォルトの名無しさんNGNG
保守
0408デフォルトの名無しさんNGNG
さすがネットワークプログラミングスレ
電波さんも一味違うな
0409デフォルトの名無しさんNGNG
マジネタにはスルーで電波で盛り上がりか。

2chらしいな
0410デフォルトの名無しさんNGNG
電波は文章が長いから他が埋もれる…
0411デフォルトの名無しさんNGNG
>>405
あ、やべ。初めてウザさを感じた。
関西人じゃないってとこに。
0412デフォルトの名無しさんNGNG
あの不自然な関西弁見たら、関西人じゃない事まるわかりだと思うぞ。
0413デフォルトの名無しさんNGNG
>>408-412
うわ〜、[いややね、なりすまし ◆ztMasRA.j2]のこと、
まだ引きづってるやつがいるよ。
サムッ!!
コワッ!!
ここは、そんなこと書き込むところじゃないよ?
大丈夫?
特に君、>>409君のことだよ。
そんなこと言ってあんたが、一番盛り上がってますから〜
残念、電波より無知なのはあんたですから〜 切り!!
m9(^Д^)プギャーーーッ
0414デフォルトの名無しさんNGNG
引き鶴?
0415デフォルトの名無しさんNGNG
引き鶴
0416デフォルトの名無しさんNGNG
非木津留
0417デフォルトの名無しさんNGNG
非木留奈
0418デフォルトの名無しさんNGNG
ぴきとぅる
0419デフォルトの名無しさんNGNG
七尾奈留
0420デフォルトの名無しさんNGNG
質問です。
今一般的に使われてるDSLなどの環境でTCP接続をした場合
その通信速度は、AGPなどPCのバス速度の何分の一くらいまで下がっちゃうんでしょうか?
というのも、VNCのようなソフトの場合、15fpsも出ませんよね?
純粋に画像データだけだと、何fpsくらいでるのかな?
0421デフォルトの名無しさんNGNG
>>420
詳しく
0422デフォルトの名無しさんNGNG
>>421
具体的に書きますと
とあるグラフィックソフトを開発してまして…
複数のリモートComputerで分散処理して、そのレンダリング結果を出力するようなのを作りたいのです。
ただ、出来るだけリアルタイムで処理したいので、仮想グラフィックドライバを作りグラフィックボードと同じ感覚で扱えるようにしたいのです。
その時に、帰ってくるデータの転送速度はAGPと比べてどの程度ボトルネックが発生してしまうのかな? と
0423デフォルトの名無しさんNGNG
おまいはPCIやAGP(x1)の速度も調べる気はないのかね
0424デフォルトの名無しさんNGNG
>>422
今一般的に利用されてるAGP 4Xが1066MB/s(上下対称)
一般で利用されてるADSL回線8Mが実質3MB/sほど…(上下非対称)

…無理。
0425デフォルトの名無しさんNGNG
>>422
1280x1024x24bit色の非圧縮のBMPを作成すると
3.75 MB (3,932,214 バイト)
こんな感じ。
つまり、4MB/sの能力を持つ回線がベストの結果を返し続けたとしても
1秒間に1回しか画面の書き換えが出来ない。
実際には計算データをリモートコンピュータに転送しなければならないので、そちらに帯域を引きずられるからもっと酷い。
0426デフォルトの名無しさんNGNG
>>425
zlib圧縮をかけるともっと圧縮できるがね。
まぁ、現状のVNCを見ればどのような状況になるかはわかると思う。
0427デフォルトの名無しさんNGNG
VNCは画像の一部を更新しているのでは?
というかリアルタイムのレンダリングをPCのCPUでするのもそもそもおかしい。
分散環境がベクトル機とかなら可能かもしれんが。
まぁ、LANでも無理でしょう。
0428デフォルトの名無しさんNGNG
おまいら根本的な発想が間違ってる。
レンダリングした画像は圧縮していいんだろ?
だったらライブカメラでいいんだよ!!
実績がいくらでもあるじゃねーか。
mmorpgもこの方式でやってたとこあるしな。
0429デフォルトの名無しさんNGNG
>>422
> ただ、出来るだけリアルタイムで処理したいので、
> 仮想グラフィックドライバを作りグラフィックボードと同じ感覚で扱えるようにしたいのです。

描画形の独自プロトコロの方がいいと思ふ。
0430デフォルトの名無しさんNGNG
すいません。最近セキュリティ関連のを学び始めたのですが
認証(電子署名)って意味無くないですか?
「平文」と、平文を秘密鍵で暗号化した「暗号文」を送信して、
さらに「公開鍵」を送信して
で、相手側は、暗号文を送られてきた公開鍵で複号して、その復号文と
平文を照合して正当性を確認するみたいですが、「平文」が改竄されただけ
なら確かに改竄に気付きますが、「平文」「暗号文」「公開鍵」の3つともが
改竄されてしまったら何の意味もないように思えるのですが・・・

例えば、平文を「偽の文」に改竄し、暗号文をその偽の文を偽公開鍵で
暗号化したものに改竄し、公開鍵をその偽公開鍵に改竄してしまえば
何も見破られる事なく改竄できるように思えるのですが・・・
勘違いしてる点があったら教えてください。
0431デフォルトの名無しさんNGNG
すいません。最近セキュリティ関連のを学び始めたのですが
認証(電子署名)って意味無くないですか?
「平文」と、その平文を秘密鍵で暗号化した「暗号文」を送信して、
さらに「公開鍵」を送信して
で、相手側は、暗号文を送られてきた公開鍵で複号して、その復号文と
平文を照合して正当性を確認するみたいですが、「平文」が改竄されただけ
なら確かに改竄に気付きますが、「平文」「暗号文」「公開鍵」の3つともが
改竄されてしまったら何の意味もないように思えるのですが・・・

例えば、平文を「偽の文」に改竄し、暗号文をその偽の文を偽秘密鍵で
暗号化したものに改竄し、公開鍵をその偽秘密鍵と対の偽公開鍵に
改竄してしまえば 何も見破られる事なく改竄できるように思えるのですが・・・
勘違いしてる点があったら教えてください。
0432デフォルトの名無しさんNGNG
sslで公開鍵というと、ブラウザに埋め込まれているデータだろ。スパイウェアでも使わないと
0433デフォルトの名無しさんNGNG
( ゚д゚)ポカーン
0434デフォルトの名無しさんNGNG
電子認証局
0435デフォルトの名無しさんNGNG
>>431
セキュリティ
http://pc5.2ch.net/sec/
に行け。認証と秘匿と鍵配布を区別しながら考えろ。
0436デフォルトの名無しさんNGNG
>>431
それに対処するために公開鍵を権威ある認定サイト(例えばverisign)によって署名しとく。
0437デフォルトの名無しさんNGNG
PGPだと、
本物の公開鍵を登録しておく場所があって、
ttp://pgp.nic.ad.jp/pgp/pks-commands-j.html

そこにあるものと、照合して一致して、かつ、
えらい人が信用している鍵は信用できる、
ということになってる。
0438 ◆eomKYEndr6 NGNG
ちょっとテスト
0439デフォルトの名無しさんNGNG
すいません。最近セキュリティ関連のを学び始めたのですが
認証(電子署名)って意味無くないですか?
「平文」と、その平文を秘密鍵で暗号化した「暗号文」を送信して、
さらに「公開鍵」を送信して
で、相手側は、暗号文を送られてきた公開鍵で複号して、その復号文と
平文を照合して正当性を確認するみたいですが、「平文」が改竄されただけ
なら確かに改竄に気付きますが、「平文」「暗号文」「公開鍵」の3つともが
改竄されてしまったら何の意味もないように思えるのですが・・・

例えば、平文を「偽の文」に改竄し、暗号文をその偽の文を偽秘密鍵で
暗号化したものに改竄し、公開鍵をその偽秘密鍵と対の偽公開鍵に
改竄してしまえば 何も見破られる事なく改竄できるように思えるのですが・・・
勘違いしてる点があったら教えてください。
0440デフォルトの名無しさんNGNG
sslで公開鍵というと、プラウザに埋め込まれているデータだろ。スバイウェアでも使わないと
0441デフォルトの名無しさんNGNG
>>439
=======板違い=======
0442デフォルトの名無しさんNGNG
>>440
板違いのコピペに答えてんじゃねーよ、この能無しプログラマが
0443デフォルトの名無しさんNGNG
( ゚д゚)ポカーン
0444デフォルトの名無しさんNGNG
>>439
釣りか ? 激しくウザイんだけどな。
まあ、一応マジレスしとく。

> で、相手側は、暗号文を送られてきた公開鍵で複号して、その復号文と
> 平文を照合して正当性を確認するみたいですが、

そもそも、改竄防止なら平文と MD5 とかのハッシュ値を送っておけばいい。
(受け側で MD5 計算して合ってれば改竄はないと思われる。)

> 例えば、平文を「偽の文」に改竄し、暗号文をその偽の文を偽秘密鍵で
> 暗号化したものに改竄し、公開鍵をその偽秘密鍵と対の偽公開鍵に
> 改竄してしまえば 何も見破られる事なく改竄できるように思えるのですが・・・

当たり前だ。
だから、公開鍵をどこから入手するかが問題となる。
ビジネスで使うなら VeriSign とかの認証局を使うのが普通だろうし、個人なら自分のホームページで直接公開するとかして公開鍵自体の改竄は防止しないと意味がない。
0445デフォルトの名無しさんNGNG
>>444
釣りか?激しく死ね。
0446デフォルトの名無しさんNGNG
( ゚д゚)ポカーン
0447デフォルトの名無しさんNGNG
(ノ゚A゚)ノ
0448デフォルトの名無しさんNGNG
あらえっさっさ
0449デフォルトの名無しさんNGNG
>>446-448
まぁまぁ、冬休みですから。
0450デフォルトの名無しさんNGNG
来年もいい年でありますように。(^人^)パンパン。今のうちに、来年の占いでもしておこっと。
レスの一の位の数字で占う。
1:1部上場企業に就職内定    2:かわいい彼女ゲッツ!
3:ロト6の3等以上が当選     4:両親とも来年も健康
5:弟が第一志望の大学合格!  6:ダイエット成功!5キロ痩せれる!
7:来年(度)首席で卒業だぜ!   8:RX8が欲しい!来年こそ買える!
9:就職失敗。ヤクザの世界へ   0:登校中の駅のホームで誰かに線路に突き落とされ、ひき殺される。
0451デフォルトの名無しさんNGNG
>>450
ご愁傷様・・・。
気をつけろよ。
0452まあ、無理だろうけどな。NGNG
>>445-449
あらあら、また言うだけ厨房のお出ましか...。

今年は、こういうやつが一人でも少なくなることを祈るよ。
0453デフォルトの名無しさんNGNG
「外してる」というか「空気が読めない」というか。
人間関係で苦労してそうだね。ご愁傷さま。
0454デフォルトの名無しさんNGNG
あっちゃー、新年早々「こういうやつ」がまた出てきたよ。

まあ、「外してる」とか「空気読めない」とかしか書けないんだったら、出てこなきゃいいのにね。

> 人間関係で苦労してそうだね。ご愁傷さま。

うん、君にはそういう苦労はないだろうね。
君の周りの人は知らんけどさ。(藁
0455デフォルトの名無しさんNGNG
じゃあ、周りを見ることが全然出来ない、協調性皆無のバカに教えてやろうか。

>>431-432で、質問があった。
連投でうざいものの、>>432-437でちゃんとしたレスがある。

それを読まなかったのか、ただコピペしたのか、
再び>>439に同じ文章が書き込まれた。
今度は誰も相手にしなかった。>>440もコピペだ。

だが、唯一人、そんな状況を無視して
偉そうに、既に書き込まれているのと大差ない内容を書き込んだ奴が居る。

「マルチやコピペに回答するバカ」を笑っているだけさ。
0456デフォルトの名無しさんNGNG
スレが汚れるから消えろテイノウども
0457デフォルトの名無しさんNGNG
どっちもどっちだ。
コピペにわざわざ回答するのも間抜けではあるが、
それを突っ込む奴も、スレ汚しになるような煽りレス返さなくても良い。
「コピペにマジレス」位のわかりやすい方法でレスするのがベストだ。
0458デフォルトの名無しさんNGNG
>>455
新年早々熱いね。(藁
0459デフォルトの名無しさんNGNG
まだやってんのか。
0460デフォルトの名無しさんNGNG
------------------------折り目------------------------
0461デフォルトの名無しさんNGNG
-・-・-・-・-・-・-・-・-・-・-・-・-・山折り・-・-・-・-・-・-・-・-・-・-・-・-・-
0462デフォルトの名無しさんNGNG
それ山折りだっけ?
0463デフォルトの名無しさんNGNG
ソケットでFTP接続を試みています。
サーバーへのログインは簡単にできたのですが、LISTコマンドによるファイル一覧取得ができません。

ためしにtelnetで以下のように打ち込んでいくと…

> open サーバー名 21
< 220 以下略
> USER ユーザ名
< 331 Password required for ユーザ名.
> PASS パスワード
< 230 User ユーザ名 logged in.
> TYPE A
< 200 Type set to A.
> PASV
< 227 Entering Passive Mode
> LIST /

ここで何も表示されません。
FTPサーバーはProFTPDで、LISTコマンドには対応しています。
どういった問題が考えられますでしょうか?
0464デフォルトの名無しさんNGNG
PORTコマンドを使っていないから。
ftpコマンドのデバッグオプションを使ってみろ。
0465デフォルトの名無しさんNGNG
あっ、ごめん。パッシブモードか…。
 EPSV
 EPSV ALL
 じゃ、だめ?
0466デフォルトの名無しさんNGNG
ftp -dでの出力を真似して、
> PORT 192,168,**,*,****,*
< 200 PORT command successful.
> NLST
とやってみたけど、やはりここで応答がなくなります。
0467デフォルトの名無しさんNGNG
> EPSV
< 500 not understood.
といわれました。
0468デフォルトの名無しさんNGNG
あぁ、すまん。
もうひとつ端末を開いて、新しくできたソケットにtelnetでアクセスして。
それを読み取ったらOK
0469デフォルトの名無しさんNGNG
例を示すと、
>>> telnet ftp.netbsd.org 21
Trying 2001:4f8:4:7:2e0:81ff:fe21:6563...
Connected to ftp.netbsd.org.
Escape character is '^]'.
220 ftp.NetBSD.org FTP server (NetBSD-ftpd 20040809) ready.
USER ftp ←打ち込み
331 Guest login ok, type your name as password.
PASS  ←適当なメールアドレスまたは空白。
230-
    The NetBSD Project FTP Server located in Redwood City, CA, USA
(略)
EPSV ←打ち込み
229 Entering Extended Passive Mode (|||62061|) ←この数字

ってなったら、telnet ftp.netbsd.org 62061とする。
でLISTコマンド。

PASVを使うときは
PASV
227 Entering Passive Mode (204,152,190,13,236,3)
ってなったら、前の4つがIP番号、後ろの二つがポート番号。
ポート番号は236 x 256 + 3 = 60419のように算出する。
で、telnet 204.152.190.13 60419でLISTの内容を読み取る。
0470デフォルトの名無しさんNGNG
なるほど!見事にできました!ありがとうございます。
今までPASVモードの意味がわからず適当にやってましたが、なんとなく意味がわかりました。
もう一個ソケットを作ってそちらで受信するという感じですかね。
0471デフォルトの名無しさんNGNG
>>470
いえ、FTPは常に別ソケットでデータを転送しますが、伝統的にはクライアント側が
ポートを開き、サーバー側からそのポートに接続してました。 しかしこれはファイアーウォール、
およびNATと相性が悪いのでPASV(受動)モードが作られ、このモードでは2つ目のポートを
サーバー側が開き、クライアント側からそこに接続してデータを受け取るようになったのです。
0472デフォルトの名無しさんNGNG
なんでFTPってそんな変な方式にしたんだろうな。
プロトコル毎に無理やり変化をつけて嫌がらせしてるとしか思えん。
0473デフォルトの名無しさんNGNG
嫌・が・ら・せ
0474デフォルトの名無しさんNGNG
制御用ポートを別に持つことによって、ファイル転送途中でもごにょごにょできるように
するため。
0475デフォルトの名無しさんNGNG
>>474
何をごにょごにょできるの?
0476デフォルトの名無しさんNGNG
通常FTPは同時接続人数を指定する。
だから、同時に接続出来るコネクション数で縛ろうとする。
しかし、これをすると、接続したユーザーはダウンロード中に別のファイルをダウンロードしたり、ディレクトリを移動出来なくなる。
それを防ぐ為?
0477デフォルトの名無しさんNGNG
FFFTPなどでやってみると分かるが、大きなファイルをダウンロード中でも
ディレクトリを自由に移動できたりする。これは制御用ポートを別に持っているため。
0478デフォルトの名無しさんNGNG
すつもんれす。
ny使っててルータに穴が開けれないときとかに、
「Port0設定」ってするでしょ。
で、それはいいんだけど、ルータに穴が開けれない状態で、
「Port0設定」しなかったら、警告がでるじゃない。
あれって、どうやってnyは分かってるの?
何をもって、「このPCは外部から接続を許していませんよ」って
判断してるの?
ね〜、どうやって?
0479デフォルトの名無しさんNGNG
実際に外から試すんじゃねーの。
ここはネットワークの仕組みじゃなくネットワークプログラミングのスレなんで
自分で作らない人はダウソ板で訊いてよね。
0480デフォルトの名無しさんNGNG

知的障害者にレスしてんじゃんえよ
http://pc5.2ch.net/test/read.cgi/prog/1104851304/l50
0481デフォルトの名無しさんNGNG
お前だろうが
0482デフォルトの名無しさんNGNG
とりあえず
割れてる奴には教えない、でFA?
0483デフォルトの名無しさんNGNG
ここはプログラマ板だから、ソフトウェアを作る側の集まりだ。
そこで割れ推奨ソフトの話題出されたら、どうなるかわかるだろ?

0484デフォルトの名無しさんNGNG
どうなるの?
0485こうなるNGNG
↓次の方どーぞ。
0486デフォルトの名無しさんNGNG
ど杉尾エアpんtjリオゑpちぇ羽
0487デフォルトの名無しさんNGNG
質問です。
TCPはコネクション維持してる間、接続先に絶えずパケットを投げてると聞いたのですが
それなら、ルーターのセッションが切れることは無いと思うんですが、ルーターにはセッション維持時間ってありますよね?
あれは、同じIPアドレスへのパケット送信は一定時間を過ぎると出来なくする仕組みなんですか?
それなら、データのsend()でデータを送った場合も途中で切れることになってしまうと思うんですが・・・・

0488デフォルトの名無しさんNGNG
>>487
> TCPはコネクション維持してる間、接続先に絶えずパケットを投げてると聞いたのですが

それデマ。
0489デフォルトの名無しさんNGNG
>>488
デマというより、SO_KEEPALIVE の話に尾ひれがついただけのような気が。

SO_KEEPALIVE をつけると定期的にパケットを投げてTCPコネクションの
確認を行う、という機能は確かにある。
しかし「絶えず」とは言いがたい。デフォルトで2時間間隔。
ttp://www.kt.rim.or.jp/~ksk/sock-faq/unix-socket-faq-ja-2.html#peer_death

つまり通常あまり使われるものではないし、少なくとも >>487 の話においては無関係。
なので、>>487 の心配は杞憂。

0490デフォルトの名無しさんNGNG
絶えずパケット投げてるとkeep aliveは全然違うだろ……。
0491デフォルトの名無しさんNGNG
「絶えずパケット投げる」とか定義できるの?
0492デフォルトの名無しさんNGNG
ttcp
0493デフォルトの名無しさんNGNG
>>489
うちの鯖製品はクライアントと長期に渡ってSSL接続をするのだがデータは10分に一回ぐらいしか
流れないのでNAT接続を切られないためにtcp keepaliveを1分ぐらいに設定している。
0494デフォルトの名無しさんNGNG
>>2
> WinSock2.0プログラミング
> http://www.amazon.co.jp/exec/obidos/ASIN/4797306882/
これって、在庫切れだったみたいだけど、

WinSock2プログラミング 改訂第2版―Windows Sockets APIによるネットワークプログラミングのすべて
http://www.amazon.co.jp/exec/obidos/ASIN/4797330449/

が店頭に出ていたよ。
0495デフォルトの名無しさんNGNG
テキストファイルをアスキーモードでなくバイナリモードのFTPで転送することによる弊害があれば教えてください。
0496デフォルトの名無しさんNGNG
UNIX用のテキストファイルをWindowsに持ってきたときにメモ帳で読みにくい
0497デフォルトの名無しさんNGNG
>>496
unix2dosで変換汁
0498デフォルトの名無しさんNGNG
>>495
何か弊害があるんじゃないかと心配になる。
0499デフォルトの名無しさんNGNG
>>496
ワードパッドやEclipseで開くけば大丈夫。
0500デフォルトの名無しさんNGNG
だれも>>440には突っ込まないのか?
0501デフォルトの名無しさんNGNG
"プラウザ"について?
0502デフォルトの名無しさんNGNG
http://www.google.co.jp/search?hl=ja&inlang=ja&q=%E3%83%97%E3%83%A9%E3%82%A6%E3%82%B6&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=
0503デフォルトの名無しさんNGNG
むしろプラウガの親戚と言いきってしまえ
0504デフォルトの名無しさんNGNG
UNIXネットワークプログラミング〈Vol.1〉ネットワークAPI:ソケットとXTIを読んでいるのですが
この本では getaddrinfo に渡す第3引数 addrinfo のメンバ ai_family に AF_UNSPEC を代入しているのですが
コンパイルが通らないし man では PF_UNSPEC と書いてあるのですがこれは間違いですか?
何か歴史的な理由があるのですか?教えてください
0505デフォルトの名無しさんNGNG
AF_が正しい。

元々protocol familyとaddress familyは
区別する必然性があるかどうか分からない利用が多かった。
今も混同しているケースが多い。
getaddrinfo(3)ではサービスも指定して引くこと、
TCP/IPの階層構造とIPv4/IPv6の関係から、
この混乱に拍車がかかった感がある。

http://www.opengroup.org/onlinepubs/009695399/functions/getaddrinfo.html
http://www.faqs.org/rfcs/rfc3493.html
0506デフォルトの名無しさんNGNG
ttp://www.kt.rim.or.jp/~ksk/wskfaq-ja/articles/lame-list.html
ここの間違いリスト20.の以下の記述、

>ブロック型ソケット、非ブロック型ソケットのどちらを使っているかに関わらず、
>send() または recv() の成功時に、その返却値と期待している値を比較するべきです。

を読んで以来、ブロッキングモードの場合でも、戻り値を見て、指定分より少なければ
再送信というコードを組んでいたが、.NETのSocket.Sendメソッドのドキュメントを読むと、

>コネクション指向のプロトコルを使用している場合、 Send は、バッファ内のすべてのバイトが
>送信されるまでブロックします。非ブロッキングモードでは、 Send が送信したバイト数が
>バッファ内のバイト数より小さくても、このメソッドは正常に完了します。

と書いてあった。試しに20MBのデータをブロッキングモードで一気に送ってみたら、時間は
掛かったが確かに20MBしっかり送信して戻り値が返ってきた。

気になってWinsock2のsendのドキュメントを読んでみると、

>If no buffer space is available within the transport system to hold the data
> to be transmitted, send will block unless the socket has been placed in
>nonblocking mode. On nonblocking stream oriented sockets, the number of
>bytes written can be between 1 and the requested length,

と書いてあり、バッファサイズがないときはブロックすると書いてはあるが、全てのバイトが
送信されるまでブロックされるか否かまでは言及していない。
.NETになってから仕様が変わったと考えていいのだろうか。
0507デフォルトの名無しさんNGNG
実装の挙動が変わるのと仕様が変わるのとは別だと思うぞ。
明記されない限り後のバージョンでもそのままとは限らない。
0508デフォルトの名無しさんNGNG
失敬。なので、.NETでは仕様が変わったと考えてもいいかも知れない。
ただ日本語版を根拠にすると後で困ることが往々にしてあるので
英語版の記述を確認しておく方がいいんじゃないだろうか。
0509デフォルトの名無しさんNGNG
確かに。英語版の記述をすぐに確認してみたところ、やはり同様のことが
書かれていました。
>If you are using a connection-oriented protocol,
> Send will block until all of the bytes in the buffer are sent.
> In nonblocking mode, Send may complete successfully even if
> it sends less than the number of bytes in the buffer.
上記のような記述がありました。今少々余裕があるのでもう少し調べてみようと思います。
0510デフォルトの名無しさんNGNG
>>506
Javaのjava.io.OutputStreamみたいに、戻り値がvoidなら
自然な挙動だよね。もし、その仕様なくせにintを返してたら、
BSDソケットとの中途半端な違いで激しく紛らわしいと思う。
0511デフォルトの名無しさんNGNG
sghr
0512デフォルトの名無しさんNGNG
.NETのSocket.sendが指定バイト送り出すまでWin32のsendを
繰り返し呼び出してるだけだろ。
0513デフォルトの名無しさんNGNG
.NETのSocketはwinsockの単純なwrapperではないということじゃねえの?
0514デフォルトの名無しさんNGNG
>>474
あと、クライアント A から サーバー B から サーバー C への転送とかも指示できるようにするためでもある。
0515デフォルトの名無しさんNGNG
>>506
Windows2000では、ブロッキングソケットは送信完了までブロックする。
ただし、送信バッファが足りない場合、即時に-1を返す。
その場合GetLastErrorは0を返す。
一回のsend呼び出しで失敗しないサイズの上限は、
メインメモリの半分程度。
0516デフォルトの名無しさんNGNG
>>515
それって変な仕様だよなぁ。

send()って、バッファ分全部送らなくていいはずだから、
一回送れるだけ送って、そのサイズを返せばいいのに。

既存のお行儀のいいコードは、それを必要分繰り返す
作りになってるだろうし。初心者はFAQ嫁、と。
0517デフォルトの名無しさんNGNG
> それって変な仕様だよなぁ。

BSD socket的に?
なんか言いがかりっぽい気が・・・
0518デフォルトの名無しさんNGNG
>>516
仕様じゃなく、振る舞いね。
-1返しといてGetLastErrorが0返すのは変。
ブロッキングソケットに対するsendが全データを送信するのは普通。
ただ、仕様にそう明記されてるわけじゃないから、問題がややこしくなってる。
0519not 516NGNG
>>517
バッファが足りない&どうしても送りたい時は、
小さくして再送するしかないわけだから、
遅れるだけ送ってくれてもいいような気がするわな。

それだと困るのは「バッファが足りないなら送って欲しくない時」って
ちょっと変った時だけだし。ただ、

> 一回のsend呼び出しで失敗しないサイズの上限は、
> メインメモリの半分程度。

これが確実ならどうでもいいと思うけど、仕様に書いてあるのかな?

仕様じゃないなら、再送ロジックを組まなきゃいけないのはBSDソケットと同じ。
けど、カーネル呼び出しを一回損している。
0520not 516NGNG
>>518
> ただ、仕様にそう明記されてるわけじゃないから、問題がややこしくなってる。

明記されてないのか。じゃあ再送ロジック書く必要があって、
BSDソケットとは別のやり方なんだ。
俺はBSDソケットの仕様の方が素直だと思う。

送信バッファが足りないって理由じゃあきらめない、
のであれば、それはそれで一つの見識(やり方)だと思うけど。
0521506NGNG
早速実験してみました。
言語 C#(.NET Framework 1.1)
マシン セレロン1GHz、メモリ128M

仕様
 クライアント 指定されたバイト数を一気に送信(一回のsend)して終了。
 サーバー  ひたすらrecv()する。データは読み捨て。

以上の条件で実験したところ、63メガバイトまでなら一気に送信できましたが、
64メガバイトになったらエラーが起こりました。ちょうど搭載メモリの半分です。

エラーの詳細
 例外SocketExceptionの発生。
 SocketException.ErrorCodeは、10055でした。

MSDNの、
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winsock/winsock/windows_sockets_error_codes_2.asp
で、エラーコード10055を調べたところ、WSAENOBUFSというエラーでした。
0522506NGNG
環境、Windows2000 Professionalで、SPの詳細は分かりませんが常にパッチ当ててるので最新です。
0523デフォルトの名無しさんNGNG
>>519
> これが確実ならどうでもいいと思うけど、仕様に書いてあるのかな?

振る舞いでつ


>>520
WinSockはBSDのコードをベースにしてるから、
BSD Socketと同じ振る舞いをする前提で書くのが普通。
0524デフォルトの名無しさんNGNG
送信バッファって仕様に現れるものなの?
BSD SocketのAPI的にはバッファの存在は仮定してない気がするんですが...

> BSD Socketと同じ振る舞いをする

振る舞いって誰が決めてるんですか?
0525not 516NGNG
>>523
> WinSockはBSDのコードをベースにしてるから、

うそだよ。ベースにしているのは仕様。
0526516NGNG
>>518

Undocumentedなら、振る舞いだね。
Winsockは詳しくないのでどうでもいいです。

send()がバッファ分全部送るまで復帰しないとなると、
送信キューと専用スレッドみたいなのは作れなくない?

送信データ作成 -> 送信スレッドにエンキュー

送信データ受信 -> 送信可能ソケットなら送信

みたいな感じで、送信スレッドを共有する奴。
こんな作りのアプリがあるのかは知らないけどな。
0527デフォルトの名無しさんNGNG
>>526
スレッド間で共有できる領域を作る。
送信スレッドはsendする前に自前でバッファ持っといて共有領域からコピー、その後sendする。
0528デフォルトの名無しさんNGNG
「振る舞い」を「仕様外の振る舞い」って意味で使うのは変った用法だね。
0529デフォルトの名無しさんNGNG
s/変った/変わった/
0530デフォルトの名無しさんNGNG
>>524
BSD SocketなんだからおとなしくBSDの流儀に従うのが筋。
0531デフォルトの名無しさんNGNG
>>518
> -1返しといてGetLastErrorが0返すのは変。

GetLastError ではなく WSAGetLastError を使え、とかそういう話じゃなくて?

>>515
> 一回のsend呼び出しで失敗しないサイズの上限は、
> メインメモリの半分程度。

それは、たまたま手元の実験結果ではそうだった、という以上の意味は何も無
いと思うけど。もっとさまざまな外部要因が関係しそうだし、勝手に一般化す
るのは危険だよ。たとえば window size とか他のソケットやカーネルのメモ
リ利用状況とかにも影響するんじゃない?

↓直接は関係ないと思うけどこんな要因もあるよ、という話で
http://www.kt.rim.or.jp/~ksk/wskfaq-ja/advanced.html#maxsockets

0532デフォルトの名無しさんNGNG
.NETでの話なんですが、作ってるサーバに接続してくるクライアントが
せいぜい4〜5件程度で、selectするのが面倒なんで各クライアントのSocket
クラスのPollをそれぞれ呼び出してるんですけど行儀悪いんですかね?
0533デフォルトの名無しさんNGNG
>せいぜい4〜5件程度
全く全然これっぽっちも問題ない
0534デフォルトの名無しさんNGNG
それどころかselectがなくてpollだけっていうOS無かったっけ?
SystemV系のUnixだったか?
0535デフォルトの名無しさんNGNG
>>526
non-blocking socket使う。
0536デフォルトの名無しさんNGNG
>>531
> それは、たまたま手元の実験結果ではそうだった、という以上の意味は何も無
> いと思うけど。

重要なのはそこじゃない。
もしそれが仕様だとしても、思い通りの振る舞いは期待できない。
OSのメモリ割り当て処理をロックできるんなら話は別だけど。

重要なのは、ブロッキングソケットのsendがデータを送信してないのに
戻ってくることがあるってこと。
0537デフォルトの名無しさんNGNG
あれこれ見てみたけど、Winsockで巨大バッファを send したい場合には
SO_SNDBUF で 0 指定しとくのが良さそうですね・・・
0538デフォルトの名無しさんNGNG
TCP使った.NETのサーバのパフォーマンスってどんなもんなんだろう・・・
同一スペックのマシンでLinux+GCC, Java, Win32+C++, .NET+C#でベンチ取った結果ってないのかな。
0539526NGNG
>>527

んにゃ。

送信待ち行列中にあるソケットを送信側の状態でポーリングして、
送信可能になったデータを適宜送信するスレッドなんで、ひとつでも
送信がブロックされると困るって状態さ。

全部送りきれなかったら再度キューに突っ込んで、送信可能状態に
なるまで待つって感じで。

そっか。他の多重化手法を使えってことか。。
0540デフォルトの名無しさんNGNG
>>532
何だっていいと思うけど、.NETのSelect()、簡単じゃない?
0541デフォルトの名無しさんNGNG
>>534
それはpoll違い。

>>532の言うPoll()は、(大文字です)
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemnetsocketssocketclasspolltopic.asp

Select()は、
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemnetsocketssocketclassselecttopic.asp
0542デフォルトの名無しさんNGNG
例のUDPで10054のエラーが発生すると
以後、そのソケットは機能しなくなる
win2KのバグですがXPでも発生します?
そもそもUDPで10054自体納得できないですが・・・
ググって見るとオプションで回避できるという事ですが
具体的な方法を探せません、どなたか教えていただけないでしょうか?
0543デフォルトの名無しさんNGNG
>>542
10054エラー自体は発生を確認してます。その後つかえなくなる、ってことは経験していない、
というか少なくともエラー発生後も同じソケットで他のアドレスへは送れていました。

回避方法は
_socket.IOControl( SIO_UDP_CONNRESET, new byte [] { 0 }, new byte [] {} ); // C#ね
てな感じ。これによる不都合も特に無いようです。
0544デフォルトの名無しさんNGNG
>>543
ありがとうございました
正常にタイムアウトがでるようになりました
実装する以前はタイムアウトまでいかずにかたまっていました
0545デフォルトの名無しさんNGNG
winsockを使ってUDPのクライアントを作ってます。
同じPCでUDPクライアントを2個動かし
サーバの同じポートへ接続して送受信した場合
問題はあるのでしょうか?
同じポートへ接続しても良いものなんですか?
0546デフォルトの名無しさんNGNG
送信は出来るだろうけど、受信するポートはどうするわけ?
0547デフォルトの名無しさんNGNG
いいよ
0548546NGNG
クライアント側の受信するポートは、違うと思います。
ソケット作るときポートを指定していないので。

ありがとうございます。
問題がないなら、それで作ろうと思います。
0549デフォルトの名無しさんNGNG
>>545
TCP/UDPのパケットの行き先(ソッケト)は、
両側のIPアドレスとポート番号の四つ組で識別される。
行き先のIPアドレスとポート番号だけ(二つ組)じゃない。

これTCP/IPの常識。
0550デフォルトの名無しさんNGNG
パシャッ    パシャッ
   パシャッ
      ∧_∧ パシャッ        ソッケト
パシャッ (   )】Σ
.     /  /┘   パシャッ
    ノ ̄ゝ
0551デフォルトの名無しさんNGNG
UDPは四つ組じゃないし。
まあ両方向の「ソッケト」を考えるとそう言えないこともないけど。
0552デフォルトの名無しさんNGNG
なんと、UDPにはPORTが無いとでも仰るのか。
0553デフォルトの名無しさんNGNG
初心者も読むスレなんだから、
ちゃんと具体的に何が間違ってるのか指摘しようよ。
漏れには全くわからないけどな(w
0554デフォルトの名無しさんNGNG
>>552
コネクションがないから、
「コネクションの識別を四つ組でする」と言うことに意味がない。

ディストネーションだけで運ぶ先が分かる。
データグラム通信というのはそういうもの。

TCPの場合は、四つ組で接続を識別するので、
片側だけ注目すれば、同じIPアドレス、ポート番号の組みを持っていても、
別の接続と言うことがある。接続が別であるという事は、
その端点であるソケットも当然別のものになる。

これはUDPには通用しない。

FirewallではUDPでも両方を見ているので、(例えばdomainは通すなど)
この点勘違いしている人がたまにいる。
0555545NGNG
>>554
となると、UDPで私が言ったことは出来るけど好ましくない。
と言うことですよね?

もう作ちゃった…
どう運用するか考えます。
0556デフォルトの名無しさんNGNG
んなこたあない。
0557デフォルトの名無しさんNGNG
>>555
サーバ側 一対多 クライアントs側
の時に、サーバ側は、四つ組を想定すれば、相手を識別できる。
通常、何も考えずに、ソースIPアドレス/ソースポート番号に返すだけで住む場合が多い。

BSDソケットでは、accept/connectをUDPに使えば、
接続があるかのようにプログラミングすることができる。
0558デフォルトの名無しさんNGNG
>>554
なんで? UDP でも四つ組の識別ができるじゃん。
0559デフォルトの名無しさんNGNG
>>558
1データグラムについては「4つ組」があるけど、ソケットについては自分の側のアドレス:ポート番号の2つだけ。
1つのソケットでどこのremote end point へも送信できるし、どこからのデータグラムでも受信するよ。
0560デフォルトの名無しさんNGNG
>>558
TCPを四つ組で識別する必要があるのは、
ネットワーク層からトランスポート層に受け渡す時だよ。
UDPではこれは必要がない。

あなたがアプリで四つ組を意識するのは勝手。
0561デフォルトの名無しさんNGNG
>>559
そりゃそうだけど、

>>554
> コネクションがないから、
> 「コネクションの識別を四つ組でする」と言うことに意味がない。

ってのは違わないか? コネクションはなくても source/dst それぞれの
ipaddr・port 識別はできるわけだし。
0562デフォルトの名無しさんNGNG
>>561
「コネクションの識別をする意味がない」の「コネクション」はトランスポート層の話で、
561さんが話してる「識別」はアプリケーション層の話でしょう。

んでそもそもの発端の>>549
>TCP/UDPのパケットの行き先(ソッケト)は、
>両側のIPアドレスとポート番号の四つ組で識別される。
>行き先のIPアドレスとポート番号だけ(二つ組)じゃない。
はUDPの場合明らかな間違い。
UDPの場合行き先のIPアドレスとポート番号だけで、
先方のどのソケットに到着するかが決定される(bindしてる奴がいれば)。
0563デフォルトの名無しさんNGNG
>>555
全然OKです。 例えばDNSの名前引きなんかUDPでしょう? 同一ホスト上の
複数のアプリが同じDNS鯖にDNSの問いかけ投げてるじゃないですか。 鯖内では
ある問い合わせがどこから来たのかを覚えておいてそこに投げ返しているのです。
0564デフォルトの名無しさんNGNG
Windowsではselect使っちゃいかんのですか?
なんかWSA〜使えとか参考書に書いてあるんですが
つーかselect第一引数はダミーってなんだよ
Winsockヤバイ
0565デフォルトの名無しさんNGNG
>>562
> UDPの場合行き先のIPアドレスとポート番号だけで、
> 先方のどのソケットに到着するかが決定される(bindしてる奴がいれば)。

>>557の言うようにUDPでもaccept/connectをすればそうとは限らない。
tftpのサーバーを書くのに各クライアント毎にスレッド回してacceptした
ソケットを割り振るような実装をすればクライアントの数だけ同じポートに
バインドしたソケットが作成される。
0566デフォルトの名無しさんNGNG
>>565
それはUDPというより単にberkley socket libraryの仕様のような気が・・・
0567デフォルトの名無しさんNGNG
>>566
けど話は「ソケット」の話だからAPIの話でしょう? UDPにはソケットという概念は無い。

ちなみに確認はしてないがこれはおそらくPosixにも採用された仕様でLinuxとかでも
まず同じだと思う。 Winsockは知らん。
0568デフォルトの名無しさんNGNG
>>564
http://www.kt.rim.or.jp/~ksk/wskfaq-ja/articles/io-strategies.html
0569デフォルトの名無しさんNGNG
>>564
いいよ。俺はselectしか使ってない。
0570デフォルトの名無しさんNGNG
俺なんかselect()の匂いだけで飯が三杯食える。
0571デフォルトの名無しさんNGNG
HTTPクライアントを作成して、
GETでURLを投げるとhtmlの内容が取得できるのですが、
exeファイルなどのバイナリファイルは、
どうやって受け取ったらいいのでしょうか?
いまはこんな感じでレシーブしてます。
if (recv(s, recv_buf,sizeof(recv_buf)-1,0) > 0 ){
  strcat(recv_result,recv_buf);
}
0572デフォルトの名無しさんNGNG
そんなとこでstrcat使うなヴォケ
ちゃんとrecvの値受け取って長さ管理しろ
0573デフォルトの名無しさんNGNG
ライブラリ使わずにプロトコルの処理を自分で実装するならRFCは必読。

0574デフォルトの名無しさんNGNG
定番アプリケーション層のプロトコルなんかを
今更socketで1から作る意味はあるんでしょうか
0575デフォルトの名無しさんNGNG
↑何語ですか?
0576デフォルトの名無しさんNGNG
selectあげ
0577デフォルトの名無しさんNGNG
>>574
HTTPクライアントなんかwininet使えば数行で書けるよ
ヘッダとか見る必要すらないし
0578デフォルトの名無しさんNGNG
select キタ━(゚∀゚)━( ゚∀)━(  ゚)━(  )━(゚  )━(∀゚ )━(゚∀゚)━!!!!
0579デフォルトの名無しさんNGNG
いまサーバー作ってて、
ソケットごとにスレッド作って、
ブロッキングでWinsock呼んで処理させてるんだが、
メインスレッドから強制終了させるのはどうすればいいのかわからん。

Winsockはスレッドセーフかどうか、保証ないんで
closesocketもshutdownも呼べない。

スレッドをAbortしても、ブロッキングしてるから
いつ終了するか、わからない。

WSACancelBlockingCallはWinsock2には無い。

どうすりゃいいの?
0580デフォルトの名無しさんNGNG
>>579
Windowsで作らなければいいじゃん
0581デフォルトの名無しさんNGNG
↑バカ
0582デフォルトの名無しさんNGNG
ブロッキングなんかで組むなよ
0583デフォルトの名無しさんNGNG
Winsockはスレッドセーフだよ。
んでスレッドセーフとは関係ないけど、closesocketすればブロッキングしている
呼び出しはエラーで戻るよ。
0584デフォルトの名無しさんNGNG
>583
>Winsockはスレッドセーフだよ。
>んでスレッドセーフとは関係ないけど、closesocketすればブロッキングしている
>呼び出しはエラーで戻るよ。

http://tangentsoft.net/wskfaq/intermediate.html#threadsafety
および邦訳
http://www.kt.rim.or.jp/~ksk/wskfaq-ja/intermediate.html#threadsafety
これらの記事はどうなんですかね?

いちおう、今はclosesocketで対応しているんだけども、
心配でしょうがない。
0585デフォルトの名無しさんNGNG
強制終了という発想がヤヴァイ
病院行け
0586デフォルトの名無しさんNGNG
強制終了っていうか、サーバーの終了。

すべてのクライアントがきちんと切断するとは
限らないわけだし。
0587デフォルトの名無しさんNGNG
>>584
どうって、何がですか?
0588デフォルトの名無しさんNGNG
おいおいたのむよ
0589デフォルトの名無しさんNGNG
ttp://www.kt.rim.or.jp/~ksk/wskfaq-ja/articles/lame-list.html
注: 接続済みのストリームソケットを正しく閉じるには、
以下が必要になります。

shutdown() を how の引数を 1 に して呼び出す。
recv() が 0 もしくは何らかのエラーを返 すまでループする。
closesocket() を呼び出す。
WSACleanup() を呼び出す。
0590デフォルトの名無しさんNGNG
正規開放はいちおう知っていて、できるだけやってるんですが、
うまくない。

クライアントからなにも送られてこないと、
ずっとブロッキングしてて、
他のスレッドからsocketいじらない限り、
切断通知もできないし、
正規開放ももちろんできない。


前述の記事とか、MSDNとか読んでるんですが、
Thread Safeとはどこにもかかれてないし、
ソケットを他のスレッドから強制終了するサンプルも、見当たらない。
いいのですかね?

今は、ブロッキングしてるスレッドと別のスレッドから
ソケットを半分閉じて、recvで待って、
closeしているんだけども・・・。
Winsockがスレッドセーフ、というか、
他のスレッドからshutdownしてもいいなら全部解決なんだが。
0591デフォルトの名無しさんNGNG
>>590
「前述の記事」では thread safe であるということに肯定的な意見が書かれている。否定的なコメントは無い。
っていうかWinsockがスレッドセーフじゃない事例については漏れも知らない。
だからわざわざ「何が」ってきいたんだけど。

だから shutdown しても良いことは多分間違いないんだけど、
現在の実装でそれが効力を発揮するかどうかはわからない。
TDI が同期化を試みるかもしれないし。っていうか間違いなく試みるか。

あとクライアントAPのバグでもなければ、腐ったコネクション相手に何やってもどうせ
「FIN_WAIT2あたりにしかならん・・orz」
って結果が多いのであまりcleanな終了処理に拘ってもしようがないと思う。
0592デフォルトの名無しさんNGNG
ふむ。
やっぱり保証はないのね。
まぁみんな使っているのであるならよしとしよう。

参考になった。ありがとう。
0593デフォルトの名無しさんNGNG
NATはさむとさらにややこしいことに
0594デフォルトの名無しさんNGNG
>>586
process殺せば後はOSがreleaseしてくれる。
579はthreadのみの終了についてきいてるけどな。
0595デフォルトの名無しさんNGNG
>process殺せば
ところがリソースはうまく開放してくれるとは限らんのだ
(カーネルリソースは除く)
0596デフォルトの名無しさんNGNG
俺も以前あまり知識が無かった頃に趣味で作ったチャットサーバは何も考えずに
他スレッドからclosesocketしてたな。今はselect使ってるが。
0597デフォルトの名無しさんNGNG
WinSockでsend()したデータが実際に送信完了した事を知るにはどうすれば良いのでしょうか?
FD_WRITEでは不十分だと思っているのですが。

送信完了とはデータが相手機器に届きACKが返って来た時の事を考えています。
0598デフォルトの名無しさんNGNG
winsockに限らずそんなものはない。やりたきゃアプリケーションで返せ。
0599597NGNG
>>598

なぜ喧嘩腰?

>やりたきゃアプリケーションで返せ。

だからその方法はどうすれば良いのですか?
上の1行から想像するにsend()データを受け取る側で
全データ受け取ったという内容の送信完了パケットを返す様にして、
送信完了パケットを受け取ったらsend()完了とする、という事ですか?
0600デフォルトの名無しさんNGNG
相手の受信バッファに収まったタイミングが知りたいの?
それとも相手のアプリケーションが受け取ったタイミングが知りたいの?

あと、知ってからどうするの?
0601597NGNG
>> 600

希望として相手アプリケーションが受け取ったタイミングが良いです。
出来ない場合には相手側受信バッファに転送されたタイミングでも良いです。

>あと、知ってからどうするの?

いま、ftpみたいなデータとコントロールの2本のソケットを使用したアプリケーションを
作っているのですがデータソケットへのファイル送信が終わったらコントロールソケットに
コマンドを発行したいのです。

send(cmd1)→send(data)→send(cmd2)

という感じですが、send(data)の完了してからでないとsend(cmd2)出来ないのです。
0602デフォルトの名無しさんNGNG
「相手アプリが受け取ったこと」を知りたいなら、
アプリレイヤでやるしかないよ。

> send(data)の完了してからでないとsend(cmd2)出来ない

完了の定義次第じゃね?
0603597NGNG
ftpサーバとftpクライアントのやり取りをアナライザで調べてみました。

ftpクライアントがサーバからファイルをダウンロードする場合には、
ファイルの転送が終わってから「226 Transfer complete」コマンドが
サーバからクライアントに届きます。
と言うことはファイルをsend()するサーバ側はsend()が完了した事を
知ることが出来るという事ですよね?
598の「そんなものはない」というのは本当でしょうか?
0604597NGNG
> 「相手アプリが受け取ったこと」を知りたいなら、
>アプリレイヤでやるしかないよ。

了解しました。有り難うございます。
ちなみに、相手の受信バッファに転送された事を知る方法はあるのでしょうか?

>完了の定義次第じゃね?

すいません、調べて見たのですが「完了の定義」とは何の事でしょうか?
何かのオプションで指定するのでしょうか?
0605デフォルトの名無しさんNGNG
FTPの転送完了についてはrfc959。

>すいません、調べて見たのですが「完了の定義」とは何の事でしょうか?

601での「完了」ってどういう意味?
と書けばよかったのかなあ。
0606デフォルトの名無しさんNGNG
>なぜ喧嘩腰?

ここの多くの住人はUNIX使いです。
UNIX使いはわかんないことがあるといつも逆ギレで対処してますです。。。
言い換えると病気の発作です。
0607デフォルトの名無しさんNGNG
>>606
なっとく
0608デフォルトの名無しさんNGNG
しかし結局>>598はご名答だったわけじゃない。
逆切れって言うのは、>>599の方を言うんじゃないの?

> だからその方法はどうすれば良いのですか?

とかさ。
0609デフォルトの名無しさんNGNG
>598のあれって喧嘩腰って言うんだ?
(2ch内では)普通じゃないの?
0610デフォルトの名無しさんNGNG
俺もそう思う。
つーか、俺はそういう言い方平気でしてる。
あと、文章にならないキーワードのみの書き込みとかも。
0611デフォルトの名無しさんNGNG
>>610
まぁ別に自慢するようなことでもないがな。
0612デフォルトの名無しさんNGNG
自慢?
0613デフォルトの名無しさんNGNG
上司に言われたら平気なのに2chで言われたら耐えられないってか?
変なプライドは捨てろ。まずMSDN読め。ネットで検索しろ。
自分の手で調べた分だけ身になるんだ。
0614デフォルトの名無しさんNGNG
逆切れっぽい書き方と上司に言われる台詞とはまた微妙に違うぞ。
0615デフォルトの名無しさんNGNG
逆切れ版
winsockに限らずそんなものはない。やりたきゃアプリケーションで返せ。

上司版
winsockに限らずそんなものはない。やりたきゃ自分で実装しろ。
0616デフォルトの名無しさんNGNG
上司版
『自分で調べろ(俺にはわかんねぇー!)』
0617デフォルトの名無しさんNGNG
>>615
レイヤを明示している前者の方がむしろ親切ジャマイカ?
実際599が「上の1行から想像するに」と書くくらい十分ヒントになっているようだし。

元の質問はwinsockでTCPのackの返った最終データを知るAPI(があると質問者は
仮定しているように見える)の質問と読むのが自然だろうと思うのだが、
599ではいつのまにか、俺のしたいことを実現する方法を手取り足取り教えろに
変わってるんだよな。

598の落ち度は質問者がDQNだったのを予測できなかったことくらいだろう。
0618デフォルトの名無しさんNGNG
この掲示板に名前=a、E-mail=sage、内容=aiueoと書き込む時の
POSTする文字列はどうなりますか?
0619デフォルトの名無しさんNGNG
パケットをモニタ汁
0620デフォルトの名無しさんNGNG
>>618
RFCにしたがって好きにすればいい。
ヘッダにどんな風に料理したのか書くのな。
0621618NGNG
RFCも読みましたが、長過ぎて良くわかりませんでした
ttp://www.h5.dion.ne.jp/~sigma/homepage/cyberspace/httpclient.html
の第11回で使用しているプログラムを使い
アドレスと送信するデータを自分なりに変えていろいろなサイトで試してみましたが、
どこも書き込みできませんでした
name=valueを&で繋げた値をボディ部分で送信するだけではダメなのでしょうか?
またこういう事を勉強できるサイトがあれば教えてください
0622デフォルトの名無しさんNGNG
>>621
迷惑だからテストは自分のサーバでやれ
非常識な奴だ
0623デフォルトの名無しさんNGNG
&でつなげてってのは、GETメソッドでしょ。2chの書込みはPOSTメソッドだから
ダメじゃないかね。
0624デフォルトの名無しさんNGNG
monazillaってBBSかMLやってないのか?
0625デフォルトの名無しさんNGNG
http://www.monazilla.org/
http://pc5.2ch.net/test/read.cgi/tech/1057329161/
http://jbbs.livedoor.jp/computer/351/
0626618NGNG
IEが送信してるパケットとあのサイトのツールが送信しているパケットを
比較してやっと謎が解けました、なぜか=と&が%..の形式に変換されてました
0627デフォルトの名無しさんNGNG
何故かというかメタキャラクターだし…
0628デフォルトの名無しさんNGNG
age
0629デフォルトの名無しさんNGNG
なんつーか、まずは適当な掲示板CGIの勉強でもすれ。
0630デフォルトの名無しさん05/01/18 09:18:04
Web上にあるファイルの更新日時を取得したいのですが、
ローカル側に落とさずに、更新日時のみ取得はできるのでしょうか?
0631デフォルトの名無しさん05/01/18 09:37:43
TCPの接続で 一つのサーバーに対して複数のクライアントをつなぐことは
できるのでしょうか?
0632デフォルトの名無しさん05/01/18 09:54:28
630>> 自己レスですが、HEADでできました
0633デフォルトの名無しさん05/01/18 10:01:30
>>631
あなたの質問の意味がわかりません
詳しく書いてくれませんか?
0634デフォルトの名無しさん05/01/18 10:06:13
>>631
普通にできる。でないとやってらんないだろ。

0635デフォルトの名無しさん05/01/18 16:36:04
チャットサーバーを題材にしてC#でのネットワークプログラミング解説サイトを
作ろうと思うんだが今さらそんなサイト、需要あるの?
0636デフォルトの名無しさん05/01/18 16:41:06
>>635
VB.NETでお願い
0637デフォルトの名無しさん05/01/18 18:10:48
>>635
ちゃんと非同期系のメソッドを使ったワーキングサンプルなら
参考にしたい人もいるんじゃないかなー。
0638デフォルトの名無しさん05/01/18 18:54:24
ネットワークプログラミング初心者なんですが
下のようなのをよくみるんですがmemsetはなぜ
必要なんですか?

struct addrinfo hints

memset(&hints, 0, sizeof(hints));
hints.ai_flags = AI_PASSIVE;
hints.ai_family = PF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
0639デフォルトの名無しさん05/01/18 21:01:04
struct addrinfo には ai_flags, ai_family, ai_socktype 以外のメンバもあるから。
0640デフォルトの名無しさん05/01/18 23:21:27
メンバーが後から増えて、
そのデフォールトの値が0でいいような場合は、
0でmemset()してあるソースコードは、生き伸びます。

とあるシステムのstruct sockaddr_inみたいに、
先頭にsin_lenってメンバーが増えた場合には、
0じゃまずいので、コード付け加える必要があるけど。
0641デフォルトの名無しさん05/01/18 23:31:51
UNPではbzero
0642デフォルトの名無しさん05/01/19 10:29:42
Winsock2API仕様書の原文が見たいのですが、
どこで入手できるでしょうか?
やはりMSDNに加入しないと入手不可ですか?
0643デフォルトの名無しさん05/01/19 11:37:58
>>642
ttp://www.sockets.com/winsock2.htm#Docs

じゃだめなの? 本当の最新版やMicrosoft独自拡張については
MSDNを買う必要があるとは書いてあるけど。
0644デフォルトの名無しさん05/01/19 11:47:30
sendで一度に送れるバイト数はいくつですか?
0645デフォルトの名無しさん05/01/19 12:09:52
>>644
他のは知らんが、WinsockではTCPの場合sendでWSAENOBUFSエラーになったら
サイズが大きすぎるので、あらかじめもっと小さいサイズを指定して送る必要がある。
もちろん、どんなサイズを指定してもそれより小さなサイズだけ送ってリターンしてくる
可能性については考慮しておくこと。

UDPの場合はそれに加えて他のOSと同様にあれこれ考慮してください。
0646デフォルトの名無しさん05/01/19 12:45:36
javaのsocketとかWindowsのWinsockとかの「ソケット」ってTCPかUDPプロトコル上の概念なのですか?
あと、VBはほかのマシンのファイルを「ソケット」使わず「ポートとかを指定せず」に書き換えられると聞いたことがあるのですが、
これはTCPもUDPも使わず別のプロトコルを使うというわけですか?
0647デフォルトの名無しさん05/01/19 12:50:55
ネットワークプログラミングをするならテクネくらい取ってください
0648デフォルトの名無しさん05/01/19 12:51:40
>>646
ソケットはAPI的概念。
「VBは・・・」ってのはMicrosoftが定義したSMBプロトコル(現在ではTCPとUDPの上で出来てる)を
使ってリモートファイルシステムにアクセスできるってこと。Windowsの上で動く大抵の言語(VCでも
PerlでもCMDファイルでも)でできる。

コマンドプロンプトから echo hello >> \\hoge\foo\bar.txt とかすれば、マシンhogeの共有名fooに
bar.txtを作成できる。

>これはTCPもUDPも使わず別のプロトコルを使うというわけですか?
かつてはそういうこともしていた。今はしていないケースが多い。
0649デフォルトの名無しさん05/01/19 13:20:32
>>645
送信可能最大サイズを取得する方法はありますか?
065064505/01/19 14:20:21
>>649
これより詳しい説明が必要なら、まず「送信可能最大サイズ」を定義してください。
もしそれが send に渡して WSAENOBUFSエラーにならないバイト数のことなら、
事前に知る術はないです。PCのメモリ搭載量によって変動するみたいですが。

ブツがファイルでOSが Windows XP/Windows Server 2003 ならTransmitFileなり
TransmitPackets使えば、おそらくファイルの最大サイズまで一度の呼び出しで送れるでしょう。

また、TransmitPacketsのドキュメントには、このAPIがメモリ上のデータを自動的に
複数のsend呼び出しに分割して実行してくれそうなことも書かれています(使ったことないけど)。
0651デフォルトの名無しさん05/01/19 15:49:03
最近Q&Aみたいな質問増えてない?
もちろん活性化されて歓迎なんだが・・・・
0652デフォルトの名無しさん05/01/19 19:04:15
ネットだけで知識を得ようとしてる人が増えたって事かな
0653デフォルトの名無しさん05/01/19 21:22:47
あるクライアントプログラムを書いているのですが
パスワードをクライアントに安全に保存しておくのにいい方法はありませんか?
ちなみにサーバの仕様でパスワードを平文で送らないといけないので、
暗号化して保存しておくなら、クライアントサイドで復号化しないといけません。
0654デフォルトの名無しさん05/01/19 21:45:11
>>653
無い。
0655デフォルトの名無しさん05/01/19 22:18:40
すくなくともこのスレで訊くことじゃないな。
0656デフォルトの名無しさん05/01/19 22:36:18
>>653
多くのクライアントPCでは簡単に自分で送受しているパケットの内容をスニファーなどで
簡単に確認することができるので、サーバに平文を送るのなら安全に保存すること自体
あまり意味ありません。

スニファーも使えないような人向けのカジュアルな改ざん防止程度なら、
アプリ内部で適当にDESでも使って暗号化しておけば十分でしょう。
0657デフォルトの名無しさん05/01/19 23:14:37
>>646
ソケットというのは元々通信する同士の間の接続の端っこを、
プログラム上で扱うために考えられた仮想的な概念。
糸電話の耳や口を当てる部分と思えばいい。
そこに書き込むと相手に送られ、そこを読むと相手が送ったものが読める。
0658デフォルトの名無しさん05/01/19 23:16:10
MTUでぐぐる
0659デフォルトの名無しさん05/01/19 23:16:44
>>652
そのためのスレなので(w
0660デフォルトの名無しさん05/01/19 23:18:32
>>653
>>655も言っているけど、
ローカルに秘密にデータを保存したいって事だから、
ネットワーク関係ないよね。

そのシステムのkey ring, password manager APIでも調べたら。
専用の板やスレがあるからそこで。
0661デフォルトの名無しさん05/01/19 23:26:50
>>659
>2-3は無視ですかw

ちゃんと理解できるならどんな方法でも良いんだけどね
066265305/01/19 23:42:15
>>655
セキュリティ暗号化の話だと思ったのですが適当なスレがなかったので・・・
>>656
サーバの送信時は仕方ないので、カジュアルな改竄防止程度でいいと思っています。

DESだと暗号鍵、復号鍵をアプリに含める必要がありますが、
一度鍵がばれちゃうと意味ないので、インストール時に作成するようにすればいいですね。
パスワードをやってるメーラとか大抵どうやってるんでしょう?
オープンソースのメーラのソース見てみたんですが、よく分かりませんでした。

066365305/01/19 23:48:24
>パスワードをやってるメーラとか大抵どうやってるんでしょう?
>オープンソースのメーラのソース見てみたんですが、よく分かりませんでした。

ちなみにsylpheedのソース見ていたんですが、
よく見ると
使用するユーザのパーミッションでしか見れない設定ファイルに平文書きでした。
Thunderbirdとかでもいっしょかな??
0664デフォルトの名無しさん05/01/20 01:08:26
>>662-663
都合の悪い>>660は無鹿よ!?氏ねや
0665デフォルトの名無しさん05/01/20 01:23:25
http://pc5.2ch.net/test/read.cgi/tech/1088530204/l50
■暗号技術【ROUND2】■

がいいんでない?

…程度の誘導はくらいはしろよ>>馬鹿の664
0666デフォルトの名無しさん05/01/20 10:59:50
C言語で、構造体にセットされている
数値データ,文字データ,数値データのように型の異なるものを、
一括でSENDしたいのですが、送信文字列の編集がまったくうまくいきません。
この場合どうやってセットすればいいんでしょうか?
ぐぐって調べてみたのですが、
バイナリデータの送信という形になるのでしょうか?
066766605/01/20 11:12:15
送信したいデータは、固定長です。
無駄使い申し訳ない。
0668デフォルトの名無しさん05/01/20 12:13:29
send(s, &instanceStructure, sizoef(typeStructure), 0);
066966605/01/20 12:26:07
>>668
構造体を丸々セットすればいいということでしょうか?
0670デフォルトの名無しさん05/01/20 12:31:08
ネットワークではマシンに依存したバイナリ表現は送ってはいけない。
>>668のようにすると、簡単に思いつくだけでも
- バイトオーダー
- 型の大きさ (intが何バイトか等)
- 構造体のパッキング
といったマシンやコンパイラ・コンパイルオプションに依存した通信となる。
067166605/01/20 13:21:12
>>670
数値はlong型のみで、入れる値はネットワークバイトオーダーで固定して、
受信相手はWindows2000とXPのみにするつもりです。
構造体のパッキングは、意味がわからなかったので、ぐぐってみたのですが、
桁数制限のことであってますか?
0672デフォルトの名無しさん05/01/20 13:27:25
>>670
普通パディング(詰め物)って言わないか?
パッキングなんて初めて聞いたぞ
0673デフォルトの名無しさん05/01/20 13:31:38
#pragma pack
とかで使われているからじゃない? わしも使わないが。

アライメントとかいう時もある。
0674デフォルトの名無しさん05/01/20 13:32:34
//1-byte alignment
#include<pchpack1.h>
struct{
...
};
#include<poppack1.h>
0675デフォルトの名無しさん05/01/20 13:35:44
>>671
キリの悪いアドレスからの
読み書きは遅い(CPUによってはバスエラーになる)から
構造体の要素の間に隙間をあけて
キリのいいアドレスにデータの先頭の位置をそろえること。
(隙間の入り方はCPUアーキテクチャや
コンパイラ、コンパイルオプションで変わる。)

ネットワークバイトオーダはIntelCPUの整数と逆だからきおつけれ。
0676デフォルトの名無しさん05/01/20 14:13:22
>>671
広義にはパディングを決めて、構造体全体のサイズと
その中での要素の配置を決定すること。
C言語の構造体以外にも似たような(物理的)内部フォーマットの意味で使われる。
(例: 「16ビットピクセルのビットパッキング」)

狭義にはパディングを(CPUがアドレッシング可能な範囲で)極力なくして
構造体を小さくすること。

数値はlongのようにアーキによって変わるものではなく
int32_tのようなサイズを明示したものを使え。
067766605/01/20 14:15:36
皆様のおかげで、大体理解できました。
これから実装に入ります。
ありがとうございました。
067866605/01/20 16:13:08
構造体のデータの送信は確認できたのですが(パケット確認済み)、
今度は構造体データ受信部分うまくいきません。
受信部分のバッファを構造体(rsp)に指定すると、
データがうまくセットできず、
recvfrom(s,(char *)rsp, sizeof(*rsp), 0, (SOCKADDR *)&from_addr, &i_fromlen)
char型のバッファ(c_buf)に指定すると、
recvfrom(s,c_buf, sizeof(*rsp), 0, (SOCKADDR *)&from_addr, &i_fromlen)
文字列箇所はうまくいきますが、
数値データの箇所で、数値に変換してホストバイトオーダーをかけても
データが思ったとおりのものがセットできません。
受信部分のバッファには何をセットすればいいのでしょうか?
0679デフォルトの名無しさん05/01/20 18:10:48
>>678
もしかしてC/C++使うのは初めてですか?
あるいは単にWOULDBLOCエラーあたりになって何も受信されてないとか。
あるいはストリーム型ソケットで受信サイズを見ていないとか。
0680デフォルトの名無しさん05/01/20 20:56:27
HTTPヘッダの、HOSTってどういう意味/どう使われるんでしょうか?
初心者ですいません orz
0681デフォルトの名無しさん05/01/20 21:20:19
http://rfc-jp.nic.ad.jp/cgi-bin/direct.cgi?keyword=2616&language=eng&x=24&y=4
128頁に書いてある。仕様関係はまずRFC読む。
0682デフォルトの名無しさん05/01/21 04:07:47
英語リンクを示したからには
まず日本語に訳せ
0683デフォルトの名無しさん05/01/21 06:11:13
>>682
http://www.studyinghttp.net/cgi-bin/rfc.cgi?2616
あるいは
http://www.studyinghttp.net/translations

でもRFCって原書で読むでしょ。
0684デフォルトの名無しさん05/01/21 06:47:39
>>680
2chも使っているよ。
0685デフォルトの名無しさん05/01/21 08:27:15
>>682
黙れ雑魚が。この程度の英語ぐらい読んでくれよ、マジでおながいします。
0686デフォルトの名無しさん05/01/21 08:49:21
「Host: ってのはこう使います。」
「ほう、根拠は?」
「RFCに書いてあります。」
「本当にそう書いてあるのかね? 私には多少違うように見えるのだが。」
「そう2chで言ってました。」
「……。」
068766605/01/21 08:53:17
679>>
お察しのとおり、C/C++使うのは初めてです。
いままでJAVAとVBしか組んだことありません。
ネットワークプログラムも初めてです。
RFCなども一通り目を通しましたが、
わからないことだらけで(汗
もう一度基本からやりなおします…

0688デフォルトの名無しさん05/01/21 10:44:45
socket()とclosesocket()の関係について質問です。
{
  SOCKET sock1 = socket();
  // sock1 = 1000
  closesocket( sock1 );

  SOCKET sock2 = socket();
  // sock2 = 1000
  closesocket( sock1 );
  // ここで、sock2も閉じられてしまう
}

sock1をcloseしたことで、ディスクリプタが解放されて、
sock2で、sock1と同じハンドルが返ってくるのはわかるのですが、
sock2を取得した後に、sock1をcloseするとsock2まで閉じてしまうのですが・・・
これって、仕様なのでしょうか?(エラー返さないし、仕様なのでしょうけど・・・)
やはり、closesocket()したあとに、SOCKETには0を入れ、
closesocket()をする前に0のチェックを入れるべきなのでしょうか?
0689デフォルトの名無しさん05/01/21 10:57:58
sock1 と sock2 の値を表示して調べてみれば分かる。
ってゆうか、プログラミングの初歩から学習しなおした方がいいかも。

たとえば、これも。
>やはり、closesocket()したあとに、SOCKETには0を入れ、
>closesocket()をする前に0のチェックを入れるべきなのでしょうか?
どうして 0 が SOCKET として無効な値だって分かったの?
0690デフォルトの名無しさん05/01/21 11:01:47
だよね。
「変数」と「変数の持つ値」ってのは
ネットワークとは関係ない、プログラミングの初歩の初歩だよね。
0691デフォルトの名無しさん05/01/21 11:47:48
>>688
> sock1をcloseしたことで、ディスクリプタが解放されて、

ディスクリプタの意味が全く分かってない(嗚呼
0692デフォルトの名無しさん05/01/21 12:00:23
>>688
>sock1をcloseしたことで、ディスクリプタが解放されて、
>sock2で、sock1と同じハンドルが返ってくるのはわかるのですが、
頭おかしい、handleの値を議論するなんてばかげてる。
0693デフォルトの名無しさん05/01/21 12:57:54
C言語で構造体のデータを簡単にシリアライズ化できる
フリーのライブラリってないですか?
0694デフォルトの名無しさん05/01/21 13:14:42
>>689
表示して、同じだったから、おかしいと思ったんですが・・・

>>690
書き方が悪かったです・・・

>>691
ごめんなさい

>>692
ハンドルの値が同じだから、sock1をcloseしたときに
sock2が閉じてしまうと思っていたのですが、違うのですか?
069568805/01/21 13:15:38
>>689
表示して、同じだったから、おかしいと思ったんですが・・・

>>690
書き方が悪かったです・・・

>>691
ごめんなさい

>>692
ハンドルの値が同じだから、sock1をcloseしたときに
sock2が閉じてしまうと思っていたのですが、違うのですか?
069668805/01/21 13:16:05
2度書きすいません orz
0697デフォルトの名無しさん05/01/21 18:52:41
>>688
そのソースコード、なんでsocket1を2回も閉じてんの?
0698デフォルトの名無しさん05/01/21 19:11:27
こぴぺしてsock2の部分を作ったけどうっかりcloseは変え忘れていたけど
結局意図した通りになっているのでアレ?って思ったとか。
069968805/01/21 20:04:51
>>697
これは、例で書いたのですが、
実際のプログラム上で、設計上2回通ってしまうのです・・・
0700デフォルトの名無しさん05/01/21 20:16:10
関係ないけど、手元のとある環境だと
#define INVALID_SOCKET (SOCKET)(~0)
になってる。
0701デフォルトの名無しさん05/01/21 20:21:57
>>699
それは設計ミスです。
そういう設計だとすると、他の箇所でdeleteやfreeを2回したりもしてませんか?
0702デフォルトの名無しさん05/01/21 20:31:03
>>695
ハンドルってのはソケットを一意に識別するものだから、ハンドルが同じってことは
その2つのハンドルが示しているソケットの実体は1つしかないってことだ。
そしたら、socket1を閉じたらsocket2も閉じたように見えるのは当たり前じゃないか。
0703デフォルトの名無しさん05/01/21 21:06:11
>>700
いや、少なくとも>>688には関係あるだろ、それ。

>>695

同じ時刻に同じプロセス内で同じ値だったら実体は1つだが、
今回の件では、socket1を閉じた後の話なんだから、実体が
1つのわけないじゃん。一から勉強しなおせ。
070470305/01/21 21:07:19
>>695じゃなくて>>702だった… orz
0705デフォルトの名無しさん05/01/21 21:10:36
>>703
んなこと分かっとるがな。閉じた後偶然同じハンドルが入ってきても
それは当然別物だ。
0706sage05/01/21 21:18:07
>>702
すまん、説明の意図を反対に読んでた。orz
0707デフォルトの名無しさん05/01/21 22:08:07
>>688
これは設計が悪い。
まず、ソケットハンドルというのは突き詰めれば結局単なるint型だということを念頭において考えると。
変数socket1でソケット作ったら、例えば10が返ってきたとする。次にそれをクローズする。
クローズしても、socket1という変数(int)自体にはまだ10が入ったまま。
次にsocket2で別のソケットを作る。そしたら偶然、ハンドルとして与えられた数が10だった。
この時点でsocket2という変数には10が入る。そして、socket1を引数に与えてソケットをクローズする。
そうするとコンピュータは、同じ10という数字なので区別ができず、結果、socket2は閉じられることになる。

結論としては、無意味に2回もクローズするのをやめないといけない。
0708デフォルトの名無しさん05/01/21 22:44:40
>>700-707
丁寧に説明していただき、ありがとうございます。
SOCKET(ネットワーク)という、今まで勉強してこなかった分野だったので、
なにやら、特別なものという考えが自分の中にあったのだと思います。
理論上はわかっていても、なんだか疑ってしまって・・・

設計が悪いというのは、うすうす気づいていたのですが、
前述のような、迷信にはまっていたので、疑いを持ってしまっていたようです。
設計を見直して、closeを2度呼ばないよう変更します。

なんだか、すっきりした感じです。
こんな初歩的なことに答えてくれて、ほんとにありがとうございました。
070970805/01/21 22:46:15
名前いれわすれましたけど、>>688です。
それと、sage忘れすいません... ( ;´Д`)アア
0710デフォルトの名無しさん05/01/22 00:07:03
いや、ageてもらわないと困る。
0711デフォルトの名無しさん05/01/22 00:38:04
XMLプロフェッショナルを受けようと思ってますが、どこか良いサイトありますか?
0712デフォルトの名無しさん05/01/22 00:48:38
板違い
0713デフォルトの名無しさん05/01/22 00:57:32
大きめのデータをSTREAMソケットでsend()する時に
1回のlengthはどの位が最適でしょうか?
やはりsend()したいデータ量すべてをlengthに設定して定石のループ処理を
するのが良いのでしょうか?
071471305/01/22 01:03:22
なんでこんな事を考えているかというと、
あまり大きいサイズを指定するとWSAEMSGSIZE(だったかな?)などの
エラーが返って来ることがあってエラー処理が増えて面倒だなと。
どうせループの中でsend()を分割するのなら最初から分割した方がスマートかなって思いました。
0715otasuke05/01/22 01:39:56
ネットのことにはとんとウトいので、質問にまいりました。
IPアドレスやリモートホストより、
特に同意を受けなくてもネットワーク契約を行ってもよろしいのですか?
0716デフォルトの名無しさん05/01/22 02:08:47
>>715
質問する板がちがいます
0717デフォルトの名無しさん05/01/22 02:23:28
開発環境は? .NETのSend()の場合は要注意。ブロッキングソケットの場合、巨大なデータ送ろうとすると、
一部を送るんじゃなくて、何も送らず例外発生するから(ドキュメントにはちゃんと書いてあるが)。
面倒くさがらずにエラー処理するのが筋かと。
0718デフォルトの名無しさん05/01/22 03:28:57
>>711
インターネット違い
0719デフォルトの名無しさん05/01/22 08:38:16
>>714
大きく送ると、Gigabit Ethernetのgiant packetをうまく利用してくれるかもしれません。
特に理由もなく、小さくsend()するのは損です。
0720デフォルトの名無しさん05/01/22 18:18:53
こういう感じで、WSAGetLastErrorの戻り値を関数で使用したいのですが、
g_SocketErrorCheck(WSAGetLastError());
取得されたエラー値が関数に、渡りません。
こういう感じなら渡るのですが。
i_err = WSAGetLastError();
ig_SocketErrorCheck(i_err);
WSAGetLastErrorの仕様??
0721デフォルトの名無しさん05/01/22 22:27:53
ig_SocketErrorCheck()ってのがマクロだってことはないですか?
あるいは、WSAGetLastError()の"Last"の意味を勘違いしているという事はないですか?
0722デフォルトの名無しさん05/01/23 08:28:21
「winsock」「wininet」って、皆さんなんて読んでますか?
自分は心の中で
「うぃんそっく」「うぃんあいねっと」と読んでいます。
0723デフォルトの名無しさん05/01/23 09:08:12
ここにもコピペ

●● 時刻同期ソフトを使ってる人々へ ●●
同期先のNTPサーバに福岡大学(clock.nc.fukuoka-u.ac.jp)のを使ってる人、
同大学の管理者が過負荷で困ってるから、至急他のサーバに設定を変更するように。

福岡大のNTPサーバがアクセス集中で悲鳴
http://www.itmedia.co.jp/news/articles/0501/21/news059.html
http://headlines.yahoo.co.jp/hl?a=20050121-00000039-zdn_n-sci
http://news19.2ch.net/test/read.cgi/news/1106301899/l50

記事の元になった管理者の悲鳴
http://pc5.2ch.net/test/read.cgi/linux/1008318869/500n

プロバイダ別NTPサーバリスト
http://www.wikiroom.com/?%A5%D7%A5%ED%A5%D0%A5%A4%A5%C0%CA%CCNTP%A5%B5%A1%BC%A5%D0%A5%EA%A5%B9%A5%C8
072474705/01/23 11:14:18
ig_SocketErrorCheck()は普通の関数です。
簡単に書くと、こんなかんじです。
int ig_SocketErrorCheck(int i_err){
if(i_err != 0){ //
エラー処理
return false;
}
return true;
}

WSAGetLastError()の"Last"の意味は、
一番直前に使用されたWinsock関数のエラーと思っていたのですが、
それが間違ってますか?
072572405/01/23 12:55:39
WSAStartupだけは戻り値が返ってくるのですね。
勘違いで失礼いたしました。
0726デフォルトの名無しさん05/01/24 21:49:20
>>722
おんなじ
0727デフォルトの名無しさん05/01/25 00:56:04
>>722

↑に。
所でWSAStartupとか"WSA"で始まる関数をなんて読んでます?
「ダブルエスエー○○○」って読んでましたが、
この前「ウーサ○○○」って読んでる人がいて違和感を感じたのですが。
0728デフォルトの名無しさん05/01/25 15:06:58
winsock2からRARPを行いたいのですがどうすれば良いでしょうか?
0729デフォルトの名無しさん05/01/25 16:35:01
WinXP上でWinsockのRAWソケットを使ったパケットキャプチャプログラムを作成しました。
受け取ったパケットが、どのプロセスで使用されているのか知るにはどうすればいいのでしょうか?
netstatなどのようなコネクションモニタの情報とパケット内のポート番号とを照らし合わせるのでしょうか?
でもこれだと、UDPだと無理ですよね。
073072905/01/25 16:53:24
あ、解決しました。
netstat -ao
でいけますね。
あとは、AllocateAndGetTcpExTableFromStackを使って・・・。

定石ではどのようになっているのか教えていただけると幸いです。
0731デフォルトの名無しさん05/01/26 01:12:52
>>727
それはおかしいなどう考えても。俺は普通にダブルエスエー。
charって外人はなんていうんだろう。
0732デフォルトの名無しさん05/01/26 01:26:46
外国人の呼び方は、主にチャー、カー、ケアの3種だそうだ。
0733デフォルトの名無しさん05/01/26 04:03:32
>>730
それでいい(netstat -aon)と思うけど
netstat使いたくないならnetstatのソース見て
自分で実装すれ
0734デフォルトの名無しさん05/01/26 04:20:19
>>733
どこにソースがあるんですか?
0735デフォルトの名無しさん05/01/27 06:27:06
↓
0736デフォルトの名無しさん05/01/27 06:32:00
>>735
→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→
                                                                                            ↓
0737デフォルトの名無しさん05/01/27 07:11:07
ttp://www.tamos.com/i/products/shot1ent.gif
ttp://www.tamos.com/products/nettools/
0738デフォルトの名無しさん05/01/27 10:43:18
inet_addrって***.***.***.***じゃない数も変換します?
なんか、*だけとか入れても、エラーじゃなくて
得体の知れない値に変換しちゃうんですけど。
0739デフォルトの名無しさん05/01/27 11:05:15
常識。
***.***.***.***が何を表現しているか考えればわかるでしょ。
0740デフォルトの名無しさん05/01/27 11:23:47
>>739
書式チェックまではしてくれないんですね…
どもです
0741デフォルトの名無しさん05/01/27 11:32:30
いや・・・
*も正しいから。
0742デフォルトの名無しさん05/01/27 12:07:37
738はIPv4のアドレスが4 octetだということがわかってないんじゃないか?
0743デフォルトの名無しさん05/01/27 13:04:34
>>738
inet_addr()はかなり無茶な曲芸をする。 例えば

1 → 0.0.0.1 (単に整数と解釈)
1.1 -> 1.0.0.1 (間の0.0を省略したと解釈する)
0x01010101 -> 1.1.1.1 (4byte の16進整数と解釈する)
16843009 -> 1.1.1.1 (上と同じのを10進)
010.010.010.010 -> 8.8.8.8 (010を8進と解釈する)

古いアプリだとユーザの入力を直接inet_addr()に食わせるので上のような変な
アドレスを直接食わせられる。 最近のアプリはgetaddrinfo()にユーザ入力の
アドレスを処理させるがこれはinet_addr()の妙な動作は全て取っ払われ、
10進の4桁ドット形式しか認めない。
0744デフォルトの名無しさん05/01/27 13:59:28
なんでBSD socketはこんなにアフォな仕様なんですか?
0745デフォルトの名無しさん05/01/27 14:01:38
それがBSDクオリティ
0746デフォルトの名無しさん05/01/27 14:08:47
>>743
>1.1 -> 1.0.0.1 (間の0.0を省略したと解釈する)
うはwwww
0747デフォルトの名無しさん05/01/27 15:58:52
>>746
Class Aもらってるとこなんかはそれで便利に使ってたわけだ。
0748デフォルトの名無しさん05/01/27 16:02:29
127.1 のほうが使い勝手いいな
0749デフォルトの名無しさん05/01/27 18:26:54
こんな記事を読んだ覚えがあったのさ。
http://www.itmedia.co.jp/broadband/0302/26/lp17_2.html
0750デフォルトの名無しさん05/01/27 19:41:43
特に8進数扱いが激しく糞だよね。
0751デフォルトの名無しさん05/01/27 19:59:59
>>743
うはOK
0752デフォルトの名無しさん05/01/28 12:58:21
なんでlocalhostって127.0.0.1に決まったの?
そんな気分だったの?
0753デフォルトの名無しさん05/01/28 19:21:05
01111111.00000000.00000000.00000001
0754デフォルトの名無しさん05/01/29 00:06:56
localhostっつーか127.0.0.0から127.255.255.255はloopbackのために予約されている。
0755デフォルトの名無しさん05/01/29 06:42:44
>>754
そんなにたくさん、もったいないな。
0756デフォルトの名無しさん05/01/31 09:19:16
たとえば
www.google.com
のようなファイル名部分が省略されたURLを
HTTPでgetする時に実際に取得されるファイル名を知る方法はありますか?
index.htmlなのかindex.phpなのかとか。
0757デフォルトの名無しさん05/01/31 09:39:02
無理でしょ。

リクエスト側は(ルートなら) "/"をGETするだけだし
仮に"/tech"みたいなディレクトリであったなら、
(普通は)リダイレクトで"/tech/"になって再度GETが入るだけ。

で、"/"をGETした時に何が送られてくるかは、サーバーの設定次第。
0758デフォルトの名無しさん05/01/31 10:05:06
んなこたぁない
0759デフォルトの名無しさん05/01/31 10:12:53
こともない
0760デフォルトの名無しさん05/01/31 10:14:01
じゃあ教えてあげなよ
0761デフォルトの名無しさん05/01/31 12:05:32
ttp://sinzo.web.infoseek.co.jp/joho/com/w2matome/anki04.html
0762デフォルトの名無しさん05/01/31 12:28:18
とりあえず開いて"index"で検索した周囲には全然載ってないけど。
あまり関係ないことばかりだし。

GET / HTTP/1.0
で送られてくるのが"index.html"か"index.htm"か"default.asp"か
あるいは別の何かなのか、その名前を取得できるかという質問なんだから。

ちなみに、apacheの場合は
"/"のみの場合も含め、ディレクトリをGETした時に送られるファイルは
DirectoryIndexで指定するようになっている。

サーバーの設定じゃないって言うなら、どこで決まってるというのかね?
0763デフォルトの名無しさん05/01/31 12:48:21
>>761
文章の書きかたがまるで駄目なので読むだけ無駄でしょう。
0764デフォルトの名無しさん05/01/31 12:58:46
>>756
ないです。以上。
0765デフォルトの名無しさん05/01/31 15:30:10
>>758
こういうアホっているよね。「そんなことない」とだけ書いて
全くその根拠を示さない奴。
0766デフォルトの名無しさん05/01/31 15:42:48
そうですね。
0767デフォルトの名無しさん05/01/31 17:09:49
ということにしたいのですね
0768デフォルトの名無しさん05/01/31 21:44:14
そうかもしれない
0769デフォルトの名無しさん05/01/31 22:00:39
>>756
サーバによってはContent-Dispositionを一緒に送ってくることがあるから、
それで一応知ることはできるけど、信じるかどうかはクライアント次第
0770デフォルトの名無しさん05/02/01 00:19:24
age
0771デフォルトの名無しさん05/02/01 18:12:59
http://www.ugtop.com/spill.shtml
このサイトみたいにグローバルIP返してくれるも
う少しコンパクトHTMLはいてくれるサイトないですか?
単なる確認用でアプリに組み込むわけではありません。
0772デフォルトの名無しさん05/02/01 18:20:51
http://sports2.2ch.net/test/check.cgi
0773デフォルトの名無しさん05/02/01 20:37:29
http://checkip.dyndns.org/
0774デフォルトの名無しさん05/02/02 05:53:24
>>773
それだけかYO!
0775デフォルトの名無しさん05/02/02 07:00:34
> グローバルIP返してくれる
という要求は満たしているわけだが。
0776デフォルトの名無しさん05/02/02 10:16:18
>>775
Windowsアプリ向けの共通ライブラリを作っているのですが
WSAStartup/WSACleanupのスコープってどこまでなのでしょうか?
アプリ本体がWinsock使っているかにかかわらず、ライブラリ内で
通信したいのです。
静的リンクだとアプリ本体と同じインスタンスですが、2回以上
呼んでしまっても良いのでしょうか?
DLLにして動的リンクならOKなのでしょうか・・・?
0777デフォルトの名無しさん05/02/02 10:22:43
>>776
申し訳ない。アンカー消し忘れました。
0778デフォルトの名無しさん05/02/02 11:01:07
>>776
マニュアルちゃんと読みなさい。

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winsock/winsock/wsastartup_2.asp

An application or DLL can call WSAStartup more than once if it needs
to obtain the WSADATA structure information more than once. On each
such call the application can specify any version number supported by
the DLL.

An application must call one WSACleanup call for every successful
WSAStartup call to allow third-party DLLs to make use of a WS2_32.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.
0779デフォルトの名無しさん05/02/02 13:35:18
>>778
>マニュアルちゃんと読みなさい。
見落としていました。
ありがとうございます。
0780デフォルトの名無しさん05/02/02 15:33:29
BOOL optionval = true; // オプション設定のみに使用する
setsockopt(s,SOL_SOCKET,SO_BROADCAST,(optionval,sizeof(optionval)
こういう感じで、ブロードキャストの設定をオンにしたのですが、
これをデフォルト値に戻す時はどうやればいいのでしょうか?
optionval をfalseにしてもうまくいかなくて…
0781デフォルトの名無しさん05/02/02 15:43:23
>>780
> optionval をfalseにしてもうまくいかなくて…

念のため確認するがfalseにしてもう一度setsockoptを呼んだんだよね?
0782デフォルトの名無しさん05/02/02 15:48:46
>>780
BOOLじゃなくて char (unsigned char でも良いけど) にするべきなんじゃないかなー。
さほど自信ないし、他人事だからどうでもいいけど。
078378005/02/02 16:01:54
781>>setsockoptを呼びましたが、だめでした。

782>>MSDNはBOOLになってるんですが、
一応試してみます。
0784デフォルトの名無しさん05/02/02 18:02:07
>>775
それだけしかないサイトなんだなぁと思って。
0785デフォルトの名無しさん05/02/02 18:11:18
>>784
dyndns.org っていうドメインから、checkipの目的がわかると思うけど。
0786デフォルトの名無しさん05/02/02 18:19:21
>>785
何だと?dyndnsを使ってると悪いのか?
0787デフォルトの名無しさん05/02/02 18:32:57
>>786
>>785は>>784へのレスですよ。
0788デフォルトの名無しさん05/02/02 19:10:15
JavaでSSLのNon-BlockingSocketが使いたいんだけど・・・。
もうだめぽ
0789デフォルトの名無しさん05/02/02 19:23:02
独り言かよ!?
0790デフォルトの名無しさん05/02/02 19:26:45
質問したいけど、結論知ってるし・・・。
0791デフォルトの名無しさん05/02/02 19:54:06
>>788=>>790
もうだめぼ
0792デフォルトの名無しさん05/02/02 19:55:59
ぼ?
0793デフォルトの名無しさん05/02/03 02:58:19
ぼぼ
0794デフォルトの名無しさん05/02/03 09:39:55
A端末からブロードキャストを投げて、
受信したB端末からブロードキャストを投げ返しているのですが、
A端末が自分で放ったブロードキャストを受信しないようにするには
どうすればいいのでしょうか?
B端末のブロードキャストだけ受け取りたいのに、
自分で送信したものまで受信してしまいます
0795デフォルトの名無しさん05/02/03 10:25:59
>>794
recvfrom()でどこから来たか見て自分からだったら捨てる。 
0796デフォルトの名無しさん05/02/03 12:16:42
>> 795
できました!
ありがとうございます!
0797デフォルトの名無しさん05/02/05 15:33:00
http://www.auction.co.jp/mem1/item/mem_itm_item.asp?LOT=603351
買ってくらさい。
0798デフォルトの名無しさん05/02/05 22:41:19
lispで簡単(テキストファイルの送受信程度)なネットワークプログラム作りたいのですが、
その辺の情報の載ったサイトとか本ありませんか?
0799デフォルトの名無しさん05/02/06 15:52:53
HTMLに<input type="hidden" name="aiueo" value="">
という文があったら
POSTする時に...&aiueo=&...としなければいけませんか?
それとも""のパラメータは省略可能ですか?
0800デフォルトの名無しさん05/02/06 16:44:56
意味不明&スレ違い
0801デフォルトの名無しさん05/02/06 18:33:00
>>797
もう一声(w
0802デフォルトの名無しさん05/02/06 19:12:06
>>797
>>801
?????
0803デフォルトの名無しさん05/02/06 21:24:16
>>799
ブラウザでも作ってるの?
ナンにせよ、空白を意味するパラメータになるので、...&aiueo=&...を付けないといけない
0804デフォルトの名無しさん05/02/06 21:48:09
GetQueuedCompletionStatusの中で例外c0000005が発生して落ちている様なのだけど、
これってどういう時に発生するのでしょうか。

必ず発生するタイプの物では無いのです。それなりに低い確率で発生している様です。
しかも、GetQueuedCompletionStatusを叩いてから数秒経ってから落ちているのです。

Windowsが一般に表示するアプリケーションが落ちた時のダイアログのモジュール名
にはunknownと書かれていました。

デバッグログ出力のコードを入れて調査をしていた所、どうやらその例外が発生す
る前にはそのIO完了ポートに関連付けるサーバソケットを生成して動かしている…
というコードが別スレッド(メインスレッド(GUIを主に動かしている))で走ってい
るという共通点がある様なのです。
この手順はsocket(listen),setsockopt,bind,listen,CreateIoCompletionPort,socket(accept),
AcceptExです。

そのプログラムはサーバソケットの生成と破棄を激しく繰り返します。

そのプログラムは一度に同一マシンで20〜40プロセスぐらい動かしています。

更にそれを20マシンぐらいで同時に動かします。その上で1時間に1〜5ぐらいの例外
が発生するのです。

そのプログラムでは他にもスレッドが10個ぐらい動いていて、それらのスレッドで
はIO完了ポートを使わずに一般的なノンブロッキングソケット/ブロッキングソケ
ット等を使っている様です(ライブラリの中なので見れない)。

OS:Windows XP SP2
Winsock:(2,2)

何か知っている事があれば教えて頂きたいです。
個人的にはWindowsのバグな気がしているのですが。
0805デフォルトの名無しさん05/02/06 23:01:33
>>799
<input type="checkbox">な奴は、チェックされてないと
値が渡って来ないよ。それ以外は全部空でも渡ってくる。
080679905/02/07 07:19:30
>>803

株の自動売買プログラムを作ってます
そうですか、一応""というパラメータなんですね
レスありがとうございました
0807デフォルトの名無しさん05/02/07 07:30:28
>>806
仕様という意味では、値を持たないフォームは無視してもOK。
http://www.asahi-net.or.jp/~sd5a-ucd/rec-html401j/interact/forms.html#h-17.13.1

ただ、POSTされたデータを受ける側が空白値を期待している場合は送信しないと
ちゃんと動かないだろうね。そういうCGIとかたまにあるんだよなぁ…。
080879905/02/07 16:22:44
>>807

ありがとうございます。
このサイトはいいですね、参考にさせていただきます
0809デフォルトの名無しさん05/02/07 19:45:29
とあるsocketディスクリプタがありまして、これはコネクション済みで
TCPとかで別の誰かと通信が可能な状態にあります。

このディスクリプタを使って、通信している自分のNICの
MACアドレスを取得したいのですが、どうしたらいいでしょうか

Linuxです (Fedoracore3ですけどディストリは関係ないですよね)
0810デフォルトの名無しさん05/02/07 20:05:31
>>809

struct ifreq if_hwaddr;
if(ioctl(sd, SIOCGIFHWADDR, &hwaddr) < 0) {
perror("ioctl SIOCGIFHWADDR");
}

…かな。if_hwaddr.ifr_hwaddr に MAC アドレスが入るはず。

ioctl(2), ioctl_list(2), netdevice(7) あたり見とけ。
0811デフォルトの名無しさん05/02/07 20:10:01
>>810
それはraw socketじゃないと。
取得する前にinterfaceを指定しないといけないし。
0812デフォルトの名無しさん05/02/07 20:10:34
>>809
そのディスクリプタでは無理です。
081381005/02/07 20:11:13
おっと、TCP か。正直すまんかった。
0814デフォルトの名無しさん05/02/07 20:15:04
んではgetsockname と raw socketで>>810の組み合わせ?
0815デフォルトの名無しさん05/02/07 21:23:44
linuxならsocket(AF_PACKET, SOCK_DGRAM, 0)でもOK。
081680905/02/07 21:44:30
>>810
ありがとー
やってみます。
SIOCGIFHWADDRってgoogleしてもあんまり情報ないね

>>815
やったけどNosuchdeviceと言われました。
こんな漢字

getsockname( sd, &addr, &addrlen );
ad = socket( AF_INET, SOCK_DGRAM, 0 );
sin = (struct sockaddr_in *) &arp.arp_pa;
sin->sin_family = AF_INET;
memcpy( &sin->sin_addr, &addr, sizeof(struct sockaddr_in) );

ioctl( ad, SIOCGARP, &arp ); ←ここでエラー
0817デフォルトの名無しさん05/02/07 22:41:14
>>816
いやいや、>>815のソケットにSIOCGIFHWADDRすんだよ。
ifr_nameにインターフェース名を設定してから。

  bzero(&req, sizeof(req));
  strcpy(req.ifr_name, "eth0");
  result = ioctl(s,SIOCGIFHWADDR, &req);
  if (result == -1) {
  perror("SIOCGIFHWADDR");
  exit(1);
  }

後、socket(AF_PACKET, SOCK_DGRAM, ntohs(ETH_P_IP))の間違い。
0818デフォルトの名無しさん05/02/07 22:53:59
>>816
getsockname でこちら側のIPアドレスを得て、
あとはifconfigのソース読んで・・・
081980905/02/07 22:56:33
>>817
きめうちで"eth0"ぶちこんだらできました
ETH_P_IPが見当たらなかったので 0 にしちゃったけど動きました
まあそれはあとでなんとかするとして

具体的な流れとしては、調べたいソケットに対して
1. getsocknameでIPゲット
2. ???でインターフェース名を取得
3. SIOCGIFHWADDRでMACアドレス取得
こんな感じですかね
これから2.を調べます。
0820デフォルトの名無しさん05/02/07 23:24:23
>>819
> ETH_P_IP
たしか <net/ethernet.h> とかにあると思う
0821デフォルトの名無しさん05/02/07 23:36:45
>>819
> 1. getsocknameでIPゲット

Routingによるんで、
外へでるインタフェースが複数ある時はこれではダメ。
routring tableはioctl(2)で取得可能。
インターフェース名も分かる。(netstat -rを参照のこと)

ETH_P_IPは、AF_PACKETなsocketとして使わない時は必要ないんでした。
082280905/02/07 23:40:23
>>821
自分が待ちうけのプログラムで、相手と接続しているときの
ソケットを使ってgetsocknameすれば相手と接続しているはずの
IPアドレスが取れるかと思ったけど、そうでもないんですか?
たとえば、自分自身へ接続するときも localhostで接続と
IP指定で接続したときとで 自分のIP がきちんと変わっていたので
安心していたんですが
0823デフォルトの名無しさん05/02/08 00:23:30
要するに、packetが出ていく時のMAC addressが欲しいんでしょう?

Local sideのIP addressなんて、どのinterfaceから出ていくかに全く関与しないよ。
IPのroutingの常識。その辺から勉強し直して、netstat -rの結果を理解して。

ARP table見て 、IP address/MAC addressの対応が分かっても、
packetの出ていくinterfaceとは何の関係もない。
082480905/02/08 00:33:54
今回は複数NICがあってもルーティングはしないので
別にその辺は厳密じゃなくてもいいので すみません
0825デフォルトの名無しさん05/02/08 00:59:09
「今回は」ということならば、それで一向に構いません。
0826デフォルトの名無しさん05/02/08 08:03:47
> Local sideのIP addressなんて、どのinterfaceから出ていくかに
> 全く関与しないよ。

全くっていうのは言い過ぎでは?
まあ待ち受け側の場合は原則としては関与しないで正しいけど、
片側が private network で、片側が the Internet であるような
場合、たとえ待ち受け側であっても、通信に使われる interface の
IP アドレスと、getsockname() で得られる IPアドレスが等しい
ような運用をしていることがほとんどでは?
0827デフォルトの名無しさん05/02/08 10:16:20
http://www.auction.co.jp/mem1/item/mem_itm_item.asp?LOT=603351
0828デフォルトの名無しさん05/02/08 13:55:28
IPv6!IPv6!
0829デフォルトの名無しさん05/02/08 23:06:22
出張です。
http://pc5.2ch.net/test/read.cgi/tech/1106490240/403
どなたか原因解りませんか?
0830デフォルトの名無しさん05/02/08 23:38:11
>>829
全てのanonymous FTPサーバでダメか?
つか、そのくらいの質問なら書けや。なんであっちこっちとばにゃならんねん
083182905/02/09 00:05:58
>>830
全てと言われるとアレですが、同一セグメント内のDebian proftod、
レンタルFirstServer鯖、ftp.ring.gr.jpと三カ所試して全滅でした。
anonymousログインして、実データの転送開始するSocket.Readが
反応帰ってこない所までは追いかけたのですが、そっから先何が悪い
のか検討つきませんでした。Passiveも同様です。

ユーザー認証してログインした場合は、前2者正常にダウンロード
できました。

ttp://support.microsoft.com/default.aspx?scid=kb;ja;812409
これでクラッシュ
C:¥> FtpClient.exe -uftp://servername/filename -mget
これはOK
C:¥> FtpClient.exe -uftp://servername/filename -mget -ukuser:pass
0832デフォルトの名無しさん05/02/09 00:23:18
C#のこと全然知らないで書くが、
>>831
> ttp://support.microsoft.com/default.aspx?scid=kb;ja;812409
> これでクラッシュ
> C:▼> FtpClient.exe -uftp://servername/filename -mget
> これはOK
> C:▼> FtpClient.exe -uftp://servername/filename -mget -ukuser:pass

FtpClient.exe -uftp://servername/filename -mget -ukftp:[email protected]
だったらOKとか? まさかとは思うけど。


083380405/02/09 02:37:19
ちょっと進んだので書きます。

GetQueuedCompletionStatusを叩いていたスレッドは死んでませんでした。
メインスレッドからPostQueuedCompletionStatusしたら、ちゃんとウェイクアップ
してました。
って事で、スレッドもIO完了ポートも死んでませんでした。
死んでいた様に見えたのは、より下のレイヤ、良く分かりませんがWinsockに何かが
起こったからの様です。その為に一切のイベントが上がって来なかった為にスレッド
が死んでいる様に見えたというだけの様です。
その現象が発生した後には、ライブラリ内のソケット生成等も失敗していた様でした。

という事で、こういった現象を知っていたら何か教えて頂けないでしょうか。
0834デフォルトの名無しさん05/02/09 05:20:57
http://www.auction.co.jp/mem1/item/mem_itm_item.asp?LOT=603351
0835デフォルトの名無しさん05/02/09 10:18:30
  i゙::::|;;;;| |;;;;;| |::::::::::| |:::::::::::::::::||::::::::::::::::::::::::::::::::|
 . i゙::::::i     ''''''''''' '───' |;;;;;;;;;;;;::::::::::::::::::::|
  .|:::::::|,-====-´  ゙ヽ,,,,,,,,,,,,,、    |:::::::::::::::::::|
  |;::::::::|,-──、    ~,.--`‐、    |:::::::::::::::::::|
  `ヽ、i     )__r'´    )__|;::::::::::::::/  なんで、人がゴミのようなん?
  .  ヽ、__、/<    ヽ、__、-    /^゙-、;;;;/
     {     ' '          '-'~ノ
    λ   ____        /-'^"
     ヽ,_  `ー─''´       (
     /`''丶、     , -    /^l
0836デフォルトの名無しさん05/02/09 14:04:57
>>835
お前の目がゴミしか通さないフィルターだから
0837デフォルトの名無しさん05/02/09 14:10:04
何で眼鏡・・
0838デフォルトの名無しさん05/02/09 14:11:38
>>835-837
自作自演乙
083982905/02/09 17:47:08
>>831
一部訂正です。anonymousログインしたあとデータ転送待ちでタイムアウト
してしまいます。
150 Opening BINARY mode data connection for /index.html.ja
までは来てます。

>>832
FtpClient.exe -uftp://servername/filename -mget -ukftp:[email protected]
こちらも同様でした。

0840デフォルトの名無しさん05/02/10 20:21:26
UNIXでCでソケットプログラミングしてます。すごく初歩的
な質問です。

サーバをつくる際に
socket -> bind -> listen -> accept -> read

という段階を踏みますが、HTTPやSMTPでは通信の区切りを
CRLFとしますよね。
通常、このCRLFの検出はreadで受信データを1バイトずつ
読み込むこんで自分で判定するのでしょうか?
それとも高水準入出力のfgetsとか使うのでしょうか?
はたまた他にすごく良い方法があるのでしょうか?

申し訳ございませんが教えていただきたく存じます。
0841デフォルトの名無しさん05/02/10 20:35:47
折角目的設定ができたんだから他人の書いたソースコードを見てみるのが
いいと思うよ。
0842デフォルトの名無しさん05/02/10 20:39:15
fgetsかreadで自分ででっかく取ったバッファに一気読みして自前で解析。
>readで受信データを1バイトずつ
は最悪。>>1のFAQも読んどけ。
0843デフォルトの名無しさん05/02/10 20:49:21
>>842
ありがとうございます。
readでバッファをとる場合、readの返値が0の時がそのストリームの
終りと判断すべきなのでしょうか?
これが0になることってあるんでしょうか?
0844デフォルトの名無しさん05/02/10 21:01:13
あります
0845デフォルトの名無しさん05/02/10 21:08:05
>>844
ありがとうございます。telnetクライアントで試すと、いつまでたってもサーバの
readの返り値が0にならないのですが、、、どうゆうふうにすればよいのでしょうか?
0846デフォルトの名無しさん05/02/10 21:12:46
>>845
>readでバッファをとる場合、readの返値が0の時がそのストリームの
>終りと判断すべきなのでしょうか?

その通りです。ストリームが閉じられる前に、
「読み取れるデータがない」等の理由で0になるということはありません。
084784505/02/10 21:15:26
ひょっとしてクライアントがflushしたときでしょうか?
それともソケットをクローズしたときでしょうか?
0848デフォルトの名無しさん05/02/10 21:17:46
>>847
あまり調子にのるなよ
0849デフォルトの名無しさん05/02/10 21:19:09
>>847
close とたとき、shutdown でクライアントからの方向をshutdownしたとき、です。
一般にTCPプロトコルは、何らかの上位プロトコルと供に用いられます。
データ区切り等は上位プロトコルで規定されます(cr lf等)。
085084505/02/10 21:25:37
>>848 すみません。
>>849 ありがとうございます。理解しました。
0851デフォルトの名無しさん05/02/13 18:33:57
複数のクライアントが接続ができるようなサーバーを作っているのですが、
新規に接続があったかどうかを調べるにはどうしたらいいのでしょうか。
selectでできますか?
0852デフォルトの名無しさん05/02/13 18:38:35
>>851
作ってるならわかるだろ
0853デフォルトの名無しさん05/02/13 18:51:47
理論上はそうかもしれません。
しかし世の中には理論で割り切れないこともたくさんあるんです。
0854デフォルトの名無しさん05/02/13 21:55:11
できます。
0855デフォルトの名無しさん05/02/15 04:31:17
typedef struct{ int hoge; } CLIENT;

// 以下のどちらかをメインの関数から引数をわたしてCreateThreadする。

DWORD WINAPI ThreadExampleA(LPVOID lpVoid)
{
 CLIENT *client;
 client = (CLIENT *)lpVoid;
 //  この場合、static宣言されてないclientはこのスレッドから別の関数を呼び出して
 // そこから戻ってきた時おかしな値になることはありますか?
}

DWORD WINAPI ThreadExampleB(CLIENT *client)
{
 // これは邪道ですか?引数はLPVOIDにすべきですか?
}
0856デフォルトの名無しさん05/02/15 06:32:05
>>855
スレ違い。ここはネットワークプログラミングのスレだぞ。
まあネットワークのプログラムにスレッドはかかせないが。

CreateThreadの引数に入れる関数は、あくまでエントリポイントでしかない。
エントリ関数の中で呼んだ関数は、そのスレッドに属することになる。
つまりExampleAでclientにstaticをつける必要はない。
Bは別に邪道というわけではなく、ごく一般的な書き方。それでいい。
085785505/02/15 07:20:22
あぁぁごめんなさい。
「マルチスレッドプログラミング相談室 その3」
に書き込むのを誤爆しました;

>>856
どうもありがとうございます。

1回目のExampleAが終了していない間に2台目のクライアントが接続してきて、
2回目のExampleAがCreateされたときstatic宣言していると一回目のclient->hogeが上書きされてしまい
staticをはずすと回避できたので、、、メモリが同じなのかと思いました。
CreateThreadからの引数はCLIENT型の&client[c]みたいにしていました。

Bで行こうと思います。
0858デフォルトの名無しさん05/02/17 20:00:06
あるFTPサーバに対して、WinInet.dll のFtpPutFile関数を使用して
lzh形式の圧縮ファイルをアップロードしているのですが、タイムアウト
になってしまいます。
他のFTPサーバ(IIS)には問題なくアップロードできています。

また、FFFTPを使用して同じファイルをアップロードするとうまくいきます。

FFFTPではできているので、何か考慮が足りないのだと思うのですが、
どんなことが考えられるのでしょうか?
0859デフォルトの名無しさん05/02/17 21:34:08
つ ttp://www.ethereal.com/
0860デフォルトの名無しさん05/02/17 22:45:39
passiveじゃないとダメなのにactiveでやろうとしてるとか?
0861デフォルトの名無しさん05/02/18 23:48:21
質問です
TCP/IPはUDP/IPと比べて信頼性があり、送信された順番にパケットが到着することが保証されているとのことですが、
ポート番号が違った場合どうなるのでしょうか?
例えば
・TCPポート1を使用してデータAを送信
・TCPポート2を使用してデータBを送信
ということを行った場合、必ずA,Bの順序で到着するのでしょうか?
とりあえず実験してみた結果、順序どおりだったのですが、実際はどうなんでしょうか。
0862デフォルトの名無しさん05/02/18 23:56:31
>>861
2げっと争いみたいなモンだ。
0863デフォルトの名無しさん05/02/19 01:16:18
>送信された順番にパケットが到着することが保証されている
というか、到着した場合、送信された順番に到着したことが保障される。ということですな。

>ということを行った場合、必ずA,Bの順序で到着するのでしょうか?
ポートが違えばソケットも違うから、そんなことは保証されてないと思うけど。
0864デフォルトの名無しさん05/02/19 01:22:36
なんか、車というものが道路の上を走るものだということを知らずに
車の運転を習いたいって感じの質問だな。
0865デフォルトの名無しさん05/02/19 01:54:09
>>861
具体的に書けば、ポート1のデータが何処かでドロップされ、再送信されている間にドロップの
起こらなかったポート2のデータが先に届くという場合がありえる。
0866デフォルトの名無しさん05/02/19 01:58:03
順序保証は同一接続内での話。
086786105/02/19 02:02:37
>>863-866
貴重な情報ありがとうございます。
実験ではたまたまうまくいってただけなんですね。
もう少しTCPとUDPについて勉強してみようと思います。
有難う御座いました。
0868デフォルトの名無しさん05/02/19 16:51:37
0869デフォルトの名無しさん05/02/19 17:40:28
・・・
0870デフォルトの名無しさん05/02/19 18:51:24
???
0871デフォルトの名無しさん05/02/19 18:53:09
●●●
0872デフォルトの名無しさん05/02/19 21:27:27
RST
0873デフォルトの名無しさん05/02/20 06:06:55
ACK
0874デフォルトの名無しさん05/02/20 07:16:58
サーバー側でクライアントが切断したことを知るにはどうしたらいいんでしょうか。
C言語を使っています。
0875デフォルトの名無しさん05/02/20 07:46:50
NetBEUIの共有の話でつか?
0876デフォルトの名無しさん05/02/20 09:03:06
いえ、普通のソケットです。
087787405/02/20 09:53:07
クライアントが普通に切断したときもそうですし、
クライアントが異常終了したときの処理も教えてください。
0878デフォルトの名無しさん05/02/20 09:58:40
close(s);
0879デフォルトの名無しさん05/02/20 10:48:56
>>877
select() & recv()してるならイベントが来るのでそこで分かる。
してないなら次にsend()なりrecv()なりした時に分かる。

もちろん戻り値やerrno(WSAGetLastError())をちゃんと見て
いればだが。
0880デフォルトの名無しさん05/02/20 11:01:54
パケットの送受信が行われなくなってから、5秒くらい待って、TCPでパケット送ってみたら?
応答無し/エラーなら終了してる。
0881デフォルトの名無しさん05/02/20 11:25:09
>>874
クライアントが突如ダウンしたり、
ネットワークから切り放されたことも知りたい?

そういうのを知ることはできないので、(エスパーじゃないので当たり前)
普通タイムアウト処理でクライアント無反応処理の全てを賄います。
0882デフォルトの名無しさん05/02/20 11:26:46
それで、タイムアウト検知をシステムにやって欲しければ、
SO_KEEPALIVEで時間をsetsockopt(2)します。

socket FAQもちゃんと読んでね。
088387405/02/20 11:30:23
どうもありがとうございます。
クライアントから閉じた時は、select()の後のrecv()が0を返すようです。
クライアントが落ちたときの処理は、
一定時間でpingを送ってpongが帰ってこずタイムアウトになったら
落ちたと判断することにしました。
0884デフォルトの名無しさん05/02/20 12:12:49
>一定時間でpingを送ってpongが帰ってこずタイムアウトになったら
>落ちたと判断することにしました。
これはまずい。
0885デフォルトの名無しさん05/02/20 12:44:14
pingを返さない環境最近多いよね。
0886デフォルトの名無しさん05/02/20 12:45:30
KEEPALIVE使うと、接続ごとにping/pongしてくれて、
socket API上で分かるんだけどな。(recvのerror等)
0887デフォルトの名無しさん05/02/20 12:47:00
NAT越しも多い。
0888デフォルトの名無しさん05/02/20 14:56:19
>>884
まずくないときもある
環境限定ならそれもいいさ
0889デフォルトの名無しさん05/02/20 16:33:14
まあ fail over 用途なら ping でもいいだろうな。
一般向けアプリケーションなら論外だけど。
0890デフォルトの名無しさん05/02/20 18:42:58
ルータ越しで接続するにはNATリゾルバとかが要るそうですが、
WinSockではどんな風に実現できますか?
NATリゾルバ=IPマスカレード?
0891デフォルトの名無しさん05/02/20 18:44:30
age忘れました。
0892デフォルトの名無しさん05/02/20 18:59:15
> ルータ越しで接続するにはNATリゾルバとかが要るそうですが、

そんなもんは要らん。
0893デフォルトの名無しさん05/02/20 19:01:01
NATリゾルバ…DirectPlay?
0894デフォルトの名無しさん05/02/20 19:16:22
>>892
自分のグローバルIPをどこか適当なCGIで取ってもLAN組んでたら
行く先がないのでは?もっと単純な方法があるのでしょうか?
0895デフォルトの名無しさん05/02/20 19:30:05
そもそも自分のグローバルIPなんてものを使わなければ
何の問題もない。せっかくNATが変換してくれてるんだか
ら、NATに万事任せれば?
0896デフォルトの名無しさん05/02/20 19:37:37
>>895
LAN-A内のPC-Aでサーバ。LAN-B内のPC-Bでクライアント。この間(インテーネッツ)で通信をしたいとする。
PC-BからPC-Aに繋げる時にPC-Aを識別するにはどうしたらいいんでしょうか?
私はPC-AのグローバルIPとLAN-A内のローカルアドレスが必要だと思っちゃうのですが・・・
0897デフォルトの名無しさん05/02/20 19:39:19
P2Pの話ならはじめからそういえよ。
0898デフォルトの名無しさん05/02/20 19:54:45
サーバーって言ってるんだから、P2Pとは違うんじゃないの?

>>896
LAN-Aのファイアウォールに穴を開ければ問題ない。

> 私はPC-AのグローバルIPとLAN-A内のローカルアドレスが必要だと

NATを使ってるってことはPC-AにはグローバルIPなんてついて
なくてプライベートIPなんじゃないのか?
だとすると、PC-Bが必要なのはLAN-Aのファイアウォールの
グローバルアドレスと、ファイアウォールに開けた穴のポート番号
だけ。
0899デフォルトの名無しさん05/02/20 20:02:09
>>898
普通にconnect()関数にグローバルIPとポート番号入れて
使えばよいのですか?
0900デフォルトの名無しさん05/02/20 20:11:37
ちゃんとファイアウォールに転送の設定が入ってればね。

あとはNATがよろしくやってくれる。
つーか、NATって network address translation なんだから
アドレス変換してくれなかったらNATじゃないしー。
0901デフォルトの名無しさん05/02/20 20:14:26
>>900
有難う五山下
090285805/02/21 17:27:13
FTPのアップロードでタイムアウトになると質問した者です。
レス頂いたのに返事が遅くなって申し訳ないです。

>>860
ずばり、アドバイスの逆でした。
passiveが不可でactiveにしたら出来ました。
まさかpassiveが不可とは盲点でした・・・。
おかげで解決できました。ありがとうございます。

>>859
良いツールを教えて頂いてありがとうございます。
似たようなのは使ったことがあったのですが、
こっちの方が自分には使いやすいです。

結局、知識不足と自分の頭が固いのが根本の原因・・・もっと勉強します!
0903デフォルトの名無しさん05/02/22 20:06:30
activeってなんだかな
0904デフォルトの名無しさん05/02/22 21:43:22
ttp://www.geocities.jp/wininet_dll_jp/
このHPをサンプルに使って、POST処理を作ってみたのですが、
POSTのボディ部をPHPの受信側が受け取りません。
パケットキャプチャしてみた結果では、ボディ部はちゃんと
送信していました。
同様にPHPで作ったPGでPOSTしてみて、
結果ではうまく値がわたったので、受信側はうまく動いていると思います。
どうぞよろしくお願い致します。
0905デフォルトの名無しさん05/02/22 21:49:46
>>904
WebProg板でやれ
0906デフォルトの名無しさん05/02/22 21:52:06
スレ違いではあるかもしれないが・・・
WebProg板でもないような
0907デフォルトの名無しさん05/02/22 22:02:59
>>904
Content-Typeをapplicaiton/x-www-form-urlencodedに設定したらどうだろう
むかしそれでPHPがPOSTを受け取らなかったことがある
(今はしらんが)
090890405/02/22 22:52:14
>>905
>>906
言われてみるとソケットはつかってませんね。
すみません。
>>907
WinInetでは、Content-Typeは自動で設定されてるっぽいです。
手動で書く方法探します。
ありがとうございました。
090990405/02/23 13:00:33
>>907
教えてくださった方法でPOSTできました!
ありがとうございます
0910デフォルトの名無しさん05/02/23 19:42:49
MMOを作ろう!企画を立ち上げました。協力できる人はこちら
http://www112.sakura.ne.jp/~kaientai-project/creategame.htm
0911デフォルトの名無しさん05/02/23 20:52:39
>>910
結構前に何処かのスレでそれ見たけど、急募ってのが気にいらねぇ。

個人の集まりでやろうってのに、技術系すべていないからって急募なんて書くな。

参加してみようなんて思ったが最後、
お前らの無茶な注文を、無茶な期限で要求されるんだろ?どうせ。
0912デフォルトの名無しさん05/02/23 21:59:52
多分マルチなんだろうな
つーか、基本設計すらまともに出来てない時点で急募なんてありえない
0913デフォルトの名無しさん05/02/23 22:09:32
何気なくしらべてみたら、
どっかのMMO開発コミュニティのサイトに出入りしてた奴みたい。

で、>>910のリーダーは作れ作れ!!ってタイプの人で、もめて抜けた模様。
んでもって対抗意識燃やしてサイトを立ち上げたってことらしい。

まぁ、技術者は関わらんほうが身のためやね。
0914デフォルトの名無しさん05/02/23 22:16:39
>>912
もろにマルチだよ。ココ(↓)が発信源。
ttp://game10.2ch.net/test/read.cgi/mmominor/1108379282/
マトモな人間が1人も来ないから、焦ってるんだろ。
0915デフォルトの名無しさん05/02/23 22:45:41
なんか定期的に涌いてくるよね。ウジムシみたいに。
0916デフォルトの名無しさん05/02/23 22:54:34
よせよ。ウジムシが聞いたらあんなのと一緒にするなと怒るぞ。
0917デフォルトの名無しさん05/02/24 00:44:04
おまえら本物のウジムシ見たことあるか?
0918デフォルトの名無しさん05/02/24 01:19:38
小学校のとき、机の中で半年間熟成させていた西田君のパンに群がるそれを見た。
0919デフォルトの名無しさん05/02/24 09:28:18
隣に住んでいた人にたかってた。
そのときまで住んでいると思ってたが
発見時はすでに過去形だった。
0920デフォルトの名無しさん05/02/24 10:53:02
外に置いていた犬のえさ(開封済み)にうじゃうじゃ入ってた
0921デフォルトの名無しさん05/02/24 11:50:57
http://www.tiduru.sytes.net/img-box/img20040727015957.jpg
0922デフォルトの名無しさん05/02/24 11:52:05
↑見ちゃだめ
0923デフォルトの名無しさん05/02/24 12:01:36
>>922
そんな事言われると見たくなるじゃん・・・・。
0924デフォルトの名無しさん05/02/24 13:25:39
消えてる・・orz
何だったのかキニナル
0925デフォルトの名無しさん05/02/24 13:42:34
37 名前:Now_loading...774KB[sage] 投稿日:05/02/21(月) 14:18:01 ID:xkFzV6TY
ttp://www.tiduru.sytes.net/img-box/img20040727015957.jpg

よろしくお願いしますた〜


39 名前:耳 ◆vGDY2306tM [sage] 投稿日:05/02/21(月) 14:19:46 ID:uD2cFR3+
>>37
ダークロリータへ飛ぶので激しく有害です
踏まないようにして下さい

勇気が無くて見れない画像解説スレinフラ板Part143
http://pc5.2ch.net/test/read.cgi/swf/1108909968/37-39
0926デフォルトの名無しさん05/02/25 01:24:52
いっとくけど>>921はトロイだよ

ここで話題になってたが
http://pc5.2ch.net/test/read.cgi/tech/1108172110/
対策してないやつはヤバイぞ
0927デフォルトの名無しさん05/02/25 07:39:57
自分のシステムにあるEthernetインターフェースすべてを取得する方法だれか知っていますか?
最終的にはそれらのMACアドレスがほしいのです。
0928デフォルトの名無しさん05/02/25 07:45:26
>だれか知っていますか? 

知っています。これで満足ですか?
0929デフォルトの名無しさん05/02/25 07:47:10
>>927
その質問でお前が知りたい環境がわかる人がいるとおもうのか?
0930デフォルトの名無しさん05/02/25 07:59:29
>>927
http://discypus.jp/wiki/?Windows%2FNetwork%20Programming#content_1_3
> MACアドレスなどの取得
> GetAdaptersInfo
0931デフォルトの名無しさん05/02/25 08:29:02
あい変わらずじゃのお。


>>930 どうもでした。
0932デフォルトの名無しさん05/02/25 14:22:57
自分の環境かかないやつはWindowsと仮定しとけばおけ
つーことか。
0933デフォルトの名無しさん05/02/25 14:33:28
このレベルだとネットワークというよりは単にWin32APIについての質問っぽい・・・
0934デフォルトの名無しさん05/02/25 19:55:23
APIの使い方とCそのものの使い方を外して、ネットワーク限定の質問なんてあるのか?w
0935デフォルトの名無しさん05/02/25 19:56:29
ネットワーク限定の質問ならいくらでもあるだろ。
ただ、プログラミングの質問は殆ど消えるけどなw
どちらかと言うと概念とかのネットワーク技術系だなw
0936デフォルトの名無しさん05/02/25 20:00:51
>>934
いっぱいあると思うけど。
つい最近でたものだと、PHPはPOST受けるときにContent-Typeの選り好みが厳しいという話とか、
TCPのパケット(データ)順の保証はストリーム単位だという話とか、
同時接続数が異様に多い場合には接続毎にスレッドを立てるのは好ましくないという話とか。
0937デフォルトの名無しさん05/02/25 21:36:32
それ通信技術板の範囲にならない?
何もプログラミング限定の話じゃないような・・・。
0938デフォルトの名無しさん05/02/26 01:40:41
ここは
ネットワークプログラミング相談室 Port12
0939デフォルトの名無しさん05/02/26 01:52:09
half-closed関係の話題は、
APIの使い方、Cそのものの使い方とは外れたところの議論も、
ネットワークプログラミングの話題だな。
0940デフォルトの名無しさん05/02/27 14:41:15
Winsockで送信バッファにたまってるデータのサイズを取得するにはどうすればいいでしょうか?
送信バッファの最大サイズではなく送信バッファにたまってるデータのサイズです。
0941デフォルトの名無しさん05/02/27 15:13:08
取得不能。はい次
0942デフォルトの名無しさん05/02/27 15:42:13
Winsockで送信済みのデータのサイズを取得するにはどうすればいいでしょうか?
送信バッファへの送信サイズではなくデータリンク層への送信のサイズです。
0943デフォルトの名無しさん05/02/27 19:28:25
取得不能。はい次
0944デフォルトの名無しさん05/03/01 09:27:44
0945デフォルトの名無しさん05/03/01 15:42:46
しばらくデータを転送していて、あるときrecvした瞬間、
PC全体が回線から切断される場合としてどんな場合が考えられますか?
recvした後、エラーがあったことを確認した時点で、
既に切断されているんですが
0946デフォルトの名無しさん05/03/01 15:50:15
「recvした瞬間」に「PC全体が回線から切断され」るんじゃなくて、
「PC全体が回線から切断され」た瞬間に、recvがエラーで返るんじゃないの?
0947デフォルトの名無しさん05/03/01 15:52:26
ワシもソレに一票
ハードを変えてみるとか原因究明してみては
094894505/03/01 15:55:13
その方向で検証してみます。
ありがとうございました。
0949デフォルトの名無しさん05/03/01 16:19:12
>>948
使っているOSの方面で調べるのもいいかも。
たとえばUNIXの一派は、IPアドレスが重複しているのを見つけると、
「PC全体が回線から切断」します。インターフェースが"down"するから。
0950デフォルトの名無しさん05/03/01 21:21:20
--------------------Configuration: SimpleNetwork - Win32 Debug--------------------
Linking...
main.obj : error LNK2001: unresolved external symbol "int __cdecl DoWinsock(char const *,int)" (?DoWinsock@@YAHPBDH@Z)
Debug/SimpleNetwork.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

SimpleNetwork.exe - 2 error(s), 0 warning(s)

wsock32.libとwinsock.libを追加してるのこのメッセージが出ます。
よろしければ解決方法をお教え下さい。m(__)m
0951デフォルトの名無しさん05/03/01 21:49:07
DoWinsock関数を含んだ.cppファイルがリンクされてないだけ
っつーかスレ違い
0952デフォルトの名無しさん05/03/01 22:00:02
なんかもう、すべてが釣りに見える今日このごろ。
0953デフォルトの名無しさん05/03/01 22:46:02
お取り込み中大変恐縮ですが、
次スレの時間です。
0954デフォルトの名無しさん05/03/02 03:41:06
このスレの進むペースだと、あと4日くらい余裕があるヨカーン


釣られなければ。
0955デフォルトの名無しさん05/03/02 08:08:31
リアルタイムにネットワークの転送量を表示したいのですが、
式はどうなるのでしょうか?
dwInOctets
dwInUcastPkts
dwInNUcastPkts
は表示できるのですが、Octetsは通信してない時も値が入ってますし・・
どうかよろしくお願いします。
0956デフォルトの名無しさん05/03/02 08:23:52
例えば、dwInOctets の値を毎秒調べて前回からの差を求めれば、
最近1秒間の転送量がわかるべ。
つうか、WindowsならWindowsだと書け。
0957デフォルトの名無しさん05/03/02 11:24:20
dw〜
の名前でWindowsってわかるだろ?
こういうのを自明っていうんだが。
0958デフォルトの名無しさん05/03/02 11:27:56
自明でも、質問する時に前置きするのはマナーだと思われ。
そんなこといったら、dwInOctets の差分取れやってのも自明だし笑。
0959デフォルトの名無しさん05/03/02 11:53:50
マルチ野郎は無視するのが一番
0960デフォルトの名無しさん05/03/02 13:17:18
どの OS のどの API かも書かないような出し惜しみ野郎も無視するのが一番。
質問者としては最低だな。
0961デフォルトの名無しさん05/03/02 13:49:05
>>959-960
んだんだ。
0962デフォルトの名無しさん05/03/02 14:48:23
回線が切断されたらrecvは0を返すんじゃないか?
096394505/03/02 17:52:52
あれから色々試しましたが、未だに原因がわかりません。
詳しい状況を書くので、どなたか原因に心当たりはございませんか?

[現象]
Winsockを使ってしばらくデータを転送していると、
PCごとネットワークから切断される。
あるときselectの戻り値が0になるので、
Errorを調べるとLastErrorは0になっているので、
通常のタイムアウトが起こっているようです。
>>946 >>947 がご指摘の通り、まずPCがネットワークから切断されて、
その結果selectがタイムアウトを起こしているように思えます。

切断されるまでは、ループ内で延々ReadFileを使ってソケットからデータを読み出してます。
(recvを使った場合も同じ現象が起こります。)

ネットワーク切断時、相手からの送信は届いているのに、
こちらからは送信できない状態がしばらくの間続くみたいです。
でも、shutdownやclosesocketはその時点では使われていないはずです。

ネットワークのプロパティから、ローカルエリアネットワークを一度無効にして、
再度有効にしようとすると、'接続に失敗しました。'というメッセージが表示されます。

[環境]
OS - Windows XP Professional SP1
開発環境 - Delphi 6 Professional
PCはルータ内です。
プログラムを起動していたPCが切断されても、LAN内の他のPCは切断されません。

以上、どなたかご教授ください。
0964デフォルトの名無しさん05/03/02 18:12:12
安物NIC使ってるんじゃねーの。
0965デフォルトの名無しさん05/03/02 18:20:57
色々試した色々の内容を言わないわけだからナメてるよな
0966デフォルトの名無しさん05/03/02 20:00:18
>>965
書いてあるじゃん。
0967デフォルトの名無しさん05/03/02 20:06:50
つまり、何もしてないという事か
096885805/03/02 20:41:00
>>963
試しにNIC交換してみては?
見当違いなら申し訳ない。。。
0969デフォルトの名無しさん05/03/02 20:43:58
名前欄消すの忘れてた...orz
0970デフォルトの名無しさん05/03/02 22:06:38
>>963
あのね、それは完全にNICに繋がってるケーブルの断線不良の症状。
接点復活剤とか使ってみ。
097196305/03/03 00:54:37
お騒がせしました。
どうやらNICの問題のようなので、後日新しいものを購入して実験します。
マザーボード上のNICを使っているため、交換はできませんでしたが、
別のPCから実験したところ、通常通り当該接続のみ切断されました。

>>968 >>970 どうもありがとうございました。
0972デフォルトの名無しさん05/03/03 02:41:47
Port13の時期か。
俺は最近スレッドを立てたから無理。
0973デフォルトの名無しさん05/03/03 07:24:49
テンプレの
>TCP/IPによるネットワーク構築〈Vol.3〉―クライアント‐サーバプログラミングとアプリケーション
>http://www.amazon.co.jp/exec/obidos/ASIN/4320028007/
は
TCP/IPによるネットワーク構築〈Vol.3〉
Linux/POSIXソケットバージョン―クライアントサーバプログラミングとアプリケーション
http://www.amazon.co.jp/exec/obidos/ASIN/4320120841/
の方がよくない?
0974デフォルトの名無しさん05/03/03 07:33:21
Unicode文字列バッファをそのまま送信することについて所見を伺いたい。
0975デフォルトの名無しさん05/03/03 07:41:07
>>974
別に問題無いと思われ
受信側の解釈が問題なだけで
0976デフォルトの名無しさん05/03/03 07:44:58
そうは言っても、エンディアンの異なる環境では当然Unicodeのバッファの並びも違うよね?
0977デフォルトの名無しさん05/03/03 08:26:26
>>976
エンディアンは決まってるから違わない
0978デフォルトの名無しさん05/03/03 08:47:23
>>977
ということは、数字の"1"をUnicodeで表現した場合、
プラットホームに依らず、「0x31 0x00」の順番ってこと?
0979デフォルトの名無しさん05/03/03 09:03:38
>>978
違う
0980デフォルトの名無しさん05/03/03 09:08:58
ふつう、 ttp://e-words.jp/w/UTF-16.html くらいの配慮するか
TCP/IPでおきまりのビックエンディアンにあわせるな
0981デフォルトの名無しさん05/03/03 09:10:36
どっちがどう違うのか。
いい加減、本当のこと教えてもらえないだろうか?
0982デフォルトの名無しさん05/03/03 09:49:14
>>981
もう少し待ってくれ。
0983デフォルトの名無しさん05/03/03 10:33:37
まだか?
0984デフォルトの名無しさん05/03/03 10:40:13
Port13の時期
http://pc5.2ch.net/test/read.cgi/tech/1109793931/
0985デフォルトの名無しさん05/03/03 11:04:33
>>976
Unicodeは文字セットであって符号化方式ではない。
符号化するんなら UTF-8 なり UTF-16 + BOM なり UTF-16LE なり
UTF-16BE なり決めればプラットフォーム依存なんてしない。

「バッファをそのまま送信」したいんなら、「このプロトコルでは
UTF-16LE にします」とでも決めればよろしい。
0986デフォルトの名無しさん05/03/03 11:16:52
もうね、CPUはインテルタイプだけ使っていればいいんだよ
0987デフォルトの名無しさん05/03/03 11:28:54
インテルもItaniumやXScaleはbi-endianだったりするが。
0988デフォルトの名無しさん05/03/03 11:29:32
SJIS、EUC用に作った文字列操作ライブラリをUNICODE用に移植した場合に、
中途半端にちゃんと動くリトルエンディアン。

ビッグエンディアンだと、かなり手を入れないと明らかにおかしな動きをするので
プログラマが移植に真剣に取り組む効果が期待できると思う。
ビッグエンディアンの方が潜在バグが消滅するまでの時間が短くなる希ガス。
0989デフォルトの名無しさん05/03/03 11:37:16
>>988
氏ね。

>>963
プログラミング関係ないんじゃないの?
その他アプリも接続が中断するんでしょ?
0990デフォルトの名無しさん05/03/03 12:48:24
>>988
氏ね。
0991デフォルトの名無しさん05/03/03 13:54:46
マジレスすると、特定のOS依存でプロトコル公開するつもりも
なければ、どうでもいいんじゃないの?

インターネット標準を目指すのなら論外なのでやめるべき。
Informational な RFC を目指す場合も、まあ好まれないのは
間違いない。

ネットワークの勉強をする場合も、OS/機器独立な表現の仕方
くらいは知っておくべき。分かってて状況に応じて使うのなら
問題ないが。
099298805/03/03 20:20:08
>>989
>>990

氏ぬべきほどの事を書いてしまったでしょうか?
0993デフォルトの名無しさん05/03/03 21:04:37
逝�`
0994デフォルトの名無しさん05/03/03 22:24:22
994様
0995デフォルトの名無しさん05/03/03 23:21:59
995リラ
0996デフォルトの名無しさん05/03/03 23:22:30
996 octet
0997デフォルトの名無しさん05/03/03 23:23:59
1000をとれと?
0998デフォルトの名無しさん05/03/03 23:25:08
htons(998);
0999デフォルトの名無しさん05/03/03 23:25:47
3*3*3*37
1000デフォルトの名無しさん05/03/03 23:25:57
↓1000ゲットおめでとう。
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。