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

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん ◆OaTCP/IPW6
2デフォルトの名無しさん:04/12/07 22:58:03
図書コーナー!(^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/
3デフォルトの名無しさん:04/12/07 22:59:15
★図書追加
TCP/IPによるネットワーク構築〈Vol.1〉原理・プロトコル・アーキテクチャ
http://www.amazon.co.jp/exec/obidos/ASIN/432012054X/
4デフォルトの名無しさん ◆TCP/IPmFAM :04/12/07 23:00:38
5デフォルトの名無しさん:04/12/07 23:00:44
今までに出てきた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
6デフォルトの名無しさん:04/12/07 23:01:18
御免、かぶっちゃった、まかせます。
7デフォルトの名無しさん:04/12/07 23:01:19
問題ありのサイト

ネットワークプログラミングの基礎知識
http://X68000.q-e-d.net/~68user/net/
8デフォルトの名無しさん:04/12/07 23:01:53
乙。
9デフォルトの名無しさん:04/12/07 23:02:14
追加分

★図書
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/
10デフォルトの名無しさん:04/12/07 23:02:51
11デフォルトの名無しさん:04/12/07 23:05:29
こんなもんかな(・_・)
12デフォルトの名無しさん:04/12/07 23:05:46
13デフォルトの名無しさん:04/12/08 01:06:57
なんでクックロビン音頭が
14デフォルトの名無しさん:04/12/08 02:08:34
質問です。win9xで動くパケットフィルタを作るのに何か良い方法はありませんか?
調べてもwin2k/XP用の情報しか見つからなかったので。
15前スレ808:04/12/08 11:06:37
送信する際に、送信パケットの先頭にプレフィックス(2byte)を付ける事にしたのですが、受信の仕方について少し質問があります。
受信する際に、プレフィックス分(2byte)を先にrecv()して、そのデータから次にくるサイズを判断して、そのサイズ分recv()するというコードを組んだのですが、
FAQを読み返すと、silly window syndromeが発生しそうなのですが、こういったコードは止めた方が良いのでしょうか?
それと関連して、recv()する際のバッファの大きさというのは、どれくらいが理想なのでしょうか?極端な話、1Mくらい取っても平気なのでしょうか?
16デフォルトの名無しさん:04/12/08 11:13:10
大きくしても平気だが、中に1MBぶんのデータが入っているとは限らない。
17デフォルトの名無しさん:04/12/08 11:32:53
>そのデータから次にくるサイズを判断して、そのサイズ分recv()するというコードを組んだのですが、
ここが問題
18デフォルトの名無しさん:04/12/08 11:33:56
>>14
winsock使え
19前スレ808:04/12/08 11:35:41
>>16
あぁ、それはわかっているのですが・・・。
えーと、少し言葉が足りなかったみたいですいません。
速度的に、recv()に指定するバッファの大きさで違いが発生するのか知りたかったのです。
20デフォルトの名無しさん:04/12/08 11:37:10
>>15
受信部のモジュール化がちゃんとしていれば、
後から幾らでも書き換えられるから気にすることはない。
21デフォルトの名無しさん:04/12/08 11:39:44
>>19
silly window syndromeの分は理解しているとして、
バッファーが大きいと遅くなるかって事か?
ならんよ。仮想記憶上のメモリ食うのは食うけど、速度とはほとんど無関係。
22前スレ808:04/12/08 11:40:27
>>17
ということは、やはり、ある程度の大きさのバッファにrecv()した後に、
最初の2byteを見て、その後に続くバッファを切り分ける方法で良いのですかね?
23前スレ808:04/12/08 11:49:37
って、書き込む前にリロードしたほうがいいですね。

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

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

クライアント側で

while(){
reeive(cahr buff)
}

みたいなルーチンで大丈夫なんでしょうか?
なんか失敗することがあるんですが
30デフォルトの名無しさん:04/12/09 13:59:56
>>29
> reeive(cahr buff)

> なんか失敗することがあるんですが
31デフォルトの名無しさん:04/12/09 14:00:48
馬鹿は無理してレス付けないでいいですよ。
32デフォルトの名無しさん:04/12/09 14:08:43
>>29
send や recv のドキュメント読めばだいたい書いてあると思うけど。
受け取った中身自体は、TCPの場合だいたい信頼するのが普通。
チェックしろという要件があるなら、自前でCRCでもつけとく。
33デフォルトの名無しさん:04/12/09 14:12:42
受信の失敗の心配してねえんだよばか
34デフォルトの名無しさん:04/12/09 14:13:55
>>29
関数の戻り値を全てチェックして発生しうるエラー全種類に対して適切な対応しろ。
以上。
35デフォルトの名無しさん:04/12/09 16:09:21
前スレ最後の方でアホな質問をしていた者です。さきほどは失礼しました。
バイナリデータを含む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に変えたりしましたが
状況は変わりませんでした。
本当に困っています。どなたかアドバイスお願いします。
36デフォルトの名無しさん:04/12/09 17:03:00

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

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


これ、前スレテンプレにもありましたが何が問題?
37デフォルトの名無しさん:04/12/09 17:13:23
>>36
わかるまで勉強シロ
38デフォルトの名無しさん:04/12/09 17:53:18
理由添えずにさらしてるだけなのはただの中傷
39デフォルトの名無しさん:04/12/09 17:58:48
ネットワークルプロルラリングにはRubyが最適!
40デフォルトの名無しさん:04/12/09 17:59:23
>>36
Perl使ってるから。
Rubyを使わない奴はただのDQN
4136:04/12/09 18:07:17
>>37
勉強はしてるんですが・・・

>>40
マジですか w

前スレにはこれについてのカキコは無いですよね?
ポイントだけでも教えて。
42デフォルトの名無しさん:04/12/09 18:08:52
>>35
C言語の勉強からやり直しー
43デフォルトの名無しさん:04/12/09 18:14:03
webDAVに関してですがjakarta slideは
SSLやproxyに対応していますか?
44デフォルトの名無しさん:04/12/09 18:20:02
知らない奴はレスしないで下さい。ウザイだけですから
45デフォルトの名無しさん:04/12/09 18:30:03
Rubyは採鉱言語
46デフォルトの名無しさん:04/12/09 18:33:04
Ruby!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4735:04/12/09 18:34:16
>>42
Cのデータ型を勉強したほうがいいでしょうか?
48デフォルトの名無しさん:04/12/09 18:37:49
>>47
>send(sock, net_byte+data, sizeof(data)+4, 0)

net_byte+data
ってなに?
4935:04/12/09 18:44:44
>>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);
5035:04/12/09 18:46:55
連続書き込み失礼します。

メモリウィンドウで送信したデータと
受信したデータを比較しましたが、やはりバイナリデータの部分だけ
壊れていました。一応報告まで。
51デフォルトの名無しさん:04/12/09 18:49:00
その配列のデータが本当に受信したものなのかただのゴミなのか区別してるのか?
rtnを越えた部分のデータはゴミだぞ。
52デフォルトの名無しさん:04/12/09 19:01:24
>>49
データのIOについてよく分かってないなら、まずネットワークへの出力より先に
ファイル出力で試しをやってみたら?writeも似たような書式なわけだし。大した
差はないけど、ネットワーク絡みの問題を避けて、基本部分のチェックができる
から。
53デフォルトの名無しさん:04/12/09 20:11:30
0とOの区別がつかないなら眼科に行ったほうがいい。
54デフォルトの名無しさん:04/12/09 20:13:43
>>49=35
51が正しい指摘してるよ。
送った分だけ受信するには、送ったバイト数受け取るまでループして受信を続けなくてはならない。
55デフォルトの名無しさん:04/12/09 20:15:52
つーかsocketのAPIなんて数少ないんだから先にリファレンス嫁と。
56デフォルトの名無しさん:04/12/09 22:15:37
質問です。
ソケット・ディスクリプタを別の実行プログラムに引き渡す方法として、
値をそのままプログラム引数で引き渡してやると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では、ソケット・ディスクリプタをプロセス超えて複製する
正しい手順などあるのでしょうか?
5756:04/12/09 22:19:38
すいません、少し訂正です。

<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しても問題なく動く
58デフォルトの名無しさん:04/12/09 22:21:14
GyRCI1IjdSNiI3khKiEqISohKiEqISohKiEqISohKiEqISohKiEqISohKiEqISohKiEqISohKiEq
ISohKiEqISohKiEqISohKiEqISohKiEqISohKiEqISohKiEqISohKiEqGyhC
5936:04/12/09 22:42:45
>>56
なにを持って正しいとするか。
動けばいい、ならば動作すれば正しい。
作法が重要、ならば正しい作法で。
上司が大変、ならば退職届を書く。
60デフォルトの名無しさん:04/12/09 22:44:49
ファイルデスクリプタを得た後で起動する子プロセスについては正しい。
ttp://www.adl.nii.ac.jp/~moro/unix-programmer/faq-j_2.html#SEC2
61デフォルトの名無しさん:04/12/09 22:46:21
>>59
役だたねぇ回答乙。オナニーは自宅でやれな。
62デフォルトの名無しさん:04/12/09 23:03:00
>>56
前のほうの質問。
fork して exec すれば引き継いだり dup で複製したり確実にできる。
system関数はシェル起動までは引き継がれるだろうが、
その先どうなるかシェルが何なのか解らないとわからない。

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





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

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

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

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

>>56 はdupした後は親の方でclose死体と言っているので
その答えは無意味。
73デフォルトの名無しさん:04/12/11 12:08:50
某A社の通信ライブラリを使ってて,そこにはこんな感じのAPIがあるんだけど
 int sendData(const void *data, int length, int *sleep);
 戻り値 OK .. エラー無し
      WOULDBLOCK .. 非ブロック処理続行
      IOSLEEP .. スリープ可能
      ERROR .. その他エラー
