ネットワークプログラミング相談室 Port8
レス数が1000を超えています。これ以上書き込みはできません。
0001名無しさんフフフフフフフ
NGNGProgramming UNIX Socket FAQ (日本語訳)
http://www.kt.rim.or.jp/~ksk/sock-faq/indexj.html
Winsock Programmer's FAQ
http://tangentsoft.net/wskfaq/
過去スレ:
Port1 http://pc.2ch.net/tech/kako/970/970344582.html
Port2 http://pc.2ch.net/tech/kako/1006/10062/1006258198.html
Port3 http://pc3.2ch.net/tech/kako/1023/10233/1023359282.html
Port4 http://pc3.2ch.net/tech/kako/1034/10342/1034236536.html
Port5 http://pc2.2ch.net/tech/kako/1040/10402/1040220302.html
Port6 http://pc2.2ch.net/tech/kako/1052/10521/1052106444.html
Port7 http://pc2.2ch.net/test/read.cgi/tech/1063035045/
関連リンクは>>2-10辺り
0002デフォルトの名無しさん
NGNGUNIXネットワークプログラミング〈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/
足りなかったら適当に付け足してね
0003デフォルトの名無しさん
NGNGJPNIC 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
C10K ヘヴィーロードサーバ
http://www.kegel.com/c10k.html
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
tcpdump
http://www.tcpdump.org/
Windump
http://netgroup-serv.polito.it/netgroup/tools.html
pathchar
ftp://ftp.ee.lbl.gov/pathchar/
pchar
http://www.employees.org/~bmah/Software/pchar/
MSDN
http://msdn.microsoft.com/library/en-us/dnsitehelp/html/tochelp.asp
0004デフォルトの名無しさん
NGNGhttp://www.kt.rim.or.jp/~ksk/wskfaq-ja/
RFC-JP ML
http://www.imasy.or.jp/~masaka/rfc-jp/
↓前スレからコピペ
でも出てたけど、次スレテンプレに
http://x68000.startshop.co.jp/~68user/net/
追加よろ。それと RFC 集として
http://www5d.biglobe.ne.jp/~stssk/rfcjlist.html
の追加をキボン (http://rfc-jp.nic.ad.jp/link/ への
リンクより役立つと俺は思う)。
あと、1 の
Winsock Programmer's FAQ
http://tangentsoft.net/wskfaq/
は日本語訳の
http://www.kt.rim.or.jp/~ksk/wskfaq-ja/
に差し替えていいんでない?
0005デフォルトの名無しさん
NGNG0006デフォルトの名無しさん
NGNGいやー。まだ笑える。俺のつぼにはまったよ。
0007デフォルトの名無しさん
NGNG0008デフォルトの名無しさん
NGNG0009デフォルトの名無しさん
NGNGTCPよりUDPのほうが高速に転送出来ると聞きました。
自前でのエラー処理を含めてもUDPが優位になるほど高速なのでしょうか?
0010デフォルトの名無しさん
NGNG0011デフォルトの名無しさん
NGNGUDPの信頼性が保障されてないと言うのは
化けたパケットの破棄だと聞きましたが
それは、間違ったデータは破棄されるので送られない と言う事なのでしょうか?
0012デフォルトの名無しさん
NGNG化けるより、パケット自体が届かない、フラグメント化した断片が届かない、とかの方が多いかも。
完全なUDPパケットに組み立てられない場合、アプリケーションには届かず、消えてしまう。
0013デフォルトの名無しさん
NGNGおとなしく、TCPにしておいた方がいいと思います。
チャットプログラム程度で、TCPプロトコルスタックがやっているような
輻輳・再送制御を自前やるって、つらくないですか?
逆に、その辺を手抜きすると、間違いなくTCPより、遅くなる(or信頼性がなくなる)ような。
(たとえば、ftp(TCP)とtftp(UDP)とどちらが速いと思ってます?)
0014デフォルトの名無しさん
NGNGオレはそれでもいい、音声や動画など多少データ欠けてもヨシって
ときしかUDPは使わないなあ。
ヘッダと連番はつけるけど。
0015デフォルトの名無しさん
NGNG次にUDP版に移植するのに七転八倒してみるのがいいかもね。
00169
NGNGUDPをそこまでして使うメリットは少ないんですね。
0017デフォルトの名無しさん
NGNGhttp://docs.hp.com/ja/B2355-60104-05/rn17re138.html
0018デフォルトの名無しさん
NGNG0019デフォルトの名無しさん
NGNGなんでHPのサイトなんて見てるの?
http://www.linux.or.jp/JM/#search
0020デフォルトの名無しさん
NGNGユーザーのIPの問い合わせに対して返すだけのシステムだからUDP使ってる。
DNSもUDPだしね。
こういう用途だとUDPでも良いんじゃないかな。
0021デフォルトの名無しさん
NGNGメーラをつくり始めているのですが、SMTPサーバとの接続がうまくいきません。
Etherealにてパケットを覗いてみたのですがTCPのコネクションが確立した後の
サーバの応答(220 ***.smtp.server.name.com)に[TCP Zerowindow] [TCP Dup ACK 44#1]
という応答を行っていて、ここで通信が終わっているようです。
この[TCP Zerowindow]はどういう場合に送られるのでしょうか?
0023デフォルトの名無しさん
NGNG過去スレにありましたね
申し訳ないです↓
勉強が足りませんね…
0024デフォルトの名無しさん
NGNG0025デフォルトの名無しさん
NGNGこれくらいの数だと、コネクション毎にスレッド起こすようなプログラムだとまずいんですかね?
処理内容は、クライアントからの要請でデータを返す、データ参照するようなサーバーなのですが・・・
0026デフォルトの名無しさん
NGNGサーバーマシンとOSの性能にもよるが、それらが許した上で
要求した性能が出せるならまずくないんじゃない?(笑)
0027デフォルトの名無しさん
NGNG勉強のために読みたいと思っています。よろしくお願いします。
0028デフォルトの名無しさん
NGNG0029デフォルトの名無しさん
NGNGprintfで表示するプログラムなんですが
void command(SOCKET msgsocket)
{
char command_buf[5];
char buf_temp[1024];
SOCKADDR from;
int fromlen;
while(1)
{
memset(buf_temp,0,sizeof(buf_temp));
fromlen = sizeof(from);
recvfrom(msgsocket, buf_temp, BUF_LEN,0, &from, &fromlen);
//コマンド取り出し。
command_buf[0] = buf_temp[0];
command_buf[1] = buf_temp[1];
command_buf[2] = buf_temp[2];
command_buf[3] = buf_temp[3];
command_buf[4] = '\0';
printf(command_buf);
}
}
何故か、何も表示されません。
勿論接続は成功しています。
なぜでしょうか?
0030デフォルトの名無しさん
NGNGこんな感じで。
ttp://www.google.com/search?q=source+code+pcap
ttp://www.google.com/search?q=source+code+tcpdump
0031デフォルトの名無しさん
NGNGJavaだと1000ぐらいでアボーンした
0032デフォルトの名無しさん
NGNGネットワーク以前にスレッド1万も作るのは効率悪杉。
OSにはそれぞれ最適化されたハイパフォーマンスなAPIがあるからそれを使うことを検討してみたら?
0033デフォルトの名無しさん
NGNGソケットをそれだけ持ってていいのかは知らんけど
数が膨れることがわかってればselectでシングルスレッドですよ
うひょ
0034デフォルトの名無しさん
NGNG003625
NGNGやはり、スレッドを1万も起こすのは効率悪いですよね。
Selectしかないのでしょうか?
一応ターゲットにしているOSは、Windows2000Serverなのです。
何か良いAPI等はないでしょうか?
あと、プログラムはコンソールアプリとして製作しています。
0037デフォルトの名無しさん
NGNGサーバの内容にもよるけど一台でこなせなかった場合に備えて
複数台のマシンでの負荷分散も考慮しとけ。
0038デフォルトの名無しさん
NGNG送信元からの文字コードはあってる?
間違ってると。・・・・
あ、化けるだけか・・・
う〜ん、なんでだろ?
0039デフォルトの名無しさん
NGNGなるほど
色々調べて見ます。
運悪く初めて何となく買った参考書がUNIX系だったもので、WSA系ってあんまり知らないんですよね(汗
0040デフォルトの名無しさん
NGNGいや、10を超えたらもうあとはいっしょだよ。難易度的に
0041デフォルトの名無しさん
NGNGいや、数千を超えたらもうあとはがた落ちだよ。パフォーマンス的に
0042デフォルトの名無しさん
NGNGrecvfrom の戻り値は確認してんの ?
0044デフォルトの名無しさん
NGNG0045デフォルトの名無しさん
NGNGまーそりゃしょうがないよ
1サーバ2,300あたりまでに制限してあとは負荷分散するくらいだろ
ていうかあの書き方だったらアクセス数が多いけど作業量少なそうだから
1万とかでもなんとかなるだろ
0046デフォルトの名無しさん
NGNGあとはキャッシュかな
0047デフォルトの名無しさん
NGNGUNIXネットワークプログラミングや、zebraを調べているのですが
rt_msghdrの定義が見つかりません。
Linuxには、そもそもないのでしょうか?
もしないなら、どのように経路情報を取得するのか教えてください。
よろしくお願いします。
0048デフォルトの名無しさん
NGNG1万コネクションともなると、スレッド以前にロードバランシングを
考えたほうがよさそうな気がするのだが。
サーバ1台で処理するとなるとPCサーバではきついっしょ。
0049デフォルトの名無しさん
NGNGそげなことがあんた以外にわかるわけなかと。
とっとと、>>44 の指示にしたごーたほうがよかと。
005043
NGNGerrono見てみます。
005143
NGNG10038というエラーでした。
0052デフォルトの名無しさん
NGNGソケット以外のものに対して操作を実行しようとしました。
0053デフォルトの名無しさん
NGNGhttp://www.google.co.jp/search?hl=ja&ie=UTF-8&oe=UTF-8&c2coff=1&q=Google%E3%81%ABWSAGetLastError%E3%81%A810038%E3%82%92%E3%81%B6%E3%81%A1%E8%BE%BC%E3%82%93%E3%81%A7%E6%A4%9C%E7%B4%A2%E3%81%97%E3%82%8D%E3%82%84%E3%83%9C%E3%82%B1&lr=
0054デフォルトの名無しさん
NGNG10038 WSAENOTSOCK 無効なソケットに操作を行っています。
なめとんか ?
005543
NGNG何故か、スレッド起こして、ソケット内容を渡す後と前とで番号が変わってました(汗
何かミスったかな・・・
何はともあれどうもありがとうございました。
0056デフォルトの名無しさん
NGNGホームページのネットワークプログラムを動かしたいのですが
Apacheというホームページのプログラムがあると聞いたのですが
Bpacheと言うのを電気屋で見たのですが。
どちらが良いのでしょうか?
環境は
OS:Pentium4
CPU:WindowsMe
HDD:256MB
です。
よろしくお願いします。
0057デフォルトの名無しさん
NGNG0058デフォルトの名無しさん
NGNG突っ込みどころ満載だが…
まぁ、初心者のようなので良い事を教えてやろう。
Cpacheってのが良いよ。
あと、多分そんな環境は壊れてるから
買ったPCメーカーに返品したほうが良いよ。
CPUのソケットにOS挿して、HDDにCPU突っ込んで、IDEにメモリ挿したら
普通壊れるからさ
0059デフォルトの名無しさん
NGNGて言うか、API の戻り値はちゃんと確認した方がいいよ。
特にネットワークだと、相手の問題でエラーになることもあるからね。
>>56
HDD:256MB はありえるけどな。
0060デフォルトの名無しさん
NGNG万が一 ネタじゃないなら 板違い
0061デフォルトの名無しさん
NGNGネタでも板違い
0062デフォルトの名無しさん
NGNG(10038)
ソケット以外に対してソケット操作が行われた
An operation was attempted on something that is not a socket. Either the socket handle parameter did not reference a valid socket, or for select, a member of an fd_set was not valid.
0063デフォルトの名無しさん
NGNGIRC等は、ポート0同士でデータ転送が出来てますが
あれは、Winsock等を使って実装する事は可能なのでしょうか?
方法があれば教えていただけるとありがたいです。
0064デフォルトの名無しさん
NGNGIRCじゃなくてIRQでしょ。
そういえば、WinMXもポート0同士での通信に対応してたな
IEのコンポーネント使ってるって聞いた事あるけど、そんなので可能なのかな?
0065デフォルトの名無しさん
NGNGMSNメッセは、ポート0同士の場合、鯖経由だが(だから遅ぇ
0066デフォルトの名無しさん
NGNG普通の速度でてるし・・・
鯖は経由してるがデータそのものは経由してない ってのが正しい。
WinSockの機能としては無理
0067デフォルトの名無しさん
NGNG>>63の言うIRCでのデータ転送ってのがDCC-SENDのことなら記憶違いじゃないか? 不可能。
>>64の言うやつも記憶違いでは。無理っしょ
0068デフォルトの名無しさん
NGNGつまり、鯖をハブに見立てて ってやつ
でも、それデバドラ組まないと駄目だと思う。
006963
NGNGう〜ん、鯖経由ですか・・・
どうもありがとうございました。
0070デフォルトの名無しさん
NGNGそれって中央鯖経由するのと変わらない。
0071デフォルトの名無しさん
NGNG0072デフォルトの名無しさん
NGNG×IRQ
IRQって言ったら・・・・
アレだろw
007371
NGNG0074デフォルトの名無しさん
NGNGローカルから、telnetで設定ポートへ接続を行おうとしたんですが
接続できません。
UDPはtelnetで接続出来ないのでしょうか?
0075デフォルトの名無しさん
NGNGそのとおり。
UDPには接続という概念はありません。
007674
NGNG勉強になりました。
0077デフォルトの名無しさん
NGNG007874
NGNG確かDNSって、UDPでしたよね?
でも、何故かDNSはtelnetで接続出来るんですが・・・
ああいうのは何故なんでしょうか?
0079デフォルトの名無しさん
NGNGnameserver 42/tcp name #Host Name Server
nameserver 42/udp name #Host Name Server
008074
NGNGTCPも動いてたんですね。
どうもです。「
0081デフォルトの名無しさん
NGNG音声データをリアルタイムで相手に配信するにはどのようにすればいいのでしょうか?
回線状態によって、100%相手に届かなくてもいいので、UDPが望ましいのですが・・・
0082デフォルトの名無しさん
NGNG音声のミキシングを行って
WindowsMediaフォーマットSDK で音声をエンコード
あとは、普通に転送でOKだと思う。
0083デフォルトの名無しさん
NGNG0084デフォルトの名無しさん
NGNGそれ、自分で面白いと思って書いたのか?
書き込みした後の気持ちってどんな感じ?
今、どんな心境?
0085デフォルトの名無しさん
NGNG0086デフォルトの名無しさん
NGNGどう考えても、ネトプ の方がましだろ。
0087デフォルトの名無しさん
NGNGsendto()で文字列を送信したいのですが
ソケットまでは取得できてる状態で
sendto(msgsocket,buf,1024,0,aaa,sizeof(aaa));
こんな感じでいいのでしょうか?
相手先のアドレスの指定は、どの形式でしょうか?
008887
NGNGchar ip_str[] = "localhost";
server_ent = gethostbyname(ip_str);
sendto(msgsocket,buf,1024,0,server_ent->h_addr,server_ent->h_length);
う〜ん、こんな感じだと思ってやったけど、出来ない。
どうすれば良いんでしょうか?
もうさっぱりわからないです。
0089デフォルトの名無しさん
NGNGsendto()のあて先指定は、IPアドレスじゃなくて sockaddr(IPならsockaddr_in)へのポインタだよ。
0090デフォルトの名無しさん
NGNGこんな感じで書け。
struct hostent *hp;
struct sockaddr_in addr;
memset(&addr, 0, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_port = htons(ポート番号);
if (!(hp = gethostbyname(相手ホスト名)))
エラー処理;
bcopy(hp->h_addr, &addr.sin_addr.s_addr, hp->h_length);
if (sendto(s, buf, sizeof(buf), 0,
(struct sockaddr *)&addr, sizeof(addr)) < 0)
エラー処理;
gethostbyname() の結果得られる hostent 構造体の h_addr に
IP address が入ってる (正確には h_addr は配列なので、h_addr
としてアクセスすれば、bcopy の第一引数にそのまま使える) から
それを sockaddr_in 構造体の sin_addr.s_addr にコピー。
アドレスの長さは hostent 構造体の h_length に入ってるから
それを使え。
sockaddr_in 構造体は 0 クリアしてから、sin_family, sin_port,
sin_addr を設定しとけ。sin_port は送信したい宛先ポート番号な。
つーか、スレの先頭の参考書ぐらい嫁。
0091デフォルトの名無しさん
NGNGひたすらネットを漂流して不正確なコードの断片に惑わされているんだろうか。
009287
NGNG>>90
サンクスです。
無事出来ました。
>>91
家にある参考資料はTCPだけだったり、UNIX用で別の方法で実装されてたりで
ひたすら断片をつなぎ合わせて言ってる感じです。
0094デフォルトの名無しさん
NGNGあるパケットがPC1から出発してPC2に届くまでにかかった時間をミリセカンドの単位で測りたいんですがどうすればよいでしょうか?
0095デフォルトの名無しさん
NGNG0096デフォルトの名無しさん
NGNG双方の時刻をちゃんと同期させておいて、双方で
ethereal でも使ってトレース取れば?
009794
NGNGいえ、音声パケットです。
PC1で発した声がPC2で再生されるまでの時間を測りたいのです。
0098デフォルトの名無しさん
NGNG受信側には判りようがない気がするわけだが。
009994
NGNG初めて知りましたethereal
出来ればかかった時間のみをファイルに1列で出力したいのですができませんか?
0100デフォルトの名無しさん
NGNG安易に ping じゃだめなのかな?
そうでなければ NTP の RFC を読んでみれ。
転送遅延の計り方と計算方法が出ている…筈。
010194
NGNGそうですよね、、言われてみてもっともです。
なにかしら方法はないものですかね?
0102デフォルトの名無しさん
NGNG送信側には、送信した時刻がある。
じゃあ、あとはパケットにuniqなidでも振っておいて、
id:到着時刻とid:送信時刻をつき合わせたらええやん。
010396
NGNGう〜ん、双方のデータ見て、手で計算すれば? 程度のコメント
だったんだけど...。
双方の ethereal のデータをテキスト化して付き合わせ、
かかった時間を計算するようなスクリプトを書くのは
難しくないと思うけどね。
データ取る、計算する、という手順だから、既存ツールで
一発、ってワケには行かないよ。その辺は自分でささっと
作るベシ。ここはマ板だし、できるでしょ。
libcap 形式にしておいて、tcpdump に喰わせてパケット内容
の一部も表示させて、それをキーに、双方のデータを付き合わせる
ようにすれば、楽だと思うよ。実際に >>99 が期待している音声
データとやらにそのまま適用できるアイデアなのかは知らないけ
どね。
010496
NGNG要は >>102 ってことです。
>>102 の言うようなパケットを計測データ
として使えば、計算するスクリプトを書く
のも楽だ、っつーことで。
010594
NGNGpingとは別に値を取りたかったので。
>102
>103
どうもです、Eterealは使ったこと無いのですがとりあえずやってみます。
ありがとうございました!
0106デフォルトの名無しさん
NGNG0107デフォルトの名無しさん
NGNG0108デフォルトの名無しさん
NGNG0109デフォルトの名無しさん
NGNGライブラリレベルではスレッドセーフだ。
MSの保証はないが。
0110デフォルトの名無しさん
NGNG>一方のスレッドが send() を呼び出し、別のスレッドが同一のソケットに対して
>recv() を呼び出すのは安全である、という伝説があります。
>しかし私はこれを確認したことはありません。
>より堅固な情報やデモンストレーション用のコード、
>さらなる伝説などがあれば、教えていただけると幸いです。
この記述が気になったもんで・・・
大丈夫っすよねー?
0111デフォルトの名無しさん
NGNG0112デフォルトの名無しさん
NGNGUNIXでsendto()する場合も、90と基本的に等価になる筈だが。
0113デフォルトの名無しさん
NGNGとか何も考えず普通に使ってたな。
0114デフォルトの名無しさん
NGNG前にも書いたと思うけど、全てのプラットフォームで、
アプリケーションレベルの排他を無しにそれをやって
破綻しないことが保証されているわけではない。
SVR 系の libsocket + sockmod というダサい実装を引き
ずっている商用 UNIX だとダメ。つっても、商用 UNIX で
イマドキ、そんなダサい実装を引きずってるのは少ない
けどね。
ただし、そういう実装でも read() と write() を競合
させるのは大丈夫。recv() と send() だとダメ。
ポータビリティを考えるなら、ちゃんと、アプリケーション
レベルで排他制御をしなさいってこった。
0115デフォルトの名無しさん
NGNG0116デフォルトの名無しさん
NGNGlen = recvfrom(msgsocket, buf_temp, BUF_LEN,0, &from, &fromlen);//データ受信
if (len=-1)
{
printf("エラーです。No : %d",WSAGetLastError() );//受信ミスの時エラーを吐く
}
}
こんな感じでエラー処理をして、いざテストしてみると
エラーナンバー0とか言い出すんです。
何故でしょうか?
0117デフォルトの名無しさん
NGNG0118デフォルトの名無しさん
NGNG0119デフォルトの名無しさん
NGNGコンパイラの警告レベルを上げると幸せになるかも
0120116
NGNGお恥ずかしいおはなしで・・・・(汗
==ですね。。。
気づかなかった(恥
どうもありがとうございました。。。
0121デフォルトの名無しさん
NGNG0122デフォルトの名無しさん
NGNG>ただし、そういう実装でも read() と write() を競合
>させるのは大丈夫。recv() と send() だとダメ。
なんで?
0123デフォルトの名無しさん
NGNGWinsockでプログラムを組んでるのですが
Unicodeで送信する場合どうすれば良いのでしょうか?
また、Winsockは特に指定の無い場合はどのコードが使われるのでしょうか?
家にある文献には文字コードの事がまったく書かれてないのです。。。
0124デフォルトの名無しさん
NGNG文字列・コードセット・エンコーディングの規定は主にプロトコルで行われる。
UNICODEで送りたければ勝手に送るがいいさ。
0127デフォルトの名無しさん
NGNG# 他のは見ようがないしなぁ…
# つかSolarisのソースって今も見れるんだっけか?
0128デフォルトの名無しさん
NGNGSolaris は 2.5.1 で sockmod を捨てた (sockfs にした)
から、昔の SVR のダサい実装じゃない。
0129デフォルトの名無しさん
NGNGSolaris2.6からでは?
0130デフォルトの名無しさん
NGNGそんな細かいことにこだわるなよ
0131デフォルトの名無しさん
NGNGSVR ソースなんか持ってねーよ。
lib のがスレッドセーフじゃないのけ?
0132デフォルトの名無しさん
NGNGwininetでは無理ですか?
単にPROXY経由なら簡単なのだが…
0133デフォルトの名無しさん
NGNG〜ですか
〜だが
0134デフォルトの名無しさん
NGNGHTTPポートに接続してGETリクエストを発行してください。
0135デフォルトの名無しさん
NGNGSOCKS Version4とか5の事か?
0137デフォルトの名無しさん
NGNG0138デフォルトの名無しさん
NGNGSMTP、POP3、FTP、HTTPってDNSサーバをつかってデータを移動させているのではないのですか?
DNSサーバがなくてもいいのですか?
また逆に、データの移動だけならメールとして展開できなくても、
DNSサーバがあればパケットを受け取るだけは受け取れるんでしょうか?
IP-TCP-DNSーSMTPなのか
IP-TCP-SMTPなのか
教えてください。
0139デフォルトの名無しさん
NGNGいきなり「メールの送受信の仕方」を覚えようとしたんだろうなあ
0140132
NGNGIEでできるかどうかではなく、wininetでやる方法を知りたいのです。
0141デフォルトの名無しさん
NGNGDNSとかTCP/IPを色々勘違いしていると思われる。
DNSはホスト名とIPアドレスのマッピング(それと電子メールのルーティング情報の
提供)をするときに使われる。
gethostbyname、gethostbyaddrおよびresolverに関して調べてみると良い。
まぁ、その前に知るべきことが山ほどあるように思うけど。
0142デフォルトの名無しさん
NGNG>SMTP、POP3、FTP、HTTPってDNSサーバをつかってデータを移動させているのではないのですか?
はい
>DNSサーバがなくてもいいのですか?
はい
>また逆に、データの移動だけならメールとして展開できなくても、
>DNSサーバがあればパケットを受け取るだけは受け取れるんでしょうか?
いいえ
>IP-TCP-DNSーSMTPなのか
>IP-TCP-SMTPなのか
IP-TCP-SMTP
他に質問は?
0143デフォルトの名無しさん
NGNG俺は見てないけど、このページは見たのか?
http://www.google.co.jp/search?q=socks+wininet&lr=
0144デフォルトの名無しさん
NGNGMXは無視ですか?
0149デフォルトの名無しさん
NGNG0150デフォルトの名無しさん
NGNG0151デフォルトの名無しさん
NGNG手が込んでいるな。
DNSの質問で、SMTP、POP3、FTP、HTTPを同列にしながら
あえて個別にSMTPを聞いてくるあたり…。
0152デフォルトの名無しさん
NGNGネットワークについての質問スレッド Part7
http://pc.2ch.net/test/read.cgi/hack/1071933402/l50
0153デフォルトの名無しさん
NGNG0154138
NGNG皆さんレスありがとうございます。
>>141
これから調べてみます。
>>142
霧が晴れました。
>>149
概念がどうも書籍の文章から連想できなかったもので設計までたどり着けなかったもですから。
>>150-151
釣りやネタではありません。本物の初学者の挙動のサンプルにでもしてください。
>>151
それら(DNS、SMTP、POP3、FTP、HTTP)は同列(アプリケーション層)なのに、という意味ですか?
SMTPは例にしただけで全部書くのもくどいかなと思ったものでそうなりました。失礼しました。
>>152
ありがとうございます。行ってみます。
>>153
ネタではありません。
無知ゆえの質問にてお許しください。
0155デフォルトの名無しさん
NGNG>>1の名前からしてネタスレだが
0156デフォルトの名無しさん
NGNGネットワークを使って具体的に何をやりたいのか質問すれば?
このスレは最近、閑古鳥が鳴いているのでネットワーク閑人が
答えてくれるでしょう。
0157デフォルトの名無しさん
NGNG次スレでは、「名無しさん204.204.204.204」だな。
0158デフォルトの名無しさん
NGNGどの本を読んでそういう考えに至ったのか興味あるが…。
プログラミングをはじめる前に、まともなTCP/IPの本を読んだり
実際にNetworkを構築したりして、TCP/IPのお勉強をした方が良い。
何をやっているかわからないものをプログラミングすることは
絶対にできませんから。まだ設計云々のレベルじゃない。
>それら(DNS、SMTP、POP3、FTP、HTTP)は同列(アプリケーション層)なのに、という意味ですか?
SMTPが特別なのは>>141に答えが書いてあるのが読めないのかな?
MXが関係するわけだが…。
0159デフォルトの名無しさん
NGNG質問しないよ。いい加減、放置しろよ。
0160デフォルトの名無しさん
NGNGDNDとFTPも毛色が違うだろ?
0161160
NGNG0162デフォルトの名無しさん
NGNG0163138
NGNGレスありがとうございます。
>>156
まずは至極単純なプロキシサーバを作ろうと思っています。
(WAN)モデムとルータ(LAN)の間にかませる「入出全データの丸投げ状態の物」を想像しています。
>>158
ごめんなさい>>141からは、IP-TCP-DNSーSMTPを連想します…。
(っていうかIP-TCP-DNSーIP-TCP-SMTP?また馬鹿なこと言ってたらすみません)
でも、>>144-148のやり取りが理解できたかも。
>>159
背筋が凍ります。知らない町(冬の北海道)で一人ぼっちにされたような気になります。
そんなこと言わないでください。
参考文献(購入順)
基礎からわかるTCP/IPネットワーク実験プログラミングLinux/FreeBSD対応
TCP/IPの絵本
UNIXネットワークプログラミング第2版Vol.1
C言語によるTCP/IPセキュリティプログラミング
全てわかったあとに恥かしくなるような疑問なんでしょうが、いまは大真面目です。
0164デフォルトの名無しさん
NGNG>(WAN)モデムとルータ(LAN)の間にかませる「入出全データの丸投げ状態の物」を想像しています。
WAN - |モデム - RS232C| - |RS232C - PC - ETHER| - |ETHER - ルータ| - LAN
こんな感じか?
しかし、そんだけ参考文献を読んでおいてあの質問は寒い・・・
0165デフォルトの名無しさん
NGNGひょっとしたら、全銀協TCP/IP手順をやりたいわけ?
0166デフォルトの名無しさん
NGNG>(っていうかIP-TCP-DNSーIP-TCP-SMTP?また馬鹿なこと言ってたらすみません)
>でも、>>144-148のやり取りが理解できたかも。
♂なら氏ね!
0167デフォルトの名無しさん
NGNG全レスしようとするからうざくてたまらん。
0168デフォルトの名無しさん
NGNG\ ∩─ー、 ====
\/ ● 、_ `ヽ ======
/ \( ● ● |つ
| X_入__ノ ミ そんな餌で俺様がクマ――!
、 (_/ ノ /⌒l
/\___ノ゙_/ / =====
〈 __ノ ====
\ \_ \
\___) \ ====== (´⌒
\ ___ \__ (´⌒;;(´⌒;;
\___)___)(´;;⌒ (´⌒;; ズザザザ
(´⌒; (´⌒;;
0169デフォルトの名無しさん
NGNG0170デフォルトの名無しさん
NGNGこのコピペ凄い好き。
0171デフォルトの名無しさん
NGNGFTPには用はない、
なんでVBのページなんか
0172デフォルトの名無しさん
NGNG0173デフォルトの名無しさん
NGNGhttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/wininet/wininet/internetconnect.asp?frame=true
0174デフォルトの名無しさん
NGNGオマイは指示されたところから先へ進むことができない能無しの脳無しだな
Ω\ζ°)チーン
0175デフォルトの名無しさん
NGNGつまりこういうことですか?
通常は
InternetOpen
InternetOpenUrl
InternetReadFile
InternetCloseHandle
InternetCloseHandle
だけでhtmlをもらって来れるわけですが、SOCKS経由の場合は
InternetOpen
InternetConnect
HttpOpenRequest
HttpSendRequest
HttpQueryInfo
InternetReadFile
InternetCloseHandle
InternetCloseHandle
InternetCloseHandle
となるわけですか
そう考えるとInternetOpenUrlってのは
InternetConnect、HttpOpenRequest、HttpSendRequest、HttpQueryInfo をまとめて面倒みてくれる便利な関数なんだなぁ
0176132
NGNG0177デフォルトの名無しさん
NGNGWinsockってイーサネットフレームのデータって取れないんですか?
MACアドレスとtypeの値が欲しいんだけどうまくいかず。
typeが拾えないとしたら、パケットフィルタ作るときにどうやってIPv4とIPv6を区別するんだろう?
VersionはIPv4もIPv6もパケの最初4bitだからそこで処理分岐させるのかなぁ
0178デフォルトの名無しさん
NGNG0179デフォルトの名無しさん
NGNGWSAGetLastError
・同じスレッドの最後のエラーコードを取得
・エラーはクリアしない
getsockopt SO_ERROR
・同じソケットの最後のエラーコードを取得(スレッドは関係なし)
・エラーをクリアする
select の exceptfds 等のエラーコードは WSAGetLastError では拾えないので
ソケットに接続した後は getsockopt SO_ERROR でエラーを取得した方が幸せになれる。
0180デフォルトの名無しさん
NGNGいいえ
0181179
NGNGどこが間違ってまつか?
0182デフォルトの名無しさん
NGNGウソツキ
0183デフォルトの名無しさん
NGNG「でつ」
0184デフォルトの名無しさん
NGNGでつ ← 10秒以上見つめるとスヌーピーに見えます
0185デフォルトの名無しさん
NGNGDelphiで書いたプログラムをLinux/gcc(C++)に移植したいんですが。
0186179
NGNG0187デフォルトの名無しさん
NGNGを ← 10秒以上見つめると水たまりに足を突っ込めます。
0188デフォルトの名無しさん
NGNGワラタ 初めて知った
0189デフォルトの名無しさん
NGNGIPv6にも必ず対応させるようにと言われましたが、経験が無くてよくわかりません。
IPv4とIPv6の両者に対応させる場合にはどのような点に気をつければいいんでしょうか。
たとえばJavaなら、意識せずにかいても自動的にAPIとカーネルによってIPv6の対応を
すませてもらえるとおもいます(Java1.4、場合によってはLinux2.4が必要)。
Cの場合は、たとえば既存のこのような部分は要修正である、など
どのような点に気を付ければいいのかご教授頂けますか?
よろしくお願いします。
0190デフォルトの名無しさん
NGNG出来はしらんが、こんな本がある。
『IPv6ネットワークプログラミング』
http://www.amazon.co.jp/exec/obidos/ASIN/4756142362
http://www.ipv6style.jp/jp/apps/20030617/index.shtml
http://www.soi.wide.ad.jp/class/20030030/materials_for_student/11/osamuNP11ver1.0.ppt
0191デフォルトの名無しさん
NGNG0192デフォルトの名無しさん
NGNGcommonc++
socket++
よさげな方をどうぞ
0193デフォルトの名無しさん
NGNGまず、socket(2) 実行時のアドレスファミリ (第一引数)
は AF_INET6 を指定しておくこと。Linux は良く知らない
けど、通常はこれで、IPv4, IPv6 コンパチなソケットが
生成される。KAME カーネルなんかだと、そのあとで
IPV6_V6ONLY オプションを有効にしてやると、IPv6 しか
受け付けなくなるけど。
bind(2) するときも、sockaddr_in6 構造体を用意して
bind(2) しておくこと。bind(2) 時のアドレスの指定
方法なんかは、>>190 が紹介している本を嫁。
accept(2) 時に第二引数をちゃんと指定 (NULL にしない)
するんなら、やっぱり、sockaddr_in6 構造体分のサイズ
を用意しておくこと。
(続く)
0194193
NGNG>>190 が紹介している本を持ってるけど、C でのソケット
プログラミングの知識がすでにあるなら、>>190 の本を
読めば、IPv6, IPv4 両方 OK なサーバプログラムなんて、
すぐ作れるよ。ちょっとイマイチな所 (著者の考え方が
偏り気味) もあるし、半分以上が Appendix (内容は RFC
と Internet-Draft) だったりする変わった本だけど、
現時点で IPv6 にフォーカスする (日本語限定) のであ
れば、Stevens 読むより、イイと思う。
イメージ沸かないなら、FreeBSD の inetd のソースを
読んでみるのも参考になっていいぞ。
問題は、>>189 がターゲットとしている Linux のカーネル
が、どこまでマトモに IPv6 を実装しているか、だけどな。
長文、スマソ。
0195デフォルトの名無しさん
NGNG情報ありがとう。
>>193-194
詳しくありがとう。参考になります。
0196デフォルトの名無しさん
NGNG場当り的対処だな。美しくない上に将来のことなかまったく考えてない汚いやり方だ。
addrinfo 使えばアドレスファミリに関する操作はかなり抽象化できる。
こんな実装依存の方法を使う必要ないよ。
> イメージ沸かないなら、FreeBSD の inetd のソースを
> 読んでみるのも参考になっていいぞ。
>
> 問題は、>>189 がターゲットとしている Linux のカーネル
> が、どこまでマトモに IPv6 を実装しているか、だけどな。
Linux の v6 スタックが未だ実用に耐えないとでも?(´,_ゝ`)プッ
0197デフォルトの名無しさん
NGNG> AF_INET6 を指定しておくこと。
> sockaddr_in6 構造体を用意してbind(2) しておくこと。
> sockaddr_in6 構造体分のサイズを用意しておくこと。
この部分はまずい。
AFやPFに依存しないコードを書いた方が良い。
それは簡単にできる。
もちろんFTPの様にIPアドレス、ポート番号を直接扱うプロトコルだと、
その部分「だけ」は明確に書かざるを得ないけどね。
> 偏り気味
藁
0198デフォルトの名無しさん
NGNG> 場当り的対処だな。
ハァ? AF_INET6 指定で socket(2) をコールせずに IPv6 が
使えるとでも?
> Linux の v6 スタックが未だ実用に耐えないとでも?
だーかーらー、『>>189 がターゲットとしている』とわざわざ
書いてるだろ? どのバージョンのカーネルを使うかわかんねー
じゃん。最新の (2.6 だっけ?) はちゃんと実装されてるらしい
ね。けど、プログラミングに関する部分って、まだまだ、RFC
になっていなくて、実装による違いが出る部分も多いから、
注意が必要だよね。
0199198
NGNGgetaddrinfo() のことか。なら納得。
それなら、bind(2) の説明のところを引用すべき
だったね。socket(2) の所を引用しているから、
はぁ? とオモタ。
0200197
NGNG要するに、返ってきた構造体の
getaddrinfo(3): ai_family, ai_socktype, ai_protocol, ai_addrlen
gethostbyname(3): h_addrtype, h_length
を使え、自分でマクロ定数を書くのは必要最小限に。
最低限: URLの// →AF_INET, AF_INET6に限定など。
0202195
NGNG将来的にまた新しいIPが出てきても問題ない、と。
・・・こういう理解でいいのかな?とりあえずはgetaddrinfoを基本として
そのほか紹介されたAPIも調べつつ、本も読みつつ、やってみたいと思います。
0203デフォルトの名無しさん
NGNGselect exceptfds は、getsockopt SO_ERROR でエラーを取得。
それ以外は、WSAGetLastError でエラーを取得するべし。
また、エラーメッセージはFormatMessageで取得するあるよろし。
0204デフォルトの名無しさん
NGNGHTTPにてサーバーを読みに行くと
ノートンインターネットセキュリティにつかまります.
回避したいのですがノートンから認証とればOKですか
また、つかまるのはHTTPだけですか?
おねがいします。
0205デフォルトの名無しさん
NGNGどの辺がネットワークプログラミングと関係あるのかと
小一時間。
0206デフォルトの名無しさん
NGNG0207デフォルトの名無しさん
NGNGありがとうございます
0208デフォルトの名無しさん
NGNG検索してもWinny関連しかヒットしない(´・ω・`)ショボーン
0209デフォルトの名無しさん
NGNG向こうからはconnectできない状態にあるってこと。つまり、
こっちからconnectするしかない。
0210デフォルトの名無しさん
NGNG何とか通信速度を犠牲にせずにポート0通信をやる方法ないかな・・・
鯖を介して通信するとポート0通信は可能だけど、それだと通信速度が落ちるし・・・
何か良い方法は無いものか・・・
0211デフォルトの名無しさん
NGNG全てがポート0になると、どことも接続できなくて困るだけ。
0212デフォルトの名無しさん
NGNGどうしてそれを「port0」通信って呼ぶのかな?
ポート番号0じゃなくて、ローカルのポートを一つも(ゼロ個)事前割当てしないって事?
0213デフォルトの名無しさん
NGNGPort0同士で接続する方法が見つかれば大発見
0214デフォルトの名無しさん
NGNGあるだろ。
rfc3489とか、UDP hole punching あたりで検索してみろ。
0216デフォルトの名無しさん
NGNGへぇ、、そういうのあるんだ・・・
でも個人で実装できるレベルのものなの?
Winsock使えます ってレベルじゃ無理じゃないかな?
ソースが公開されてるとかなら何とかなりそうだけど・・・
0217デフォルトの名無しさん
NGNG> Port0で通信するなんてWinnyってTCPパケットレベルでいじってたのか。う〜ん。
なんか勘違いしてないか?(w
>>216
routerとかfirewallがsupportしてないと…
0218デフォルトの名無しさん
NGNGRFC3489ってSTUNの事だよね?
確か、STUNはルーター非依存じゃなかったっけ?
相性問題でウマく行かない事が多いとか聞いたけど
0219デフォルトの名無しさん
NGNGこれは予想やけど、P2Pアプリで、listenポートを入力する欄があって、
そこが0だとconnectしかしない(listenしない)モードになるような
インターフェース設計のが有ったからではないかと。
0220デフォルトの名無しさん
NGNG完全ポイントツーポイントでport0同士ってわけじゃなく
サーバ介してポートをあけるような
振る舞いをさせるもの、ルータに。
ルータ非依存じゃなく、たまたま
多くのNATルータで動いてしまう。
0221デフォルトの名無しさん
NGNG0222sage
NGNG提出期限は、本日0時とする。
以上。
0223デフォルトの名無しさん
NGNG0224デフォルトの名無しさん
NGNG0225デフォルトの名無しさん
NGNG0226デフォルトの名無しさん
NGNG[ ] (・∀・ )←>>224
0227sage
NGNG0228デフォルトの名無しさん
NGNG>225を百回嫁低脳
>225を百回嫁低脳
0230デフォルトの名無しさん
NGNG0231デフォルトの名無しさん
NGNGとっととお帰り。
0232sage
NGNG0233デフォルトの名無しさん
NGNGベンキョしたいと思っているのですが、なにかよい書籍はないでしょうか。
以下2点が検索されたのですがは古くないでしょうか?
・WinSock2.0プログラミング(1998)
・Win32ネットワークプログラミング(1998)
0234デフォルトの名無しさん
NGNG0235デフォルトの名無しさん
NGNG>>3の
| Webプロトコル詳解―HTTP/1.1、Webキャッシング、トラフィック特性分析
| http://www.amazon.co.jp/exec/obidos/ASIN/4894715414
読め
0236デフォルトの名無しさん
NGNG小生ただいま、クライアントJavaアプリを作成しています。
下記HPに必要事項をクエリとして投げて(POSTして)みたのですが、
次の画面(Submitボタンを押した後の画面)に遷移しません。
遷移後の画面からhtmlソースを取得することが目的です。
http://www.ncbi.nlm.nih.gov/BLAST/Blast.cgi
htmlソースを見ると、JavaScriptを使用して送信?を行っているようです。
試しに、ブラウザのURL欄にSubmitボタンのアクション"javascript:document.forms[0].submit();"
を代入して移動すると、Submitボタンを押した後の画面に遷移しました。
GoogleやYahooのような検索エンジンで試してみると正しく次の画面に遷移します。
POSTの処理は、きちんと行われているようです。
JavaScriptが介入してくると、ブラウザの起動は必須なのかなと思い、
アプレットやswt3.0のBrowserClass使って簡単なブラウザを作ってみたりしたのですが、
どちらもいまいち上手く行きませんでした。(特にBrowserクラスは出たばっかりみたいで…)
JavaクライアントアプリケーションでJavaScriptを実行する方法等教えて頂けないでしょうか。
ご教授の程、よろしくお願い申し上げます。
0237デフォルトの名無しさん
NGNGimport java.io.*;
import java.net.*;
public class SubmitButtonTest {
public static void main(String[] args) throws IOException {
URL url = new URL("http://www.ncbi.nlm.nih.gov/BLAST/Blast.cgi?");
HttpURLConnection con = (HttpURLConnection)url.openConnection();
String postdata = "ALIGNMENTS=0&ALIGNMENT_VIEW=Pairwise&" +
"AUTO_FORMAT=Semiauto&CLIENT=web&DATABASE=swissprot&DESCRIPTIONS=50&" +
"ENTREZ_QUERY=Mus+musculus+[ORGN]+OR+Homo+Sapiens+[ORGN]+OR+Rattus+norvegicus+[ORGN]&" +
"ENTREZ_QUERY=All+organisms&EXPECT=1&FILTER=L&FORMAT_BLOCK_ON_RESPAGE=None&" +
"FORMAT_ENTREZ_QUERY=All+organisms&FORMAT_OBJECT=Alignment&FORMAT_TYPE=HTML&" +
"GAPCOSTS=11+1&GENETIC_CODE=1&GET_SEQUENCE=on&LAYOUT=TwoWindows&" +
"MATRIX_NAME=BLOSUM62&NCBI_GI=on&PAGE=Translations&PROGRAM=blastx&QUERY=BG076932&" +
"SERVICE=plain&SET_DEFAULTS.x=22&SET_DEFAULTS.y=12&SHOW_LINKOUT=on&SHOW_OVERVIEW=on&" +
"UNGAPPED_ALIGNMENT=no&WORD_SIZE=3&END_OF_HTTPGET=Yes";
//ストリームを取得してデータをセット
con.setDoOutput(true);
//URL 要求のメソッドをPOSTに設定します。
con.setRequestMethod("POST");
//送信
con.connect();
//応答をすべて標準出力へ
BufferedReader breader = new BufferedReader(new InputStreamReader(con.getInputStream()));
String line;
while((line = breader.readLine()) != null){
System.out.println (line);
}
con.disconnect();
}
}
0238デフォルトの名無しさん
NGNG0239デフォルトの名無しさん
NGNGレベルもなにも・・・
ネットワークプログラミング限定での話しになると、このレベルしか話しようがないだろ・・・
それ以上のレベルになると個人レベルでの実装は不可能な話になるし
0240デフォルトの名無しさん
NGNG0241デフォルトの名無しさん
NGNGSTUNもそうだけどさ
つまり内部からルーターにある指令を送って特定のポートを随時開放するって事だよね?
って事は、どういうパケットを送ってるの?STUNは
何か調べたけど、有料なSDKとかしかないし・・・
おまけに英語は読めないし(実は日本語すら読み書きはかなり辛い、、当方台湾人故。。。)
0242デフォルトの名無しさん
NGNG0243デフォルトの名無しさん
NGNG今は日本に居るので、日本語を覚えるのが急務だったもので…
中1の時に引っ越したのでこっちで英語の勉強をするような余裕がなかったです。(高校では騙し騙しその場しのぎで単位取ってたし
無事大学は入れたもののその後どうしようかと・・・(汗
やはり先に英語の勉強した方が良いですかね。
一応技術関係の話は日本で覚えたので日本語の方がわかりやすかったりします。
0244デフォルトの名無しさん
NGNGコンピュータ用語なんてほとんど元は英語だから、知ってる単語だけ
拾って読んでも意味は通じる。
0245デフォルトの名無しさん
NGNGhttp://freshmeat.net/projects/stund/?topic_id=20%2C87%2C809%2C150%2C151
英語はともかくgoogleくらい使えるようになれ
0246デフォルトの名無しさん
NGNG英 語 は と も か く と 言 い な が ら、 英 語 の ペ ー ジ の
リ ン ク を 張 る ア ナ タ っ て 素 敵。
0247デフォルトの名無しさん
NGNG> って事は、どういうパケットを送ってるの?STUNは
は分かるよ。
0248デフォルトの名無しさん
NGNG(コネクションパケットの)DstIP:DstPort から Routerへきた
パケットについて、SrcIPへ転送するような設定がされるわけだな。
これがUDPの場合、Connectionが云々できないわけで、NATルータとしても、
「外に出したUDPのDstPortについては、無条件でSrcIPに転送する」という
バータリーな対応に成るわけ。何故、DstIPを無視するかは知らない。
だから、特別なルータ指令パケットというものはない。
だから、初期の穴開け時だけサーバを介すれば、二者間で直接通信ができると。
こんな理解でいいのかな?
0249デフォルトの名無しさん
NGNG解答例のない本を買ってしまって・・・独学で勉強してるんですが
全く分からなくて困っています。
0250デフォルトの名無しさん
NGNG0251sage
NGNG0252デフォルトの名無しさん
NGNG0253デフォルトの名無しさん
NGNG0254sage
NGNGぅけるぅ
0255デフォルトの名無しさん
NGNGぼるじょあがC/C++の宿題を片づけますYO! 19代目
http://pc2.2ch.net/test/read.cgi/tech/1073566342/
0256デフォルトの名無しさん
NGNGWinsockでファイルの転送をする場合
sendだと文字しか遅れませんよね?
ファイルを文字列へエンコードしてから転送すれば良いのでしょうか?
0257デフォルトの名無しさん
NGNG<サーバー(Port1000)>--------<クライアント(Port0)>
と言う感じで、クライアント側がNATでポート0の場合
クライアントからサーバーへのデータ問い合わせは可能だと思いますが
それに対してデータを返す時、コネクション型ではないため返信不能になるのでしょうか?
DNSの仕組みだといけてるっぽいですが・・・
0258デフォルトの名無しさん
NGNGプロトコルはNetBeuiのみで、です。
0259デフォルトの名無しさん
NGNG> sendだと文字しか遅れませんよね?
よくわからんが、socketはバイナリしか扱えないよ。
>>257
ポート0ってどこのローカル用語?
0260デフォルトの名無しさん
NGNGポートが開いてないって言う意味でしょ。
一般ユーザーが良く使う言葉
使用例)
ポート0同士では接続出来ない。
0261デフォルトの名無しさん
NGNGSTUNやらの話題で・・
0262デフォルトの名無しさん
NGNG0263デフォルトの名無しさん
NGNGポート番号1000なのか、それともまたわけわからん意味でもあるのか?
0264デフォルトの名無しさん
NGNG0265デフォルトの名無しさん
NGNGPort0って用語は>>257が定義したわけじゃないだろ
0266デフォルトの名無しさん
NGNG>>264 に賛成。
0267デフォルトの名無しさん
NGNG0268デフォルトの名無しさん
NGNG0269デフォルトの名無しさん
NGNG> sendだと文字しか遅れませんよね?
バイナリだと (* 遅れない *) とでも思ってんのか ? (藁
0270デフォルトの名無しさん
NGNG名前付きパイプとかメールスロットを使え。
0271デフォルトの名無しさん
NGNG>>257はPort0とPort1000を同列に扱っているがそれでいいんだろうか?
0272デフォルトの名無しさん
NGNG知らなきゃ (or 気に入らなきゃ) 無視すればいいだけなのにねぇ...。
0273デフォルトの名無しさん
NGNG時代に後れた人たちは厄介だねえ・・・
0274デフォルトの名無しさん
NGNGお前もな。
0275257
NGNGポートの事でお騒がせしてしまったようですが
どうなのでしょうか?
ちなみにサーバー側のポート1000は何でも良いのですが
とりあえず開いていてNATを越える事が出来る状況という事で
クライアント側のポート0はNATで遮られてるという意味で・・・
0276デフォルトの名無しさん
NGNG0277デフォルトの名無しさん
NGNGそういうセリフは、そのキーワードがRFCに載ってから言ってくれよ。
0278デフォルトの名無しさん
NGNG0279デフォルトの名無しさん
NGNG0280デフォルトの名無しさん
NGNG0281デフォルトの名無しさん
NGNGデータグラムにおいてもサーバー側がポート開いていれば問題ない
ストリームと一緒
0282デフォルトの名無しさん
NGNG0283デフォルトの名無しさん
NGNG話題ズレまくり
>>275
DNSが何故結果を返せてるか考えてみ
必ずしもコネクションしなければ返せないわけではない。
まぁ、bindのソースでも見てみる事をお勧めする。
0284デフォルトの名無しさん
NGNG今組んでるプログラムで、1つのアプリケーションの中で
DirectPlayとWinSockのTCP&UDPを使いたいんですけど
ポートを共用する事は可能でしょうか?
0285デフォルトの名無しさん
NGNGだから、TCPに限って言えば、一つのポート番号をどれだけの接続で利用しても問題ない。
でなければ、複数のクライアントを同時に相手できないでしょ。
0286デフォルトの名無しさん
NGNG普通のルータならNAT越えの時に記憶するので、UDPのアンサーはクライアントに
戻ってくるよ。
0287デフォルトの名無しさん
NGNGUDPにしてもTCPにしても外からコミュニケーションが始まるときのことじゃろ。
0288デフォルトの名無しさん
NGNG0289デフォルトの名無しさん
NGNG作ったように動くだろうね。
0290デフォルトの名無しさん
NGNG0/tcp Reserved
0/udp Reserved
ほーReservedか。
0291デフォルトの名無しさん
NGNGNATは、UDPを「4つ」の組で識別しているのだろうか?
0292デフォルトの名無しさん
NGNGこんな感じじゃない?
送信元IP,送信元ポート,送信元ポート(ルータ),送信先IP,送信先ポート,プロトコル,TTL
0293292
NGNG自分のIP,自分のポート,相手のIP,相手のポート
だと思う。
ルータのNATとは別物だけど、FTPを通す為とかでセッション管理もしてるだろうし、
やってる訳では無いのでよく分かりません。
0294291
NGNG0295デフォルトの名無しさん
NGNGLinux(2.2まで)のNATだと標準で許可してなかったよね。
0296デフォルトの名無しさん
NGNGUDPも4つ。
動作中のルータの変換テーブル表示させれば判る。
タイムアウトがあるからコネクションレスのUDPでも変換エントリはちゃんと消える。
タイムアウトが短かすぎるとDNSの名前解決も失敗することがあるよ。
>294
上の通り、NAT/IPマスカレードの動作としてはそうだな。
相手とかフラグとかチェックするのはフィルタの仕事だと思うぞ。
外側というのがルータのWAN側アドレスのことなら、
自分宛のパケットじゃなければ無視すると思う。
ふつう届かんし。
0297デフォルトの名無しさん
NGNGIPアドレスのマッチングってどのように行っているのでしょうか?
パケットの格納用構造体作成
memcpy(&構造体メンバ名, p, 4); で指定した構造体メンバへIPアドレスのデータを書き込み
↑ p /*pointer*/
ユーザーの指定したIPアドレスを関数を使って32bitバイナリデータに変換
「構造体メンバに格納した値」 == ユーザー入力したIPアドレスを変換したもの
↑のような流れでやっいるのかと思い、実際組んでみたら動かず・・・。
作ってみたヤツ↓
struct {
struct in_addr ip_src; //SourceIP
struct in_addr ip_dst; //DestIP
/*他のパケットの項目については省略*/
}IPv4;
struct ufilter{
unsigned char uip_src[16];
unsigned char uip_dst[16];
/*他の項目は省略*/
}UFILTER;
if(IPv4.ip_src == inet_addr(UFILTER.uip_src))
{ //一致した場合の処理}
structへの不正とメッセージが表記され、無理やり動かすと、パケットデータが入ってないという感じのメッセージがでます。
構造体の中にある構造体へのアクセスの仕方が良くないのでしょうか?(ip_srcのアドレスがキチント取得できてない?)
プログラム始めたばかりなので、至らぬ所多々あると思いますが、よろしくお願いします。
*windows2k、VC6.0でやっています。
*Winpcapは、何やってるか良くわからないので使用していません
0298297
NGNG(´・ω・`)メンバの指定の仕方がダメポだったみたいです。
お騒がせしました。
0299デフォルトの名無しさん
NGNGそりゃ、外/内っていうより、
どちらのIPアドレスを変換する応用/運用なのかによるんじゃない?
プライベートIPアドレスを内側で運用していてってケースが一番多いから、
内側の話ばかりになるんだけども。
VPN + NATの時は双方向変換ありえるよね。
0300デフォルトの名無しさん
NGNG0302デフォルトの名無しさん
NGNG0303デフォルトの名無しさん
NGNG0304デフォルトの名無しさん
NGNG覚えられやすいホスト名ってのは個人的に精神衛生上あまり好きじゃない
0305デフォルトの名無しさん
NGNGproxy.***.co.jpとか?
0307デフォルトの名無しさん
NGNG0308デフォルトの名無しさん
NGNG0309デフォルトの名無しさん
NGNG0310デフォルトの名無しさん
NGNGLAN上のPC1(win 2000)からPC2(win 2000)をシャットダウンさせたいと思っています。
まずPC2にログインしなきゃいけないようなのですが、ログインできてないのです。
↓これで何が足りないのでしょうか。
NETRESOURCE NetRes;
NetRes.dwType = RESOURCETYPE_DISK;
NetRes.lpRemoteName = "\\PC2\IPC$";
DWORD ret = WNetAddConnection2( &NetRes, "ユーザ名", "パスワード", CONNECT_UPDATE_PROFILE );
retには1231のint値がはいっているようなのです。
WNetAddConnection2の返り値もよくわからない…
0311デフォルトの名無しさん
NGNG> NetRes.lpRemoteName = "\\PC2\IPC$";
デバッガでこの行の次の行で止めて、NetRes.lpRemoteName の指す先にあんたの思ってる文字列が入っているか確認した方がいいと思うよ。
> WNetAddConnection2の返り値もよくわからない…
MSDN も見ないのか ?
If the function fails, the return value is a system error code, such as one of the following values.
0312デフォルトの名無しさん
NGNGにしてました。 ↑の間違い。
返り値については、MSDNみてます。でも1231がどのエラーコードかわからない。。。
switch( ret )
{
case ERROR_SESSION_CREDENTIAL_CONFLICT :
printf("A");
break;
case ERROR_ACCESS_DENIED :
printf("B")
break;
…
でretがどれかみようとしてるんだけど、どれにも該当してない。。。
retからどのエラーかってわからないし。
0313デフォルトの名無しさん
NGNGC:\>net helpmsg 1231
ネットワークに到達できません。ネットワークのトラブルシューティングについては、
Windows ヘルプを参照してください。
0315デフォルトの名無しさん
NGNG> case ERROR_SESSION_CREDENTIAL_CONFLICT :
WNetAddConnection2() はそんなエラーコードを返さないけど ?
いったい何を参考にプログラムを組んでいるのか不思議でしょうがない。
> retからどのエラーかってわからないし。
ちゃんとやるなら、FormatMessage() を使うべし。
とりあえず調べたいなら、ヘッダーファイルを検索しまくるとか、MSDN を検索しまくるとか...。
まあ、ここでも見とけ http://msdn.microsoft.com/library/en-us/debug/base/system_error_codes.asp
0316sage
NGNG0317デフォルトの名無しさん
NGNG0318sage
NGNGお前ごときがいくらがんばっても無駄ってことだと思います。
0319<br>
NGNG0320デフォルトの名無しさん
NGNGhttp://japanese.joins.com/html/2002/1016/20021016172250300.html
韓国が提示した次世代インターネット(IPv6)技術が世界標準として採択された。
0321デフォルトの名無しさん
NGNG0322デフォルトの名無しさん
NGNGサーバー&クライアント型のアプリの場合
待ち受けになる側のサーバーは必ずいずれかのポートを開放してる必要があるのでしょうか?
接続する側のクライアントがポートを開放してる場合でも駄目なのでしょうか?
よろしくお願いします。
0323デフォルトの名無しさん
NGNG0324デフォルトの名無しさん
NGNGソケットのレベルではサーバ、クライアントで別のコードを書けますが、
TCP/UDPのレベルでは、両者は対称です。どちらが先にSYNを送るかの違い。
Firewallは、先に送った方をクライアントと見做して処理を行いますので、
逆(サーバ側のみ)なら可能ですが、あなたの言っているのは無理です。
0325デフォルトの名無しさん
NGNGPort0を使えば問題ない
それはwinnyやwinmxで実証済み
0326デフォルトの名無しさん
NGNG0327デフォルトの名無しさん
NGNGヒソ(´Д)ヒソ(´Д`)ヒソ(Д`)ヒソ
0328デフォルトの名無しさん
NGNG0329デフォルトの名無しさん
NGNG( ゚д゚)ポカーン
。 。
/ / ポーン!
( Д )
0330デフォルトの名無しさん
NGNG>>325
(´,_ゝ`)プッ
0331328
NGNG0332デフォルトの名無しさん
NGNG0333デフォルトの名無しさん
NGNG0334デフォルトの名無しさん
NGNG( д ) ゚ ゚
0335デフォルトの名無しさん
NGNG0336デフォルトの名無しさん
NGNG0337デフォルトの名無しさん
NGNG0338デフォルトの名無しさん
NGNGマルチスレッドを使おうと思ったのですが、色々訳あって現在はシングル+非同期winsockでやっております
そこで質問なのですが、winsockでconnectを同期せず(connectで止まらず)に行うには
AASyncを使うしかないのでしょうか
recv, sendはソケットのオプション変更で非同期にできたのですが…
プレイヤーがログインしたとき、データベースサーバーにコネクションを張らせたいのです
マルチスレッドにするしかないでしょうか?
0339デフォルトの名無しさん
NGNGとりあえずconnectする前にノンブロック設定しておけば、止まることはないけど。
ところでさ、データベースへのコネクションって大抵あらかじめ何本かキープしておいて
それをリクエスト毎に使いまわしたりしないの?
その仕組みだとゲームサーバとデータベースが、同数のコネクション管理しなきゃいけなくなりそうだけど。
0340デフォルトの名無しさん
NGNG俺なら迷わずDirectPlayだ(駄目だなw
0341デフォルトの名無しさん
NGNGDBアクセスをするのは
別スレ群にしたほうがええと思うズラ
0342デフォルトの名無しさん
NGNGWSAGetLastError() は使わなくっても良いですか?
0343デフォルトの名無しさん
NGNGいつ何が起こるかわからんし
0344デフォルトの名無しさん
NGNG0345デフォルトの名無しさん
NGNG0346デフォルトの名無しさん
NGNG0347デフォルトの名無しさん
NGNG0348デフォルトの名無しさん
NGNG疑わなくてはならなくなる。最初からきちんとやっておけと言いたい。
0349デフォルトの名無しさん
NGNG前回使ってからかなり時間が経ってるものの,とりあえず connect すると
errno が EISCONN でした。
しかしリクエストを送っても,何もレスポンスが返ってきませんでした。
こんな場合,本当にまだ接続が続いているかどうかを調べるには
select で読み出し可能であるかどうかを調べるのが最適解でしょうか?
リクエストを送る前にも関らず読み出し可能ならば,
それは接続が切られてる事を表し,recv の結果は 0 のはずだって事で。
0350349
NGNGすぐに使い回すかどうかが明らかでないのに
Keep-Alive なんかするな,ていうのがファイナルアンサーですね。
あー,でも HTTP プロクシを作ってる場合だとやっぱり悩みそうな。。。
でも今は HTTP プロクシ作ってるわけじゃないので,やっぱしいいス。スマソコ。
0351デフォルトの名無しさん
NGNGところでなんでkeep-alive?
persistentじゃないの?
0352デフォルトの名無しさん
NGNGあのなあ、どんな時でも、
> しかしリクエストを送っても,何もレスポンスが返ってきませんでした。
を想定して対応する必要がある。これがネットワークプログラミングなわけ。
「簡単に」「必ず」返事が返ってくるかどうか調べる方法があると思うな。
返事はYES, NOに加えて、⊥(bottom)があり得るのがネットワークなのだ。
とお兄さんは言いました。
0353デフォルトの名無しさん
NGNGメッセージをやり取りするソフトを作っています。
とりあえずメッセージ送信を、クライアント側からサーバ側へ
"MSG 送信文字列の長さ 送信先ID\r\n送信文字列"
という形式で送り、サーバ側から送信先クライアントへ
"MSG 送信元ID 送信文字列の長さ\r\n送信文字列"
というテキスト形式で送ることにしています。
受信部分は、まずOnReceive()でReceiveにMSG_PEEKフラグをつけて
256文字ほど一旦読み込み、\r\nを文字列検索してそこまでの長さを調べ、
再度\r\nまでをMSG_PEEKなしで読み込んでいます。
その後、読み込んだサイズ情報を元に、再度Receive文で
送信文字列部分を読み込む、という方法です。
しかしこの方法でテストをしているとと、メッセージをいくつかやりとりしているうちに、
急に何をsend()してもサーバに届かなくなってしまいます。
また、そうなるとサーバからのsend()も認識しなくなってしまいます。
上記のメッセージ送信以外の通信(たとえばオンライン・離席中の切替命令)
は何回繰り返してもこのような現象が起こらないため、おそらくこの
メッセージ送受信処理に問題があると思うのですが、どうにも原因がわかりません。
この現象が起こるのは本当にランダムで、同じ文字列を3回ぐらい
送信しただけで起こることもあれば、20回くらいまで耐えることもあり、
全く見当もつきません。
何が悪いのでしょうか・・・?
0354デフォルトの名無しさん
NGNG0355デフォルトの名無しさん
NGNGhttp://tangentsoft.net/wskfaq/newbie.html#peeking
でしょ。
Winsock、糞スタックの本領発揮。よくこんなのリリースしてる/たよな。
0356デフォルトの名無しさん
NGNG日本語のページの方が良いかと。
http://www.kt.rim.or.jp/~ksk/wskfaq-ja/newbie.html#peeking
Winsock で MSG_PEEK すると起きる問題って何?
0357デフォルトの名無しさん
NGNGINFO: Avoid Data Peeking in Winsock
http://support.microsoft.com/default.aspx?scid=kb;ja-jp;192599
[INFO] Winsock ではデータのピークは実行しない
この翻訳レベルはどうにかならないものかね……
0358デフォルトの名無しさん
NGNG0359デフォルトの名無しさん
NGNG> http://support.microsoft.com/default.aspx?scid=kb;en-us;192599
>
> This is a holdover from Winsock 1.1 compatibility with Unix BSD Sockets.
糞な仕様は、劣化コピーのWinsock 1の方だけだって。
WSARecv()の欠陥、MSDNに堂々と仕様として書いてあるもんな。
Bugとしてfixされる対象ではないらしい…
0360デフォルトの名無しさん
NGNGいや、はっきりそう書いてないのがこれまた酷い。
マイクロソフトの技術情報はエクスキューズが含まれているので要注意。
0361デフォルトの名無しさん
NGNGWinsock2でも残ってるってことだろ。
0362デフォルトの名無しさん
NGNG> 何が悪いのでしょうか・・・?
Winsockです(藁
0363デフォルトの名無しさん
NGNG調べずに書きますが、(どうせ金輪際使わない機能なので俺は調べる気なし)
Winsock 2 for XPでは、直ってたんじゃないかなあ?
どのプラットフォームならOKか、MSDNに書いてあるよ。> 使いたい人
0364デフォルトの名無しさん
NGNG0365デフォルトの名無しさん
NGNGよって、Windowsでわsocketつかうな。
以上。
0366デフォルトの名無しさん
NGNG↓こんな体たらくでもやはり日本語がいいか…
> なお、この資料は英語版の翻訳であり、日本語環境での確認は行っておりません。
0367デフォルトの名無しさん
NGNGじゃあ、何使うんだ?w
0368デフォルトの名無しさん
NGNG0369デフォルトの名無しさん
NGNGpeek辺りはワナが一杯だぞ。
SO_RCVTIMEO and SO_SNDTIMEO
When using the recv function, if no data arrives during the period
specified in SO_RCVTIMEO, the recv function completes. In Windows
versions prior to Windows 2000, any data received subsequently
fails with WSAETIMEDOUT. In Windows 2000 and later, if no data
arrives within the period specified in SO_RCVTIMEO the recv
function returns WSAETIMEDOUT, and if data is received, recv
returns SUCCESS.
If a send or receive operation times out on a socket, the socket
state is indeterminate, and should not be used; TCP sockets in
this state have a potential for data loss, since the operation
could be canceled at the same moment the operation was to be
completed.
"使うべきではない"て。作ったんお前らやろ。
0370デフォルトの名無しさん
NGNGMinGWはBSDスケット入ってないだろ。Cygwinにしとけ
0371デフォルトの名無しさん
NGNGmingwのソケットってWinsockを使ってないのけ?
0372デフォルトの名無しさん
NGNG罠 罠 罠に落ちそう♪
誘惑の peek 私をさそう♪
0373デフォルトの名無しさん
NGNGcygwinも結局winsockを使うから
どっちも同じだよ
0374デフォルトの名無しさん
NGNGWinsockのAPI設計が腐ってるんだから大丈夫じゃねえ? > cygwin
0375デフォルトの名無しさん
NGNGcygwinがどうなってるか、ちょっとでいいから調べてみよう。
0376デフォルトの名無しさん
NGNG0377デフォルトの名無しさん
NGNG0378デフォルトの名無しさん
NGNG水溜りを避けて肥溜めにはまるようなもんだ。
0379デフォルトの名無しさん
NGNG「BSD Socketに機能があるから互換性のために実装しとくけど、
使うのはやめとけ」って話ではないの?
0380デフォルトの名無しさん
NGNG幸せになれるぞ!!
0381デフォルトの名無しさん
NGNG今時winsock.dllなんて使ってるソフトあるのか?
0382デフォルトの名無しさん
NGNG0383デフォルトの名無しさん
NGNG0384デフォルトの名無しさん
NGNG全然違うぞ。Winsockの方でアホ仕様に。
> the socket state is indeterminate
> TCP sockets in this state have a potential for data loss
有り得ない。
> since the operation could be canceled at the same moment the operation was to be completed.
こんなレベル低い実装は。
0385デフォルトの名無しさん
NGNG投稿した者(310)ですがまだ解決しておらず、助けをお願いします。(VC++6.0 Windows2000)
borlandの↓ホームページのTIPSを参考にしてconsole用のプログラムにしようとしています。
ttp://www.borland.co.jp/tips/cbuilder/cb013/ntshut2.html
シャットダウンさせたいリモートPCにWNetAddConnection2で
ログインするところまでできました。
その後、
�@OpenProcessTokenでプロセストークンを取得
�ALookupPrivilegeValueでシャットダウン権限の LUID を取得
�BAdjustTokenPrivilegesでシャットダウン権限を与えて
�CInitiateSystemShutdownでリモートのPCをシャットダウンとやると、
システムエラー5の「アクセスが拒否されました」
になってしまいます。アクセス権限がないのかなと思ったのですが
シャットダウンさせたいPCには ユーザ名/パスワード admin/admin
がいるし、WNetAddConnection2ではadmin adminでログインしています。
何が原因なのかわかりません。なにかアドバイスお願いします。
0386デフォルトの名無しさん
NGNG問題切り分けてから出直してこい。
0387デフォルトの名無しさん
NGNGWINSOCKで、送信バッファをクリアー(ゼロ)にする方法を教えてください。
よろしく、
0388デフォルトの名無しさん
NGNG無理っぽい気がするけど
その前に設計が変じゃね?
0389デフォルトの名無しさん
NGNGどこまで相手に届いたかを無視してぶった切るってこと?
むちゃくちゃだな。
0390デフォルトの名無しさん
NGNG0391デフォルトの名無しさん
NGNG0392デフォルトの名無しさん
NGNG0393デフォルトの名無しさん
NGNGしかも、そのコネクションで相手からの応答が少ない場合は有効
0394デフォルトの名無しさん
NGNG0395デフォルトの名無しさん
NGNG0396デフォルトの名無しさん
NGNGUDPだと送信バッファをクリアー出来るのか?
0397デフォルトの名無しさん
NGNG0398デフォルトの名無しさん
NGNG0399デフォルトの名無しさん
NGNG破棄パケットだらけじゃないの?
0400デフォルトの名無しさん
NGNG0401デフォルトの名無しさん
NGNGゆ る ん
0402デフォルトの名無しさん
NGNGnagle の無効化は、telnetd のように 1 byte ずつ、すぐに送信
しなければならない (エコーバック) 場合に必要。
telnet クライアント側は、エコーバックされる 1 byte に ACK
が相乗り (piggy back) してくるので、Nagle に影響されずに、
すぐに、次の入力を 1 byte 単位で送信できる。
>>394
順序が保証されない。
>>399
リアルタイム性を求められるので、破棄されても OK。
むしろ、再送される方が困る。マルチキャストは UDP しかないでしょ?
0403デフォルトの名無しさん
NGNG0404デフォルトの名無しさん
NGNGIPv6対応にするには、inet_ptonを。
0405デフォルトの名無しさん
NGNGTCP 接続において、たとえば送信側で
> send( socket, "ABCDEFGH", 8, 0);
とした場合に、受信側で
> recv( socket, buffer, 4, 0);
> (略)
> recv( socket, buffer, 4, 0);
と二回に分けて "ABCD" と "EFGH" に分けて取得できるのは、
TCP の規格 でしょうか?それとも環境依存なんですか?
ご教授願います。
0406デフォルトの名無しさん
NGNG0407デフォルトの名無しさん
NGNGそのような最低限の基礎が理解できてないのに開発するのは大変だよ。
なんかちゃんとした資料読もうね。「UNIXネットワークプログラミング」とか。
0408デフォルトの名無しさん
NGNG0409デフォルトの名無しさん
NGNGTCPはバーチャル・サーキット/バイトストリームです。
あなたが直感的に欲しているのは、SOCK_SEQPACKET(未実装)。
0410デフォルトの名無しさん
NGNG> と二回に分けて "ABCD" と "EFGH" に分けて取得できるのは、
二回で済むとは限らん。
0411デフォルトの名無しさん
NGNG0412デフォルトの名無しさん
NGNG0413デフォルトの名無しさん
NGNGデータをテキストにして区切り文字つけるとか、先頭にレングス付ける
とかで対応してるけど、毎回セッション張りなおすのもあれだし、
UDP使わずに、他に良い方法とか無いですよね。
0414デフォルトの名無しさん
NGNG無い。
つーか、そういう処理 (=データの切れ目を解釈して、一塊のデータを送受信) をするルーチン書くのってそんなに面倒か ?
0415デフォルトの名無しさん
NGNG0416デフォルトの名無しさん
NGNGビデオチャットを作ろうと思うのですが
別に一部の損失くらいはかまわないので、出来るだけ高速にしたいのでUDPにしようと思います。
そこで、良いサンプルとかありませんでしょうか?
0417デフォルトの名無しさん
NGNG「探せばあるかもしれません」
0418405
NGNG例が抽象的過ぎたようですね。何がしたかったのかというと、
送信側
> char data[10];
> strcpy( data+1, "ABCDEFG" );
> data[0] = strlen( data+1 );
> send( socket, data, data[0]+1, 0 );
受信側
> char buffer[10];
> recv( socket, buffer, 1, 0 );
> recv( socket, buffer, buffer[0], 0 );
このように、データの頭にデータ長を入れたかったんです。それで、
内部的にバッファリングされるのは規格で決まってるのか、自前でいったん
バッファリングするべきなのか。ということが疑問になり、質問した次第です。
バッファリングは必要なんでしょうか?
0419デフォルトの名無しさん
NGNGsendは一度に何バイト書き込めるか分からないし、
recvは一度に何バイト読み込めるか分からない。
考慮すべきはインタフェースとしてのsend/recvの挙動であって、
内部的な動作を考える必要はないのでは?
先頭にバイト数を書くというのはいいやり方だと思うよ!
0420デフォルトの名無しさん
NGNGバッファリングはされている。
0421デフォルトの名無しさん
NGNG自前のアプリ・ライブラリレベルでバッファリングは必要。
そこから4バイト一まとまりで取れたらよこせというAPI経由でパケットを取得する。
0422デフォルトの名無しさん
NGNG自前のバッファリングなんて必要ないよ。
(>>419が言うようにバイト数書いてあればとりわけ)
fdopenして、fread, fwrite使えばいい。
0423デフォルトの名無しさん
NGNG0424mm
NGNG・やろうとしていること
IPv6で通信するサーバ・クライアントを作っています。
サーバ側は上手くできたようで、
telnetで確認したところ、ちゃんと通信できました。
んで、クライアント側を作っているのですが、
どうしても、サーバにコネクションが張れません。
おそらく、getaddrinfo の使い方が間違っているんだと思うんですが、
どうも、いまいち分からなくて・・・。。
どなたか、ヒントでも良いので教えてください。
--------------------------------------------------
・サーバ&クライアントプログラムを動かしているマシンの環境
--------------------------------------------------
OS: NetBSD(1.6.1)
IPv6 Address: fe80::20c:29ff:fe07:955e%pcn0
(つづく)
0425mm
NGNG・プログラム本文(connectを張るとこまで)
--------------------------------------------------
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <errno.h>
#define PORT 10000
main(int argc, char *argv[])
{
struct sockaddr_in6 addr;
struct hostent *hp;
struct addrinfo hints;
struct addrinfo *res;
int fd;
int len;
char buf[1024];
if (argc != 2){
printf("Usage: iclient SERVER_NAME\n");
exit(1);
}
(つづく)
0426デフォルトの名無しさん
NGNG0427mm
NGNGhints.ai_family = AF_INET6;
hints.ai_flags = AI_CANONNAME;
hints.ai_protocol = IPPROTO_TCP;
hints.ai_socktype = SOCK_STREAM;
getaddrinfo(argv[1], NULL, &hints, &res);
if ( (fd = socket(AF_INET6, SOCK_STREAM, 0)) < 0 ) {
perror( "Failed to create socket" );
exit(1);
}
printf( "Initiated connection to host: %s, port: %d\n",
res->ai_canonname,
htons(((struct sockaddr_in6 *)res->ai_addr)->sin6_port)
);
if ( connect(fd, res->ai_addr, res->ai_addrlen) < 0 )
{
perror( "Failed to connect to server" );
exit(1);
}
close(fd);
}
(つづく)
0429426
NGNGあ、では、張り直すのも大変なので、
こちらで質問させていただきます。。
(つづき)
--------------------------------------------------
・プログラムの説明
--------------------------------------------------
# ./client fe80::20c:29ff:fe07:955e%pcn0
と、サーバのIPv6アドレスを指定すると、コネクションを張ろうとする。
以上で、終わりです。
よろしくお願いします。
0431mm
NGNG# ./client fe80::20c:29ff:fe07:955e%pcn0
Initiated connection to host: (null), port: 0
Failed to connect to server: Can't assign requested address
0432426
NGNGres->ai_canonname,
htons(((struct sockaddr_in6 *)res->ai_addr)->sin6_port)
);
ネットワークバイトオーダーに変換したものを表示させるの?
0433426
NGNG0434mm
NGNGconnect をする前に、どこへコネクトしようとしているかを確認しているのですが、
これでは、ポート番号は出ないでしょうか?
と言いつつ、今のままだと、↓が反映されるはずないですね・・・。
#define PORT 10000
うーん、普通にIPv4でならクライアントの作り方がわかるんですが、
getaddrinfo を使ったときの、作り方が分かっていないんだと思います。。
0435デフォルトの名無しさん
NGNGそのPORTマクロがどこにも使われていないYO!
0436mm
NGNGhttp://www.linux.or.jp/JM/html/LDP_man-pages/man3/getaddrinfo.3.html
node パラメータと service パラメータのどちらかは NULL にしてよい (両方同時には不可)。
node には数値形式のネットワークアドレス (IPv4 ならドット区切りの 10 進形式、 IPv6 なら 16 進形式) か、
あるいはネットワークホストの名前を指定する。
ということだったので、NULLでもいいのかと。
>>435
はい。。たしかに使っていないです。。
試行錯誤の残骸です。。_| ̄|○
まず、PORTの指定の仕方が分かっていないですね。_| ̄|○
0437mm
NGNGhttp://www.linux.or.jp/JM/html/LDP_man-pages/man3/getaddrinfo.3.html
service は、各ソケット構造体のネットワークアドレスのポート番号を設定する。
service が NULL ならポート番号を初期化しないままにする。
とあったので、
getaddrinfo(argv[1], "10000", &hints, &res);
のようにしたら上手くいきました。
後の部分は、↓を参考にしました。。
http://www.ipv6style.jp/jp/apps/20030617/index.shtml
0438デフォルトの名無しさん
NGNG0439デフォルトの名無しさん
NGNGありがとう
0440デフォルトの名無しさん
NGNGルータなんかでポートを塞がれてて動作しない場合、
そのポートが何番かを調べる方法はありますか?
0441デフォルトの名無しさん
NGNG0443デフォルトの名無しさん
NGNG0444デフォルトの名無しさん
NGNG塞がれててこないものを検出するのは無理では?
0446デフォルトの名無しさん
NGNG// WinTCPで検索しろ。
0447デフォルトの名無しさん
NGNG0448デフォルトの名無しさん
NGNG0449デフォルトの名無しさん
NGNG0450デフォルトの名無しさん
NGNG0451デフォルトの名無しさん
NGNG単純なTCPのサーバー・クライアントソフトを書いてるんですが、
負荷テストをしてると、突然connectが失敗するようになります。
特に複数のクライアントからコネクションを大量に張った時に起こるので
サーバー側でEtherealでモニターしてみたところ、
[TCP Dup ACK xxxx#y] server > client [RST,ACK] Seq = 1 Ack = 65 Len = 0
のようなDup ACKというメッセージ以降はパケットのやりとりが全くなくなることがわかりました。
アプリケーションを強制終了するとそれまでつないでた分のRSTが大量に流れます。
各コネクションは12回、64バイトのパケットを往復させており、
他のコネクションはAckが769で切断されています。
で、質問なんですが、
・Dup Ackというのは再送を要求するためのリクエストではないのか?
なんでここでとまるのか?
・パケットのやりとりがとまらないようにするにはどうすればいいのか?
どなたかわかるかたがおられましたらご教授お願いします。
0452451
NGNGWSAGetLastErrorの値はWSAECONNRESETでした。
0453デフォルトの名無しさん
NGNGetherealの'TCP Dup ACK'ってのは、
etherealが同じシーケンス番号のACKを発見したという事。
その例で言うとAck = 65のパケットが直前にあるんじゃないの?
0454デフォルトの名無しさん
NGNGwin2000側が受けとれてないか、送信できてないんだな。
単にwin側がさばききれずに負荷で死んでんじゃネーノ?
アプリケーション終了させたら繋がってたTCPにRST飛びかうのは当たり前。
0455デフォルトの名無しさん
NGNGserverとclientで同時にpacket dumpしといて、
変になった所のデータつきあわせればわかるだろ。
0456451
NGNGjava.nioで新しく入ったSelectorクラスを生成すると、
たまにブロックすることがあり、ブロックする時にこの現象が起こるようです。
いつも950前後のコネクションで止まっていたので、
試しにサーバー側のプロセスのディスクリプタ数の上限を上げてみたら
3000コネクションはつながるようになりました。
Javaの実装でSelectorで止まるとソケットを切断するとかあるんでしょうか?
>>453
ありました。
そっちのほうはただのACKでした。
>>454
>返事しろやゴルァ、って言ってるのにwin側が返事しないから何度も(Dup)投げてんだろ。
ACKに対して返事ってなくないですか?
ちなみにDUPACKのパケットと同じAck番号のパケットはWindows側にはとどいていました。
0457デフォルトの名無しさん
NGNGバッチ処理的にブロッキングされてもいいようなアプリ以外で
TCPで送受信用リングバッファ使わないで通信してる人って多いの?
0458453
NGNGLinger-on-closeのtimeoutが短いんじゃないの?
http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/net/SocketOptions.html
0460デフォルトの名無しさん
NGNGAckとデータ送信は兼用できるだろ。
Ackといっしょに送ったデータの返事がこないから何度も送っている。
0461451
NGNG試してみたところ、getSoLingerの値は-1(無効)でした。
知らなかったんで、調べてみたんですが、
> SO_LINGER は,データが送信されるか,デバイスの時間切れ (約 8 分) が発生するまで,
> close の内部ソケット削除の部分を実行しないことを指定します。
とありました。
linger-on-closeって明示的にcloseした後の動作を指定する
オプションじゃないんですか?
>>460
けどサーバー側はデータ送信は一度も送っていないんです。
切断されたコネクションでのやりとりは、
C > S SYN (seq=0, ack=0, len=0)
S > C SYN,ACK (seq=0, ack=1, len=0)
C > S ACK (seq=1, ack=1, len=0)
C > S Data+Ack (seq=1, ack=1, len=64)
S > C ACK (seq=1, ack=65, len=0)
C > S RST+ACK(seq=1, ack=65, len=0)
で終わりです。
0462453
NGNGlinger-on-closeで、タイムアウトが起きた時、
これがRSTの典型的な利用ケースなんだけどね。
>>451
> [TCP Dup ACK xxxx#y] server > client [RST,ACK] Seq = 1 Ack = 65 Len = 0
>>461
> C > S RST+ACK(seq=1, ack=65, len=0)
逆向きなんですが…どっちなんですか?
0463デフォルトの名無しさん
NGNGシングルスレッドで…
0464デフォルトの名無しさん
NGNG0465デフォルトの名無しさん
NGNGFIOASYNC
シグナルに明るくないならオススメしない
0466451
NGNG>既に存在しないconnectionにTCP segmentが来た時、
>linger-on-closeで、タイムアウトが起きた時、
>これがRSTの典型的な利用ケースなんだけどね。
両側とも明示的に切断は行っていないんですが、
何かしらの理由で切断されている、ということなんでしょうかね。
>>>451
>> [TCP Dup ACK xxxx#y] server > client [RST,ACK] Seq = 1 Ack = 65 Len = 0
>>>461
>> C > S RST+ACK(seq=1, ack=65, len=0)
>
>逆向きなんですが…どっちなんですか?
すみません、前者が正しいです。
あと全く別の質問なんですが、winsockでUDPでデータ通信をする際に
あるあて先に1パケットで最大何バイト送れるかを調べる方法はありますか?
0467デフォルトの名無しさん
NGNGソケットに対して writeして そのすぐあと close したとき
相手に writeした分は 届くの?
フラッシュするとか writeが完了するの待つとか いる?
0468デフォルトの名無しさん
NGNGTCP/IP の場合?
普通は届くけど、ホントに届いたかどうか、close() しちゃったら、
もう、確かめられない。write() したはいいけど、相手からの応答が無くて、
TCP で再送タイムアウトになったとしても、そのエラーを拾えない。
もっとも、再送タイムアウトになるまで待つ、ってのも気の長い話だけど。
データを送信した後、read() で 0 return するまで待ってから、ソケット
を close() するようなコーディングをよく見かけるな。
あと、「フラッシュする」ってのは何かを誤解していると思われ。
0469デフォルトの名無しさん
NGNGを close() するようなコーディングをしていたらどうなるんですか?
0470デフォルトの名無しさん
NGNG0471468
NGNGそのアプリケーションがどういう通信をやるのか知らんけど、
通信の最後で、
write() した側は read() 0 return を待つ
read() した側は、必要なデータを読み取ったら、close()
とすればいいだろ。
それが嫌なら、>>470 の言うように shutdown() でも使え。
write() して即 close() だと、もし、相手がデータを送って
きたら RST 応答してしまう。
0472デフォルトの名無しさん
NGNGよっぱらってるんで、
> あと全く別の質問なんですが、winsockでUDPでデータ通信をする際に
> あるあて先に1パケットで最大何バイト送れるかを調べる方法はありますか?
こっちだけ。MTU discoveryで検索。
0473デフォルトの名無しさん
NGNGPathのnodeがMTU discoveryをsupportしている必要がある。
って事は書いといた方がいいか。
0474デフォルトの名無しさん
NGNGしていれば大丈夫でしょ。
もちろん、途中経路の firewall 管理者が、
「icmp は全部ブロック」みたいな無知な
packet filtering ルールを設定してないこと
ってのはあるけど。
てゆーか、いいかげん、こういう設定勧めている
低レベルなセキュリティ本は滅んでほしい。
0475デフォルトの名無しさん
NGNGとりあえず読んで。
RFC1191:Path MTU discovery.
RFC1981:Path MTU Discovery for IP version 6.
0476デフォルトの名無しさん
NGNGこういうことを尋ねているというのが、暗黙の仮定になってます。
0477デフォルトの名無しさん
NGNGていたのを知りませんですた。RFC792 に RFC1191 の router
requirement と同じことが書いてあると思ってた。
無知スマソ。>>475
v6 の場合は、仮定してもいいよね。そもそもルータが
fragmentationしてくれないし。
0478デフォルトの名無しさん
NGNG0479デフォルトの名無しさん
NGNG>>475
こちらも追加。
RFC2923:TCP Problems with Path MTU Discovery
UDPではPMTUDを使わない(えない)かも。
デフォルトでUDPのPMTUDを切っているOSが多い。
ところでWindowsでDFがすべてのパケットに付いているのは仕様?
0480デフォルトの名無しさん
NGNG0481デフォルトの名無しさん
NGNG0482デフォルトの名無しさん
NGNG0483デフォルトの名無しさん
NGNG0484デフォルトの名無しさん
NGNGんなこたない。
ダンジョン内で待ち合わせをすればいい。
0485デフォルトの名無しさん
NGNGサムライと忍者で十分
0486デフォルトの名無しさん
NGNG0487デフォルトの名無しさん
NGNGSO_LINGER
0488デフォルトの名無しさん
NGNG使いにくいっていうけど、タイムアウト部を自分で書けば使える
ということなんだろうか。
0489デフォルトの名無しさん
NGNGJDKのバージョン依存(>1.4)だが、
ttp://java.sun.com/j2se/1.4.2/docs/guide/net/properties.html
0490デフォルトの名無しさん
NGNG> タイムアウト部を自分で書けば使えるということなんだろうか。
こっちに反応し忘れた。hookがないから駄目。
そもそもSocketにtimeoutがない(< 1.4)。
1. java.*, javax.*, sun.*でないURLConnection系のクラスを使う。
2. 1.4を使う。
のいずれか。1.はConnectionPool系ならtimeoutが付いていることが多い。
0491デフォルトの名無しさん
NGNGhookがないからというのは具体的にはどういうこと?
いや、タイマースレッドを用意してタイムアウトしたら
URLConnection#disconnectすればいいかとか適当に
考えていたんだけど。
と思って調べてみたらURLConnectionにはdisconnect
がない。HttpURLConnectionだった。
0492デフォルトの名無しさん
NGNG「ソース嫁!」が飛び交う悪寒。
0493デフォルトの名無しさん
NGNGリファレンスに載ってない隠し機能みたいなのとか
0494デフォルトの名無しさん
NGNGソース嫁!
0495デフォルトの名無しさん
NGNG0496デフォルトの名無しさん
NGNGny
0497デフォルトの名無しさん
NGNGハッシュ晒せバーカ
0498デフォルトの名無しさん
NGNG検索キーワードを教えてください
0499デフォルトの名無しさん
NGNGhttp://pc2.2ch.net/test/read.cgi/win/1076660087/32
ただしWinny2
0500デフォルトの名無しさん
NGNGtcpip.sysのソースは含まれていないときたもんだ。
0501デフォルトの名無しさん
NGNGdisconnectがconnectをcancelするなんてことは、
documentのどこ読んでも書いてないですよ。実際無理。
0502デフォルトの名無しさん
NGNGたんにSendToにぶち込むバッファーの量を絞ってやればいいだけの話?
0503デフォルトの名無しさん
NGNGそんなもん、下のレイヤーにやらせておけば?
0504デフォルトの名無しさん
NGNGうん
>>503
おいおい
0505デフォルトの名無しさん
NGNGどの程度帯域制限したいかによるけど、
bitrate計算して、その分sendtoも遅らせたりする必要が出てくるでしょ。
0506デフォルトの名無しさん
NGNG途中からSYN-ACKが返ってくる時間がクソ遅くなってくる。
2万セッションくらい張りたいんだけど、なんか設定できるところない?
0507デフォルトの名無しさん
NGNGサイズよりも間隔だろ
0508デフォルトの名無しさん
NGNGとりあえず、
http://www.kegel.com/c10k.html#kernel
辺りを。
0509デフォルトの名無しさん
NGNGacceptをどうやっているかなど、アプリの構造もかかわってくる。
0510デフォルトの名無しさん
NGNG英語じゃないの。
0511デフォルトの名無しさん
NGNG0512506
NGNGサンクスコ。ちょっと読んでみたけど面白かった。
>>509
漏れが書いたのは多分>>508で言うところの最初の
"Serve many clients with each thread, and use nonblocking I/O and level-triggered readiness notification "
の奴で、acceptしているスレッドはaccept次第ワーカースレッドに全部仕事を任してる。
send/recvのやりとりはそれほど発生しないので、普通にselectでさばけてるんだけど、
acceptでブロックしてる時間が異様に遅い。
スニッフィングしてみたら、synがクライアントから送られて、syn-ackが返ってくるまで3秒かかってたりする。
acceptしなくてもlistenしてれば自動的にsyn-ackは送られますよね?
0513506
NGNGサーバーからただのackが返って来て、
クライアントがrstを送って、
サーバーがackを返してる。
で、3秒後にクライアントがsynを送って、
それに対してsyn-ackが返って来た。
なんでこんなよくわからないことしてるの?
0514デフォルトの名無しさん
NGNGもっとよく見ろ。
その ACK は、その SYN とは全然関係ないコネクションの
ACK だろう。
単にサーバ側アプリケーションの accept() 処理が追いつかず
にバックログキューが溢れて、SYN が破棄されているだけ。
で、クライアント側の SYN の再送で救われている。
できる限り、サーバ側アプリケーションのバックログ値を
大きくしてやれ。
0515506
NGNG>その ACK は、その SYN とは全然関係ないコネクションの
>ACK だろう。
両側のポートは一緒なんだけど、違うコネクションってことはあるの?
>できる限り、サーバ側アプリケーションのバックログ値を
試してみます。
ありがとうございます。
0516506
NGNGクライアント側では3つプロセスが動いていて、
それぞれが一つずつ接続をしてるだけだから同時に3つしか
キューに入らないはず。
どんどん絶望的な気分になってくる…
orz
0517デフォルトの名無しさん
NGNGないでしょうか?POP3サーバとかじゃなくて、
手打ちデータなどをクライアントに返せるようなサーバがほしーです。
ベクターを探してみましたが見つかりませんでした。
なにか知っていたら教えていただけるとうれしいです。
0518デフォルトの名無しさん
NGNGOSくらい書こうや
0519デフォルトの名無しさん
NGNGそれをつくるのも勉強のうちじゃないの?
0520517
NGNG0521デフォルトの名無しさん
NGNG>手打ちデータなどをクライアントに返せるようなサーバ
って何よ
0522デフォルトの名無しさん
NGNG常に同じデータを返すってことでしょ。
0523デフォルトの名無しさん
NGNG0524デフォルトの名無しさん
NGNG0525デフォルトの名無しさん
NGNGairhookとか。
死ぬ程糞だけど。
0526デフォルトの名無しさん
NGNGOSは?
backlog の検索にhashを使ってないタコな
OSも世の中にはあるぞ。OSを乗り換えた方が
いいかも。
0527デフォルトの名無しさん
NGNG複数のソケットを作って、WSAASyncSelectを使って非同期通信しています。
それで、各ソケットごとに受信・送信の状態などを覚えておかないといけない
と思います。
で、そのために、HWNDにGetWindowLongやGetPropでするようなことを
SOCKETでもできますか?できるならそこに構造体のアドレスを入れて
おけばいいですよね。
(WSAASyncSelectで各ソケットとウィンドウを1対1に対応させれば出来るん
ですが、ウィンドウひとつでできるならそのほうがいいので。)
それとも、スレッドを使ったほうがいいんでしょうか?
0528デフォルトの名無しさん
NGNGLinuxって思いっ切り書いてますがな。
ディストリビューション関係あるの? カーネルは同じでしょ
0529デフォルトの名無しさん
NGNGLinuxにもバージョンがある
0530デフォルトの名無しさん
NGNGでも改善されたらラッキー、くらいだな。
0531デフォルトの名無しさん
NGNGiptablesが動いているって事はないですかあ?
0532506
NGNGカーネルは2.4.22で、ディストリはdebian使ってる。
早く2.6にしたほうがいい?
>>531
今見たら入ってた。
#iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
ipchainsはないみたい。
0533514
NGNG> 両側のポートは一緒なんだけど、違うコネクションってことはあるの?
古いコネクション。そのために TIME_WAIT なんて状態が存在する。
が、今回のケースでは関係ない気がする。回線トレース見てみないと
なんとも言えんなぁ。
>それぞれが一つずつ接続をしてるだけだから同時に3つしか
>キューに入らないはず。
お前、バックログキューを全く理解していないぞ。
バックログを 20000 にした、って、どうやったか、具体的に
書け。listen() の第 2 引数を 20000 にしただけじゃあ、
OS 側の上限に負けるぞ。
0534デフォルトの名無しさん
NGNG0535506
NGNG>> 両側のポートは一緒なんだけど、違うコネクションってことはあるの?
>古いコネクション。そのために TIME_WAIT なんて状態が存在する。
あー、確かに。
ただ、一つずつconnectしていってもエラー返さずずっとブロックしてるから
別のコネクションってことはありえないと思う。
>>それぞれが一つずつ接続をしてるだけだから同時に3つしか
>>キューに入らないはず。
>お前、バックログキューを全く理解していないぞ。
accept後のデータのやりとりは別スレッドに任せてるから
connectにacceptが間に合ってない、ってことはないと思う。
クライアント側は何度かデータのやりとりしてるからほぼ間違いないと思う。
acceptすればキューから外れると思ってたんだがこれは正しい?
>バックログを 20000 にした、って、どうやったか、具体的に
>書け。listen() の第 2 引数を 20000 にしただけじゃあ、
>OS 側の上限に負けるぞ。
第二引数を20000にしただけですた。
OSのほうの設定もやってみます。ありがとうございます。
0536533ではないが
NGNG> acceptすればキューから外れると思ってたんだがこれは正しい?
そりゃそうなんだけど、acceptはsingle threadedなんでしょ。
だったら、一つ捌いている間にどんどんたまっていくよね。
> accept後のデータのやりとりは別スレッドに任せてるから
これをやっている間にも。
> connectにacceptが間に合ってない、ってことはないと思う。
自身たっぷりだが、有り得ないことじゃないよ。
0537533だが
NGNG>accept後のデータのやりとりは別スレッドに任せてるから
>connectにacceptが間に合ってない、ってことはないと思う。
accept() 後の話はかんけーねーだろ。
accept() ってのは、結構重い処理なんだよ。
クライアント側もシリアルに回してるのに SYN+ACK が返る
のが遅いのであれば、バックログ溢れなのかどうか疑わしく
なってくる。
とりあえず、サーバ側で netstat -s を定期的に採取して、
バックログキュー溢れが発生していないか確認してみろ。
今 Linux が手元にないから、netstat -s のどこを見れば
いいか説明できない。スマソ。誰か、フォローよろ。
FreeBSD だったら "listen queue overflows" のところね。
後は、さっさと、そのアヤシイという回線トレースを晒せ。
0538デフォルトの名無しさん
NGNG> accept後のデータのやりとりは別スレッドに任せてるから
> connectにacceptが間に合ってない、ってことはないと思う。
> クライアント側は何度かデータのやりとりしてるからほぼ間違いないと思う。
ここで一つ疑問なんだが、「何度かデータのやりとり」(特にサーバーからのデータを受信)を
しないと次のconnectは呼び出さないの?
たしか、サーバー側でacceptしなくても"3-Way Handhsake"が終わればconnectは制御を
戻すから、もしそうでないならキューがあふれる可能性あるよね。
0540デフォルトの名無しさん
NGNG糞レスと判断したかレスアンカーがないから無視したんだろ。
0541506
NGNGまずバックログの話だけど、
# sysctl -w net.ipv4.tcp_max_syn_backlog="5000"
で増やして、listenの引数のほうも4000とかにしてみたけど、
同じ現象が発生した。
>>536,>>537
accept直前で文字出力してacceptに入ってることは確認してるんだが、
結局クライアント側からの再送の3秒分止まってる。
ちなみにクライアント側でconnectする前に2500msのSleepを挟んだら
クライアントは5500msくらいの時間止まるようになった。
2500msのsleepを入れてるのにあふれる、ってありえる?
0542506
NGNG19:06:06.672731 192.168.123.61.xtel > 192.168.123.19.19876: S 1640009458:1640009458(0) win 65535 <mss 1460,nop,nop,sackOK> (DF)
19:06:06.675614 192.168.123.19.19876 > 192.168.123.61.xtel: . ack 1398628608 win 5840 (DF)
19:06:06.675642 192.168.123.61.xtel > 192.168.123.19.19876: R 1398628608:1398628608(0) win 0
19:06:06.690803 192.168.123.61.1308 > 192.168.123.19.19876: . ack 705 win 64831 (DF)
19:06:06.791364 192.168.123.61.1312 > 192.168.123.19.19876: . ack 705 win 64831 (DF)
19:06:08.559930 802.1d config 8000.32:cf:fc:3e:e4:8c.8001 root 8000.32:cf:fc:3e:e4:8c pathcost 0 age 0 max 8 hello 2 fdelay 5
19:06:09.394346 0.00:00:74:6b:2b:c7.4100 > 0.ff:ff:ff:ff:ff:ff.452:ipx-sap-nearest-req 4
19:06:09.606638 192.168.123.61.xtel > 192.168.123.19.19876: S 1640009458:1640009458(0) win 65535 <mss 1460,nop,nop,sackOK> (DF)
19:06:09.609082 192.168.123.19.19876 > 192.168.123.61.xtel: S 1754744741:1754744741(0) ack 1640009459 win 5840 <mss 1460,nop,nop,sackOK> (DF)
19:06:09.609179 192.168.123.61.xtel > 192.168.123.19.19876: . ack 1 win 65535 (DF)
19:06:09.609576 192.168.123.61.xtel > 192.168.123.19.19876: P 1:65(64) ack 1 win 65535 (DF)
19:06:09.612497 192.168.123.19.19876 > 192.168.123.61.xtel: . ack 65 win 5840 (DF)
19:06:09.615356 192.168.123.19.19876 > 192.168.123.61.xtel: P 1:65(64) ack 65 win 5840 (DF)
19:06:09.615513 192.168.123.61.xtel > 192.168.123.19.19876: P 65:129(64) ack 65 win 65471 (DF)
3行目でよくわかんないRSTが送られてて、8行目でSYNが再送されてる。
この後サーバークライアント間でパケットが何回か往復して、
また同じようなSYN,ACK,RST,SYN...ってのが出る。
0543506
NGNG19:06:06.672731 192.168.123.61.xtel > 192.168.123.19.19876: S 1640009458:1640009458(0) win 65535 <mss 1460,nop,nop,sackOK> (DF)
19:06:06.675614 192.168.123.19.19876 > 192.168.123.61.xtel: . ack 1398628608 win 5840 (DF)
19:06:06.675642 192.168.123.61.xtel > 192.168.123.19.19876: R 1398628608:1398628608(0) win 0
19:06:06.690803 192.168.123.61.1308 > 192.168.123.19.19876: . ack 705 win 64831 (DF)
19:06:06.791364 192.168.123.61.1312 > 192.168.123.19.19876: . ack 705 win 64831 (DF)
19:06:08.559930 802.1d config 8000.32:cf:fc:3e:e4:8c.8001 root 8000.32:cf:fc:3e:e4:8c pathcost 0 age 0 max 8 hello 2 fdelay 5
19:06:09.394346 0.00:00:74:6b:2b:c7.4100 > 0.ff:ff:ff:ff:ff:ff.452:ipx-sap-nearest-req 4
19:06:09.606638 192.168.123.61.xtel > 192.168.123.19.19876: S 1640009458:1640009458(0) win 65535 <mss 1460,nop,nop,sackOK> (DF)
19:06:09.609082 192.168.123.19.19876 > 192.168.123.61.xtel: S 1754744741:1754744741(0) ack 1640009459 win 5840 <mss 1460,nop,nop,sackOK> (DF)
19:06:09.609179 192.168.123.61.xtel > 192.168.123.19.19876: . ack 1 win 65535 (DF)
19:06:09.609576 192.168.123.61.xtel > 192.168.123.19.19876: P 1:65(64) ack 1 win 65535 (DF)
19:06:09.612497 192.168.123.19.19876 > 192.168.123.61.xtel: . ack 65 win 5840 (DF)
19:06:09.615356 192.168.123.19.19876 > 192.168.123.61.xtel: P 1:65(64) ack 65 win 5840 (DF)
19:06:09.615513 192.168.123.61.xtel > 192.168.123.19.19876: P 65:129(64) ack 65 win 65471 (DF)
3行目でよくわかんないRSTが送られてて、8行目でSYNが再送されてる。
この後サーバークライアント間でパケットが何回か往復して、
また同じようなSYN,ACK,RST,SYN...ってのが出る。
0544506
NGNGサーバーからのデータ受信をするまで送受信を10回くらいしてる。
だからacceptされてるはずなんだけどなぁ…。
>>539
スマン、自分宛だと気づかなかった。でpreforkで検索してもapacheの設定の話ばっかりで、
manで調べても見つからない。ポインタキボンヌ。
0545デフォルトの名無しさん
NGNGサービス名変換してないトレースして欲しいに。xtel って何番だ?
それから、トレース晒すなら、どこで採取したかも書け。
> 3行目でよくわかんないRSTが送られてて、8行目でSYNが再送されてる。
よくわかんなくはないぞ。2 行目の謎の ACK に対する RST だ。
192.168.123.61 側には該当コネクションが存在しないから
RST 応答していると思われ。多分、1 行目の SYN を受けた段階では、
192.168.123.19 側には、まだ
192.168.123.19:19876 <-> 192.168.123.61:xtel
という古いコネクションが残ってると思われる。だから、ここで
古いコネクションの ACK を返している。
お前、クライアント側のプログラムで、以下のようなことをやっ
てないか?
- connect() 前に明示的に bind() している。
- SO_REUSEPORT オプションを使っている。
0546545
NGNG3 行目で RST を受けたので、このタイミングで 192.168.123.19
の古いコネクションが消滅。
8 行目の SYN の再送に対して 9 行目で 192.168.123.19 側から
SYN+ACK が帰されてて 10 行目の ACK でコネクション確立。
4 〜 7 行目は関係ないな。
古いコネクションの時からのトレースがあれば確証が得られる
んだけど。
0547545
NGNG> サーバーからのデータ受信をするまで送受信を10回くらいしてる。
> だからacceptされてるはずなんだけどなぁ…。
accept() しなくてもコネクションは確立するんだよ。
3 way handshake でのコネクション確立が完了して、
ようやく、アプリケーションの accept() が解ける。
だから、回線上にデータのやりとりが流れることと、
accept() が終わっていることは別の話。サーバ側から
のデータ (PUSH ビットが立ってるやつ) が流れてたら、
それは、accept() が終わってるってことだけどな。
それ以外は TCP がやり取りしてるデータだからアプリ
ケーションは関係ない。
0548545
NGNGとかぶっちゃうとしたら、ANY ポートの範囲が異様
に狭い、ってことはない?
偶然採取できている、別コネクションのデータをみると、
どうやら、このマシン (192.168.123.61)、ANY ポートの
範囲が 1024 〜 5000 になってる気がする。
イマドキそんな腐った OS は捨ててしまえ。ちゃんと、
IANA に従えと。
0549545
NGNGとりあえず、サーバアプリケーションは、データの
やりとりをして最後にソケットをclose()する時に、
read() が 0 return するのを待ってから close()
するようにしろ。つまり、クライアント側がコネクション
をクローズしたことを確認してから、サーバ側も close()
する。
そうすれば、サーバ側には TIME_WAIT のコネクションが
残らないから、この問題は発生しない。サーバアプリケ
ーションの常識。覚えとけ。
0550デフォルトの名無しさん
NGNGpreforkは、サーバ起動時にあらかじめ(pre-)いくつか子プロセスをつくっておくこと。
Apache1.3.x(のStandAloneモード)がその一例。
0551506
NGNG激しくすまん。このdumpはクライアント側でとったもの。
192.168.123.19がサーバーで、19876は固定のポートでクライアントの1313番(xtel)はエフェメラルポート。
> - connect() 前に明示的に bind() している。
それしてる。ただポート番号は指定しない(0)で適当に取らせてる。これやばい?
> - SO_REUSEPORT オプションを使っている。
SO_REUSEADDRは使ってる。SO_REUSEPORTは使ってないわ。
> accept() しなくてもコネクションは確立するんだよ。
ごめん、説明が悪かった。
クライアントはサーバーからのデータをrecvで待ってる。
クライアントはsend,recvを繰り返して、最後のrecv後に
次のconnectを呼んでる。
> 明示的に bind() してないのに、古いコネクションとかぶっちゃうとしたら、
> ANY ポートの範囲が異様に狭い、ってことはない?
いっぱいコネクション張ってみたら
4963の次に1026番ポート開いてた。
5000以降は使ってないのか。
試しにクライアントのローカルポートを30000-50000にして
つないでみたけど、結果は同じだった。ショボーン
>そうすれば、サーバ側には TIME_WAIT のコネクションが残らないから、この問題は発生しない。
テスト中に中断するためにクライアントをCTRL-Cで止めてるんですが、
これはまずいっすか?
>>550
あー、プロセスじゃないけどスレッドはあらかじめ作っておいてあるわ。
0552デフォルトの名無しさん
NGNGLANで送受信したIPパケットの個数を知りたい(取得したい)んですが、
どうすればいいですか。
0553デフォルトの名無しさん
NGNGO S く ら い 書 け
0554デフォルトの名無しさん
NGNGOS無くてもいいじゃん
オレならパケットモニタを買って来てぶち込む
0555545
NGNG>ただポート番号は指定しない(0)で適当に取らせてる。これやばい?
いや。かまわん。それなら ANY ポートが振られるから。
> 試しにクライアントのローカルポートを30000-50000にして
> つないでみたけど、結果は同じだった。ショホ゛ーン
何がどう同じだったのか書け。それでも同じように謎の ACK が出て
たのか? 古いコネクションの ACK が流れてる可能性がある、という
仮説なんだから、ちゃんと回線トレース確認汁。
> テスト中に中断するためにクライアントをCTRL-Cで止めてるんですが、
> これはまずいっすか?
そーゆー話はどーでもよくって、サーバ側がどういう作りになってる
か説明汁。TIME_WAIT が残るような作りなのかどうか。
0556506
NGNG度々すまん。
>何がどう同じだったのか書け。
>それでも同じように謎の ACK が出てたのか?
>古いコネクションの ACK 流れてる可能性がある
クライアントのプログラムを必ず30000から順番にポートを使うようにさせたら
一度テストプログラムを動かしただけだと問題ないんだけど、
二度目に起動するとSYN-ACKじゃなくてACKが返ってきてた。
サーバーは全コネクションで同じポート使ってるし、
クライアントは一度目と同じようなポートをbindしてるから全く同じソケットペアになってる。
古いコネクションのほうのACKか、っていうのは判断できる?
>そーゆー話はどーでもよくって、サーバ側がどういう作りになってる
>か説明汁。TIME_WAIT が残るような作りなのかどうか。
サーバーはソケットをaccept後にrecv, send, recv, recv, {recv, send}*10という処理をしてる。
recvの前にはselectしていて、5秒でデータが来なかったらclosesocketしてる。
この後はselectでソケットがシグナルされて、recvの戻り値が0以下の時に切断してる。
送受信してるデータは全部64byte固定で、サーバー側は64byte単位で読み込んでる。
0557506
NGNGサーバー側でnetstatで見ると800個くらいESTABLISHEDのコネクション残ってた。
100ms間隔でclosesocketしたらほとんど消えてた。
Establishedなつもりのソケットペアと同じソケットペアでsynが送られたから、っていうのが原因?
0558デフォルトの名無しさん
NGNG>古いコネクションのほうのACKか、っていうのは判断できる?
全ての回線トレースがあれば、シーケンス番号と ACK 番号の
繋がりから判断できるだろ?
だから、古いコネクションの時からのトレースを確認しろと
言っている。
>この後はselectでソケットがシグナルされて
意味がわからんぞ。
0559デフォルトの名無しさん
NGNGてるだけじゃないのか?
0560デフォルトの名無しさん
NGNG>>545の話をちゃんと咀嚼して理解してやって。
0561545
NGNG(蟹は別にして) その可能性も否定できないね。
以前のコネクションでクライアントからの FIN
を取りこぼしてたとしたら、こういう状況になる
かもしれん。
ただ、その場合、クライアント側では FIN の再送
を繰返し、FIN+ACK が得られるまで FIN_WAIT_1 or
FIN_WAIT_2 状態で残るはずだから、何度か後の
connect() 時に同じポート番号が使われた、という
点の説明がつかない。SO_REUSEADDR を使うことで、
クライアント側で FIN_WAIT_1 or FIN_WAIT_2 で残
っているポート番号を bind() することは可能だが、
それと同じコネクション対になる相手に対して
connect() しようとした所で、EADDRINUSE エラー
になるはず。
とりあえず、netstat -s や netstat -i での確認を
しようとしない >>506 に乾杯!
0562デフォルトの名無しさん
NGNG0563デフォルトの名無しさん
NGNG( ⌒ ヽ \ └―――──―――┘ /“corega FEther PCI-TXC Plus
∪ ノ \ ヽ(´ー`)ノ / 】“ELECOM LD-10100S
U U \ ∧∧∧∧∧ / 易】“ GreenHouse GH-ET100RT
オンボードが蟹だった \< カ >【安易】“駄メルコ LGY-PCI-TXD
v(・ω・)v v(・ω・)v v(・ω・)v< 二 .>【安易】“プラネッ糞 FW-110TX
v(・ω・)v v(・ω・)v v(・ω・)v< 悪 チ >【安易】“哀王 ET100-PCI-L2
―――――――――――‐< 感 ッ >―――――――――――――――――――‐
蟹チップ___マンセー`ヾヽ< !!!!! プ > 蟹は蟹であると見抜ける人でないと |\
,r''´ ,ォく ̄^ 〉、< の >(ハイエンドなLAN環境を実現するのは)難しい
/ / ノ ! / { } ∨∨∨∨∨ \ / |/| __ \ /
./ し' ノ、 , -、 { `′ / \ \ 丿 __ '"ゞ'-' | |
{ ヾ;、. _,.ィ「! }-ィ゙ /〉}、ヽ, ‐/ \ | | '"-ゞ'-'____| | __//
ヽ、 ~ ,r'ソ ト-'′ `┬'^い, } / ∧∧ ミ ドスッ \\\| | ̄ ̄ ::::::::  ̄ ̄\/
.( 'ー')j/ ヾj jツ i / ,ゝ/ ( ,,)┌―─┴┴─‐`く ( ,-、 ,:‐、 |/\
. [`〔」ノ `'ー'゙ { `7 / つ RealTek \ |/\
`'y′ [ニ7 〜′ /´ └―─┬┬─―─ \ __,-'ニニニヽ . |/\
〉 } / ∪ ∪ ││ ε3 \ ヾニ二ン" |/\
( 蟹. REALTEK ノ/ ゛゛'゛'゛ \_____/
0564デフォルトの名無しさん
NGNG0565デフォルトの名無しさん
NGNG0566デフォルトの名無しさん
NGNG多分忘れると思うので、また後で教えてください。
0567デフォルトの名無しさん
NGNG0568デフォルトの名無しさん
NGNGこれ読んだけどわかりにくい
SO_REUSEADDR と SO_REUSEPORT との違いは何ですか?
2chらーにもわかるように解説ヨロ
0569デフォルトの名無しさん
NGNGWinsock を使ったサーバアプリが無事完成致しました。
この場を借りてお礼を申し上げまつ。 m(__)m
0570デフォルトの名無しさん
NGNG・TIME_WAIT状態のポートへのbindを許可する(bind出来るのは1プロセス)
・1つのポートに複数のプロセスが同時にbind出来るようにする
と書いてあるように見えるけど。
0571デフォルトの名無しさん
NGNGSO_REUSEPORT はマルチキャストのためのオプション。
つまり、UDP で使う物。TCP には関係ない。
確かに引用されている FAQ には「UDP」の文字が出て
こないから、シロートには分かりづらいかもしれない。
マルチキャストを知っていれば自明なんだけど。
SO_REUSEADDR は、TCP のコネクション対が全く同一
にならなければ、ローカルポートが同じコネクション
も存在可能にするオプション。SO_REUSEADDRを設定
していても、コネクション対が全く同一になるコネク
ションは同時には存在できない。そのようなコネクシ
ョンを作ろうとするシステムコール (bind(), connect())
は EADDRINUSE エラーになる。
0572デフォルトの名無しさん
NGNG0574デフォルトの名無しさん
NGNGこりゃーいったい何を意味してるのかな
0575デフォルトの名無しさん
NGNGこれでsd==0になることってあるの?
0576デルファイの名無しさん
NGNGいま、DOSベースでTCPIPのパケットをとばす方法をさがしてます。
DOSのアプリで、シリアル通信をしていたのを、TCPIPでやりたいと言う
要求があるのです。
WindowsベースではWINSOCK使ってチャットみたいなことをした経験は
あるのですが、DOSでどうやったらいいか途方に暮れています。
昔、よくLANMANでファイル共有なんかさせていたので、とりあえずLANMAN
のシステムコールとかAPIの資料をさがしてるんですが、なかなか目的のものが
見つかりません。
ここらへん、参考になる資料とか、サイト、使えるモジュールなど(有償でもかまい
ません)はないでしょうか。
よろしくおねがいします。
0577デフォルトの名無しさん
NGNG0を閉じればありうる。
0578デフォルトの名無しさん
NGNG0579デフォルトの名無しさん
NGNG0580デフォルトの名無しさん
NGNGネットワークプログラミング相談室 Port4
0581デフォルトの名無しさん
NGNG(゚∀゚)サンクスコ
まさにそのとおりでした
0582デルファイの名無しさん
NGNG>578
Linx をちょっと漁ってみてますが、、、ソースだけではちょとつらいです。。。。
そこら辺もちょっと攻めてみようと思います。
>579
いへいへ、TCPIPでチャットみたいな事ができればいいのです。制御系のPCで、
機械制御してるのでWindowsはつかえなくてDOS使ってるところで、LANで通信させたいもので。
>580
ありがとうございます。いっぺんみてみます。。。
0583デフォルトの名無しさん
NGNGhttp://www.eunet.bg/simtel.net/msdos/tcpip.html
0584デフォルトの名無しさん
NGNGこの時間って変更可能なのでしょうか?
0585デフォルトの名無しさん
NGNG0586デフォルトの名無しさん
NGNG0587デフォルトの名無しさん
NGNG応答のあるものなら2分なんて待たずに
さっさと捨てるべし
0588デフォルトの名無しさん
NGNG↑を見ながらHTTPクライアントを制作していますが
WebサイトによってGETの挙動が違うようで悩まされています。
<ケース1>
pc2.2ch.netに接続して"GET /tech/subject.txt HTTP/1.0"を送ると
Not Foundになってしまい、
"GET http://pc2.2ch.net/tech/subject.txt HTTP/1.0"
だと取得できます。
<ケース2>
www.ff.iij4u.or.jpに接続して"GET /〜ch2/bbsmenu.html HTTP/1.0"を送ると
ページを取得できますが"GET http://www.ff.iij4u.or.jp/~ch2/bbsmenu.html HTTP/1.0"
だとAccess Deniedで拒否されてしまいます(ケース1と逆)。
<ケース3>
taruo.netは"GET /e/ HTTP/1.0"でも
"GET http://taruo.net/e/l HTTP/1.0"のどちらでも取得できます。
どのケースもサーバはApacheでした。
参考にしているサイトによるとGETメソッドはpathを指定するようです。
つまりケース2と3の挙動が正しいようなのですが、
なにか勘違いをしているようでしたらご指摘下さい。
0589デフォルトの名無しさん
NGNGすみません。
0590デフォルトの名無しさん
NGNG0591584
NGNGLANケーブルを抜いてsendすると、sendは成功するけど 2 分後くらいに
コネクションが切れます。2 分以内にケーブルを刺しなおすと送信できるんです。
なんて気の長いタイムアウト値なんだ・・・ということが言いたい。
>>587
さっさと、close(socket) してしまえって事?
リトライしても送信バッファに溜まるだけですよねー。
0592デフォルトの名無しさん
NGNG何作ってるのか知らないけど。
0593デフォルトの名無しさん
NGNGHostヘッダ付けれ
0594デフォルトの名無しさん
NGNG2 分なら短い方だ。たいがいの OS では、
TCP 再送タイムアウト時間は 10 分近い。
気に入らないなら、TCP の再送タイムア
ウト時間を短く変更すればいい。
けど、システム全体に影響するから、普通
はそんなことやらない。そのアプリケーション
で、一定時間内に相手から応答がなければ、
エラー処理にするように作るのが普通。
「リトライ」はダメでしょ。お前は TCP を
なんだと思ってんだYO。
0595デフォルトの名無しさん
NGNG> ウト時間を短く変更すればいい。
>>594は分かって書いてんだろうけど誤解を招きそうな予感。
http://www.kt.rim.or.jp/~ksk/sock-faq/unix-socket-faq-ja-2.html#peer_death
http://www.kt.rim.or.jp/~ksk/sock-faq/unix-socket-faq-ja-4.html#ss4.7
0596584
NGNG>>594
>「リトライ」はダメでしょ。お前は TCP を
>なんだと思ってんだYO。
そ、そうなんですか。。。
元々 RS232C で実装されていたものを Ether Net + TCP/IP に変えたですよ。
首くくって出直して来ます・・・ _| ̄|○
0597デフォルトの名無しさん
NGNGHost:はさんざんがいしゅつだから
ケース2について補足しておくとmod_proxyの仕業
> 参考にしているサイトによるとGETメソッドはpathを指定するようです。
AbsoluteURLを指定する書式はHTTP/1.1では正しい。
0598594
NGNG> 一定時間、相手から応答が無ければ shutdown() してまえ。でええの?
だーかーらー、それで「ええ」のかどうかは、そのプログラム
書いてるお前にしか判断できないでしょ。
そのコネクションは、もうだめぽ、と判断するんなら、素直に
close() すれば。わざわざ shutdown() することに意味はない。
0599デフォルトの名無しさん
NGNGありがとうございます、解決しました。
散々がいしゅつだったのですね、過去ログはPort8スレしか読んでいませんでした。
0601デフォルトの名無しさん
NGNG分らないことがあるので質問させてください。
とりあえずTCPチャットをサンプル通りに打ちこみ、
自分の一台のパソでサーバとクライアントを両方起動してたところ、
LAN側のローカルIPとかホスト名を指定した場合は上手く通信できたんですが、
グローバルIPを入れると通信が確立できませんでした。
自分のグローバルIP(らしきIP)にpingをうってみたら
やはり応答がないみたいなんですが、なにか根本的に勘違いしてるんでしょうか?
ヤフーなので固定IPではないらしいんですが、
実際昨日調べてからずっとかわってないみたいなので、その辺は問題ないと思うのですが、、。
ド素人なので場違いなようで申し訳ないんですが、
何か理解のヒントになるようなことでも良いので助言をいただけたらと思います。
環境はWIN2000とVC++6です。
0602デフォルトの名無しさん
NGNG落ちではないだろうな。
0603601
NGNGすいません、、ちょっと意味が理解できないであります。
家のなかでデスクトップとノートをルータで繋いでるんですが、
その間では通信できましたし、一台のPCの中でも出来ました。
グローバルIP(と思い込んでいるIP)は
「確認君」などのグローバルIPチェックサイトで調べた物なんですが、
それじゃまずいのでしょうか?
そのルータのインターフェースに付いているIPというのは
確認君などで見れるIPアドレスとは違ったものなんでしょうか。
0604デフォルトの名無しさん
NGNG0605デフォルトの名無しさん
NGNG何が起きても責任は持てないが、そのルータのフィルター機能を全て
無しにして味噌。
0606デフォルトの名無しさん
NGNG(・∀・)ニヤニヤ
0607デフォルトの名無しさん
NGNG0608601
NGNGありがとうございます。
やっぱりなんかすごくバカな事を聞いてるんでしょうか。
そりゃ出来なくて当たり前、ってことでしたら、
なぜ出来ないのかというのを
何となくのイメージでよいので理屈で理解したいのですが。。
>>605
ありがとうございます。
よくわかんないのでとりあえずいったんルータを外してみようかなと思ってるんですが、
なかなか面倒そうであります。
このままの環境ではルータを挟んでる関係で
グローバルIPを使っての自分から自分への送受信はできないけど、
クライアントの方を友達とかに渡して
外から繋いでもらえばできるんでしょうかね?
今日は遅いんで明日にでも試してもらおうと思ってるんですが。
0609デフォルトの名無しさん
NGNGマジレスすると、そのチャットソフトで使ってるTCPポートを開いて
ローカルなIPへ通すような設定をルータにしないと無理。
ルータの説明書を読んで味噌。Web鯖を外部へ公開する方法とか
書いてあるはずなので、その方法と同じやり方で出来るはず。
ちなみに漏れはルータなんか使ってないのでグローバルから
素通し。あひゃひゃひゃ。
0610デフォルトの名無しさん
NGNG0611デフォルトの名無しさん
NGNGゴローバルIPのテストをするのは不可能
プロキシでも使わない限り
#ローカル環境の話ね、友達に穴つついてもらうのはOK、FTPのプログラミングでハマる人よく見るので蛇足ながら
0612デフォルトの名無しさん
NGNGルータを作ればいいじゃん
0613デフォルトの名無しさん
NGNG0614デフォルトの名無しさん
NGNG0615米国防省
NGNG0616デフォルトの名無しさん
NGNG0617デフォルトの名無しさん
NGNG0618デフォルトの名無しさん
NGNGうちUSENだけど素でカメみえるよ。
ほかにもIPv6実証実験に参加してるプロバイダは結構あるとおもう。
0619デフォルトの名無しさん
NGNG全てのISPがv4v6ゲートウェイやってくれないと、
v6だけでサービス立ち上げるわけにはいかないけどね。
>>614
というか、今でも頭の悪いプロトコル考えている奴らの方が…ICQとか…
0620デフォルトの名無しさん
NGNG0621デフォルトの名無しさん
NGNG先生!どこで勉強すればいいですか?
0622デフォルトの名無しさん
NGNG0623デフォルトの名無しさん
NGNG3分間Networkingをキーワードにぐぐりなさい。
そして隅から隅まで目を通し頭に叩き込みなさい。
0624デフォルトの名無しさん
NGNGIPv6とか、いまいち実感わかんのだけど・・・
結局目に見えたメリットはどんなのがあるの?
グローバルIPアドレスが増えるので、各PC1台ごとにグローバルIPアドレスを割り振る事が出来る
って聞いた事あったけど、結局グローバルIPアドレスを追加するには追加料金要るし・・・
0625デフォルトの名無しさん
NGNG0626デフォルトの名無しさん
NGNG0627デフォルトの名無しさん
NGNG下半分は基本的にMACアドレスからの生成だから、IPv4とは違って
PC増えたからって追加料金はないと思うぞ。
0628デフォルトの名無しさん
NGNG0629デフォルトの名無しさん
NGNG何故?
ブロードキャストじゃねーぞ。
>>627
そりゃサービス内容によるんじゃないの?
0630ヽ(´ー`)ノ
NGNG>>624 のような素人さんを騙す企業は出そうだな。
>>628
工夫すればできると思うけど、あんまり恩恵無いんじゃないかな。
スレ違い。
http://pc.2ch.net/test/read.cgi/unix/1002269333/
0631デフォルトの名無しさん
NGNG0632デフォルトの名無しさん
NGNGttp://www.linux.or.jp/JM/html/LDP_man-pages/man2/select_tut.2.html
0633デフォルトの名無しさん
NGNG早速教えて戴いてアリガトン
0634デフォルトの名無しさん
NGNG>>633
> この板はプログラムを作る人のための板です。
mp3 のリッピングにせいを出す前に、ローカルルールを読む知恵ぐらい付けたらどうだね。
637 :デフォルトの名無しさん :04/02/28 16:11
>>636
MP3をさらにリッピングするのか?
PC初心者板へお帰り。
0635デフォルトの名無しさん
NGNGperl5.8.3で IO::Socket と IO::Select 使ってるけど、Cとかの話でもいいからキボン
0636デフォルトの名無しさん
NGNG0637デフォルトの名無しさん
NGNG0638デフォルトの名無しさん
NGNG> OOBを読み捨てればいいと思うんだけど何書いとけばいい?
この文章の意味がわからんのだが。
「いいと思うんだけど]ってのは何なんだ?
0639デフォルトの名無しさん
NGNGhttp://www.linux.or.jp/JM/html/LDP_man-pages/man2/select_tut.2.html
http://www.kt.rim.or.jp/~ksk/wskfaq-ja/newbie.html#oobdata
0640デフォルトの名無しさん
NGNGソケットバッファがオーバフローであぼーんか?
0641デフォルトの名無しさん
NGNGバッファが満杯になりデータを読めなくなるかもしれない。
ソケットにOOBINLINE を設定すればとりあえず問題ないけどね。(単にクライアントが壊れた入力を流してるように見えるだけ
0642デフォルトの名無しさん
NGNGOOB メッセージは 1 つしか滞留しないから、無問題。
基本的に 1 byte しか緊急メッセージとして扱わないのが、
普通の処理系。 >>641 は妄想。
0643デフォルトの名無しさん
NGNG0644デフォルトの名無しさん
NGNGttp://x68000.startshop.co.jp/~68user/net/
0645デフォルトの名無しさん
NGNGhttp://www.kt.rim.or.jp/~ksk/wskfaq-ja/articles/lame-list.html の7番
0646デフォルトの名無しさん
NGNG『Telnet アプリケーションで』って書いてあるが。。。
0647デフォルトの名無しさん
NGNGそれがどうかした?
0648デフォルトの名無しさん
NGNG0649デフォルトの名無しさん
NGNGありますか?
ありますか?
0650デフォルトの名無しさん
NGNGありがとう
0651デフォルトの名無しさん
NGNG「あるあるあるあるあるーーーー」
ちゃーらーらーらーらー
0652デフォルトの名無しさん
NGNG0653デフォルトの名無しさん
NGNGお前は書名しか読めないのかよ
0654デフォルトの名無しさん
NGNG0655デフォルトの名無しさん
NGNGナグル、ネイグル、ネァグル、ノグル
さすがに、殴れ、ではないだろうとは思いますが。
0656デフォルトの名無しさん
NGNGttp://www.geocities.co.jp/Playtown-Spade/4875/conquest/kerunaguru_1.html
ケルナグール研究サイト
0657デフォルトの名無しさん
NGNGWinSockのおすすめ本。
WinSock2.0プログラミング
http://www.amazon.co.jp/exec/obidos/ASIN/4797306882/
TCP/IPによるネットワーク構築〈Vol.3〉
http://www.amazon.co.jp/exec/obidos/ASIN/4320029992/
猫でもわかるネットワークプログラミング
http://www.amazon.co.jp/exec/obidos/ASIN/4797323604/
0658デフォルトの名無しさん
NGNG「なぐる」と読む。
0659デフォルトの名無しさん
NGNGガッ
0660デフォルトの名無しさん
NGNGありがとう!
0661デフォルトの名無しさん
NGNGブロックソケット=同期、非ブロックソケット≠非同期 ですよね?
0662デフォルトの名無しさん
NGNG一般的にasynchronous communicationというのは、
requestとreplyが分離されているような通信スタイルのことです。
「非同期」と訳されることが多いのですが、ネイティブは「非同時性」のつもりで話しています。
「非同期」は定着してますが、はっきり言って誤訳です。
0663デフォルトの名無しさん
NGNGread() でデータが無いとステータスが返る ⇒ 非ブロック
read()? を実行しても忘れた頃にデータが返って来る ⇒ 非同期
であってるの?
0664デフォルトの名無しさん
NGNG分散コンピューティング、分散アルゴリズムの本を読むと、
かなり詳しく概説してあります。
0665デフォルトの名無しさん
NGNG分散アルゴリズム アルゴリズムシリーズ
亀田 恒彦 (著), 山下 雅史 (著)
http://www.amazon.co.jp/exec/obidos/ASIN/4764902257/qid=1078325089/sr=1-5/ref=sr_1_10_5/250-3543094-7533840
0666デフォルトの名無しさん
NGNGそれは、キューイングセオリー屋さんの書いた本なのでちょっと違います。
高いけど日本語だと↓がだんとつのお勧め。
分散オペレーティングシステム UNIXの次にくるもの
前川 守 (編集), 清水 謙多郎 (編集), 所 真理雄 (編集)
http://www.amazon.co.jp/exec/obidos/ASIN/4320025709/
0667デフォルトの名無しさん
NGNG0668666
NGNG0669デフォルトの名無しさん
NGNGキューイングセオリー屋ってなんすか?
>UNIXの次にくるもの
Plan9 とか。
0670デフォルトの名無しさん
NGNGきゃ〜、今月は本代を2マソも使ったのに・・・ホスイ
0671デフォルトの名無しさん
NGNGいろいろ勉強し出すと本代ってどんどん増えてくよね。
図書館行っても糞だし。
近所の大学の図書館にはわりといろいろあるけど…
0672デフォルトの名無しさん
NGNG絵を描いた時のマウス座標を文字列としてお互い送受信してるだけで、
座標6バイト+文字列尾のNULL文字1バイトの計7バイトのデータなんですが、
どうも見た感じ送信側の速さに対して受信の処理が追いついてないような感じで
送信側の動きがダイレクトに伝わりません。取りこぼしをしているのではなく、
受信側が必死に追いかけてやっと再現されてるような感じです。
にもかかわらず、送受信する文字列のサイズを1024ずつ(使うのは先頭7バイトのみ)
にしてみると、なぜか滑らかに伝わります。
でかいサイズを同じ頻度で送受信するので普通に考えると負担が増す思うのですが、
これはなぜでしょうか。。。
0673デフォルトの名無しさん
NGNG0674デフォルトの名無しさん
NGNGhttp://www.kt.rim.or.jp/~ksk/wskfaq-ja/intermediate.html#nagle-desc
http://www.kt.rim.or.jp/~ksk/wskfaq-ja/intermediate.html#disable-nagle
0675672
NGNGお馬鹿な〜って症状なんでしょうか。
ネットゲー作ったりするときなんか出来るだけ送受信データを小さくする
ように努力するもんだと思ってたんですが、
小さくしすぎてもパフォーマンスに影響するんですか・・・
(誤読してないとすれば。)
わけわかんなくなってきました。
0676デフォルトの名無しさん
NGNG0677デフォルトの名無しさん
NGNGデータを小さくするってのは正解だけどそれだけじゃ失格。
各データを使うタイミング情報を付けるなどの工夫するから期待する動作になる。
0678デフォルトの名無しさん
NGNGUDPにするのは常識だと思うが
0679デフォルトの名無しさん
NGNGUDPでマトモに相手側に描画できるか?
エラー処理とかしてたらTCPの方が良いような・・・
0680デフォルトの名無しさん
NGNG0681デフォルトの名無しさん
NGNGUDPにするのも一つの案だとは思うけど、常識か?
動画を見るだけならUDPとかで多少パケット落としながらでも
良いけど、絵を描くとなるとあまり情報が欠落しても困るような…。
試してみる価値はあると思うけど。
0682デフォルトの名無しさん
NGNG本当にリアルタイムに相手側に反映させる必要があるのかどうかをまずは検討した方がいいよ。
インターネットなんていい加減な環境でまじめにやろうとすると結構しんどいから。
今はたぶん同一のマシンかLANで隣のマシンに並べてテストしてるからラグが
はっきり見えるだけでインターネット越しだったら全然気にならないかもしれないし。
あるいは単に描画がカクカクするのが気になるだけなら
受信パケットをローカルのキューにためておいて
描画に適当なウェイと入れて(例えば最速で0.1秒に1ドット)表示するようにすれば
見た目上は滑らかに描画されてるように見えるかもしれないし。
0683デフォルトの名無しさん
NGNG> 試してみる価値はあると思うけど。
>>672=675にはまだ早いんじゃないかな。酷くなる一方だと思う。
0684デフォルトの名無しさん
NGNG0685デフォルトの名無しさん
NGNGあのへんは描画コマンドを送ってるからパース仕切れなくなると困る。
ただUDP使ってる動画ストリーミングプロトコルにはそれはそれでそれなりの理由があるよ。
>672
本当のリアルタイムはインターネットだとムリ。
googleやyahooにpingして遅延がどのくらいあるのか見て、
どの程度の遅延が許容できるのか考えた方がいい。
俺ならマウスを押してから離すまでのストロークを記録して、ある程度長くなった時点で送るね。
もちろんTCP_NODELAY
0686デフォルトの名無しさん
NGNG0687デフォルトの名無しさん
NGNG>ただUDP使ってる動画ストリーミングプロトコルにはそれはそれでそれなりの理由があるよ。
なんにしてもペイントアプリにUDPは向かないよ。
もしUDP使った場合一通り送って取りこぼした情報再送するようになるから
最初に歯抜けの線が表示されて後から抜けた部分が補完されてしまってカコワルイ。
>俺ならマウスを押してから離すまでのストロークを記録して、ある程度長くなった時点で送るね。
>もちろんTCP_NODELAY
これだけだとカクカクするのは直らないでしょ。描画開始のラグが減るだけで。
パケットにGetTickCount使った時間情報仕込んでおくといいのかも。
0688デフォルトの名無しさん
NGNG>俺ならマウスを押してから離すまでのストロークを記録して、ある程度長くなった時点で送るね。
これが一番分かりやすくて良い方法なんじゃないかな>>672
0690デフォルトの名無しさん
NGNG>これが一番分かりやすくて良い方法なんじゃないかな>>672
5秒かけて線引いた場合、相手側に表示が始まるのは5秒後で終了するのは10秒後だろ。
あまり賢いやり方ではないな。
0691デフォルトの名無しさん
NGNGたまにインターネット越しに X 飛ばすけど、それ程問題を感じてないなぁ。
0692デフォルトの名無しさん
NGNGなんで同じ速度で線を引くんだ?
0693デフォルトの名無しさん
NGNG0694デフォルトの名無しさん
NGNG負荷で不可。個人使用なら実害はないだろうけどさ。
>>693
>あと「ある程度の長さになったら」ってのも理解してないよな。
>時間とか距離とかストロークの区間とかで判断できるじゃん
1ドットごとにsendしとけばそこらへんは時間またはサイズを見て
WinSockが勝手にやってくれるんだから二度手間。
0695デフォルトの名無しさん
NGNG0696デフォルトの名無しさん
NGNGつかこれも釣りか?
0697デフォルトの名無しさん
NGNG全角文字のことを大文字と言う人が結構いるものだ。
0698672
NGNGやっぱり手描きチャットなんで、作るんだったら
相手の腕の動きの生々しさまで伝わってくるようなものを作りたいです。
なので>>672に書いた通り、真面目に座標一つ拾うごとにsend・recvして
テストしていたわけなんですが(ローカル環境で)、
どうも見た感じ送受信のタイミングがずれるみたいだったので、
座標を拾ったりsendする間隔をtimeGetTimeで大きくして補完する
というのも試してみました。が、やっぱり見た目がちょっといまいちな感じでした。
それから今度は同じローカル環境で単に1024バイトとかデカイ文字列に入れてみたら
座標一つ拾うごとの送受信でもなぜか上手くいったので(座標は先頭の数バイトに一個だけ。)
友人宅と繋いでテストしてみたんですが、相手の描いた絵はこちらに滑らかに伝わってきたものの、
こちらの絵が相手には点々でしか伝わらなかったようでした。
こりゃデータサイズが大きいしこっちの上りが遅いからかなぁ、とか適当に結論付けたのですが、
TCPなのに取りこぼしってするんですかね?(実はこの辺すらよくわかってなかったり。。。)
とりあえずタイミングをずらす原因となっているオプションを切り替えてみるのと、
時間情報と合わせて拾った何個かの座標を一括して送り相手側で再生する方法を
試してみようと思います。
0699デフォルトの名無しさん
NGNG> 座標を拾ったりsendする間隔をtimeGetTimeで大きくして補完する
> というのも試してみました。が、やっぱり見た目がちょっといまいちな感じでした。
なんてやる前に、
> とりあえずタイミングをずらす原因となっているオプションを切り替えてみるのと、
をやりなよ。NO DELAYでね;-)
0700デフォルトの名無しさん
NGNG0701デフォルトの名無しさん
NGNGdrwx---r-x 7 qqq hpusers 4096 Nov 20 14:25 . �@
drwx---r-x 8 qqq hpusers 4096 Oct 4 2002 .. �A
この時に、日の後は時間や年になっているのですが、
�@の場合の年は何年か?�Aの場合の時分は?
と、悩んでおります。
この謎を教えてください
0702デフォルトの名無しさん
NGNG0703デフォルトの名無しさん
NGNG0704デフォルトの名無しさん
NGNGFTP の LIST コマンドのことだと推測。
つか、人に推理ゲームさせないで最初から書きなさい>>701
質問に対する答えは
(1) 過去の6ヶ月以内の日付(GNU ls の場合)
(2) 表示されないため、そこから知ることは不可能
代案は
1. MDTM が実装されていればそれを使う。
2. オプションが渡せれば --full-time (GNU ls の場合)
0705ど素人
NGNGいまソケット(TCP)でプロセス間通信をしようとしています。
サーバとクライアントがいて、クライアントからの電文をサーバで受け、応答します。
この場合、C->Sへの電文が喪失したり、その応答が喪失したり、タイムアウト後に送れて届いたりといったことは
発生するのでしょうか?TCPは相手にできる限り届けるプロトコルということをどこかで読みました。
すると喪失したら再送はTCPが責任をもって行うのでしょうか?
それともアプリで応答がない場合はもう一度送るなどの処理を入れるのでしょうか?
よろしくお願いします。
0706デフォルトの名無しさん
NGNG>>2
0707デフォルトの名無しさん
NGNG遅れることはある。再送は責任もってしてくれる。
0708デフォルトの名無しさん
NGNG注:届かない時は届かない
まぁ、俺も未だかつて見たこと無いんで真偽のほどは分からんが、
会社の上司から「実際にあった」と聞いた。
0709デフォルトの名無しさん
NGNG届かないときは recv() に -1 が返って来るけど
何のエラーもなく届かなかったってこと?
0710デフォルトの名無しさん
NGNGストローク単位だと圧縮できるじゃん。
0711708
NGNGその通り。
ここらへんはRFCでも定義されてなかったと思うから、実装によって挙動は違うかもしれない
少なくともBSD系では、送り側の配送失敗は明示的にエラーが出ない。
で、そんな場合でもコネクションは切れてないから受信側でもエラーは検出できない
すると、バイトストリームの途中がぽっかり抜けて受信されて、途中からデータがおかしくなる。
結局どう解決したかと言うと、全MSGの頭にSignature付けて毎回確認したそうな。
まぁ、普通は完全におかしなデータ受け取った時点でコネクションを
切るけど、その時はそれができなかったんだとさ。
#嘘言ってたら突っ込みよろしく( ̄▽ ̄)ノ
0712デフォルトの名無しさん
NGNGのでwrite()の戻り値をちゃんとチェックすれば大丈夫じゃなかったっけ?
0713708
NGNGそれは送信バッファに入らなかった時じゃないか?
TCPは送信バッファに入った後に、再送も含め配送の処理を行うから
そこでエラー起きると、writeの戻り値じゃ判断つかないと思う。
0714デフォルトの名無しさん
NGNGだとしたら、それはTCPスタックのバグだろう。
0715デフォルトの名無しさん
NGNGそんなことはありえない。送受双方が同時に糞スタックでない限り。
実装ごとに違うのではなくて、まともな実装としては認められないものでしか起き得ない。
仕様を読めば分かる。seq#が先に進まないから。
>>712
そう。
>>712
もしそんな危機的なことが起きたら、接続が切られます。糞スタックでない限り。
>>713
ですね。
0716デフォルトの名無しさん
NGNGとりあえずまとめてみます。
理論上は、
1 電文が喪失した場合はTCPが再送してくれるが届かないこともある。そのときは受信側でrecvが-1を返すので判定できる。
2 電文が遅れて到着することがある。
3 write(send)の戻り値は送信バッファに格納できたバイト数であり送ったバイト数ではない。
アプリケーションとしては
1への対処:(C->Sに要求を出したと仮定)
サーバでrecvの戻りが-1だった時はNGを応答する。
クライアントはそのNG応答を正しく受け取った場合、送りたかった要求を再送。
正しく受け取れなかった(recvが-1を返した)場合はやっぱり要求を投げなおす。
2への対処:
サーバやクライアントが遅れて到着したものを受けて誤動作しないよう、TCPの上の
層(アプリ)でシーケンス番号を割り振ってチェックする。おかしいのははじく。
といったところでしょうか。(うーん。なんかまちがってそう)
0717デフォルトの名無しさん
NGNG> 2への対処:
> サーバやクライアントが遅れて到着したものを受けて誤動作しないよう、TCPの上の
> 層(アプリ)でシーケンス番号を割り振ってチェックする。おかしいのははじく。
補足:
TCPソケットはストリームなので同一ソケット中でデータが前後することはない。
ありえるのは複数のソケットに書き込みしたとき、順番通りに到着するとは限らないってこと。
0718デフォルトの名無しさん
NGNG> (うーん。なんかまちがってそう)
全然ダメです。>>1のFAQから勉強し直しです。
0719デフォルトの名無しさん
NGNG>1 電文が喪失した場合はTCPが再送してくれるが届かないこともある。
この曖昧な書き方、やっぱり解ってないんじゃない?
TCPを使っているなら必ず届くまで再送してくれる。
もしいつまでも届かない場合があったならば、それはTCPの問題ではなくネットワークの問題。
途中でADSL回線がぶちきれたとか、ケーブルが抜けおちたとかさ。
このときTCPが異常を発見できれば、発見した方(またはsend、recvの両方)で-1が返る。
0720デフォルトの名無しさん
NGNG0721デフォルトの名無しさん
NGNG>もしいつまでも届かない場合があったならば、それはTCPの問題ではなくネットワークの問題。
という表現も曖昧じゃない? はっきりとTCPタイムアウトについて説明した
方がいいと思う。
0722デフォルトの名無しさん
NGNGスルーされてしまったのと、こちらのスレで聞くほうが適切だと思ったので再度質問させてください。
WinSockでWSAAsyncSelectを使い
イベント受信で処理するサーバープログラムを組んでるんですが
複数の接続がある場合、個々の接続に対応するにはどうすれば良いのでしょうか?
その時のsocketにそのまま返せばOKですか?
0723デフォルトの名無しさん
NGNGマルチ氏ね。
しかも、>1や過去ログも読めないのかよ。二回ほど氏ね。
0724デフォルトの名無しさん
NGNGsend() が失敗して recv() に -1 が返ってくるのはかなーーーーり遅いので
何も返って来ないと勘違いしてるだけでは? 10分以上掛かるんじゃないかな。
>>719
send() が失敗したときに send() にエラーが返って来ましたっけ?
0725デフォルトの名無しさん
NGNGFD_ACCEPT が来たら accept() すれば良いだけでわ?
でソケットを取得したら、FD_READ, FD_WRITE で WSAAsyncSelect() にぶち込むか
スレッドでも作れば?
0726デフォルトの名無しさん
NGNG返すデータもIPアドレスなので、少量なのですが
UDPの方が良いかな?と迷ってるのですがどうなんでしょうか?
一応数万の問い合わせが有るシステムなのですが・・・・
ただ、問い合わせにあまり失敗されてレスポンス悪くなっても困るんでTCPにすべきなのか迷ってます。
助言お願いします。
0727デフォルトの名無しさん
NGNG0728デフォルトの名無しさん
NGNG0729726
NGNGう〜ん、実はHTTPでやった方が楽と言う気も確かにして来ました。
もう少し考えて見ます。
どうもありがとうございました。
0730デフォルトの名無しさん
NGNG0731デフォルトの名無しさん
NGNGつか商用サイトか?だったら2ちゃんなんかで相談するのは間違ってるぞ。
0732726
NGNGそれらが同時に問い合わせする事は考えにくいです。
0733デフォルトの名無しさん
NGNG0734デフォルトの名無しさん
NGNGと
>>732
で言ってることが全然違うのに笑った
0736デフォルトの名無しさん
NGNG0737デフォルトの名無しさん
NGNGUDPの方が高速で軽いから
DNSのような少量のデータで、特に信頼性もいらないような通信だと好都合
0738デフォルトの名無しさん
NGNG理不尽だと思うw
中身より高価な財布を持つくらい不毛
0739デフォルトの名無しさん
NGNG0740デフォルトの名無しさん
NGNGDNSもネームサーバ間のブロック転送だかでデータ量が多くなると
TCP使うんじゃなかったっけか。
0741デフォルトの名無しさん
NGNG0742デフォルトの名無しさん
NGNG0743デフォルトの名無しさん
NGNGnyをブロッキングでやってたらどれだけThread作らねばならん事やらw
ログみりゃ分かるけど、あれを全て独立したThreadでやってたらシステム�dじまうぞ
0744デフォルトの名無しさん
NGNGとりあえず一通りできて、パフォーマンスやばかったら考えよう。。
0745デフォルトの名無しさん
NGNGとりあえず動くまではそれでいいと思うYO!
0746デフォルトの名無しさん
NGNG0747デフォルトの名無しさん
NGNG0748デフォルトの名無しさん
NGNGソケット+マルチスレッドな簡単なサーバソフトを作りたいのですが、以下のところでつまっています。
わかる人、助言ください。
環境はSolarisです。
途中はちょっと省きます。
main{
socket作成
bind
listen
while(1){
/*アクセプト*/
sock2=accept(XXX);
/*スレッドへ処理を移行*/
pthread_create( NULL,NULL,func, sock2);
/*ソケットをクローズして待ち状態にする*/
close(socket);
}
}
void func(socketの型 sock){
sockを用いた処理
exit(0);
}
で、スレッドへ移行して、処理をさせる場合、acceptで取得したsock2をどう渡したらいいかわかりません。
また、このとき、スレッドを何個も処理させるためにはどうしたらいいのでしょう?
よろしくおねがいします。
0749デフォルトの名無しさん
NGNG0750デフォルトの名無しさん
NGNG>>736
domain 53/tcp nameserver # name-domain server
domain 53/udp nameserver
TCP使いたければどうぞ。
0751デフォルトの名無しさん
NGNGソケットプログラミングって、初めはコンソールで作ると簡単だ とどの入門書にも書いてるが
WindowアプリでWSAAsyncSelect()でイベント駆動にした方が簡単ジャン
って思うんだが・・・・
0752デフォルトの名無しさん
NGNG0753デフォルトの名無しさん
NGNG違うようなら板またはスレッドを教えてください。
ttp://netbula.com/oncrpc/
0754デフォルトの名無しさん
NGNG0755748
NGNGレスありがとう。
pthread_create( pthread_id* ,pthread_attr_t*,void* func(void *),void* arg);
pthread_createの4番目の引数は void *argで定義されているため、
値渡しができないと思うのですが。
で、下のはポインタの間違いでした。
void func(socketの型 *sock){
sockを用いた処理
exit(0);
}
sockをポインタで渡すと、呼び出されたfuncの中で値をコピーする必要がある
と思うのです。しかし、スレッドで呼ばれているので、次の瞬間には、別のアクセスが
来て、コピーする前にsockの中味が変更してしまう可能性があると思うんです。
また、acceptで取得したsockに伴うsockaddr_in構造体を渡してあげなければ、
funcの中でソケット通信ができないのではないでしょうか?
このようなとき、マルチスレッドでソケット通信した場合、スレッドはいくつくらいまで
同時に処理できるでしょうか?
(listenで用意した数よりも多くできますか?)
よろしくお願いします。
0756デフォルトの名無しさん
NGNGintをポインタにキャストして渡す。
#ある入門サイトを見るとそうやっているんだよなぁ・・・
0757デフォルトの名無しさん
NGNGどんと来いや。
0758デフォルトの名無しさん
NGNG> intをポインタにキャストして渡す。
そうすると、ANSI C的にはお行儀が悪いので、(多くの処理系では無問題)
intの値をメモリ上に持ってそのアドレスを渡す。
0759デフォルトの名無しさん
NGNG> sockをポインタで渡すと、呼び出されたfuncの中で値をコピーする必要がある
> と思うのです。しかし、スレッドで呼ばれているので、次の瞬間には、別のアクセスが
> 来て、コピーする前にsockの中味が変更してしまう可能性があると思うんです。
What is "sockの中味"?
> また、acceptで取得したsockに伴うsockaddr_in構造体を渡してあげなければ、
> funcの中でソケット通信ができないのではないでしょうか?
違います。OSのカーネルについてかなり誤解があります。
カーネルは単なるライブラリじゃないです。
とにかく、
pthread_create( NULL,NULL,func, &sock2);
void func(int *sockp){
*sockpを使った処理
exit(0);
}
をやってみろ。とにかく
0760デフォルトの名無しさん
NGNG受け取った側で中身取り出したあと、free
>>755
おまいはスレッドの勉強と
ソケットの勉強を
別々にもうちょっとやりなされ
0761755
NGNGとりあえず、コンパイルして実行してみます。
0762デフォルトの名無しさん
NGNGローカルマシンでサーバアプリケーションを起動し、クライアントアプリケーションもローカルマシンで実行して接続するサーバアドレスを127.0.0.1にすると正しく動作するのですが、
LAN上のマシンでサーバを走らせ、LANのアドレスで接続すると、接続はうまくいきますが、127.0.0.1で実行したときと異なる結果になってしまいました。
このアプリケーションは、サーバの画面をキャプチャして、そのバイト配列をクライアントに送信するというものです。
127.0.0.1で実行するとしっかりとキャプチャ画像が送られてきました。
しかしLANアドレスでやるとクライアントが固まります。
おかしいなと思いデバッグしてみました。
すると、データの受信部(recv関数)でクライアントが永遠に待機状態になっていました。
バイト配列は途中まではちゃんと送信されていました。
サーバはデータの送信の終了を知らせるメッセージ"OWARI"を送ることになっているのですが、これが届いていません。
なぜ127.0.0.1ではうまくいくのでしょう。
問題のソースは次に張りますのでよろしくおねがいします。
0763デフォルトの名無しさん
NGNG/サーバ/
int BytesSent;
int bufLen = w*3*h;
BYTE* b ;//ビットマップのバイト配列
do
{
BytesSent = send(connectedSocket,(char*)b,bufLen,0);
b += BytesSent;
bufLen -= BytesSent;
}while(bufLen>0)
send(connectedSocket,"OWARI",strlen("OWARI"),0);
/クライアント/
BYTE* b//DIBのバイト配列へのポインタ;
int BytesRecv;
bool flag = true;
char bytes[1024+1];
ZeroMemory(bytes,1025);
while(flag)
{
BytesRecv = recv(soc,bits,1024,0); //←しばらく受信するとここでとまります
bits[BytesRecv]='\0';
string str=bytes;
if(str=="OWARI")
break;
memcpy(b,bytes,BytesRecv);
b += BytesRecv;
}
0764デフォルトの名無しさん
NGNG0765デフォルトの名無しさん
NGNG> BytesRecv = recv(soc,bits,1024,0); //←しばらく受信するとここでとまります
> bits[BytesRecv]='\0';
bits→bytesの誤りか?
> string str=bytes;
> if(str=="OWARI")
なぜ"OWARI"がバッファ先頭にあることを仮定しているのだ?
それからな、str=="OWARI"はないだろ? strcmpしろよ。
C言語の修行し直してからまた来なさい。
0766デフォルトの名無しさん
NGNG0767デフォルトの名無しさん
NGNG0768デフォルトの名無しさん
NGNG==でいいじゃん
0769デフォルトの名無しさん
NGNG0770753
NGNG・OS Windows2000 SP4 MS VC++6.0インストール済みのところに以下の手順で、ONC/RPC for Windowsを
インストールしました。
1)ttp://netbula.com/oncrpc/ より ONC/RPC for Windows V1.14.3のインストーラをDLし、
デフォルトでインストール。
2)コマンドプロンプトで以下を実行するとエラーメッセージが表示されます。
C:\oncrpc\test>..\bin\rpcgen cou.x
C:\oncrpc\bin\rpcgen.exe: unable to open cpp32: No such file or directory
rpcgen.EXEが CL.EXEを使用するということなので、環境変数PATHにVCのCL.EXEの存在する
ディレクトリを設定しています。
まだなにか設定が必要なのでしょうか?
0771762
NGNG結局、w h の文字列長を先に1バイトづつ送ってやってから、縦横のサイズをあらわすデータを受け取ることでズレを解消しました。
しかし、TCPは原始的で面白いですね。
0772デフォルトの名無しさん
NGNG0773デフォルトの名無しさん
NGNG0774デフォルトの名無しさん
NGNG0775デフォルトの名無しさん
NGNGONC/RPCとやらは使った事ないからよーわからんが、エラーメッセージ
に出てるcpp32.exeってBorland C++とかじゃないのか?
付属ドキュメントがあるなら隅々までよく読んでみろ。
0776753
NGNGありがとう。
付属ドキュメントないから、バイナリエディタで rpcgen.exe見てみたら、
Borland C++用に作られたものでした。
他のwin32用の添付バイナリもBorland C++で作成されてました。
しょうがないので付属ソース変更して VC用に作ります。
0777デフォルトの名無しさん
NGNG0778デフォルトの名無しさん
NGNGOS によってはある。
0779デフォルトの名無しさん
NGNG俺なんて糸電話だぜ!
パケロス・パケ化け激しすぎ
0780デフォルトの名無しさん
NGNG最近遠距離通信を自粛するようになっちまって
パケットが届かないんだよ。
0781デフォルトの名無しさん
NGNG0782デフォルトの名無しさん
NGNGどうも理解出来ないところで例外が発生してしまいます。
UDPのSOCKETを返すクラスを作成し
NET_SET *netset;
netset->UDP_SET(hWnd);
と言うコードをBOOL InitInstance()の中に書いたんですが・・・
メンバ関数を呼び出す所で例外が発生してしまいます。
0783782
NGNGSOCKET NET_SET::UDP_SET(HWND hWnd)
{
SOCKET listen_sock;
SOCKADDR_IN saServer;
int nReturnCode;
WSADATA wsaData;
WORD wVersionRequired = MAKEWORD(2,1);
/******************************************/
/**********WinSock DLLを初期化する************/
/******************************************/
nReturnCode = WSAStartup(wVersionRequired, &wsaData);
if (nReturnCode != 0 )
{
//エラー通知
return listen_sock;
}
//要求したバージョンを利用できるかどうか確認する
if (wsaData.wVersion != wVersionRequired)
{
//要求したバージョンを利用できない事を通知
WSACleanup();
return listen_sock;
}
/******************************************/
/**********WinSock DLLの初期化完了************/
/******************************************/
0784782
NGNG/*************SOCKETを作成する**************/
/******************************************/
listen_sock = socket(AF_INET, SOCK_DGRAM, 0);
if ( listen_sock == INVALID_SOCKET)
{
//エラー
WSACleanup();
return listen_sock;
}
/******************************************/
/*************SOCKETの作成完了**************/
/******************************************/
0785782
NGNG/*************非同期処理に指定***************/
/******************************************/
nReturnCode = WSAAsyncSelect(listen_sock, hWnd, SM_EVENT,
FD_CONNECT|FD_CLOSE|FD_READ|FD_WRITE
);
if ( nReturnCode == SOCKET_ERROR)
{
//エラー
closesocket(listen_sock);
WSACleanup();
return listen_sock;
}
saServer.sin_port = htons(IDS_PORT);
saServer.sin_family = AF_INET;
saServer.sin_addr.s_addr = INADDR_ANY;
if( bind(listen_sock, (LPSOCKADDR)&saServer, sizeof(struct sockaddr)) == SOCKET_ERROR)
{
closesocket(listen_sock);
WSACleanup();
return listen_sock;
}
return listen_sock;
}
以上です。
よろしくお願いします。
0786デフォルトの名無しさん
NGNG> どうも理解出来ないところで例外が発生してしまいます。
> メンバ関数を呼び出す所で例外が発生してしまいます。
0787デフォルトの名無しさん
NGNGNET_SET *netset; // ←
netset->UDP_SET(hWnd);
0788デフォルトの名無しさん
NGNG0789デフォルトの名無しさん
NGNGマ板で聞けよ
0790デフォルトの名無しさん
NGNG相手にするな&つまらん事でAGEるな
0791デフォルトの名無しさん
NGNGポインタ宣言だけして、いきなりメンバ関数を呼び出してるように見えてしまう。
0792デフォルトの名無しさん
NGNGってどれやねん。
0793デフォルトの名無しさん
NGNG>>788
0794デフォルトの名無しさん
NGNGあのメモリ保護違反の奴(メモリがreadに……)
NET_SET *netset; // ←
netset->UDP_SET(hWnd);
を見てそう思った。
0795デフォルトの名無しさん
NGNG0796デフォルトの名無しさん
NGNGどなたか情報理論に関するお勧めな本知ってたらおしえてください
すれ違いでごめんなさい
0797デフォルトの名無しさん
NGNGくだらねぇことでageるな
0798デフォルトの名無しさん
NGNGハミング符号化を行うとデータ量を1/3に出来る。
これを商品化に成功したのが花王。
0799デフォルトの名無しさん
NGNG本について聞いているんですよ。
0800デフォルトの名無しさん
NGNG0801796
NGNGはちがう人ですよ
0802デフォルトの名無しさん
NGNGどうでもいいけどスレ違い
0803796
NGNG0804デフォルトの名無しさん
NGNG自分の都合の良いように真実を書き変える非可逆圧縮方式。
0805デフォルトの名無しさん
NGNG「アドレス00000000に対する違反が起きました。」か?
0806デフォルトの名無しさん
NGNG0807デフォルトの名無しさん
NGNGqb系のサーバのコテハンみたいだけど、まじでウザい。
>>796
スレ違いの話題を延々続けるお前には理解不能かと思われ。
0808デフォルトの名無しさん
NGNGいずれにしろ駄コテ。相手にする価値なし。
0809デフォルトの名無しさん
NGNGこれを実装できた人いる?
0810デフォルトの名無しさん
NGNG0811デフォルトの名無しさん
NGNG0812デフォルトの名無しさん
NGNG環境:winsock 2.0 OS:windows2000
メッセージのFD_WRITEについてなんですが下の実装見てください。TCPを使ったネットワークゲームの根幹を作ってます。
スペースのため簡略化してあります。
class client
{
public:
vector<my_message> messages;
SOCKET sock;
void SendData(){};//messagesに溜まっているメッセージを1つづつ送信しては削除する
void AddMessage(my_message msg){messages.push_back(msg);}
};
vector<client> clients:
//switch
FD_WRITE:
for(int i=0;clients〜)clients[i].SendData();//WPARAMと同じソケットを持つプレイヤーオブジェクトをforで探して、データ送信メソッドを呼び出す
//送信するメッセージが無ければ何もしない。
//
こうやったときに、送るべきメッセージが無かった場合そのままsendせずに通過してしまうので、再びFD_WRITEが送られてくることは無いのだ、と私は考えています。
ということは、以後clientオブジェクトに送信すべきメッセージが追加されても、FD_WRITE通知は来ないのでforループでマッチせず、データ送信メソッドを呼び出せなくなります。
この実装方法だとやはり問題があるのでしょうか。
clientクラスにboolで送信可能かどうかを示す変数でも持っておいて、フレームをアップデートするときにその値を見て送信メソッドを呼び出すべきでしょうか?
その場合も何か問題はありますか?
0813kara
NGNG0814デフォルトの名無しさん
NGNGhttp://www.kt.rim.or.jp/~ksk/wskfaq-ja/intermediate.html#asyncreliable
0815デフォルトの名無しさん
NGNGなるほど。FD_WRITEは単なるメッセージなのですね。
わかりました。どうもありがとうございました。
0816デフォルトの名無しさん
NGNG確か、Window移動させたりすると、FD_ACCEPTとか応答関係全く動かなくなるんだよね?
0817デフォルトの名無しさん
NGNG非同期モードを使わない場合、各ソケットの送受信のためにスレッドを大量に作らなければならないと聞きました。
現在普及しているようなネットゲームのサーバでは同期モードを使うのが一般的なのでしょうか。
0818デフォルトの名無しさん
NGNGどこで聞いたんだよそんなデタラメ
0819817
NGNG>>25
>>32
>>33
>>34
>>37
私の読解力不足かもしれません。
でも今考えてみたら、1万もコネクションは無いんです。24〜300ぐらいを想定してます。
しかし、同期モードでやる場合、各ソケットごとにスレッドを作らないとsend recvで固まってしまいます。
300ぐらいならスレッド作っても大丈夫なんでしょうか。
0820817
NGNGブロッキングと非ブロッキング、同期と非同期は区別しろとよく見かけましたが、これがまさにそうだったんですね。
0821デフォルトの名無しさん
NGNG>>816の言うようにイベント駆動型だと、Window弄ってたりするとその間まったくnetwork関係のイベント発生させれないんだし
鯖の場合不向きのような・・・
0822デフォルトの名無しさん
NGNGネットワーク関係のイベントの方がずっと優先度が高いので
ネットワークイベントのメッセージがたくさん来ると
ボタンも押せないしWindowの移動も出来なくなるのだが。
だからサーバー動作向きというわけではないが。
0823デフォルトの名無しさん
NGNGADSL以上の回線のかちゅがまさにその状態ですね
0824デフォルトの名無しさん
NGNG>これを実装できた人いる?
できた人いたらサンプルソースキボヌ。
プロシージャ関数に、WSAconnectで指定されたデータを受け取れると思うのだが、
受け取れないので。
0825デフォルトの名無しさん
NGNGIOCPつかっちゃだめかな?
Win9x系だと動作するか妖しいけど…
沢山アクセプトしても自分で立てて設定した数のワーカースレッドで
全ての送受信の管理できるから便利だよ。
でもゲームで使って使いやすいかどうかはしらないけどねー。
0826デフォルトの名無しさん
NGNG0827デフォルトの名無しさん
NGNGselect()使えよselect() !
0828デフォルトの名無しさん
NGNGIOCPのサンプルコードのあるサイトないですか?
0829デフォルトの名無しさん
NGNG>825ではないが、
GetQueuedCompletionStatus, CreateIoCompletionPort
こいつら検索かければそれっぽいページがひっかかると思う。
俺は日本で見つからなかったから海外サイトからサンプルひろったよ。
まぁ、ゲームに適しているかは知らないけど、
Win2Kで沢山のソケットの送受信を管理したいなら、
スレッド300個起動よりはIOCPの方がスマートだとは思う。
0830デフォルトの名無しさん
NGNGhttp://www.filexc.com/indexj.html
や
Skype
http://www.skype.com/skype.ja.html
では、
「UPnP対応・未対応に関わらずどんなNAT/ファイアウォールがあっても接続できる」
「すべてのファイアウォール、NAT、およびルータに対応 ? コンフィギュレーションは一切不要!」
となっているのですが、このような技術はどのようにして実現されるのでしょうか?
ルータの設定等を行わなくても手軽にP2P通信できる技術に興味があるので知りたいです。
0831デフォルトの名無しさん
NGNGIDirectPlay8NATResolverと同じ考え方なんじゃない?
どっか外部サーバーにアドレスを登録させて、その情報を使ってUDPで通信って感じでさ
NAT or FW背後のクライアントだけで、相互接続させるのはさすがに無理だと思うよ。
0832デフォルトの名無しさん
NGNGさすがに、最初に接続をコーディネイトするサーバは必要。
コーディネイト後は、両者にUDPに暗黙の穴を空けて、直接P2P通信。
0833デフォルトの名無しさん
NGNGレスありがとうございます
アドレスを管理するサーバが必要なのは納得できるのですが、
UDPで暗黙の穴をあけるというのは、どのような手法でしょうか?
ルータの外からはUDPもたいてい遮断されると思うのですが、
特別な方法があるのでしょうか?
0834デフォルトの名無しさん
NGNGUDP hole punching
0835デフォルトの名無しさん
NGNG833じゃないけど
その技術前々からやりたいな と思ってたんですが・・・・
良い資料ないですかね?
少しWinsockのUDPでの通信プログラムを実装出来る程度の技術では無理でしょうか?
もっと低レベルの部分弄らないといけないのかな・・・
0836デフォルトの名無しさん
NGNGポート0同士の場合
AとBと鯖のSがあったとする。
Aがポート51(仮想上のポート)からSのポート50へ送信
BがAのポート51へ送信すると、Aのポート50に何故か送信できるってわけ。
実装は簡単でしょ?
0837830
NGNGUDP Hole Punching に関して調べてみたところ、
http://www.nanog.org/mtg-0402/pdf/francis.pdf
↑こんな資料を見つけたのですが、
〜資料内の語句を使います〜
Bob が ApplicationServer(AS) にパケットを送ったときのポートと、
Bob が Steve にパケットを送ったときのポートが同じでないと届かないような気がするのですが、
合っていますか?
0838830
NGNG>>836
Aのポート50というのが何のことかと、仮想上のポート51というのがよく分からないです。
よろしければ、詳しい解説お願いします。
0839830
NGNG>>836 さんの例と似ていたものを見つけました↓
http://www.ht.sfc.keio.ac.jp/~suno/term/2003s/sunet.ppt
この方法だと、ConeNAT 以外の状況では無理だと思うのですが、
解決する方法はあるんでしょうか?
0840828
NGNGありがとうございます。
>スレッド300個起動よりはIOCPの方がスマートだとは思う。
select() で 500ソケット管理するアプリを作った漏れはアフォですか?
0841デフォルトの名無しさん
NGNGこれってパケット来なくてもCPU100%使っちゃわない?
待ち時間長めにとるとレスポンス悪くなるし。
0842デフォルトの名無しさん
NGNGスレッド300個は300が同時に処理できる代わりに、ススループットも分割されるでしょ。
IOCPはスループットを確保できる代わりに処理が始まるまでの遅延がおこる場合も考えられるし。
まあ通信相手から見たら同じことかもしれんな。
0843デフォルトの名無しさん
NGNG0844デフォルトの名無しさん
NGNG待機中にCPUを食ってるってことは無いですが。
>>842
スレッド300個が同時に動くとメモリとCPUの取り合いが起きて
スループットが予測出来ませんよね。
0845デフォルトの名無しさん
NGNG何で同じ議論が何回もループすんだか・・・┐(´д`)┌
スレッドはスタックとコンテキストスイッチのオーバーヘッドを生む。
select()系だけだと検査に無駄なオーバーヘッドを生む。
0846デフォルトの名無しさん
NGNG0847デフォルトの名無しさん
NGNG最後の感想にワロタ
0848デフォルトの名無しさん
NGNG非同期API使っとけ
0849デフォルトの名無しさん
NGNG0850デフォルトの名無しさん
NGNGselect()ってそんなにオーバヘッドあるの?
0851デフォルトの名無しさん
NGNG> select()系だけだと検査に無駄なオーバーヘッドを生む。
selectだと検査に無駄なオーバーヘッドを生む。
poll,kqueueだと検査のオーバーヘッドは少ないが、マルチスレッドと違い並行性が稼げない。
0852デフォルトの名無しさん
NGNG本質的な性能の悪さは解決されない。
0853デフォルトの名無しさん
NGNG>>852でまた単純化逆戻りするのは何故なのだ?
>>3
> C10K ヘヴィーロードサーバ
> http://www.kegel.com/c10k.html
読んだことない人?
0855デフォルトの名無しさん
NGNGkqueueをpollと一緒くたにされたら、BSD方面の方々が怒るんじゃないの?
epollや/dev/pollと一緒にするならともかく。
kqueue, /dev/poll, epoll に比べたら、pollもselectも50歩100歩だと思う。
0856845
NGNG細かいとこは突っ込まないでくれ・・・Σ(´�D`lll)
1スレッドでpollingでやってたらリクエスト処理(ディスクI/Oとか)の間は
他の接続の相手できないから、結局はどっかで並行性の問題が生じる。
(OSが適当にスレッドプールして割り当ててくれるんなら話は別)
かといって、大量のリクエストを処理するのに全てスレッドで実装していては
ネットワーク以外のオーバーヘッドが大きすぎるし、最大数が狭められる。
ようするに、単独の手法でやるより、複数組み合わせた方が
スケーラビリティ的にはいいだろう、ってこと。
その分実装は複雑になるから、費用対効果ってとこでしょう。
0857デフォルトの名無しさん
NGNGそれが前提の上で、
select系と一色端にするほど性能が同じじゃないって言ってじゃないの?
http://monkey.org/~provos/libevent/libevent-benchmark.jpg
0858デフォルトの名無しさん
NGNGあ、想定してるのはMMORPGの鯖ね。
ゲームフレーム単位で動作させるから、非同期とかせずこれでいいかなと。
0859デフォルトの名無しさん
NGNGWinsockで
recv()の戻り値って
0またはSOCKET_ERROR(-1)ですよね?
正常受信判定で
if(recv(sock, buf,10000, 0)>0){
こんなコード書いてるサンプルをみたんですが・・・
これだと、判定に使えないような。。。
0860デフォルトの名無しさん
NGNGマニュアルを見直そう(^o^)
0861デフォルトの名無しさん
NGNG正常に受信してるなら受け取ったバイト数が返ってくる。
MSDNLibraryにも
----------
If no error occurs, recv returns the number of bytes received.
If the connection has been gracefully closed, the return value is zero.
Otherwise, a value of SOCKET_ERROR is returned, and a specific error code can be retrieved by calling WSAGetLastError.
----------
と書いてあるが?
0862デフォルトの名無しさん
NGNG受信したバイト数をどうやって知るんだ(笑)
0863862
NGNG0865859
NGNGなるほど、、そういう事だったんですか!
どうもありがとうございました!!
0866デフォルトの名無しさん
NGNG『Winsock2.0プログラミング』には
「recv()の戻り値は0またはSOCKET_ERROR(-1)」
って書いてあるの?
0867デフォルトの名無しさん
NGNGまあ、UDPかつblockingだとパケットは丸ごと読めて、
なおかつ中身見れば終端が分かる時は必要ないから、
あの断片だけでは問題があるかどうか分からなくはないかな?
0869デフォルトの名無しさん
NGNGhttp://www.linux.or.jp/JM/#search
0870デフォルトの名無しさん
NGNGほんとに?「エラーの戻り値は」とかじゃないの?
>>657でお勧めに挙げられてるけど、嘘っぱちか?
0871デフォルトの名無しさん
NGNG戻り値
0またはSOCKET_ERROR。
って書かれてるね。
0872デフォルトの名無しさん
NGNG0873デフォルトの名無しさん
NGNGありがとう。
>>868
疑ってすまんかった。
0874デフォルトの名無しさん
NGNG誰も訂正しないのかな(笑)
0875デフォルトの名無しさん
NGNG>(OSが適当にスレッドプールして割り当ててくれるんなら話は別)
これをやってくれるのがIOCPだと解釈してるんだけど違うのかな…
スレッドプールでスレッド10個立てて、動いていいのは5個までと設定しておけば、
送受信の結果を受け取ると動いているスレッドが5個になるよう調節してくれる。
5個全部埋ってる所に新しい完了の通知がきたら、
既に仕事をしているスレッドがまた通知待ち状態に戻るか、
ブロッキング関数で停止してる状態になったスレッドが発生すると、
その時動いているスレッドの数が5個になるようプールから1つスレッドが動き始める。
一時的に動いているスレッドが6個以上になる事もあるけど、
通知待ちの所でまた5個になるよう調節される。
15スレッドで1スレッド毎に20個のソケットを処理させるって感じではないが、
スレッドプールの数を30辺り、アクティブスレッド数15で設定して、
300個のソケット管理をIOCPに放り込めば同じ事ではないのかなと思うんだけど…。
ちなみにMS御推奨のIOCP使用時のプールとアクティブスレの数は、
プール=プロセッサの数x2 アクティブ=プロセッサの数だったかな…。
アクティブの方をプロセッサの数以上にするとスレッドコンテキストの切り替えで
無駄な時間を取られるのでお勧めしないとか書いてあったと思いました。
でも、動けばいいじゃん、そん位さ、とか思ったり。
0876デフォルトの名無しさん
NGNG俺は>836ではないが…
ClientA,BとそいつらがA',B'っていうルーターを使ってたとして、
AやBがSとのパケのやり取りでA',B'に開けた動的NATの情報を鯖経由で交換して、
お互いその穴へ向けてパケット送ればNATの壁を越えてUDPの送受信が可能という事では?
動的NATって送信先が変わったら設定変わらないの?とかいう質問はカンベンな。
貼ってあるURLの資料みてこういう意味かって思っただけでNATがどうとかは詳しくないからさ。
0877デフォルトの名無しさん
NGNGその仕様って有る意味怖いよな。
セキュホになるじゃん。。。
0878830
NGNGいろいろ勘違いしてたこともありましたが、試してみたところ、
いくつかの環境では送信先変わってもルータのポートは変わらず、
UDPの送受信が可能でした。
他の環境ではどうなるかわかりませんが、
さらにいろいろ調べてみようと思います。
0879デフォルトの名無しさん
NGNGISPのNATがそんな簡単に貫通するとは思えないけど・・・
0880デフォルトの名無しさん
NGNG>プール=プロセッサの数x2 アクティブ=プロセッサの数
1CPUだとアクティブスレッドが1?
シングルスレッド鯖と何処が違うの?
0881デフォルトの名無しさん
NGNGおいおい
0882デフォルトの名無しさん
NGNG0883デフォルトの名無しさん
NGNG0884デフォルトの名無しさん
NGNGつまりちゃんとした自社製品を買(ry
0885デフォルトの名無しさん
NGNGスレッドプールから起動されるスレッド数の上限と、
>>875の文章ならそう解釈するるのが妥当だろな。
アクティブスレッドの数がプロセッサ数を越えるとコンテキストの書き換えが…
って書いてあるし。
つかMSのサイトに書いてあるっていうから見に行けばいいんだろうが、
>>875も気を利かせてURL位張ってくれればいいものを…
暇だから自分で探してみますかね。
0886デフォルトの名無しさん
NGNG言語:MSVC++6.0
LANで結ばれている別のマシンに登録されているサービスの起動/停止を
行うためのAPIはありますか? また、APIがない場合何らかのコマンドで
実行することは可能ですか?
0887デフォルトの名無しさん
NGNG0888デフォルトの名無しさん
NGNGWindows版に行け。
0889デフォルトの名無しさん
NGNGあれから、サーバとクライアントの間でアカウントとパスワードで認証して、サーバがプレイヤの位置情報を送信し、受け取った位置をクライアントの3D空間の視点とするシステムを作りました。
クライアントはキーUpDown情報をサーバに送信し、サーバは受け取ったキー情報からプレイヤの位置を計算します。
サーバは1フレーム計算するごとに全プレイヤの位置を全クライアントに送信します。
すると、1秒間に2回ぐらいしか位置情報が届かず画面がカクカクになってしまいました。
どのように改善すればよいのでしょう。
要約は次のようになります。
0890デフォルトの名無しさん
NGNGServer::NextFrame()
{
//位置情報メッセージを生成して渡す
for(i){
for(j){
Message msg;
msg.vec = client[j] -> GetPos();
msg.type = MSG_POSITION;
client[i]->AddMessage(msg);
}
}
//各クライアントオブジェクトに溜まっているメッセージをすべて送信
for() client[i]->SendData();
//メッセージが来ていたらすべて受信
for() client[i]->RecvData();
ProcessMessage();//受け取ったメッセージの解析 ここでKEY情報を解釈してプレイヤーの位置を変更
}
0891デフォルトの名無しさん
NGNGif(GetKeyState(VK_UP)<0){
Message msg;
msg.type = MSG_KEY;
msg.data = VK_UP;
this->AddMessage(msg);
}
Send();//たまっているメッセージを送信
Recv();//到着するメッセージを受信
ProcessMessage();//メッセージを解釈。ここでサーバから来る位置情報を解析して、自分の位置を設定。
BeginDraw();
EndDraw();
Show();
}
0892デフォルトの名無しさん
NGNG0893デフォルトの名無しさん
NGNG>サーバとクライアントの間でアカウントとパスワードで認証して
まさかアカウントとパスワードそのまま送ってないだろうな。
>1秒間に2回ぐらいしか位置情報が届かず画面がカクカクになってしまいました。
さすがにそれは遅すぎ。コード見てないからわからないけどもう少し改善できるだろ。
でも改善は出来るけど遅延の完全な解決は不可能。位置情報以外にも移動する方向を送って
次の位置情報が届くまでは直前の方向に動き続けてつじつまを合わせるようなごまかしを実装すればいい。
0894デフォルトの名無しさん
NGNGつーかそれじゃ判らなさすぎ。
本当に通信部分が問題でここに来たんだろうね?
描画周りを全てOFFにしても速度は変わらないとか、サーバと実行機は別なのかとか情報が必要かと。
812の内容ってことはFD_WRITEとか使ってんの?
それならメッセージ周りの基礎処理はちゃんと出来てる?とか。
0895デフォルトの名無しさん
NGNG・通信部分は結局どういう形で実装したか
・通信部分がカクカクの原因だと思った理由
まずはこれを書いてみよ
原因考えたら通信部分に問題ないなら他スレへGO
後接続クライアント数もあった方がいいかも
例にクライアント1つ繋げてそうなったとかだと笑うに笑えない
0896デフォルトの名無しさん
NGNG毎フレーム座標データ交換できないんだからカクカク二なるのは当然。
0897デフォルトの名無しさん
NGNG0898812
NGNGどういうことかといいますと、サーバ側でfloatで送っていたデータをクライアント側でintにして座標に代入していました。
これによって小数点以下が切り捨てられて、間のフレームが落ちたように見えたのです。
クライアントを修正すると、ばっちりスムーズに300フレームで動いています。
相談に乗ってくださった方々、どうもありがとうございました。
これに懲りずに、また詰まった時はお願いします。
0899デフォルトの名無しさん
NGNG0900デフォルトの名無しさん
NGNG次はTCPで「一対多」のゲームでも作ってみたいと考えています。
しかしプログラミング自体かなり素人なため
どうしてよいものかさっぱり分らず、アマゾンで色々物色していた所、
「雪田修一 著 UNIX ネットワークプログラミング入門」
という本を発見しました。
これってVC++とかWinSockとかを使いたい、
しかもド素人の私のようなものが買って大丈夫でしょうか。
持っている人がいたら内容とかどんな感じか教えて欲しいです。
「TCP/IPによるネットワーク構築III WinsockVer」も買ってみたものの、
難しくてよく分からなかった、、、というレベルです。
0901デフォルトの名無しさん
NGNG>>657
0902デフォルトの名無しさん
NGNG送信元のポートとアドレスを知りたいのです
5つめの引数をどうすれば得られるんでしょうか?
0903デフォルトの名無しさん
NGNGこんな感じで使ってる
struct sockaddr_in fromAddr;
recvfrom(・・・(struct sockaddr *)&fromAddr,&fromAddrLen);
printf("recvfrom %s:%d",inet_ntoa(fromAddr.sin_addr),ntohs(fromAddr.sin_port));
0904デフォルトの名無しさん
NGNGTHX!です。
なるほど、sockaddr_inを使うんですか
どうもありがとうございました。
0905デフォルトの名無しさん
NGNG全然大丈夫じゃないよ。
それはUNIXの本であって、Winsockは扱ってないよ。
内容自体は良いので、きちんとWinsockの関数に読み替えられる
スキルがあれば問題ないけどね。
0907デフォルトの名無しさん
NGNG送れると考えてしまっていいですか?
getsockoptしないで
0908デフォルトの名無しさん
NGNG0909デフォルトの名無しさん
NGNG0910デフォルトの名無しさん
NGNG0911デフォルトの名無しさん
NGNG0912デフォルトの名無しさん
NGNG0913デフォルトの名無しさん
NGNGこの値は意味ないんですか?
0914デフォルトの名無しさん
NGNG1.5kというのは分割されずに遅れる最大サイズということで
0915デフォルトの名無しさん
NGNG1.5Kってイーサパケットのサイズじゃなかったっけ?
何かで570前後のサイズがIP向けだったと記憶してたが自信ないな・・・
0916デフォルトの名無しさん
NGNGイーサネットのフレーム長(最大)が1500バイト。
イーサネットフレームの内ヘッダ14バイト、IPヘッダ20バイト。
UDPヘッダは8バイトだっけか。
残りがデータの最大値。
接続形態によっては、たとえばPPP/PPPoEヘッダ等で、もうちょっと減るけどな。
0917デフォルトの名無しさん
NGNG0918デフォルトの名無しさん
NGNGIPレベルでは500バイトや1500バイトに分割されて送られる、
って感じですか。
0919デフォルトの名無しさん
NGNG0920デフォルトの名無しさん
NGNGttp://www.atmarkit.co.jp/fnetwork/rensai/eth03/ether3_3.gif
etherは
64〜1518です。
1500というのはデータ部の最大です。
この値はプリアンブルは含みません。
0921デフォルトの名無しさん
NGNGselect(...);
for(int i = 0 ; i < clientnum ; i++)
{
if(FD_ISSET(clientsock[i], &fdread))
{
}
if(FD_ISSET(clientsock[i], &fdwrite)
{
}
}
のようなサンプルを見ました。
selectベースだと送信するときもselectで書き込めるかどうかをチェックしないといけないのですか?
上記ソースのようにしないで別のスレッドとかでsendしたらいけないのでしょうか?
0922デフォルトの名無しさん
NGNG別のスレッドにしてブロックされてもかまわないならOK。
0923デフォルトの名無しさん
NGNGありがとうございます。
0924デフォルトの名無しさん
NGNGそうか、プリアンブルもフレームのウチだったけか。
最小つーたのはイーサネットフレームではなくてIPの最小保証MTUのつもり。
今確かめたら576バイトのようだ。
0925その1
NGNGそれを全クライアントに送信するプログラム(要するにチャットです)を
作っているのですが、大まかな感じは以下のとおりです。
言語はC#ですが、多少簡略化して書きます。
プログラムはコンソールアプリケーションです。
メインスレッド
while (true) {
s = Console.ReadLine();
if (s == "quit")
break;
else {
quit以外は読み捨て
}
}
ネットワークスレッド
while (flag) {
ブロックせずにクライアントの接続をaccept
for (クライアントの数) {
select
s = recv
メッセージ処理(s);//この中で、sの解釈および各クライアントへのsendを行う。
}
}
0926その2
NGNGwhile(flag)内で固まってしまいました。そうなると、クライアントから
何を送っても反応がありません。
ところが不思議なことに、その状態で適当に何かを入力すると、
(つまりメインスレッド内のReadLine()内で処理が行われる?)
突然溜まっていたメッセージが怒涛の勢いで処理されて、再び
ネットワークスレッドが動き出します。
メインスレッドのReadLine()は、改行を打つまで戻ってこないメソッドですが、
単に1文字を打っただけでも、怒涛の勢いで動き出すので不思議です。
同じような現象に遭われた方、いらっしゃいますか?
要するに、一応各クライアントからのデータはサーバーに届いて
いるが処理されないままであり、何か文字を打ってReadLine()を
働かせた瞬間に、ネットワークのスレッドの固まりが解けて、届いていた
メッセージを怒涛の勢いで処理した感じなのです。
0927デフォルトの名無しさん
NGNG> select
selectの使い方を知らない?
0928その2
NGNGさっきそのことに気が付きました。selectは一気に判定したい
ソケットを放り込んむものですから、クライアント分回すのは
おかしい(というより非効率的)ですね。
0929その2
NGNG0930デフォルトの名無しさん
NGNGWinsock でサーバアプリを作った場合、Win2k Pro でも10クライアントまでなら
ライセンス的に問題ないですよね?
0931デフォルトの名無しさん
NGNGhspsock.dllを使って
sockputでPOST送信したいのだが、CGIが標準入力としてうけとる情報は
どこに書き込めばいいんですか?
0932デフォルトの名無しさん
NGNG「〜だ」と「〜です」のどちらかに統一してくれ。
0933デフォルトの名無しさん
NGNG0934デフォルトの名無しさん
NGNGCGIが標準入力としてうけとる情報は
いづくにか書き込めばよからむ。
0935デフォルトの名無しさん
NGNGそのライセンスってドメインやワークグループのサービスに関してだろ。
自前アプリに対しては治外法権だと思うが。
0936デフォルトの名無しさん
NGNG正直、気にした事がない。
プログラムというか、Windowsの利用規約とかに
詳しいスレに行って聞いた方がよさげな気もする。
0937デフォルトの名無しさん
NGNGWin2k 鯖の場合は、Windows 認証を利用しないアプリは治外法権なのですが。。
Apacheに対するMSKKの見解でこういうのがあります。
http://www.apache.jp/misc/windows.html
(1)Apacheは「インターネットの情報サービス」であるため、 EULAにおける
「インターネット情報サービス」に関する規定が適用される
(2)ApacheはEULAの「サーバーソフトウェア」に該当するため、
『サーバーソフトウェアとしては使用できない』旨の記述がある
OS(Windows 2000 Professional等)では使用できない
(3)EULAに『サーバーソフトウェアとしては使用できない』旨の記述のない
OS(Windows XP Professional等)でのApacheの使用は問題ないが、
「最大接続数」の制限によって端末10台以内からの利用に限られる。
(4)「インターネットの情報サービス」、「ファイルとプリンタの共有サービス」、
「リモートアクセス」サービスのいずれかの機能を利用するソフトウェア の
使用には同様の制限が適用される。
(1)(3)(4)項は良いとして、(2)項は Win2k pro の EULA の何処にも書いて無いんですけどね。
0938デフォルトの名無しさん
NGNGそれらしいスレが見つからないのです。
GPLのはあるけど。
0939デフォルトの名無しさん
NGNG0940デフォルトの名無しさん
NGNGここで少しだけど議論の対象になってる
http://pc2.2ch.net/test/read.cgi/gamedev/1072515100/
0941デフォルトの名無しさん
NGNG0942925,926
NGNG使ってみたんですが、状況は変わりません。
メインスレッドでReadLine()を刺激してやる(何かしら文字を入れる)と
突然動き出すのが意味不明ですが、気長に見てますのでもしご存知の
方がいらっしゃれば教えて下さい。
0943デフォルトの名無しさん
NGNGソース全部晒せ。それが早いぞ。
0944デフォルトの名無しさん
NGNG根本的にselect()の使い方を間違ってるような気がしますが。
Winsockのサンプルですが参考にしてみてください。
http://www.kt.rim.or.jp/~ksk/wskfaq-ja/examples/basics/select-server.cpp
0945930
NGNG接続制限を受けないと解釈するのが正しいようですね。
外 資 系 企 業 の 日 本 法 人 は 何 処 も ア フ ォ ば か り
これも正しい。w
0946925,926
NGNG>>944
selectをソケットごとにやるというのは明らかに本来の使い方ではないけども
それをやったとしても、非効率的だがそれがおかしい動作の原因にはならない
というのは甘いでしょうか。ただ、本来の使い方からはおかしい以上、もちろんそういう
やり方はやめるつもりです。
いずれにしても頂いたサンプルソースを見させていただいて、問題点を
もう少し切り分けてみて頑張ってみたいと思います。ありがとうございます。
0947デフォルトの名無しさん
NGNGどこで固まってるかは調べたの?
select(), recv() ?
0948デフォルトの名無しさん
NGNGselect() をソケットごとにやるのと recv() でブロックするのは同じでは?
つまり、select() するのは意味なーいじゃん。
0949930
NGNG0950デフォルトの名無しさん
NGNGチャットプログラムなんだよな。
ネットワークスレッドでのメッセージ処理のConsole.Print(だったけか)
あたりがメインスレッドのReadLineとケンカしてるんでねーの。
0951925,926
NGNG>>925からネットワーク担当のスレッドだけ持ってきたんですが、
while (flag) {
ブロックせずにクライアントの接続をaccept
for (クライアントの数) {
select(そのクライアント) ←今は取り合えずPollに変えました。
s = recv(そのクライアント)
メッセージ処理(s);//この中で、受け取ったメッセージを解釈し、全クライアントへメッセージをsendしています。
Console.WriteLine(処理したメッセージ)
}
Sleep(1);
}
このスレッド(whileループ内)のどこかで固まっていることは分かります。それでよく調べてみると、
メッセージ処理関数の中で処理されたメッセージは各クライアントにsendされているようです。
(「全ての」クライアントに正常にsendされたかはこれからの調査になるのですが…)。しかし
処理したメッセージを表示するはずの、次行のWriteLine()が動いていないので、もしかしたら
どれかのクライアントへのsendで停止している可能性があります。
でも、不思議なのはsendで停まっているのは理解できるのですが、何故その場合に、適当な
キーをポチッと押して、>>925のメインスレッドないのGetLine()を刺激すると、停止しているのが
何ごともなかったかのように動き出すのか、という部分なのです。
0952デフォルトの名無しさん
NGNG0953925,926
NGNGありがとうございます。私もその線は怪しいと思っています。
ReadLine()で待ちながら別スレッドで、様々なタイミングでWriteLine()が
何回も呼ばれるので、ちょっと不安があります。
ネットワークとは全く関係ないバグかもしれませんので、このスレで相談するのも
ちょっと気が引けたんですが・・・。ただ、メインスレッドでReadLine()を待ちながら、
ネットワーク担当スレッドで適宜、WriteLine()はしていますが、クライアントごとに
スレッドを作っているわけではないので、WriteLine()に関しては、同時に呼び出される
ことはなく、WriteLine()同士が被ることはありません。
0954925,926
NGNGC#(Winsock 2.0のラッパーでしょうか)で作成しているので、
標準入力のselectはできないんです。
こういうバグが一番難しいですね。なんせ数時間に1回ぐらいしか
起こらないので…。
レスをいっぱい使用してしまいすんません。
0955デフォルトの名無しさん
NGNGよく分からんけどWriteLine()は動いてるけどフラッシュされてないので
動いてないように見えてる、って可能性もあるし。
0956925,926
NGNGとても嫌な予感がしてきました……。
0957925,926
NGNG0958デフォルトの名無しさん
NGNG0959デフォルトの名無しさん
NGNG意図的な理由があるのでしょうか?
0960デフォルトの名無しさん
NGNG単に(4BSDの頃の)最初の設計がそうだっただけ。
確かにdstのsockaddrも欲しい時もあるが、dst別に分けたいなら
bindする時にアドレス別にbindしてsocketを必要なだけ作るのがセオリーだな。
0961デフォルトの名無しさん
NGNG宛先は自分だから知ってるはずだろ。
忘れたらgetsockname(2)でも使えや。
>>959
?
0963デフォルトの名無しさん
NGNGIP_RECVDSTADDR オプションを使えば、dest-addr が分かるよ。
IP_RECVDSTADDR オプションが有効になっている場合、
recvfrom(2) の完了時に帰されるアドレス構造体が、src-addr
ではなく、dest-addr になる。
>>960
どんなセオリーだよ、それ。dest-addr が欲しけりゃ
IP_RECVDSTADDR 使うだろ、ふつー。
0964839のpptの中の人
NGNG0965デフォルトの名無しさん
NGNG両方ほしい場合はどうするの?
0966デフォルトの名無しさん
NGNGIP_RECVDSTADDR なんてオプションしらなくて、
IP別に受信するならIP毎にソケット作ればいいやん?
と思いついちゃった俺は、無知な上にふつーじゃないんだな… orz
0967デフォルトの名無しさん
NGNG0968デフォルトの名無しさん
NGNG0969デフォルトの名無しさん
NGNG使える。
0970デフォルトの名無しさん
NGNGわーい、ドラえもんだー
0971デフォルトの名無しさん
NGNGプロセス間通信のプログラミングを行いたいのですが
別サーバ間でのプロセス間通信は可能なのでしょうか?
このスレで良いのかどうかわかりませんが・・・
スレ違いの場合は誘導していただけると有難いです。
0972デフォルトの名無しさん
NGNGSVR IPC に多くを求めてはいけません。
おとなしく、socket などを使いましょう。
0973デフォルトの名無しさん
NGNGudpで構造体を送りたいのですが
可能でしょうか?
そのまま構造体をまるまる送りたいんですが・・・・
0974デフォルトの名無しさん
NGNG可能と言えば可能
ただし、環境依存
同じコンパイラで同じ環境で受信しない限り、正しく受信できる保障は無い。
パックすればその問題は解決可能
VC++だと/Zpオプションとか・・・
あと、バイト順序を整える事
0975デフォルトの名無しさん
NGNG0976デフォルトの名無しさん
NGNG0977デフォルトの名無しさん
NGNG0978デフォルトの名無しさん
NGNG0979デフォルトの名無しさん
NGNGNET_SET.cpp:36: passing `int *' as argument 6 of `recvfr
int, int, sockaddr *, socklen_t *)' changes signedness
と言うエラーが出ます。
if( recvfrom(sock, buf, strlen(buf), 0, (struct sockaddr *)&from, &fromlen)<=0)
これに何か問題があるんでしょうか?
0980デフォルトの名無しさん
NGNG作ろうと思ったんですが
相手のサーバーに送るときはどのようにコマンドを
送ればいいのでしょうか?
解説サイトなどありませんでしょうか?
0981デフォルトの名無しさん
NGNGvc++なら#pragma packを使うと幸せになれる。
他の環境で同じ物があるかどうかはしらね。
0982デフォルトの名無しさん
NGNGfromlen って int ?
socklen_t って unsigned int・・・
0983デフォルトの名無しさん
NGNGTHXです
キャストして解決しました。
0984デフォルトの名無しさん
NGNG0985デフォルトの名無しさん
NGNG環境はWindowsです。
0986デフォルトの名無しさん
NGNG0987デフォルトの名無しさん
NGNGpthreadなりCreateThreadなり使ってください
0988デフォルトの名無しさん
NGNGRFC2821, 2822は一応読んでからにしてくれ。
0989デフォルトの名無しさん
NGNGSMTP コマンド
あたりでググればそれはもう沢山出てくると思うが。
0990デフォルトの名無しさん
NGNG0991デフォルトの名無しさん
NGNG0992デフォルトの名無しさん
NGNG0993デフォルトの名無しさん
NGNGみんなまともに答えてくれているが?
0994デフォルトの名無しさん
NGNGこうやるんじゃヴォケェ!
ネットワークプログラミング相談室 Port9
http://pc5.2ch.net/test/read.cgi/tech/1080658835/
0995socket 995
NGNG0996デフォルトの名無しさん
NGNG0997デフォルトの名無しさん
NGNG0998デフォルトの名無しさん
NGNG0999デフォルトの名無しさん
NGNG1000デフォルトの名無しさん
NGNG10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。