「スリープ可能」って,どういう意味だかピンとくる人います?
この値が帰って来たら,何をすればいいんだろう?
74デフォルトの名無しさん:04/12/11 12:11:56
>>73
つーかマニュアル読め厨房
75デフォルトの名無しさん:04/12/11 12:46:31
>>73
それだけの記述から正確な意味や意図が汲み取れるわけないだろ・・・
7673:04/12/11 13:26:51
やっぱりなあ(;´Д`)いやそうだとは思ってたですよ。
一昨日,上に相談したんだけど,「ちょっと待っててね」ばかりだし。。。
リファレンス読んでも「スリープ可能」しか書いてないし。。。
サンプルコードもないし。。。
あー。。。
77デフォルトの名無しさん:04/12/11 13:29:56
逆汗汁
78デフォルトの名無しさん:04/12/11 15:24:24
>>72
最後のひとつがcloseされるまで使えるよ
79デフォルトの名無しさん:04/12/11 23:03:54
>>73
第三引数の説明もないのか?
80デフォルトの名無しさん:04/12/11 23:20:57
マトモな実装なら、とりあえずsleepをNULLにすればIOSLEEPは戻らない。
81デフォルトの名無しさん:04/12/12 14:00:43
82デフォルトの名無しさん:04/12/12 15:53:23
非同期か同期か
83デフォルトの名無しさん:04/12/13 10:48:26
ストリームソケットで質問です。

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

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

これを連続して行っているのですが、recv()の戻り値が600以下で返ってくる場合があります。
send()って、バッファサイズに指定したサイズを一気に送るのではないのでしょうか?
8483:04/12/13 10:53:50
あ、すいません、FAQにありました。
スレ汚しスマソ。
85デフォルトの名無しさん:04/12/13 12:59:39
基本中の基本だ
8686:04/12/13 22:15:22
下記の感じでHTTPクライアントを作ったのですが、
GETではうまく取得できてもPOSTではうまく取得できません。
ネットでも結構調べてみたのですが、POSTのサンプルを見つけることが
できませんでした。使用言語はCです。ご教授お願いできないでしょうか。
8786:04/12/13 22:16:09
#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のエラーコード獲得
8886:04/12/13 22:16:43
// 初期化を行う関数
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 にコピー
}
8986:04/12/13 22:17:14
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);
90nbuharutumrika:04/12/13 22:17:24

9186:04/12/13 22:17:43
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);
9286:04/12/13 22:18:09
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;
}
93デフォルトの名無しさん:04/12/13 22:28:07
wgetのソースでも読めば?
94デフォルトの名無しさん:04/12/13 22:33:28
GPL!GPL!
95デフォルトの名無しさん:04/12/13 22:45:06
こんなところに長々と何レスも使って見にくいソース貼るなよ
そんなに長いソース見てもらいたいならどこかにファイルで上げろ
9686:04/12/13 22:46:06
すみません。開発環境を書くのを忘れていました。
WindowsXP SP2で、C++ビルダー6.0で開発しております。
Unixだと結構書き直しがいるみたいでしたので。
Unixのようですが一応wgetとGPLも調べて参考にさせていただきます。
97デフォルトの名無しさん:04/12/13 22:47:45
libcurlでも使ったら楽だ。
9886:04/12/13 22:50:10
95>>配慮に欠けておりました。申し訳ありません。
99デフォルトの名無しさん:04/12/13 23:42:56
etherealで、ブラウザがPUTしている時のパケットを覗き見て参考に。
自分のプログラムとの違いを調べてみれば?
その前にHTTPのRFCはちゃんと読んで欲しいが。
100デフォルトの名無しさん:04/12/13 23:59:46
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
101デフォルトの名無しさん:04/12/14 00:00:13
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=
102デフォルトの名無しさん:04/12/14 00:29:28
>>86
POST するデータ本体を send していない。
POSTするデータのContent-TypeもContent-Lengthも送っていない。

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

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

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

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

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

> 通信手段としてDBを使

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


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

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

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

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

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

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

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

121デフォルトの名無しさん:04/12/14 22:23:13
2相コミット
122デフォルトの名無しさん:04/12/15 00:12:52
なんだか、「歩いて10分の隣町に地下鉄を乗り継いで一時間で到着」な感じ。
123デフォルトの名無しさん:04/12/15 00:30:40
新宿から丸の内線で池袋まで行くとそんな感じになるね。
124デフォルトの名無しさん:04/12/15 00:38:49
このスレって低水準I/Oばっかで、他は弱い人多いのかな。

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

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

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

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

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

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

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

ネットワーク系の用語はケース毎に置き換えで対応してる感じだし
正確さとか明解さを重視すると英語そのままになる
134デフォルトの名無しさん:04/12/15 14:19:36
「つなげています」→「つながりました」(つながっています?)
「接続しています」→「接続しました」
「接続を開始します」
「接続の準備中です」
135デフォルトの名無しさん:04/12/15 14:25:55
>>133
なんか、ウソでもいいからJISあたりに規格無いものかな
136デフォルトの名無しさん:04/12/15 15:37:29
あえて日本語にする場合は、接続処理中、接続中、切断処理中、切断中とかにしてるなぁ。
137デフォルトの名無しさん:04/12/15 16:13:38
C言語です。IPアドレスを指定して、そのIPアドレスを持つホストが起動しているか
を確認するプログラムを作りたいのですが、どうやって起動しているか判断すればいいのでしょうか?
138デフォルトの名無しさん:04/12/15 16:20:48
こたえがかえってこなかったら
139デフォルトの名無しさん:04/12/15 16:21:00
>>137
pingじゃだめ?
140デフォルトの名無しさん:04/12/15 16:21:54
C言語さんこんにちは。
141デフォルトの名無しさん:04/12/15 16:24:09
>>137
ポート全スキャンして、反応があるかどうかを確認する。
142デフォルトの名無しさん:04/12/15 16:25:10
UDPでファイルの送受信をしているのですが、画像など,100KBくらいを超えたデータになると受信できなくなります。
理由としてどのようなものが考えられますか?
ちなみに,パケットサイズは160としています。
143デフォルトの名無しさん:04/12/15 16:30:35
一部が欠けて困るようなデータをUDPにするなと何度言わせれば・・・
しかもサイズ160って・・・
144デフォルトの名無しさん:04/12/15 16:43:01
「受信できなくなります」じゃ状況がいまいちわからん
145デフォルトの名無しさん:04/12/15 17:01:16
例えば,「a」を1000個くらいテキストファイルに書いて送ると,受信側では10個くらいになってしまっているんです・・・。
146デフォルトの名無しさん:04/12/15 17:11:35
UDPはデータが減っても文句は言えない
147デフォルトの名無しさん:04/12/15 17:16:48
それどころかabcdefgになっても文句は言えない
148デフォルトの名無しさん:04/12/15 17:26:46
さらに1500個になっても文句は言えない
149デフォルトの名無しさん:04/12/15 17:32:19
>>145
まずUDPとは何かをよーく調べろ。
150デフォルトの名無しさん:04/12/15 18:59:12
なぜUDPを選択したんだ?
151デフォルトの名無しさん:04/12/15 19:09:12
簡単そうとでも思ったんじゃない?
152デフォルトの名無しさん:04/12/15 20:32:02
あ、どうもUDPです。
153デフォルトの名無しさん:04/12/15 20:33:42
どうせものすごい勢いで送りまくってるんだろうな。
送信元PCのバッファから外に出て行ってない悪寒。
154ヤギの配達人:04/12/15 23:12:43
>>152
お前がUDPか!
何回言えば分かるんだ。
今度IPも連れてきなさい。
155TCP:04/12/15 23:13:55
ああ、またUDP君、怒られてるぅ
僕に頼めばいいのにぃ

マターリ砲発射!

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

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

>>140
こんばんわ

>>141
ポートスキャンすればいいということでしょうか?もしサーバが起動していなくても
ポートスキャンは可能なんでしょうか?
159デフォルトの名無しさん:04/12/15 23:51:19
>>156
SOCK_SEQPACKET?
160デフォルトの名無しさん:04/12/16 00:27:25
UDPって言ってるんだから、PF_INETで
PF_INETにSOCK_SEQPACKETは無いだろ?

順序保障されたDGRAMがほしければRTP使えば?
ってのをどこかで見たおぼえはある。
161デフォルトの名無しさん:04/12/16 02:47:20
>>158 == >>137
ICMP
162デフォルトの名無しさん:04/12/16 08:19:48
>>158
> プログラム中でpingとかできるんですか?

pingは単なるraw socket programです。
163デフォルトの名無しさん:04/12/16 17:28:25
SOCK_STREAMで一度に遅れるのは何バイトまでですか?
164デフォルトの名無しさん:04/12/16 17:36:44
>>163
遅れるか遅れないかは環境次第です
165デフォルトの名無しさん:04/12/16 17:58:10
RPC使えば?
166デフォルトの名無しさん:04/12/16 18:14:54
ローカルで動くパケットフィルタを作るためにはどんな方法がありますか?
そのPCに届いたパケットのIPをチェックして特定のものを破棄する、というような事がやりたいのですが。
167デフォルトの名無しさん:04/12/16 18:21:02
OSすら指定しませんかそうですか
168デフォルトの名無しさん:04/12/16 18:32:08
あ、間違い>>163
SOCK_STREAMで一度に送れるのは何バイトまでですか?って事ですから
169デフォルトの名無しさん:04/12/16 18:34:32
すみません、Win2k/XPで。言語はC。
170デフォルトの名無しさん:04/12/16 21:16:48
2Gバイトぐらいまで大丈夫じゃなかろうか。
171デフォルトの名無しさん:04/12/16 21:20:14
>>166
Filter-Hook Driver
172デフォルトの名無しさん:04/12/16 22:01:23
>>163
何バイトか想定してはいけない。
173デフォルトの名無しさん:04/12/17 02:09:33
>>168
実装依存、環境依存。
174デフォルトの名無しさん:04/12/17 02:35:10
ストリームに「一度に送る」なんて概念はないわけだが
175デフォルトの名無しさん:04/12/17 08:20:06
24シーズン3でドメイン名からIPアドレスを検索できないように
してるってのがあったんだけどどうやるの?
176デフォルトの名無しさん:04/12/17 09:00:00
JPNICに登録しない。
177デフォルトの名無しさん:04/12/17 09:22:11
>>175
お名前.comで代行サービスもやってるけどな
http://www.onamae.com/other/news/onamae/#041214
178デフォルトの名無しさん:04/12/17 09:22:54
ごめんIPアドレスの話か、登録情報と勘違いした。スマソ
179175:04/12/17 10:22:16
でも接続した時点でnetstatすればばればれだよね?
180デフォルトの名無しさん:04/12/17 11:05:13
もっと勉強しろ。
181175:04/12/17 11:08:16
24シーズン3みんな見た?
182デフォルトの名無しさん:04/12/17 11:16:22
スレ違い
183デフォルトの名無しさん:04/12/17 11:17:51
プログラミングに関係ない。
184175:04/12/17 11:40:42
ム板は真面目過ぎ
185デフォルトの名無しさん:04/12/17 11:44:08
>>184
DNSがいるから名前が引けるんだよ
186デフォルトの名無しさん:04/12/17 11:57:36
ローカルの話としてDNSをいじってアドレスの解決ができないようにすることは
可能だけど、それやっちゃうとアドレスとしての意味がなくなるわけだからグロ
ーバルでは無理。

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

それは私の所有するアドレスです。勝手につかわないでください。
188デフォルトの名無しさん:04/12/17 12:11:26
192.168.0.2は俺のだから、みんなそこヨロシコ。
189デフォルトの名無しさん:04/12/17 12:11:38
>>186
スレ違いな上に内容も浅い。
190175:04/12/17 12:23:51
落ち着け
191デフォルトの名無しさん:04/12/17 16:51:37
>>175
24のとは違うけどモデム経由でuunet接続すれば、メールやNetNewsに
限ってはIPアドレスなしのドメイン名でアクセスできる。
いまだに運用されている地域があるかどうかはわからないけど・・・
192デフォルトの名無しさん:04/12/17 20:57:51
>>186
っていうか
漫画とかで車のナンバーが5桁になってたりするのと同じで
実アドレスにならないようにわざとはずしたんじゃないかと。
193デフォルトの名無しさん:04/12/17 22:08:55
WinSockの質問です。
javaやUNIXでは行単位で受信する方法がありますが、WinSockで
同じようなことをしようと思ったら手作りするしかありませんか?
sockstream >> recvbuff; とか、sock.getline(recvbuff); の
ような使い方ができるものがあれば使いたいのですが・・・
# MSDNを見た限りでは、見当たらなかったので。
194デフォルトの名無しさん:04/12/17 22:20:10
へー、BSD socketには行という概念があったのか。
Javaはラップしてるだけだし。
195デフォルトの名無しさん:04/12/17 23:05:45
windows上でjavaを使えばいい
196デフォルトの名無しさん:04/12/17 23:28:11
192.0.x.x
とか
192.1.x.x
とか
192.2.x.x
が設定されている環境を何度か見たけど、
このあたりがローカルIPだという迷信はいつ頃広まったの?
197デフォルトの名無しさん:04/12/17 23:30:47
そう設定してる人や
そういう噂を広めた人に聞かないと
198デフォルトの名無しさん:04/12/17 23:46:51
>>194
socketをfdopenすれば、あとはfgetsでいけたりする。
199デフォルトの名無しさん:04/12/17 23:53:49
そんなことは分かってる。
問題は、それがsocketの機能なのか、ということ。
「行」の扱いは、stdioのライブラリがやってることだろ。
200198:04/12/18 00:21:16
>>199
べつに193は「socketに」なんて言ってないが。「UNIXでは」といっているだけ。

くだらない突っ込みする前にソリューションを示したら?
201デフォルトの名無しさん:04/12/18 00:26:09
くだらない突っ込みする前にソリューションを示したら?
202デフォルトの名無しさん:04/12/18 00:34:22
なるほど、>>198に書いてあるのが
くだらない突っ込みではない
的確な解決法というわけですね。
203193:04/12/18 02:00:33
どうやら自分で作らないとだめなようですね
いろいろどうも。
204デフォルトの名無しさん:04/12/18 02:01:41
>>199
↑また馬鹿が登場した。
205デフォルトの名無しさん:04/12/18 08:00:19
>>202 回答できないくせに吠えるアフォって多いよな。この世界。
人をバカにするだけで役に立たないやつ。
206デフォルトの名無しさん:04/12/18 09:36:53
Windows はソケットハンドルとファイルハンドルが別物なんだよねえ。
不便だ。

207デフォルトの名無しさん:04/12/18 09:44:19
実は、NT系なら、SOCKETに対してReadFile(),WriteFile()等が出来たはず。
が、、fdopen()等がHANDLEを受けるインターフェースじゃないので渡せない。
208デフォルトの名無しさん:04/12/18 09:45:08
>>206
それは、Winsockが出始めたころの話。
いまは、同じだよ。
209175:04/12/18 09:48:15
ネットワークプログラミングって楽しいね
210デフォルトの名無しさん:04/12/18 10:25:06
>>207
_open_osfhandle( )して_fdopen( )
Windowsってややこしいね。

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

いずれにせよ、SOCKETを_open_osfhandle( )かfdopen( )かそのままか
してbasic_fstream::open( )にすれば、
>>193 のやりたいことはできると思う。
211デフォルトの名無しさん:04/12/18 10:39:16
212206:04/12/18 11:03:47
>>207 >>208
なんと、知らんかった…。
だいぶ古い知識のまま不便だと思いこんでたのね…orz
213193:04/12/18 12:43:43
>>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);
214デフォルトの名無しさん:04/12/18 12:53:21
>>196
それがSunのグローバルIPとかぶってたせいで
Sunのサイトにアクセスできないという物凄い環境もありますた
215デフォルトの名無しさん:04/12/18 18:17:19
>>214
ワロタ
216デフォルトの名無しさん:04/12/18 18:45:38
>>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.

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

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

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

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

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

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

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

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

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

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

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

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

225デフォルトの名無しさん:04/12/19 11:13:56
>>224
> なぜ自分で作成したプログラムだと副問合せを
> しないのかは謎ぉ〜

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

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

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

ってのが…
231デフォルトの名無しさん:04/12/19 14:59:37
そもそもネットワークプログラミングなのか、これは。
232デフォルトの名無しさん:04/12/19 15:22:01
>主にソケットに関しての質疑応答スレです。
233デフォルトの名無しさん:04/12/19 17:29:21
>主に
234デフォルトの名無しさん:04/12/19 18:58:30
いつのまにかLACNICなんてできてたのか
235デフォルトの名無しさん:04/12/20 05:11:35
HTTPについて質問なんですけど
ETag:ってなんなんでしょうか?

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

>>5のページはリング切れだな。
237デフォルトの名無しさん:04/12/20 11:21:41
>>227
つーか、いまどきは whois-servers.net から CNAME ひっぱって、
そこに whois して終わりだろう。DOS の whois が対応しているか
どうかは知らんけどね。
238210:04/12/20 14:20:08
>>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
239210:04/12/20 14:36:12
いわずもがな
ReadFile(ReadFile((HANDLE)socket, buf, sizeof buf, &read_size, NULL)

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

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

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

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

間違いがないとは思わないけど (ちゃんと内容は見てないが)、間違いあるかもね
と思いながら見てればいいんじゃない?
245デフォルトの名無しさん:04/12/21 17:28:23
過去スレで具体的に指摘されてるから読んでね。
246デフォルトの名無しさん:04/12/21 21:09:38
dat落ちしているって
247デフォルトの名無しさん:04/12/21 21:36:57
>>246
●買いなよ
248デフォルトの名無しさん:04/12/21 22:33:49
249248:04/12/21 22:37:17
返り血見てないってのを除くと、具体的に指摘しているようには見えないね。
どうやら粘着っぽいのも混じっているようだし、なんだかな。

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

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

テンプレに書く価値がないなら削ればいいし、テンプレに書いてもいいけど
問題があるっていうことなら、こういうところがダメって書けばいいだけ
じゃないの? 違うの?
255デフォルトの名無しさん:04/12/22 03:19:02
前スレにあったものをそのままコピペしただけなんじゃないの。
256デフォルトの名無しさん:04/12/22 10:05:23
とにかくただ「問題あり」なんて書いてそのままってのは良くないだろう
257デフォルトの名無しさん:04/12/22 10:17:05
>>254
> こういうところがダメって書けば

マンドクセ
258デフォルトの名無しさん:04/12/22 10:21:57
>マンドクセ
無内容なレスで粘着する暇と気力はあるのにな。
259デフォルトの名無しさん:04/12/22 10:40:11
批評・批判は自由だけど、「問題あり」だけで終わらせちゃダメだよ。立証責任は
批判する側にある。
260デフォルトの名無しさん:04/12/22 10:46:16
いいんだよ。問題ありだけで。
261デフォルトの名無しさん:04/12/22 12:38:01
具体的指摘がマンドクセという人って、
指摘したらそれが批判の対象にさらされるのがわかっていて
嫌がってるだけでしょ

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

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

それはさておき、技術スレが技術と関係ない話題でレスを消費するのは
困るのでここらへんでやめてはくれないか?>議論している人
268デフォルトの名無しさん:04/12/22 19:52:09
そこのサイトの管理人が粘着しているだけだから。
269デフォルトの名無しさん:04/12/22 20:10:10
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の正しいエラー処理がわかりません。
どのような処理を施せばよいでしょうか。
270デフォルトの名無しさん:04/12/22 21:21:43
acceptの挙動はOSにより異なる。

というか、なぜ正しくないと思ったの?
271デフォルトの名無しさん:04/12/22 21:22:56
定石を知りたいだけだろ
272デフォルトの名無しさん:04/12/22 21:25:40
273デフォルトの名無しさん:04/12/22 23:22:36
UDPのサーバープログラムで、データを送ってきた端末のIPを特定するのは、
何の関数を使えばできるのでしょうか?
結構いろいろ調べてみたのですが、わかりませんでした。
宜しくお願い致します。
274デフォルトの名無しさん:04/12/22 23:26:15
そういうのはきちんと学んでいれば当然知ってるはずなので、
断片的・場当たりに検索してすませるんじゃなくて
ちゃんと解説した本を買って通読するのを強く勧める。

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

>>274
このスレの存在意義ないじゃん。
276デフォルトの名無しさん:04/12/22 23:40:18
>>275
> >>274
> このスレの存在意義ないじゃん。

正気か?
277275:04/12/22 23:42:24
説教厨うざい。
278デフォルトの名無しさん:04/12/22 23:44:24
まぁ、基礎的な亊がNGって言っても
ここで高度な亊聞いても、誰も答えられないじゃん。
279デフォルトの名無しさん:04/12/22 23:47:43
高度なことって?
280デフォルトの名無しさん:04/12/22 23:48:33
>>278
> 亊
なぜ俗字? (旧字じゃないよね?)
281デフォルトの名無しさん:04/12/23 00:00:59
>>267
卑怯者の論理だな。
282デフォルトの名無しさん:04/12/23 00:04:35
バカにつける薬なし。
必要な知識は質問されるとは限らないってことがわからないということは、
>>275は人を使った経験はないのだろうな。
283デフォルトの名無しさん:04/12/23 00:05:07
冬休みが終わるまではどうにもならないよこのスレ。
284デフォルトの名無しさん:04/12/23 00:06:33
最高言語RubyこそUNIX精神の欠如です。
285デフォルトの名無しさん:04/12/23 00:07:38
>>280
「基礎的な事」をNGワードにしている奴がいるかもしれないから。
286デフォルトの名無しさん:04/12/23 00:09:52
それをわざわざ回避するほどの内容じゃないと思うが。
287275:04/12/23 00:12:11
>>282
> 必要な知識は質問されるとは限らないってことがわからないということは、

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

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

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

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

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

初歩的な質問で申し訳ございません。
299デフォルトの名無しさん:04/12/24 00:29:57
ソケットは双方向通信。片方shutdown()するまでは。
300298:04/12/24 00:46:24
BeginReceive()とBeginSend()が同時に使えるということでしょうか?
301デフォルトの名無しさん:04/12/24 02:00:13
1つのソケットでsendもreceiveもできる。電話と一緒。
電話機=ソケット
302デフォルトの名無しさん:04/12/24 09:42:47
ソケットはプログラムインタフェースで、送受できると規定しているのはプロトコルだけどね。
303デフォルトの名無しさん:04/12/24 11:16:39
BSDソケットはプログラミングモデルで、
socket()の帰り値を使って読み書きできます。
304デフォルトの名無しさん:04/12/24 11:41:20
誰か翻訳してくれ。

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

    _,,..,,,,_
   ./ ゚ 3  `ヽーっ
   l ゚ ll ⊃ ⌒_つ
   `'ー---‐'''''" 
311デフォルトの名無しさん:04/12/25 02:38:35
質問です。

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

世界一大規模に使われている分散DBであるところのDNSプロトコルもそうしている。
370デフォルトの名無しさん:04/12/27 21:39:42
371デフォルトの名無しさん:04/12/27 22:09:40
>>369
おい、DNSはTCPも定義されているけど、(domain=53)
使われているのは事実上UDPのみだ。
372デフォルトの名無しさん:04/12/27 22:14:47
>>371
うん。だから
>たまにしかこういうことが起きないとするなら
と書いてるわけ。
373デフォルトの名無しさん:04/12/27 22:15:19
あ、でもDNSの場合はinboundのTCPは使わないか・・・
374デフォルトの名無しさん:04/12/27 22:17:18
>>372
そもそも何言っているのか知る気を起こさせない文章(369)だが、
> TCPは既に実装されていて、バグフリーでタダで使える。
これも問題だな。
375デフォルトの名無しさん:04/12/27 22:29:34
>>374
374の使ってるOSでは既存のTCPプロトコルスタックに(既知の)バグがあったり、
既存のがなくて自前で工数かけて実装する必要があったりするわけ?
376デフォルトの名無しさん:04/12/27 22:42:38
374ではないが
わけもわからずバグフリーってのはどうかと。
いやバグは無いだろうねバグは。

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

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


そうは言っても、素人はTCP使えば?ってのはあたっているが。
377デフォルトの名無しさん:04/12/27 22:44:54
>>376
で、何が言いたい?
378デフォルトの名無しさん:04/12/27 22:48:18
>>377
376ではないが
分からないのか?
379デフォルトの名無しさん:04/12/27 22:49:35
>>378
わからないな
説明してくれ
380デフォルトの名無しさん:04/12/27 22:49:59
>>376読んで勉強しろよ。
381376:04/12/27 22:51:02
バグかどうかわかるくらいTCPがわかっているのか?
ということだよ。
382デフォルトの名無しさん:04/12/27 22:54:45
>>381
意味がわからない
全てのプロトコルやレイヤーを熟知していないとネットワークプログラミングを
するなという事か?
383376:04/12/27 23:00:05
>>382
いや、知らないでもできるよ。
だから素人はTCP使えって言ってる。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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



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

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

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

2chらしいな
410デフォルトの名無しさん:04/12/28 16:39:25
電波は文章が長いから他が埋もれる…
411デフォルトの名無しさん:04/12/28 17:25:14
>>405
あ、やべ。初めてウザさを感じた。
関西人じゃないってとこに。
412デフォルトの名無しさん:04/12/28 21:52:36
あの不自然な関西弁見たら、関西人じゃない事まるわかりだと思うぞ。
413デフォルトの名無しさん:04/12/28 22:05:40
>>408-412
うわ〜、[いややね、なりすまし ◆ztMasRA.j2]のこと、
まだ引きづってるやつがいるよ。
サムッ!!
コワッ!!
ここは、そんなこと書き込むところじゃないよ?
大丈夫?
特に君、>>409君のことだよ。
そんなこと言ってあんたが、一番盛り上がってますから〜
残念、電波より無知なのはあんたですから〜 切り!!
m9(^Д^)プギャーーーッ
414デフォルトの名無しさん:04/12/28 22:48:13
引き鶴?
415デフォルトの名無しさん:04/12/29 02:04:39
引き鶴
416デフォルトの名無しさん:04/12/29 12:46:46
非木津留
417デフォルトの名無しさん:04/12/29 13:03:11
非木留奈
418デフォルトの名無しさん:04/12/29 16:34:26
ぴきとぅる
419デフォルトの名無しさん:04/12/29 17:10:10
七尾奈留
420デフォルトの名無しさん:04/12/30 06:56:01
質問です。
今一般的に使われてるDSLなどの環境でTCP接続をした場合
その通信速度は、AGPなどPCのバス速度の何分の一くらいまで下がっちゃうんでしょうか?
というのも、VNCのようなソフトの場合、15fpsも出ませんよね?
純粋に画像データだけだと、何fpsくらいでるのかな?
421デフォルトの名無しさん:04/12/30 07:27:56
>>420
詳しく
422デフォルトの名無しさん:04/12/30 07:59:42
>>421
具体的に書きますと
とあるグラフィックソフトを開発してまして…
複数のリモートComputerで分散処理して、そのレンダリング結果を出力するようなのを作りたいのです。
ただ、出来るだけリアルタイムで処理したいので、仮想グラフィックドライバを作りグラフィックボードと同じ感覚で扱えるようにしたいのです。
その時に、帰ってくるデータの転送速度はAGPと比べてどの程度ボトルネックが発生してしまうのかな? と
423デフォルトの名無しさん:04/12/30 08:02:22
おまいはPCIやAGP(x1)の速度も調べる気はないのかね
424デフォルトの名無しさん:04/12/30 08:11:26
>>422
今一般的に利用されてるAGP 4Xが1066MB/s(上下対称)
一般で利用されてるADSL回線8Mが実質3MB/sほど…(上下非対称)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

「マルチやコピペに回答するバカ」を笑っているだけさ。
456デフォルトの名無しさん:05/01/01 03:18:08
スレが汚れるから消えろテイノウども
457デフォルトの名無しさん:05/01/01 08:26:26
どっちもどっちだ。
コピペにわざわざ回答するのも間抜けではあるが、
それを突っ込む奴も、スレ汚しになるような煽りレス返さなくても良い。
「コピペにマジレス」位のわかりやすい方法でレスするのがベストだ。
458デフォルトの名無しさん:05/01/01 09:03:31
>>455
新年早々熱いね。(藁
459デフォルトの名無しさん:05/01/01 09:34:37
まだやってんのか。
460デフォルトの名無しさん:05/01/01 10:17:29
------------------------折り目------------------------
461デフォルトの名無しさん:05/01/01 15:14:28
-・-・-・-・-・-・-・-・-・-・-・-・-・山折り・-・-・-・-・-・-・-・-・-・-・-・-・-
462デフォルトの名無しさん:05/01/01 15:36:06
それ山折りだっけ?
463デフォルトの名無しさん:05/01/02 23:30:19
ソケットで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コマンドには対応しています。
どういった問題が考えられますでしょうか?
464デフォルトの名無しさん:05/01/02 23:41:45
PORTコマンドを使っていないから。
ftpコマンドのデバッグオプションを使ってみろ。
465デフォルトの名無しさん:05/01/02 23:48:08
あっ、ごめん。パッシブモードか…。
 EPSV
 EPSV ALL
 じゃ、だめ?
466デフォルトの名無しさん:05/01/02 23:54:15
ftp -dでの出力を真似して、
> PORT 192,168,**,*,****,*
< 200 PORT command successful.
> NLST
とやってみたけど、やはりここで応答がなくなります。
467デフォルトの名無しさん:05/01/02 23:56:30
> EPSV
< 500 not understood.
といわれました。
468デフォルトの名無しさん:05/01/03 00:10:13
あぁ、すまん。
もうひとつ端末を開いて、新しくできたソケットにtelnetでアクセスして。
それを読み取ったらOK
469デフォルトの名無しさん:05/01/03 00:43:09
例を示すと、
>>> 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の内容を読み取る。
470デフォルトの名無しさん:05/01/03 00:56:55
なるほど!見事にできました!ありがとうございます。
今までPASVモードの意味がわからず適当にやってましたが、なんとなく意味がわかりました。
もう一個ソケットを作ってそちらで受信するという感じですかね。
471デフォルトの名無しさん:05/01/03 23:46:15
>>470
いえ、FTPは常に別ソケットでデータを転送しますが、伝統的にはクライアント側が
ポートを開き、サーバー側からそのポートに接続してました。 しかしこれはファイアーウォール、
およびNATと相性が悪いのでPASV(受動)モードが作られ、このモードでは2つ目のポートを
サーバー側が開き、クライアント側からそこに接続してデータを受け取るようになったのです。
472デフォルトの名無しさん:05/01/04 02:16:41
なんでFTPってそんな変な方式にしたんだろうな。
プロトコル毎に無理やり変化をつけて嫌がらせしてるとしか思えん。
473デフォルトの名無しさん:05/01/04 10:27:24
嫌・が・ら・せ
474デフォルトの名無しさん:05/01/04 12:27:54
制御用ポートを別に持つことによって、ファイル転送途中でもごにょごにょできるように
するため。
475デフォルトの名無しさん:05/01/04 22:02:23
>>474
何をごにょごにょできるの?
476デフォルトの名無しさん:05/01/04 22:31:46
通常FTPは同時接続人数を指定する。
だから、同時に接続出来るコネクション数で縛ろうとする。
しかし、これをすると、接続したユーザーはダウンロード中に別のファイルをダウンロードしたり、ディレクトリを移動出来なくなる。
それを防ぐ為?
477デフォルトの名無しさん:05/01/04 23:34:38
FFFTPなどでやってみると分かるが、大きなファイルをダウンロード中でも
ディレクトリを自由に移動できたりする。これは制御用ポートを別に持っているため。
478デフォルトの名無しさん:05/01/05 00:24:52
すつもんれす。
ny使っててルータに穴が開けれないときとかに、
「Port0設定」ってするでしょ。
で、それはいいんだけど、ルータに穴が開けれない状態で、
「Port0設定」しなかったら、警告がでるじゃない。
あれって、どうやってnyは分かってるの?
何をもって、「このPCは外部から接続を許していませんよ」って
判断してるの?
ね〜、どうやって?
479デフォルトの名無しさん:05/01/05 00:37:30
実際に外から試すんじゃねーの。
ここはネットワークの仕組みじゃなくネットワークプログラミングのスレなんで
自分で作らない人はダウソ板で訊いてよね。
480デフォルトの名無しさん:05/01/05 00:52:35

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

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

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

それデマ。
489デフォルトの名無しさん:05/01/05 19:06:17
>>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 の心配は杞憂。

490デフォルトの名無しさん:05/01/05 20:06:43
絶えずパケット投げてるとkeep aliveは全然違うだろ……。
491デフォルトの名無しさん:05/01/05 21:12:33
「絶えずパケット投げる」とか定義できるの?
492デフォルトの名無しさん:05/01/05 21:21:20
ttcp
493デフォルトの名無しさん:05/01/05 23:27:58
>>489
うちの鯖製品はクライアントと長期に渡ってSSL接続をするのだがデータは10分に一回ぐらいしか
流れないのでNAT接続を切られないためにtcp keepaliveを1分ぐらいに設定している。
494デフォルトの名無しさん:05/01/06 00:30:53
>>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/

が店頭に出ていたよ。
495デフォルトの名無しさん:05/01/06 01:46:27
テキストファイルをアスキーモードでなくバイナリモードのFTPで転送することによる弊害があれば教えてください。
496デフォルトの名無しさん:05/01/06 02:09:52
UNIX用のテキストファイルをWindowsに持ってきたときにメモ帳で読みにくい
497デフォルトの名無しさん:05/01/06 07:09:31
>>496
unix2dosで変換汁
498デフォルトの名無しさん:05/01/07 00:42:57
>>495
何か弊害があるんじゃないかと心配になる。
499デフォルトの名無しさん:05/01/07 01:09:40
>>496
ワードパッドやEclipseで開くけば大丈夫。
500デフォルトの名無しさん:05/01/07 02:15:47
だれも>>440には突っ込まないのか?
501デフォルトの名無しさん:05/01/07 02:42:46
"プラウザ"について?
502デフォルトの名無しさん:05/01/07 08:08:05
503デフォルトの名無しさん:05/01/07 21:15:37
むしろプラウガの親戚と言いきってしまえ
504デフォルトの名無しさん:05/01/07 23:21:43
UNIXネットワークプログラミング〈Vol.1〉ネットワークAPI:ソケットとXTIを読んでいるのですが
この本では getaddrinfo に渡す第3引数 addrinfo のメンバ ai_family に AF_UNSPEC を代入しているのですが
コンパイルが通らないし man では PF_UNSPEC と書いてあるのですがこれは間違いですか?
何か歴史的な理由があるのですか?教えてください
505デフォルトの名無しさん:05/01/07 23:57:41
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
506デフォルトの名無しさん:05/01/08 18:13:23
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になってから仕様が変わったと考えていいのだろうか。
507デフォルトの名無しさん:05/01/08 18:30:23
実装の挙動が変わるのと仕様が変わるのとは別だと思うぞ。
明記されない限り後のバージョンでもそのままとは限らない。
508デフォルトの名無しさん:05/01/08 18:32:48
失敬。なので、.NETでは仕様が変わったと考えてもいいかも知れない。
ただ日本語版を根拠にすると後で困ることが往々にしてあるので
英語版の記述を確認しておく方がいいんじゃないだろうか。
509デフォルトの名無しさん:05/01/09 02:14:40
確かに。英語版の記述をすぐに確認してみたところ、やはり同様のことが
書かれていました。
>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.
上記のような記述がありました。今少々余裕があるのでもう少し調べてみようと思います。
510デフォルトの名無しさん:05/01/09 15:10:24
>>506
Javaのjava.io.OutputStreamみたいに、戻り値がvoidなら
自然な挙動だよね。もし、その仕様なくせにintを返してたら、
BSDソケットとの中途半端な違いで激しく紛らわしいと思う。
511デフォルトの名無しさん:05/01/09 16:20:53
sghr
512デフォルトの名無しさん:05/01/10 03:12:17
.NETのSocket.sendが指定バイト送り出すまでWin32のsendを
繰り返し呼び出してるだけだろ。
513デフォルトの名無しさん:05/01/10 03:15:09
.NETのSocketはwinsockの単純なwrapperではないということじゃねえの?
514デフォルトの名無しさん:05/01/10 11:31:59
>>474
あと、クライアント A から サーバー B から サーバー C への転送とかも指示できるようにするためでもある。
515デフォルトの名無しさん:05/01/10 15:22:20
>>506
Windows2000では、ブロッキングソケットは送信完了までブロックする。
ただし、送信バッファが足りない場合、即時に-1を返す。
その場合GetLastErrorは0を返す。
一回のsend呼び出しで失敗しないサイズの上限は、
メインメモリの半分程度。
516デフォルトの名無しさん:05/01/10 15:25:32
>>515
それって変な仕様だよなぁ。

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

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

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

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

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

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

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

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

送信バッファが足りないって理由じゃあきらめない、
のであれば、それはそれで一つの見識(やり方)だと思うけど。
521506:05/01/10 17:37:06
早速実験してみました。
言語 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というエラーでした。
522506:05/01/10 17:38:17
環境、Windows2000 Professionalで、SPの詳細は分かりませんが常にパッチ当ててるので最新です。
523デフォルトの名無しさん:05/01/10 18:03:28
>>519
> これが確実ならどうでもいいと思うけど、仕様に書いてあるのかな?

振る舞いでつ


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

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

振る舞いって誰が決めてるんですか?
525not 516:05/01/10 21:09:13
>>523
> WinSockはBSDのコードをベースにしてるから、

うそだよ。ベースにしているのは仕様。
526516:05/01/10 23:57:48
>>518

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

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

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

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

みたいな感じで、送信スレッドを共有する奴。
こんな作りのアプリがあるのかは知らないけどな。
527デフォルトの名無しさん:05/01/11 00:01:50
>>526
スレッド間で共有できる領域を作る。
送信スレッドはsendする前に自前でバッファ持っといて共有領域からコピー、その後sendする。
528デフォルトの名無しさん:05/01/11 01:46:08
「振る舞い」を「仕様外の振る舞い」って意味で使うのは変った用法だね。
529デフォルトの名無しさん:05/01/11 02:25:58
s/変った/変わった/
530デフォルトの名無しさん:05/01/11 04:36:26
>>524
BSD SocketなんだからおとなしくBSDの流儀に従うのが筋。
531デフォルトの名無しさん:05/01/11 17:20:41
>>518
> -1返しといてGetLastErrorが0返すのは変。

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

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

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

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

532デフォルトの名無しさん:05/01/11 18:46:15
.NETでの話なんですが、作ってるサーバに接続してくるクライアントが
せいぜい4〜5件程度で、selectするのが面倒なんで各クライアントのSocket
クラスのPollをそれぞれ呼び出してるんですけど行儀悪いんですかね?
533デフォルトの名無しさん:05/01/11 19:34:57
>せいぜい4〜5件程度
全く全然これっぽっちも問題ない
534デフォルトの名無しさん:05/01/11 21:22:54
それどころかselectがなくてpollだけっていうOS無かったっけ?
SystemV系のUnixだったか?
535デフォルトの名無しさん:05/01/11 22:23:00
>>526
non-blocking socket使う。
536デフォルトの名無しさん:05/01/11 22:28:07
>>531
> それは、たまたま手元の実験結果ではそうだった、という以上の意味は何も無
> いと思うけど。

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

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

んにゃ。

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

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

そっか。他の多重化手法を使えってことか。。
540デフォルトの名無しさん:05/01/12 03:00:10
>>532
何だっていいと思うけど、.NETのSelect()、簡単じゃない?
541デフォルトの名無しさん:05/01/12 03:01:51
542デフォルトの名無しさん:05/01/12 18:35:15
例のUDPで10054のエラーが発生すると
以後、そのソケットは機能しなくなる
win2KのバグですがXPでも発生します?
そもそもUDPで10054自体納得できないですが・・・
ググって見るとオプションで回避できるという事ですが
具体的な方法を探せません、どなたか教えていただけないでしょうか?
543デフォルトの名無しさん:05/01/12 20:01:40
>>542
10054エラー自体は発生を確認してます。その後つかえなくなる、ってことは経験していない、
というか少なくともエラー発生後も同じソケットで他のアドレスへは送れていました。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ちなみに確認はしてないがこれはおそらくPosixにも採用された仕様でLinuxとかでも
まず同じだと思う。 Winsockは知らん。
568デフォルトの名無しさん:05/01/14 02:36:44
569デフォルトの名無しさん:05/01/14 02:37:40
>>564
いいよ。俺はselectしか使ってない。
570デフォルトの名無しさん:05/01/14 03:11:37
俺なんかselect()の匂いだけで飯が三杯食える。
571デフォルトの名無しさん:05/01/14 09:15:17
HTTPクライアントを作成して、
GETでURLを投げるとhtmlの内容が取得できるのですが、
exeファイルなどのバイナリファイルは、
どうやって受け取ったらいいのでしょうか?
いまはこんな感じでレシーブしてます。
if (recv(s, recv_buf,sizeof(recv_buf)-1,0) > 0 ){
  strcat(recv_result,recv_buf);
}
572デフォルトの名無しさん:05/01/14 09:17:27
そんなとこでstrcat使うなヴォケ
ちゃんとrecvの値受け取って長さ管理しろ
573デフォルトの名無しさん:05/01/14 09:23:51
ライブラリ使わずにプロトコルの処理を自分で実装するならRFCは必読。

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

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

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

WSACancelBlockingCallはWinsock2には無い。

どうすりゃいいの?
580デフォルトの名無しさん:05/01/14 15:52:10
>>579
Windowsで作らなければいいじゃん
581デフォルトの名無しさん:05/01/14 15:53:33
↑バカ
582デフォルトの名無しさん:05/01/14 15:54:29
ブロッキングなんかで組むなよ
583デフォルトの名無しさん:05/01/14 16:08:17
Winsockはスレッドセーフだよ。
んでスレッドセーフとは関係ないけど、closesocketすればブロッキングしている
呼び出しはエラーで戻るよ。
584デフォルトの名無しさん:05/01/14 16:17:05
>583
>Winsockはスレッドセーフだよ。
>んでスレッドセーフとは関係ないけど、closesocketすればブロッキングしている
>呼び出しはエラーで戻るよ。

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

いちおう、今はclosesocketで対応しているんだけども、
心配でしょうがない。
585デフォルトの名無しさん:05/01/14 16:21:20
強制終了という発想がヤヴァイ
病院行け
586デフォルトの名無しさん:05/01/14 16:24:14
強制終了っていうか、サーバーの終了。

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

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

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


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

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

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

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

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

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

なぜ喧嘩腰?

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

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

あと、知ってからどうするの?
601597:05/01/15 16:08:46
>> 600

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

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

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

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

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

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

完了の定義次第じゃね?
603597:05/01/15 16:17:11
ftpサーバとftpクライアントのやり取りをアナライザで調べてみました。

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

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

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

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

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

601での「完了」ってどういう意味?
と書けばよかったのかなあ。
606デフォルトの名無しさん:05/01/15 21:55:26
>なぜ喧嘩腰?

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

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

とかさ。
609デフォルトの名無しさん:05/01/15 22:56:51
>598のあれって喧嘩腰って言うんだ?
(2ch内では)普通じゃないの?
610デフォルトの名無しさん:05/01/15 23:05:43
俺もそう思う。
つーか、俺はそういう言い方平気でしてる。
あと、文章にならないキーワードのみの書き込みとかも。
611デフォルトの名無しさん:05/01/16 00:00:44
>>610
まぁ別に自慢するようなことでもないがな。
612デフォルトの名無しさん:05/01/16 00:27:46
自慢?
613デフォルトの名無しさん:05/01/16 01:00:30
上司に言われたら平気なのに2chで言われたら耐えられないってか?
変なプライドは捨てろ。まずMSDN読め。ネットで検索しろ。
自分の手で調べた分だけ身になるんだ。
614デフォルトの名無しさん:05/01/16 09:22:42
逆切れっぽい書き方と上司に言われる台詞とはまた微妙に違うぞ。
615デフォルトの名無しさん:05/01/16 09:23:49
逆切れ版
winsockに限らずそんなものはない。やりたきゃアプリケーションで返せ。

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

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

598の落ち度は質問者がDQNだったのを予測できなかったことくらいだろう。
618デフォルトの名無しさん:05/01/16 15:02:39
この掲示板に名前=a、E-mail=sage、内容=aiueoと書き込む時の
POSTする文字列はどうなりますか?
619デフォルトの名無しさん:05/01/16 15:43:45
パケットをモニタ汁
620デフォルトの名無しさん:05/01/16 15:58:37
>>618
RFCにしたがって好きにすればいい。
ヘッダにどんな風に料理したのか書くのな。
621618:05/01/16 16:28:55
RFCも読みましたが、長過ぎて良くわかりませんでした
ttp://www.h5.dion.ne.jp/~sigma/homepage/cyberspace/httpclient.html
の第11回で使用しているプログラムを使い
アドレスと送信するデータを自分なりに変えていろいろなサイトで試してみましたが、
どこも書き込みできませんでした
name=valueを&で繋げた値をボディ部分で送信するだけではダメなのでしょうか?
またこういう事を勉強できるサイトがあれば教えてください
622デフォルトの名無しさん:05/01/16 17:02:33
>>621
迷惑だからテストは自分のサーバでやれ
非常識な奴だ
623デフォルトの名無しさん:05/01/16 17:03:44
&でつなげてってのは、GETメソッドでしょ。2chの書込みはPOSTメソッドだから
ダメじゃないかね。
624デフォルトの名無しさん:05/01/16 19:36:02
monazillaってBBSかMLやってないのか?
625デフォルトの名無しさん:05/01/16 19:43:00
626618:05/01/16 21:14:55
IEが送信してるパケットとあのサイトのツールが送信しているパケットを
比較してやっと謎が解けました、なぜか=と&が%..の形式に変換されてました
627デフォルトの名無しさん:05/01/16 21:28:25
何故かというかメタキャラクターだし…
628デフォルトの名無しさん:05/01/17 00:04:47
age
629デフォルトの名無しさん:05/01/17 00:12:20
なんつーか、まずは適当な掲示板CGIの勉強でもすれ。
630デフォルトの名無しさん:05/01/18 09:18:04
Web上にあるファイルの更新日時を取得したいのですが、
ローカル側に落とさずに、更新日時のみ取得はできるのでしょうか?
631デフォルトの名無しさん:05/01/18 09:37:43
TCPの接続で 一つのサーバーに対して複数のクライアントをつなぐことは
できるのでしょうか?
632デフォルトの名無しさん:05/01/18 09:54:28
630>> 自己レスですが、HEADでできました
633デフォルトの名無しさん:05/01/18 10:01:30
>>631
あなたの質問の意味がわかりません
詳しく書いてくれませんか?
634デフォルトの名無しさん:05/01/18 10:06:13
>>631
普通にできる。でないとやってらんないだろ。

635デフォルトの名無しさん:05/01/18 16:36:04
チャットサーバーを題材にしてC#でのネットワークプログラミング解説サイトを
作ろうと思うんだが今さらそんなサイト、需要あるの?
636デフォルトの名無しさん:05/01/18 16:41:06
>>635
VB.NETでお願い
637デフォルトの名無しさん:05/01/18 18:10:48
>>635
ちゃんと非同期系のメソッドを使ったワーキングサンプルなら
参考にしたい人もいるんじゃないかなー。
638デフォルトの名無しさん: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;
639デフォルトの名無しさん:05/01/18 21:01:04
struct addrinfo には ai_flags, ai_family, ai_socktype 以外のメンバもあるから。
640デフォルトの名無しさん:05/01/18 23:21:27
メンバーが後から増えて、
そのデフォールトの値が0でいいような場合は、
0でmemset()してあるソースコードは、生き伸びます。

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

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

UDPの場合はそれに加えて他のOSと同様にあれこれ考慮してください。
646デフォルトの名無しさん:05/01/19 12:45:36
javaのsocketとかWindowsのWinsockとかの「ソケット」ってTCPかUDPプロトコル上の概念なのですか?
あと、VBはほかのマシンのファイルを「ソケット」使わず「ポートとかを指定せず」に書き換えられると聞いたことがあるのですが、
これはTCPもUDPも使わず別のプロトコルを使うというわけですか?
647デフォルトの名無しさん:05/01/19 12:50:55
ネットワークプログラミングをするならテクネくらい取ってください
648デフォルトの名無しさん: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も使わず別のプロトコルを使うというわけですか?
かつてはそういうこともしていた。今はしていないケースが多い。
649デフォルトの名無しさん:05/01/19 13:20:32
>>645
送信可能最大サイズを取得する方法はありますか?
650645:05/01/19 14:20:21
>>649
これより詳しい説明が必要なら、まず「送信可能最大サイズ」を定義してください。
もしそれが send に渡して WSAENOBUFSエラーにならないバイト数のことなら、
事前に知る術はないです。PCのメモリ搭載量によって変動するみたいですが。

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

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

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

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

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

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

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

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

がいいんでない?

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

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

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

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

数値はlongのようにアーキによって変わるものではなく
int32_tのようなサイズを明示したものを使え。
677666:05/01/20 14:15:36
皆様のおかげで、大体理解できました。
これから実装に入ります。
ありがとうございました。
678666:05/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)
文字列箇所はうまくいきますが、
数値データの箇所で、数値に変換してホストバイトオーダーをかけても
データが思ったとおりのものがセットできません。
受信部分のバッファには何をセットすればいいのでしょうか?
679デフォルトの名無しさん:05/01/20 18:10:48
>>678
もしかしてC/C++使うのは初めてですか?
あるいは単にWOULDBLOCエラーあたりになって何も受信されてないとか。
あるいはストリーム型ソケットで受信サイズを見ていないとか。
680デフォルトの名無しさん:05/01/20 20:56:27
HTTPヘッダの、HOSTってどういう意味/どう使われるんでしょうか?
初心者ですいません orz
681デフォルトの名無しさん: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読む。
682デフォルトの名無しさん:05/01/21 04:07:47
英語リンクを示したからには
まず日本語に訳せ
683デフォルトの名無しさん:05/01/21 06:11:13
684デフォルトの名無しさん:05/01/21 06:47:39
>>680
2chも使っているよ。
685デフォルトの名無しさん:05/01/21 08:27:15
>>682
黙れ雑魚が。この程度の英語ぐらい読んでくれよ、マジでおながいします。
686デフォルトの名無しさん:05/01/21 08:49:21
「Host: ってのはこう使います。」
「ほう、根拠は?」
「RFCに書いてあります。」
「本当にそう書いてあるのかね? 私には多少違うように見えるのだが。」
「そう2chで言ってました。」
「……。」
687666:05/01/21 08:53:17
679>>
お察しのとおり、C/C++使うのは初めてです。
いままでJAVAとVBしか組んだことありません。
ネットワークプログラムも初めてです。
RFCなども一通り目を通しましたが、
わからないことだらけで(汗
もう一度基本からやりなおします…

688デフォルトの名無しさん: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のチェックを入れるべきなのでしょうか?
689デフォルトの名無しさん:05/01/21 10:57:58
sock1 と sock2 の値を表示して調べてみれば分かる。
ってゆうか、プログラミングの初歩から学習しなおした方がいいかも。

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

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

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

>>691
ごめんなさい

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

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

>>691
ごめんなさい

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

>>695

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

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

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

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

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

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

定石ではどのようになっているのか教えていただけると幸いです。
731デフォルトの名無しさん:05/01/26 01:12:52
>>727
それはおかしいなどう考えても。俺は普通にダブルエスエー。
charって外人はなんていうんだろう。
732デフォルトの名無しさん:05/01/26 01:26:46
外国人の呼び方は、主にチャー、カー、ケアの3種だそうだ。
733デフォルトの名無しさん:05/01/26 04:03:32
>>730
それでいい(netstat -aon)と思うけど
netstat使いたくないならnetstatのソース見て
自分で実装すれ
734デフォルトの名無しさん:05/01/26 04:20:19
>>733
どこにソースがあるんですか?
735デフォルトの名無しさん:05/01/27 06:27:06
736デフォルトの名無しさん:05/01/27 06:32:00
>>735
→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→
                                                                                            ↓
737デフォルトの名無しさん:05/01/27 07:11:07
738デフォルトの名無しさん:05/01/27 10:43:18
inet_addrって***.***.***.***じゃない数も変換します?
なんか、*だけとか入れても、エラーじゃなくて
得体の知れない値に変換しちゃうんですけど。
739デフォルトの名無しさん:05/01/27 11:05:15
常識。
***.***.***.***が何を表現しているか考えればわかるでしょ。
740デフォルトの名無しさん:05/01/27 11:23:47
>>739
書式チェックまではしてくれないんですね…
どもです
741デフォルトの名無しさん:05/01/27 11:32:30
いや・・・
*も正しいから。
742デフォルトの名無しさん:05/01/27 12:07:37
738はIPv4のアドレスが4 octetだということがわかってないんじゃないか?
743デフォルトの名無しさん: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桁ドット形式しか認めない。
744デフォルトの名無しさん:05/01/27 13:59:28
なんでBSD socketはこんなにアフォな仕様なんですか?
745デフォルトの名無しさん:05/01/27 14:01:38
それがBSDクオリティ
746デフォルトの名無しさん:05/01/27 14:08:47
>>743
>1.1 -> 1.0.0.1 (間の0.0を省略したと解釈する)
うはwwww
747デフォルトの名無しさん:05/01/27 15:58:52
>>746
Class Aもらってるとこなんかはそれで便利に使ってたわけだ。
748デフォルトの名無しさん:05/01/27 16:02:29
127.1 のほうが使い勝手いいな
749デフォルトの名無しさん:05/01/27 18:26:54
こんな記事を読んだ覚えがあったのさ。
http://www.itmedia.co.jp/broadband/0302/26/lp17_2.html
750デフォルトの名無しさん:05/01/27 19:41:43
特に8進数扱いが激しく糞だよね。
751デフォルトの名無しさん:05/01/27 19:59:59
>>743
うはOK
752デフォルトの名無しさん:05/01/28 12:58:21
なんでlocalhostって127.0.0.1に決まったの?
そんな気分だったの?
753デフォルトの名無しさん:05/01/28 19:21:05
01111111.00000000.00000000.00000001
754デフォルトの名無しさん:05/01/29 00:06:56
localhostっつーか127.0.0.0から127.255.255.255はloopbackのために予約されている。
755デフォルトの名無しさん:05/01/29 06:42:44
>>754
そんなにたくさん、もったいないな。
756デフォルトの名無しさん:05/01/31 09:19:16
たとえば
www.google.com
のようなファイル名部分が省略されたURLを
HTTPでgetする時に実際に取得されるファイル名を知る方法はありますか?
index.htmlなのかindex.phpなのかとか。
757デフォルトの名無しさん:05/01/31 09:39:02
無理でしょ。

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

で、"/"をGETした時に何が送られてくるかは、サーバーの設定次第。
758デフォルトの名無しさん:05/01/31 10:05:06
んなこたぁない
759デフォルトの名無しさん:05/01/31 10:12:53
こともない
760デフォルトの名無しさん:05/01/31 10:14:01
じゃあ教えてあげなよ
761デフォルトの名無しさん:05/01/31 12:05:32
762デフォルトの名無しさん:05/01/31 12:28:18
とりあえず開いて"index"で検索した周囲には全然載ってないけど。
あまり関係ないことばかりだし。

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

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

サーバーの設定じゃないって言うなら、どこで決まってるというのかね?
763デフォルトの名無しさん:05/01/31 12:48:21
>>761
文章の書きかたがまるで駄目なので読むだけ無駄でしょう。
764デフォルトの名無しさん:05/01/31 12:58:46
>>756
ないです。以上。
765デフォルトの名無しさん:05/01/31 15:30:10
>>758
こういうアホっているよね。「そんなことない」とだけ書いて
全くその根拠を示さない奴。
766デフォルトの名無しさん:05/01/31 15:42:48
そうですね。
767デフォルトの名無しさん:05/01/31 17:09:49
ということにしたいのですね
768デフォルトの名無しさん:05/01/31 21:44:14
そうかもしれない
769デフォルトの名無しさん:05/01/31 22:00:39
>>756
サーバによってはContent-Dispositionを一緒に送ってくることがあるから、
それで一応知ることはできるけど、信じるかどうかはクライアント次第
770デフォルトの名無しさん:05/02/01 00:19:24
age
771デフォルトの名無しさん:05/02/01 18:12:59
http://www.ugtop.com/spill.shtml
このサイトみたいにグローバルIP返してくれるも
う少しコンパクトHTMLはいてくれるサイトないですか?
単なる確認用でアプリに組み込むわけではありません。
772デフォルトの名無しさん:05/02/01 18:20:51
773デフォルトの名無しさん:05/02/01 20:37:29
774デフォルトの名無しさん:05/02/02 05:53:24
>>773
それだけかYO!
775デフォルトの名無しさん:05/02/02 07:00:34
> グローバルIP返してくれる
という要求は満たしているわけだが。
776デフォルトの名無しさん:05/02/02 10:16:18
>>775
Windowsアプリ向けの共通ライブラリを作っているのですが
WSAStartup/WSACleanupのスコープってどこまでなのでしょうか?
アプリ本体がWinsock使っているかにかかわらず、ライブラリ内で
通信したいのです。
静的リンクだとアプリ本体と同じインスタンスですが、2回以上
呼んでしまっても良いのでしょうか?
DLLにして動的リンクならOKなのでしょうか・・・?
777デフォルトの名無しさん:05/02/02 10:22:43
>>776
申し訳ない。アンカー消し忘れました。
778デフォルトの名無しさん: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.
779デフォルトの名無しさん:05/02/02 13:35:18
>>778
>マニュアルちゃんと読みなさい。
見落としていました。
ありがとうございます。
780デフォルトの名無しさん:05/02/02 15:33:29
BOOL optionval = true; // オプション設定のみに使用する
setsockopt(s,SOL_SOCKET,SO_BROADCAST,(optionval,sizeof(optionval)
こういう感じで、ブロードキャストの設定をオンにしたのですが、
これをデフォルト値に戻す時はどうやればいいのでしょうか?
optionval をfalseにしてもうまくいかなくて…
781デフォルトの名無しさん:05/02/02 15:43:23
>>780
> optionval をfalseにしてもうまくいかなくて…

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

782>>MSDNはBOOLになってるんですが、
一応試してみます。
784デフォルトの名無しさん:05/02/02 18:02:07
>>775
それだけしかないサイトなんだなぁと思って。
785デフォルトの名無しさん:05/02/02 18:11:18
>>784
dyndns.org っていうドメインから、checkipの目的がわかると思うけど。
786デフォルトの名無しさん:05/02/02 18:19:21
>>785
何だと?dyndnsを使ってると悪いのか?
787デフォルトの名無しさん:05/02/02 18:32:57
>>786
>>785>>784へのレスですよ。
788デフォルトの名無しさん:05/02/02 19:10:15
JavaでSSLのNon-BlockingSocketが使いたいんだけど・・・。
もうだめぽ
789デフォルトの名無しさん:05/02/02 19:23:02
独り言かよ!?
790デフォルトの名無しさん:05/02/02 19:26:45
質問したいけど、結論知ってるし・・・。
791デフォルトの名無しさん:05/02/02 19:54:06
>>788=>>790
もうだめぼ
792デフォルトの名無しさん:05/02/02 19:55:59
ぼ?
793デフォルトの名無しさん:05/02/03 02:58:19
ぼぼ
794デフォルトの名無しさん:05/02/03 09:39:55
A端末からブロードキャストを投げて、
受信したB端末からブロードキャストを投げ返しているのですが、
A端末が自分で放ったブロードキャストを受信しないようにするには
どうすればいいのでしょうか?
B端末のブロードキャストだけ受け取りたいのに、
自分で送信したものまで受信してしまいます
795デフォルトの名無しさん:05/02/03 10:25:59
>>794
recvfrom()でどこから来たか見て自分からだったら捨てる。 
796デフォルトの名無しさん:05/02/03 12:16:42
>> 795
できました!
ありがとうございます!
797デフォルトの名無しさん:05/02/05 15:33:00
798デフォルトの名無しさん:05/02/05 22:41:19
lispで簡単(テキストファイルの送受信程度)なネットワークプログラム作りたいのですが、
その辺の情報の載ったサイトとか本ありませんか?
799デフォルトの名無しさん:05/02/06 15:52:53
HTMLに<input type="hidden" name="aiueo" value="">
という文があったら
POSTする時に...&aiueo=&...としなければいけませんか?
それとも""のパラメータは省略可能ですか?
800デフォルトの名無しさん:05/02/06 16:44:56
意味不明&スレ違い
801デフォルトの名無しさん:05/02/06 18:33:00
>>797
もう一声(w
802デフォルトの名無しさん:05/02/06 19:12:06
>>797
>>801
?????
803デフォルトの名無しさん:05/02/06 21:24:16
>>799
ブラウザでも作ってるの?
ナンにせよ、空白を意味するパラメータになるので、...&aiueo=&...を付けないといけない
804デフォルトの名無しさん: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のバグな気がしているのですが。
805デフォルトの名無しさん:05/02/06 23:01:33
>>799
<input type="checkbox">な奴は、チェックされてないと
値が渡って来ないよ。それ以外は全部空でも渡ってくる。
806799:05/02/07 07:19:30
>>803

株の自動売買プログラムを作ってます
そうですか、一応""というパラメータなんですね
レスありがとうございました
807デフォルトの名無しさん: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とかたまにあるんだよなぁ…。
808799:05/02/07 16:22:44
>>807

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

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

Linuxです (Fedoracore3ですけどディストリは関係ないですよね)
810デフォルトの名無しさん: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) あたり見とけ。
811デフォルトの名無しさん:05/02/07 20:10:01
>>810
それはraw socketじゃないと。
取得する前にinterfaceを指定しないといけないし。
812デフォルトの名無しさん:05/02/07 20:10:34
>>809
そのディスクリプタでは無理です。
813810:05/02/07 20:11:13
おっと、TCP か。正直すまんかった。
814デフォルトの名無しさん:05/02/07 20:15:04
んではgetsockname と raw socketで>>810の組み合わせ?
815デフォルトの名無しさん:05/02/07 21:23:44
linuxならsocket(AF_PACKET, SOCK_DGRAM, 0)でもOK。
816809:05/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 ); ←ここでエラー
817デフォルトの名無しさん: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))の間違い。
818デフォルトの名無しさん:05/02/07 22:53:59
>>816
getsockname でこちら側のIPアドレスを得て、
あとはifconfigのソース読んで・・・
819809:05/02/07 22:56:33
>>817
きめうちで"eth0"ぶちこんだらできました
ETH_P_IPが見当たらなかったので 0 にしちゃったけど動きました
まあそれはあとでなんとかするとして

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

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

ETH_P_IPは、AF_PACKETなsocketとして使わない時は必要ないんでした。
822809:05/02/07 23:40:23
>>821
自分が待ちうけのプログラムで、相手と接続しているときの
ソケットを使ってgetsocknameすれば相手と接続しているはずの
IPアドレスが取れるかと思ったけど、そうでもないんですか?
たとえば、自分自身へ接続するときも localhostで接続と
IP指定で接続したときとで 自分のIP がきちんと変わっていたので
安心していたんですが
823デフォルトの名無しさん: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とは何の関係もない。
824809:05/02/08 00:33:54
今回は複数NICがあってもルーティングはしないので
別にその辺は厳密じゃなくてもいいので すみません
825デフォルトの名無しさん:05/02/08 00:59:09
「今回は」ということならば、それで一向に構いません。
826デフォルトの名無しさん:05/02/08 08:03:47
> Local sideのIP addressなんて、どのinterfaceから出ていくかに
> 全く関与しないよ。

全くっていうのは言い過ぎでは?
まあ待ち受け側の場合は原則としては関与しないで正しいけど、
片側が private network で、片側が the Internet であるような
場合、たとえ待ち受け側であっても、通信に使われる interface の
IP アドレスと、getsockname() で得られる IPアドレスが等しい
ような運用をしていることがほとんどでは?
827デフォルトの名無しさん:05/02/08 10:16:20
828デフォルトの名無しさん:05/02/08 13:55:28
IPv6!IPv6!
829デフォルトの名無しさん:05/02/08 23:06:22
出張です。
http://pc5.2ch.net/test/read.cgi/tech/1106490240/403
どなたか原因解りませんか?
830デフォルトの名無しさん:05/02/08 23:38:11
>>829
全てのanonymous FTPサーバでダメか?
つか、そのくらいの質問なら書けや。なんであっちこっちとばにゃならんねん
831829:05/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
832デフォルトの名無しさん: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とか? まさかとは思うけど。


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

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

という事で、こういった現象を知っていたら何か教えて頂けないでしょうか。
834デフォルトの名無しさん:05/02/09 05:20:57
835デフォルトの名無しさん:05/02/09 10:18:30
  i゙::::|;;;;| |;;;;;| |::::::::::| |:::::::::::::::::||::::::::::::::::::::::::::::::::|
 . i゙::::::i     ''''''''''' '───' |;;;;;;;;;;;;::::::::::::::::::::|
  .|:::::::|,-====-´  ゙ヽ,,,,,,,,,,,,,、    |:::::::::::::::::::|
  |;::::::::|,-──、    ~,.--`‐、    |:::::::::::::::::::|
  `ヽ、i     )__r'´    )__|;::::::::::::::/  なんで、人がゴミのようなん?
  .  ヽ、__、/<    ヽ、__、-    /^゙-、;;;;/
     {     ' '          '-'~ノ
    λ   ____        /-'^"
     ヽ,_  `ー─''´       (
     /`''丶、     , -    /^l
836デフォルトの名無しさん:05/02/09 14:04:57
>>835
お前の目がゴミしか通さないフィルターだから
837デフォルトの名無しさん:05/02/09 14:10:04
何で眼鏡・・
838デフォルトの名無しさん:05/02/09 14:11:38
>>835-837
自作自演乙
839829:05/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]
こちらも同様でした。

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

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

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

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

その通りです。ストリームが閉じられる前に、
「読み取れるデータがない」等の理由で0になるということはありません。
847845:05/02/10 21:15:26
ひょっとしてクライアントがflushしたときでしょうか?
それともソケットをクローズしたときでしょうか?
848デフォルトの名無しさん:05/02/10 21:17:46
>>847
あまり調子にのるなよ
849デフォルトの名無しさん:05/02/10 21:19:09
>>847
close とたとき、shutdown でクライアントからの方向をshutdownしたとき、です。
一般にTCPプロトコルは、何らかの上位プロトコルと供に用いられます。
データ区切り等は上位プロトコルで規定されます(cr lf等)。
850845:05/02/10 21:25:37
>>848 すみません。
>>849 ありがとうございます。理解しました。
851デフォルトの名無しさん:05/02/13 18:33:57
複数のクライアントが接続ができるようなサーバーを作っているのですが、
新規に接続があったかどうかを調べるにはどうしたらいいのでしょうか。
selectでできますか?
852デフォルトの名無しさん:05/02/13 18:38:35
>>851
作ってるならわかるだろ
853デフォルトの名無しさん:05/02/13 18:51:47
理論上はそうかもしれません。
しかし世の中には理論で割り切れないこともたくさんあるんです。
854デフォルトの名無しさん:05/02/13 21:55:11
できます。
855デフォルトの名無しさん: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にすべきですか?
}
856デフォルトの名無しさん:05/02/15 06:32:05
>>855
スレ違い。ここはネットワークプログラミングのスレだぞ。
まあネットワークのプログラムにスレッドはかかせないが。

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

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

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

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

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

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

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

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

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

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

そんなもんは要らん。
893デフォルトの名無しさん:05/02/20 19:01:01
NATリゾルバ…DirectPlay?
894デフォルトの名無しさん:05/02/20 19:16:22
>>892
自分のグローバルIPをどこか適当なCGIで取ってもLAN組んでたら
行く先がないのでは?もっと単純な方法があるのでしょうか?
895デフォルトの名無しさん:05/02/20 19:30:05
そもそも自分のグローバルIPなんてものを使わなければ
何の問題もない。せっかくNATが変換してくれてるんだか
ら、NATに万事任せれば?
896デフォルトの名無しさん: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内のローカルアドレスが必要だと思っちゃうのですが・・・
897デフォルトの名無しさん:05/02/20 19:39:19
P2Pの話ならはじめからそういえよ。
898デフォルトの名無しさん:05/02/20 19:54:45
サーバーって言ってるんだから、P2Pとは違うんじゃないの?

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

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

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

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

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

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

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

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

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

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

まぁ、技術者は関わらんほうが身のためやね。
914デフォルトの名無しさん:05/02/23 22:16:39
>>912
もろにマルチだよ。ココ(↓)が発信源。
ttp://game10.2ch.net/test/read.cgi/mmominor/1108379282/
マトモな人間が1人も来ないから、焦ってるんだろ。
915デフォルトの名無しさん:05/02/23 22:45:41
なんか定期的に涌いてくるよね。ウジムシみたいに。
916デフォルトの名無しさん:05/02/23 22:54:34
よせよ。ウジムシが聞いたらあんなのと一緒にするなと怒るぞ。
917デフォルトの名無しさん:05/02/24 00:44:04
おまえら本物のウジムシ見たことあるか?
918デフォルトの名無しさん:05/02/24 01:19:38
小学校のとき、机の中で半年間熟成させていた西田君のパンに群がるそれを見た。
919デフォルトの名無しさん:05/02/24 09:28:18
隣に住んでいた人にたかってた。
そのときまで住んでいると思ってたが
発見時はすでに過去形だった。
920デフォルトの名無しさん:05/02/24 10:53:02
外に置いていた犬のえさ(開封済み)にうじゃうじゃ入ってた
921デフォルトの名無しさん:05/02/24 11:50:57
922デフォルトの名無しさん:05/02/24 11:52:05
↑見ちゃだめ
923デフォルトの名無しさん:05/02/24 12:01:36
>>922
そんな事言われると見たくなるじゃん・・・・。
924デフォルトの名無しさん:05/02/24 13:25:39
消えてる・・orz
何だったのかキニナル
925デフォルトの名無しさん: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
926デフォルトの名無しさん:05/02/25 01:24:52
いっとくけど>>921はトロイだよ

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

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


>>930 どうもでした。
932デフォルトの名無しさん:05/02/25 14:22:57
自分の環境かかないやつはWindowsと仮定しとけばおけ
つーことか。
933デフォルトの名無しさん:05/02/25 14:33:28
このレベルだとネットワークというよりは単にWin32APIについての質問っぽい・・・
934デフォルトの名無しさん:05/02/25 19:55:23
APIの使い方とCそのものの使い方を外して、ネットワーク限定の質問なんてあるのか?w
935デフォルトの名無しさん:05/02/25 19:56:29
ネットワーク限定の質問ならいくらでもあるだろ。
ただ、プログラミングの質問は殆ど消えるけどなw
どちらかと言うと概念とかのネットワーク技術系だなw
936デフォルトの名無しさん:05/02/25 20:00:51
>>934
いっぱいあると思うけど。
つい最近でたものだと、PHPはPOST受けるときにContent-Typeの選り好みが厳しいという話とか、
TCPのパケット(データ)順の保証はストリーム単位だという話とか、
同時接続数が異様に多い場合には接続毎にスレッドを立てるのは好ましくないという話とか。
937デフォルトの名無しさん:05/02/25 21:36:32
それ通信技術板の範囲にならない?
何もプログラミング限定の話じゃないような・・・。
938デフォルトの名無しさん:05/02/26 01:40:41
ここは
ネットワークプログラミング相談室 Port12
939デフォルトの名無しさん:05/02/26 01:52:09
half-closed関係の話題は、
APIの使い方、Cそのものの使い方とは外れたところの議論も、
ネットワークプログラミングの話題だな。
940デフォルトの名無しさん:05/02/27 14:41:15
Winsockで送信バッファにたまってるデータのサイズを取得するにはどうすればいいでしょうか?
送信バッファの最大サイズではなく送信バッファにたまってるデータのサイズです。
941デフォルトの名無しさん:05/02/27 15:13:08
取得不能。はい次
942デフォルトの名無しさん:05/02/27 15:42:13
Winsockで送信済みのデータのサイズを取得するにはどうすればいいでしょうか?
送信バッファへの送信サイズではなくデータリンク層への送信のサイズです。
943デフォルトの名無しさん:05/02/27 19:28:25
取得不能。はい次
944デフォルトの名無しさん:05/03/01 09:27:44
945デフォルトの名無しさん:05/03/01 15:42:46
しばらくデータを転送していて、あるときrecvした瞬間、
PC全体が回線から切断される場合としてどんな場合が考えられますか?
recvした後、エラーがあったことを確認した時点で、
既に切断されているんですが
946デフォルトの名無しさん:05/03/01 15:50:15
「recvした瞬間」に「PC全体が回線から切断され」るんじゃなくて、
「PC全体が回線から切断され」た瞬間に、recvがエラーで返るんじゃないの?
947デフォルトの名無しさん:05/03/01 15:52:26
ワシもソレに一票
ハードを変えてみるとか原因究明してみては
948945:05/03/01 15:55:13
その方向で検証してみます。
ありがとうございました。
949デフォルトの名無しさん:05/03/01 16:19:12
>>948
使っているOSの方面で調べるのもいいかも。
たとえばUNIXの一派は、IPアドレスが重複しているのを見つけると、
「PC全体が回線から切断」します。インターフェースが"down"するから。
950デフォルトの名無しさん: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
951デフォルトの名無しさん:05/03/01 21:49:07
DoWinsock関数を含んだ.cppファイルがリンクされてないだけ
っつーかスレ違い
952デフォルトの名無しさん:05/03/01 22:00:02
なんかもう、すべてが釣りに見える今日このごろ。
953デフォルトの名無しさん:05/03/01 22:46:02
お取り込み中大変恐縮ですが、
次スレの時間です。
954デフォルトの名無しさん:05/03/02 03:41:06
このスレの進むペースだと、あと4日くらい余裕があるヨカーン


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

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

>>968 >>970 どうもありがとうございました。
972デフォルトの名無しさん:05/03/03 02:41:47
Port13の時期か。
俺は最近スレッドを立てたから無理。
973デフォルトの名無しさん: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/
の方がよくない?
974デフォルトの名無しさん:05/03/03 07:33:21
Unicode文字列バッファをそのまま送信することについて所見を伺いたい。
975デフォルトの名無しさん:05/03/03 07:41:07
>>974
別に問題無いと思われ
受信側の解釈が問題なだけで
976デフォルトの名無しさん:05/03/03 07:44:58
そうは言っても、エンディアンの異なる環境では当然Unicodeのバッファの並びも違うよね?
977デフォルトの名無しさん:05/03/03 08:26:26
>>976
エンディアンは決まってるから違わない
978デフォルトの名無しさん:05/03/03 08:47:23
>>977
ということは、数字の"1"をUnicodeで表現した場合、
プラットホームに依らず、「0x31 0x00」の順番ってこと?
979デフォルトの名無しさん:05/03/03 09:03:38
>>978
違う
980デフォルトの名無しさん:05/03/03 09:08:58
ふつう、 ttp://e-words.jp/w/UTF-16.html くらいの配慮するか
TCP/IPでおきまりのビックエンディアンにあわせるな
981デフォルトの名無しさん:05/03/03 09:10:36
どっちがどう違うのか。
いい加減、本当のこと教えてもらえないだろうか?
982デフォルトの名無しさん:05/03/03 09:49:14
>>981
もう少し待ってくれ。
983デフォルトの名無しさん:05/03/03 10:33:37
まだか?
984デフォルトの名無しさん:05/03/03 10:40:13
985デフォルトの名無しさん:05/03/03 11:04:33
>>976
Unicodeは文字セットであって符号化方式ではない。
符号化するんなら UTF-8 なり UTF-16 + BOM なり UTF-16LE なり
UTF-16BE なり決めればプラットフォーム依存なんてしない。

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

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

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

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

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

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