[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 03/27 11:55 / Filesize : 263 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



1 名前:ftp-data mailto:sage [2007/08/07(火) 01:47:35 ]
主にソケットに関しての質疑応答スレッドです。

Programming UNIX Socket FAQ (日本語訳)
 www.kt.rim.or.jp/~ksk/sock-faq/indexj.html
Winsock Programmer's FAQ (日本語訳)
 www.kt.rim.or.jp/~ksk/wskfaq-ja/

関連リンクは>>2-10辺り
足りなかったら適当に付け足してね

前スレ
ネットワークプログラミング相談室 Port19
pc10.2ch.net/test/read.cgi/tech/1159692799/

関連スレ
Java ネットワークプログラミング 【教えて!】
pc11.2ch.net/test/read.cgi/tech/1086238859/


751 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 19:07:13 ]
ある装置で、クライアントで接続するTCPポートxxxxxと、サーバーで接続するTCPポートxxxxx + 1があって
装置から接続先に送るものを、クライアントとして接続したポートで送信し、接続先から装置に対して受信
するものをサーバーとして接続したポートで受信する仕様で通信しているのですが。
種類と発生タイミングの違う複数のデータに対して同じポートで送受信しないといけません。
送信するデータは応答を返すのですが、送信するポートと別のポートで応答を受信するような感じです。
糞仕様にしか思えないのですが、こういうのもありなんでしょうか?


752 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 19:44:57 ]
SYNパケットはどんな目的で使われるものですか?

753 名前:デフォルトの名無しさん [2008/01/28(月) 19:46:26 ]
TCP3ウェイハンドシェイク

754 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 19:49:05 ]
>>751
日本語でおk

755 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 19:54:22 ]
>>751
読みづらい…。

756 名前:デフォルトの名無しさん [2008/01/28(月) 20:05:24 ]
とんでもなく勘違いしているのかもしれんが
Winsockってacceptで処理がとまりませんか?
どうしてもこれが気に入らないのですが、どうにかならないですか?

757 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 20:12:33 ]
ノンブロッキングにすれば止まらない

758 名前:デフォルトの名無しさん [2008/01/28(月) 20:20:17 ]
ありがとうございます!


759 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 20:44:28 ]
非同期にしても止まらない



760 名前:751 mailto:sage [2008/01/28(月) 21:40:17 ]
装置A→装置Bに(Aから見た)送信専用ソケットと、受信専用ソケットを2つ開いてデータのやりとりをする形式についてです。

@が装置Aから装置Bに送信するデータ
Aが装置Bから装置Aに送信するデータ

     装置A            装置B
ソケット1 ソケット2    ソケット1’  ソケット2’
| | @ | |
| +------------>| |
| | @の応答 | |
|<-------------------------------+
| | | |
| | A | |
|<-------------------------------+
| | Aの応答 | |
| +------------> |

データはいろいろな形式があって、それを送受信用ソケットでまとめて送る感じです。
Telnet, FTP 等のサービスを送受信用ソケットでやりとりするみたいなものは、どうなんだろうかと。。

761 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 21:40:54 ]
ごめんずれちゃった。。

762 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 22:50:37 ]
>>760
だれか解読ヨロシク。

763 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 22:53:03 ]
頭悪いPLC屋とか相手だと、TCP2コネクションで送受信回線が〜
とか言い出すな。

764 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 22:55:56 ]
俺は、これが気になる。

> Telnet, FTP 等のサービスを送受信用ソケットでやりとりする

なんか、すごいこと考えてそうな予感...








んなわけねーか。(w

765 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 22:58:00 ]
Winsockを使ってSYNパケットを送信する事は可能ですか?

766 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 23:04:10 ]
connect発行するんじゃなくて、生に「SYNだけ」送信する、
という話なら、おとなしくWinPCapとか入れて叩いた方がいいとおもう。

767 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 00:29:54 ]
とりあえず効率や生産性を無視して動くものを作ってみろと言いたい

768 名前:デフォルトの名無しさん [2008/01/29(火) 02:11:03 ]
sendで任意のホストに文字列を送信したいんですが どうも上手くいきません。
アクセプトしたときのsockaddrinのIPとポートを弄るだけでは駄目なんでしょうか?

どうすれば送れるのでしょうか

769 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 02:45:16 ]
いいからソース出せや



770 名前:デフォルトの名無しさん [2008/01/29(火) 03:03:22 ]
とりあえずhost1から来た文をhost1,2に返すような感じのコードで
あらかじめfrom2にhost2のIPポートを入れておいて

socket()
bind()
listen()
while(1)
{
switch(select())
case -1:エラー処理
case 0:タイムアウト
default:

accept( struct sockaddr * &from)

recv()
send()
if(fromがhost1の情報だったら){
from = from2
send()


771 名前:768 [2008/01/29(火) 03:09:06 ]
>>769
あ・・途中でShift Enterで書き込んじゃいましたゴメンナサイorz

コード的には>>770のような感じです。
後はクライアントが打ち込んだ文字列をそのままオウム返しするような感じです。

これで動かすとhost1で例えばAAABBBと打ち込むと
host2には届かずに、host1だけにAAABBBと帰ってきます。

次にCCCDDDと打ち込んだ時に
host1だけにもう一度AAABBBが帰ってきます。

次にEEEFFFと打ち込んだときに
host1だけにCCCDDDが帰ってきます。

何かhost2に届かないばかりかワンテンポ遅れる+ダブって帰ってきてしまいます。

772 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 04:10:18 ]
× 〜のような感じです
× 基本を無視
× 環境を書かない

773 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 05:14:02 ]
AAABBBが2度返ってくる時点で、どう見ても自分のコードのバグだろうに。


ところで、一番重要な、acceptの返り値はどうしてるんだい?

774 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 06:58:05 ]
tteいうか、
>from = from2
>send()

まさかこれで from2 のどこかのポートに何か送れると思ってる?

775 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 07:02:08 ]
768は、TCPの「コネクション」というものについてもう一度考え直すように。
acceptの戻りのソケットは、そのIP:port専用で、from_addrを
書き換えたからと言ってもどうにもならない。

776 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 16:30:55 ]
気になったんですが、
WinPCap等はどうやって作られているんですか?

777 名前:760 mailto:sage [2008/01/29(火) 16:50:24 ]
>>763
えーとPLC屋です。いわれてる通り、送信のみ、受信のみのコネクションをそれぞれもつ感じです。
Telnet, FTP というのは例えで、ネットワークの階層構造を考えたときに、トランスポート層のTCPとその上のサービスが
1:1じゃない実装になるのですが、ありなのかなと。

778 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 19:12:45 ]
ありもなにも、TCP2回線つかって、TCPをもう一段建て増しに
するような真似は止めとけとしか言いようがない。

779 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 23:49:48 ]
>>776
はいどーぞ、そういうときはドキュメント読んでね
ttp://dog.tele.jp/winpcap/html/main.html



780 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 02:01:22 ]
>>776
たんにドライバに渡されるEthernetパケットのコピーを横取りしてるだけ。

781 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 14:03:09 ]
TCPのTIME_WAIT状態に関してRFCでは2MSL時間とあり、OSの実装によって 30〜240 秒取られているのですが。


a.2MSLまたないで同じポートを使用した場合、ルーター等で貯めこんでいた以前のパ
 ケットを受信することで、シーケンスの順序がおかしくなりRSTフラグが飛び交う。
 なのでTIME_WAITは必要?
b.TIME_WAITはクライアント側に必要で、サーバー側は無視してよい。通信用とは別の
 Listen用ソケットを使用するとしても、通信用でTIME_WAITは無視してよい。
c.TIME_WAITと比較してごく短い間隔で接続を繰り返すアプリがあると、利用できないポ
 ートが増え続けいずれ通信できない状態になる。こういう時TIME_WAITは短くして良い?
 それともアプリが間違っている?
 

782 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 15:22:22 ]
>>781
TIME_WAIT は TCP パケットの順序解決を保証するもの。

同一 IP/port 同士が一度コネクションを切り、新たに
コネクションを貼ったときにネットワーク内に同じシー
ケンスIDが登場しないことを保証している(新旧のパケッ
トが混ざらないことを保証している)。

要するに世界中のネットワークから通信に使ったパケッ
トが消えてなくなるのに 2MSL 待てばまぁいいんじゃね?
ということ。

たとえば、サーバ側で過去 2MSL 間に接続した相手の
IP/port のリストをローカルな port 毎に管理していて、
接続要求に来たクライアントの IP/port がリスト内に
無ければ 2MSL 待たずに接続して良い(似たような話が
RFC にあったはず)。


783 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 19:15:06 ]
 アプリケーション層でプロトコルの設計、送受信処理の仕方を
勉強したいのですが、おすすめの書籍やサイトはないでしょうか?
やっぱり、RFCやオープンソースのコード読むのが一番?

784 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 19:53:01 ]
ミドルウェアの解説本読んでみたら?

785 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 01:41:45 ]
>>781
クライアントとかサーバとかじゃなくて、TIME_WAITは基本的に「先にcloseを発行」
したほうに生じる。んで、TIME_WAITが必要な理由は、教科書に書いてある通り。

a.TIME_WAITは必要だが、どの程度にするかは実装依存
b.最初に書いたとおり、クライアントかサーバは関係ない
c.アプリは間違っていない。TIME_WAIT時間を減らすか、HW資源を増やすかはアナタしだい

786 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 13:05:23 ]
>>783
ここはどうかな?

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

サンプルコードがあって解りやすかった。

787 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 13:06:19 ]
>>786
いい加減にしろ!

788 名前:デフォルトの名無しさん [2008/01/31(木) 21:09:16 ]
教えてください。
VC++ WinSock でサーバプログラムをしているのですが、複数クライアントからのデータ受信で難航しております。

仮に、サーバAがポート3000で待ちうけ状態の時、クライアントB及びCと接続、B、Cから同時にデータが送信された時、Aのrecvプロセスでデータがごちゃごちゃになります。
クライアントに対してのrecvはそれぞれスレッドで処理をしてるのですが、Bの受信イベントでCのデータも受信されてしまいます。

同一ポートでもacceptしたそれぞれのソケットで送受信できないのでしょうか?
考え方自体間違っていますか?
お願いいたします。



789 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 21:31:55 ]
>>788
>recvプロセスでデータがごちゃごちゃになります

ありえない動作だから、あなたのプログラムがバグってる。
acceptって書いてるし、たぶんTCPの話だよな?

ソースみせてみ。



790 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 21:36:41 ]
>Bの受信イベントでCのデータも受信されてしまいます。
TCPだろ、そんな訳あるか。acceptで戻ってきたソケットは、
そのピア専用になるに決まってるだろ。
あるいはひょっとして電波が届いたけど、acceptの戻りを上書きして、
スレッドB.CでどっちもソケットCを待ってるとかいうオチじゃないだろうな。

791 名前:788 mailto:sage [2008/01/31(木) 22:00:11 ]
はいTCPです。ざっとですが、こんな感じです。
通信ソケットはクラス化しています。
CServerSock{
  SOCKET m_Sock;
  recvfunc();
};
CServerSock SvSock[2];

AcceptFunc()
{
  int cnt = 0;
  while( 1 ){
    socket = accept(litensock,...);
    SvSock.m_Sock[cnt++] = socket; // B及びCのソケットを割り当て
    CreateThread(〜)で各m_Sock用のrecvスレッド(recvfunc)を生成。
  }
}

CServerSock::recvfunc()
{
  char buf[2048];
  while( 1 ){
    ret = recive( m_Sock, buf, len, 0 ); // このrecive後のbufの内容がB,Cごっちゃになります。
    if( ret == 0 || ret == SOCKET_ERROR ) break;
    ::SendMessage( m_hWnd, m_wMsg, (WPARAM)len, (LPARAM)buf ); 親ウインドウへ通知
  }
}
わかりずらいかもしれませんがよろしくお願いします。

792 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 22:08:22 ]
> CServerSock SvSock[2];
> SvSock.m_Sock[cnt++] = socket; // B及びCのソケットを割り当て

普通、コンパイルエラーになるだろ。
(そもそも、private なメンバ変数 m_Sock にアクセスできないし...。)

C++ じゃない、俺の知らない言語かも知れんが。

793 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 22:09:06 ]
あれ?
それってひょっとして、デバッガでブレークして確認したとかいわないよな?

794 名前:788 mailto:sage [2008/01/31(木) 22:12:51 ]
>>789 >>790
そうですよね。
基本的にBが送信A処理、Cが送信A処理の順番だときっちりBのスレッド、Cのスレッドで処理が行われるので・・・。
>>792
すいません。publicメンバです。書き忘れました。
>>793
ブレークとm_Sockの番号等で確認しましたが・・・。


795 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 22:18:33 ]
ネタだろこいつら
かまってほしいだけだよ

796 名前:788 mailto:sage [2008/01/31(木) 22:59:26 ]
>>795
残念ながらネタではないんですよ。

とりあえず、同一ポートでacceptした個々のSocketで送受信は問題なさそうなので、他でアホなことしてないかもう一度見直してみます。
すみません&ありがとうございました。


797 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 23:16:34 ]
AcceptFuncのwhileでSvSock.m_Sock[cnt++] = socketのようにせず、
CServerSockのコンストラクタでsocketを受け取るようにしてみては?
Socketの受け渡しが面倒だけど、オレはそうやって処理してる。


798 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 23:31:49 ]
>>794
> すいません。publicメンバです。書き忘れました。

public でも、

> SvSock.m_Sock[cnt++] = socket; // B及びCのソケットを割り当て

は通らんだろ。(SvSock[cnt++].m_Sock = socket; ならわかるが。)

ネタじゃないなら、情報細切れに出さずに、ソースをそのまま載せるなり、
どっかにアップしろよ。

799 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 10:56:19 ]
なにをもってごっちゃと判断してるの?



800 名前:781 mailto:sage [2008/02/01(金) 10:59:33 ]
>>782,785
なるほど、大変参考になりました。

ついでに、もう一つ質問・・
クライアント側で TIME-WAIT を発生させないようにする為、サーバー側は待ちうけ用の
listen ソケットを用意し、クライアント側から切断する時はサーバーに切断用の制御電文
を送信し、必ずサーバー側から Close を発行するのは大丈夫でしょうか?



801 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 12:12:48 ]
待ちうけ用のlistenソケットを用意って、すでにあるacceptしてるやつとは別に?なんのために?

802 名前:781 mailto:801 [2008/02/01(金) 12:37:36 ]
えーと、listen で待つソケットと accept したソケットが同一の場合の実装もあると考えて、そうではないという意味で書きました。

803 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 12:53:21 ]
そんなのあるのか?

804 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 18:23:08 ]
今、UPnPを使いポートマッピングを行うプログラムを組んでいるんですが、
はじめはポートマッピングに成功するんですが、突然成功しなくなります。
それについて、どういった理由が挙げられるでしょうか。

どなたかご教授下さい。

805 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 18:32:20 ]
>>791
>SvSock.m_Sock[cnt++] = socket; // B及びCのソケットを割り当て

cntはローカル変数なんだし、acceptされるたびに'SvSock.m_Sock[1]'
になるのでは?

806 名前:デフォルトの名無しさん mailto:age [2008/02/01(金) 18:57:24 ]
あげ

807 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 19:08:31 ]
ローカルだけど、while(1)でその関数抜けないならずっと生きてるんじゃないの。

808 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 19:18:41 ]
Winsockでhtmlファイルを1024パイトずつ取得し、
calloc等により動的に記憶域を確保
そこに全て入れてからURLを抽出する、
という方法を考えているんですが、

何か、良い方法はありますか?

809 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 19:21:17 ]
良い方法、というのは、たとえば、Perlでも使っとけ、みたいな話?



810 名前:デフォルトの名無しさん mailto:age [2008/02/01(金) 19:22:22 ]
>>807
確かによく見たらbreak処理が無いな。
え。無限ループって事は配列オーバーしないかい?
あと、Acceptfunc()が呼ばれるタイミングもいまいちわかんないね。FD_ACCEPT直下?

811 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 19:27:03 ]
それもスレッドから呼ばれるんじゃないの?知らないけど。
Main,Accept, 送受信スレッド連中、みたいな。

812 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 19:36:32 ]
>>809
効率の良い方法、です。

813 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 19:37:58 ]
マルチスレッド使ったことなす;・ω・)

ポートマッピングに詳しい人。
>>804をたのみます。

814 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 20:16:33 ]
>>800
サーバからCloseを発行して、クライアント側ではrecvで0が返ったことを
確認してcloseすればクライアントはTIME_WAITには入らないから大丈夫。

ただし正常系はそれでいいが、例えばサーバが無応答になった場合など、
クライアントから切断せざるをえない場合も発生するよ。

切断用の電文は、>>801のいうように切断したい接続上でやりとりすれば
いいと俺も思う。バイナリを大量に転送中で中断が難しいような場合だと、
転送用の接続と、コマンド用の接続を分けるというのも確かにやるけど(FTPみたいに)。

815 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 20:36:51 ]
>>804
理由はあまりに多すぎて、いちいちあげる気にならない。

パケットログか、ソースをアップしてくれ。

816 名前:デフォルトの名無しさん mailto:age [2008/02/01(金) 21:54:53 ]
>>815
プログラムはほぼ
www.bosuke.mine.nu/neta/upnp.shtml
を参考にしました。ってか、ここのサンプルでもあけられないです。

処理ではWANIPを取得する際に失敗するようです。
ちなみに、二重ルータなんですが、ルータのIPは192.168.xxx.1ではなかったです。
'1'の部分が百いくつだったはず…ここでミスってるんですかね?

ソースはサンプルプログラムのinvoke関数です。
XMLとかわかんないんであまりうまく調べられて無いような感じです。

817 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 22:19:14 ]
>>816
>'1'の部分が百いくつだったはず…ここでミスってるんですかね?

UPnPは、IPアドレス情報も含めてプロトコル上でやり取りして、自動設定してくれる。
だから、ここは関係ない(はず)。

818 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 22:22:00 ]
>>816
とりあえずinvoke関数の中のどこでエラーが返ってるかログしこむなりして、
調べれ。

819 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 22:22:05 ]
二重ルータ?



820 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 22:36:01 ]
>>817
なるほど

>>819
モデム(ルータ機能付き)>ルータ>★自分&他複数PC
________________>ルータ>複数PC

こんな感じです。

とりあえず、環境と離れるんで
invoke関数の調査は週明けにでもやります。

821 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 22:39:37 ]
UPnPはエラーならエラーコードがわかるはず

822 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 22:49:50 ]
>>820
ルータ(1)>ルータ(2)>設定を実行するPC

という環境であるとして、設定したいルータが「ルータ(1)」ならそもそも
できない可能性がある。UPnPはマルチキャストを使ってるのだが、
ルータ(2)がマルチキャストルータでないと、PCで発行した
マルチキャストパケットは、ルータ(2)を超えられない。
で、個人用の安価なルータがマルチキャストルータということは
まずない。

ルータ(2)がマルチキャストルータで、マルチキャストパケットが
ルータ(1)まで届いたとしても、同一ネットワークからじゃないと
UPnPのSOAPリクエストにたいして応答を返さないようなルータっ
ていうのは存在する。

でも、「出来るときと、出来ないときがある。」って書いてあるから、
ちがうのかもだが。

823 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 22:52:52 ]
あーそれからルータをこえてマルチキャストパケットを届けたいなら、
IGMPメッセージを発行する必要がある。これはUDPソケットに対して、
IGMP_JOINなどをAPI経由で発行する。

やってるかもしれんが。

824 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 22:53:50 ]
マルチキャストはルータ発見時しか使わないから、
そこをたとえば手動で設定すれば良いんじゃないかな。
ルータ1と2で同じポートを開けないとイケナイのがアレだけど。

825 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 23:03:41 ]
>>824
おまえアタマイイナ

826 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 23:05:02 ]
でもなーんか、UPnP使う意味がない気がしてきたな。。。w

827 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 23:09:02 ]
余談だが、これ気をつけろよ。

「Flashを悪用してUPnP経由でルータの設定を変更する攻撃は、これまでに報告
されたルータ攻撃方法に比べて何百倍も危険性が高いとSymantec。」
www.itmedia.co.jp/news/articles/0801/22/news075.html

828 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 13:09:07 ]
recvで1024ずつ一つのhtmlファイルを取得する場合
htmlファイル合計バイト分の記憶域を確保するためにはどうすればいいですかね?

829 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 13:20:50 ]
最初に1024バイトのバッファを用意してそこに書いていって、足りなくなったら
reallocすればいいやん。



830 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 13:48:07 ]
C++なもので

831 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 13:57:16 ]
>>827
それは
1 UPnPでルーターに穴をあける。
2 ルーターのWEB/IFをWAN側からアクセスする。
って事でいいのか?

832 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 14:08:07 ]
>>830
resizeとかreserveとか

833 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 14:11:19 ]
>>831
DNSサーバアドレス書き換えて、フィッシングサイトにとばすとかもできるんじゃね。

834 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 14:20:23 ]
>>833
残念ながら、UPnPにはDNSサーバーを設定するという機能はないのだよ。

835 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 14:43:42 ]
>>831ができれば書き換えられるんじゃね。

836 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 14:54:58 ]
char *buf;
buf = (char *)calloc(1024,sizeof(char));
で記憶域を確保して、
確保した領域の大きさを変更する場合をどのように判断したらよいですかね?

837 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 15:01:21 ]
>>836
ネットワークのスレじゃなくて、プログラミング初心者のとこで聞いてこいよ。

838 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 15:01:38 ]
日本語でお願いします。

839 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 15:05:36 ]
>>836
recvの返り値で読み込んだバイト数が分かるから、whileやforでカウントすれば?



840 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 22:42:55 ]
まぁreallocとか時間かかるから、ある程度大きいバイト数を1ブロックとして、
ブロックごとで領域を確保していった方がいいと思う。いちいちrecvの返り値分だけreallocしていくよりはね。
HTMLファイルだけが対象ならアレだけど・・・。

841 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 10:39:49 ]
ブロックごとに領域を確保していくっていうのがよくわかりません。

842 名前:デフォルトの名無しさん mailto:age [2008/02/03(日) 12:02:17 ]
age

843 名前:デフォルトの名無しさん mailto:age [2008/02/03(日) 12:10:08 ]
ガジェットの作り方?
www.nifty.com/labs/gadget/


844 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 12:42:26 ]
ブロックごとで領域を確保していく
コードで示して下さるとありがたいのですが、
駄目ですかね?

845 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 13:00:48 ]
Un*xのsendfileやWindowsのTransmitFileって効果が大きいですか?
boost::asio使おうと思ったんだけどsocketの完全なラッパーなのでsendfileが使えなくてどうしようかなと

846 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 13:04:55 ]
使われる環境で全然違うから、評価環境つくって測定しなきゃ意味ねー。

847 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 14:04:06 ]
Webダウンローダーの仕組みってどうなってるんですか?

htmlやjpg等の拡張子判別とか、html内のリンク抽出とか
重複I/O等使っているんでしょうか?

848 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 14:39:51 ]
一行目と二行目の違いに愕然とした

849 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 15:25:39 ]
もしかして wget の中身を知りたいの?




850 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 16:09:30 ]
ちまちま数バイトずつ確保していくよりも、
ドーンと確保して足りなくなったらまたドーンと確保するって事だろ。
コードを示してもらうほどでもない。あと、スレチになりつつある。

851 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 18:19:01 ]
>>844
ブロックごとでなくても良いから、一回自分で考えて作ってみたら
どうだろう?

852 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 21:15:39 ]
>>851 に一票

正解を探し回るより、とりあえず動くものを作る方がいろいろ理解できるよ。

そもそも、最近のマシンだと、ちまちまメモリー確保してもそれなりに動くし。

853 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 00:35:23 ]
てかメモリ確保くらいならサンプルコード腐るほど落ちてる。

854 名前:デフォルトの名無しさん [2008/02/04(月) 21:44:58 ]
こんにちは。
winsockでネットゲームを作っているのですが、
サーバーを介さないで4人のクライアント同士で通信し合いたい(peer to peer)場合、
各々が相手3人のクライアントのソケットを持ってる必要があるのですが、
どうやってクライアント側のソケットを取得するのでしょうか?
(ホストのは取得出来ます)




855 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 22:14:19 ]
TCP?UDP?

856 名前:デフォルトの名無しさん [2008/02/04(月) 22:27:53 ]
TCPです。
単純に4人共がlistenして全員が相手3人にconectし合えばいいのかな
と思ったりしましたが、もっと良い方法はありますか?

857 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 22:32:49 ]
普通のご家庭にはルータがあってNATの向こうにPCがあるもんだが
その環境だと互いにtcpでつなぐのはしんどいぞ
どういうのを想定?

858 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 22:48:37 ]
>>856
別にそれでいいんじゃない?

>>857
ネットゲーム作ろうかと言う奴なんだから、バーチャルサーバとか
ぐらいは知ってるんじゃないかな。

859 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 22:56:10 ]
バーチャルサーバ?



860 名前:854 [2008/02/04(月) 23:15:42 ]
マッチングサーバーを作ってそこで4人組み合わせて後はpeer to peerでと考えています。

接続時に指定するポート番号っていうのはホスト側のアプリケーション識別番号で
クライアント側は自動的に空いてるポートが使用される。。。
という考え方で合っていますか?

4人共がlistenして全員が相手3人にconectし合う場合、
4人共がポート2000の同一番号でlistenしてても問題ないでしょうか?

861 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 23:22:38 ]
グダグダ考えずに一台をサーバにすればいいじゃないか

862 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 00:05:32 ]
>>860
問題ない。

て言うか、まずは二台でお互いにコネクション張って実験してみな。

863 名前:854 [2008/02/05(火) 00:15:44 ]
>>861
その通りなのですが、何故かそういう仕様になっているのです。
何のメリットがあるのか全くもって分かりません(泣

>>862
はい、やってみます。ありがとうございます。


864 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 00:21:25 ]
1時間で仕様が決まったのかwww

865 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 00:29:37 ]
仕様を作った馬鹿に質問するなり文句言えばいいのに

866 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 01:23:39 ]
ハイブリッドP2Pって事か。
NAT越えが出来なくて泣いちゃいそうだな。
かくいう俺も出来ないわけだが。

867 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 22:34:15 ]
>>863
リアルタイム系のゲームなら、いちいちサーバーを介してデータの
やり取りなんかしてられないので、P2P は別におかしくない。

まあ、それなら TCP と言うのがちょっと疑問だが。

868 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 03:07:14 ]
P2Pだと同期制御が課題になってくるけどな

869 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 12:20:11 ]
TCPってダメなの?
俺は、UDPは送信データの欠如があるとかであんまり信用して無いんだが。



870 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 12:35:35 ]
両方つかえばいいんじゃないか?
UDP -> リアルタイムに反映したいもの ( キー入力、キャラクターの移動ベクトル )
TCP -> 正確にやりとりしたいもの ( 同期取るPCからのデータとか )

871 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 12:41:26 ]
>>869
TCPは信用しているということなら、
TCPスタックは信用しているって事なので、
アプリの要求から観て、信頼できるかどうかは、
中間層にかかっているのでは?
だからUDPで書いても、アプリに必要なレベルの信頼は保てる。

872 名前:デフォルトの名無しさん [2008/02/07(木) 13:33:44 ]
VS2005で
Winsockを使っていてSD-BOTHが定義されていない、と出るのですが、
何でですかね?

873 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 13:36:01 ]
SD-BOTHが定義されていないから

874 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 13:48:14 ]
>>873
どうしたら解決出来ますかね?

875 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 14:39:42 ]
SD-BOTHが定義されていない、と出ないようにする

876 名前:デフォルトの名無しさん [2008/02/07(木) 15:41:01 ]
ソケットを閉じるときに
いきなりclosesocketでも問題はないが、
shutdown(socket,SD_BOTH);
とすることがある。
これは送信、受信ともに通信を切断する意味だったと思う。

877 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 16:22:53 ]
shutdown(s, SHUT_WR);

878 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 17:36:53 ]
>>814

いろいろと、ありがとうございます。

切断したい時はサーバーからCloseしてもらえば問題なく、また
相手がいなくなった時に自分から Close する場合は

1.相手応答ないので Close。
2.TIME_WAIT 状態になる。
3.TIME_WAIT 満了前に再接続する
4.local port +1 して(空きポートで)即 Connect する。
5.相手いないので Connect 失敗でエラーが返る。
6.エラーなので Close する。

と、接続状態から切断の遷移にならないので、TIME_WAITにはなりませんでした。

ということで、TIME_WAIT状態のソケットが溢れるとしたら、それは、
接続後に自分から切断しまた接続する動作をしてるって事ですね。

879 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 20:20:46 ]
>>878
相手が存在しない場合、closeの発行ではFINの再送状態になる
わけだからTIME_WAIT状態にはならない。だがサーバがコマンド
に応答しない場合でも、FINに対しては(recvで0が返ったら)
close処理を行う場合、クライアントはTIME_WAIT状態に入る。

そこら辺まで行くと、ちゃんと書籍を横においてTCPの挙動理解
するようにしながら、プログラム造ったほうがいいと思うよ。
リチャード・スティーブンスのTCP/IPvol1一冊あればいい。



880 名前: ◆TCP/IPzk8E [2008/02/08(金) 23:44:57 ]
test

881 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 00:20:13 ]
素晴らしい

882 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 18:09:17 ]
ほほう

883 名前:デフォルトの名無しさん [2008/02/10(日) 07:51:52 ]
質問です。
オンラインのアクションゲームを作りたいのですが、
プレイヤー間の同期を取る方法について詳しく知りたいです。


884 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 12:30:24 ]
同期なんか取りません
ネットワークの遅延は避けられません
いかに結果の辻褄を合わせて上手く誤魔化すかに注力した方が良いかと思います

885 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 16:29:09 ]
>>883
相対時間ではなく、絶対時間で動作させる。


886 名前:デフォルトの名無しさん [2008/02/11(月) 00:25:12 ]
>>884
推測航法?とかいうので移動を予測するとかいうのは聞いたことがあります。

>>885
クライアント側から「時刻XXXまでに○○へ移動」みたいなものを送る感じでしょうか。
時刻をサーバとクライアントで同期させる必要がありそうですね。
リアルタイム性のあるゲームに利用できるかもいまいちわかりませんが。

というか、クライアント→サーバ間でどのくらい時間かかるかためしたことありませんでした。。
pingとかではかってみます。

887 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 01:10:55 ]
>>886
最終的にクライアントに戻すんだからクライアント→サーバー→クライアントの時間を考えた方が

888 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 01:15:24 ]
一定時間ごとにサーバがスナップショット送って同期をとるのが基本
LAN限定にするならそうシビアになることもないけどな

ちなみに演算はサーバ側で行うのが基本
同期とりやすいし、不正もある程度は防げる

889 名前:デフォルトの名無しさん [2008/02/11(月) 13:18:35 ]
失礼します。
現在、クライアント←→サーバー型のチャットを作ろうとしています。

ですがネットワークプログラミング自体が今回初めてで、
猫でもわかる〜の本を読んでいるのですが何から手をつければいいか分かりません。

どなたか基本的な作り方(?)、もしくは参考になるサイトをご存知の方がいましたら返答お願いいたします。
ちなみに言語はCで考えていますが、C++の方が比較的分かりやすい等あれば変更する予定です。



890 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 13:51:41 ]
>>889
ソケットプログラミングでググレ
ほとんどは題材がチャットC/S
関数がわからなかったら関数名でググレ

891 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 13:53:15 ]
>>889
チャットくらいなら、CとかじゃなくてPerl,Ruby,Pythonのようなスクリプト言語
がいいよ。

プログラムの初心者で、オブジェクト指向になじみがなければ、Perl使って
みるといいんじゃないかな。ブラウザ使ってのチャットならPerlでCGIを作る
方法を解説した本が一冊あったほうがいいんじゃない。

892 名前:デフォルトの名無しさん [2008/02/11(月) 14:01:57 ]
お早いレスサンクスです

>>890
すいません、素でググるの忘れてました・・・本当に大抵がチャットC/Sのものばかりのようで参考になります。
感謝です

>>891
最終的には3Dのネトゲを作ろうとしているので、Perlなんかで作ってしまうと色々問題が。
そのあたりの事もあるので、C言語で作ろうとしてまして・・・。

893 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 14:02:00 ]
>>890, 891
TCP のモデル知らずに組んで....
って落ちか?
client より先に server 落したら server 再起動時に
address in use とかエラー帰ってくるとか... ... ...


894 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 14:11:02 ]
>>892
うーん・・・3Dのネトゲつくりたいなら、TCP/IPの基礎から抑えておく
必要があると思うよ・・・。

入門で以下の本くらいはひとまず読んでみるとか
ssl.ohmsha.co.jp/cgi-bin/menu.cgi?ISBN=4-274-06584-7

何冊か入門本読んだら、リチャード・スティーヴンスの本をそろえて
読む必要があるんじゃない。

895 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 14:42:13 ]
>>892
> 最終的には3Dのネトゲを作ろうとしているので、
> Perlなんかで作ってしまうと色々問題が。

まずは、ネットワークプログラミングに慣れろと言うことだと思うが。

C 言語がめちゃめちゃ得意でケアレスミスなんて俺には関係ネェとか
言うなら最初から C でもいいけどさ。

# そんな奴は、>>889 みたいな質問はしないだろうし、
# 全角で Perl と書いたりもしないだろうな...。

896 名前:デフォルトの名無しさん [2008/02/11(月) 16:16:38 ]
>>895
あぁなるほど、そういう事でしたか・・・失礼しました。
以前多少かじった程度なのでこの際に少し弄ってみることにします。

897 名前:デフォルトの名無しさん [2008/02/11(月) 16:25:57 ]
>>896
少し弄るとbitですw

898 名前:デフォルトの名無しさん [2008/02/11(月) 16:31:28 ]
P2Pテレビ
www.getmiro.com/(ミロ)
www.v2p.jp/video/(キーホールテレビ)
www.joost.com/(ジュースト)
www.pplive.com/(ピーピーライブ)
www.ppmate.com/(ピーピーメイト)
www.ppstream.cn/(ピーピーストリーム)
www.sopcast.org/(ソープキャスト)
tvants.en.softonic.com/download(テレビの蟻)
www.tvunetworks.com/(TVUプレーヤー)
zattoo.com/(ザトゥー)
www.veoh.com/(ベオテレビ)
その他
tv.uhuru.co.jp/index.html(取説)
cowscorpion.com/(フリーウェア)

899 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 17:42:49 ]
とりあえずは>>1-のリンクを見るといいんだ



900 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 18:16:36 ]
       |
  ____  |
  |        |           
          /
          /        /  _____/
          /           |
        /    _/  |   
      ̄           _|
          \ | /    / \
 / ̄| ̄ヽ   ̄ ̄| ̄ ̄ /‐┬┐\  |. ‐┼‐
 |  /   |    ̄ ̄| ̄ ̄   ││   │ __|
 ヽノ   ノ     │    _/___|    し(_丿\

  _____________
 |                    |
 |        |``'''‐- 、      |
 |        l   ∩  `、     |
 |        |   |│   |    │
 |        |   |│  !     |
 |     _,.ィ|   | _.ニ=´‐--、   |
 |   ,、‐' ´_,.ィ|   |>‐'' ⊃  ,)  |
 | (  ⊂ -<!   L.r '"´>''´  |
 |  `''ー---‐''- 、.l>'''´       |
 |   P l a y S t a t i o n    |
 |_______________|

  __   __       __
    / "    / "  =|=    /   /  ヽ  _フ
    (     (   (_    (   ヽ  /   o)

901 名前:デフォルトの名無しさん [2008/02/12(火) 14:59:55 ]
コンシューマ機でネトゲーつくったことある人いる?

902 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 17:22:46 ]
ゲーム製作板行けよ

903 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 04:03:56 ]
>>901 ありますよ

904 名前:デフォルトの名無しさん [2008/02/15(金) 15:14:01 ]
今、TCP転送実験をしているのですが、間違いの原因が分かる方おられませんか?
環境はVC.NET + SDKで勉強してます
TCPでクライアントとサーバプログラムを作成し、ファイル転送実験を行っています。
1MBから100MBくらいのファイルはうまく転送することができるのですが、それ以上の大きなファイルになると、
微妙にファイルサイズが大きくなると言う現象が起きています。サーバはaccept関数をマルチプロセスで動かし、
recv関数もマルチプロセスで行っています。クライアントはsend関数をマルチプロセスで行っています
ファイルサイズが大きくなるほど、ファイルサイズのズレも大きくなるような感じです。
原因の予想がつく方、助言お願いします

905 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 15:30:43 ]
コード晒せよ

906 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 15:40:52 ]
ファイルをテキストモードでオープンしていると、LFがくるたびにCR追加されるから
サイズは増えるな。でも100MBまで1つもLFが無いのにそこから入るなんてそうそう無いしなあ
やっぱコード見ないとわからん。

907 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 17:39:16 ]
recvの戻り値(受信したバイト数)を確認してないとかいうオチ?

908 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 17:42:09 ]
ネットワークプログラミングって何?

909 名前:904 mailto:sage [2008/02/15(金) 18:25:45 ]
>>907
するどいご指摘ありがとうございます。
大当たりです。確認を忘れてました。。



910 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 18:39:54 ]
>>904
こーひーふいたじゃねーか・・・w
ギャグじゃないのだよね・・・w

911 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 18:40:51 ]
不安すぎるから、送信したデータと受信したデータの内容が
ちゃんと一致するか、テストしとけよw

912 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 18:41:06 ]
ありえない、騙りじゃないのかよw

913 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 20:39:18 ]
>>908
telnet上でプログラムすること

914 名前:デフォルトの名無しさん [2008/02/15(金) 22:36:01 ]
winsockでsend()でHTTPリクエスト送信してrecv()でデータを受け取るという単純なプログラムを書いています。
yahooや、google等は取得出来たのですが、exciteブログがどうしても取得できません。
エキサイトブログはどの人のブログを試してみても駄目でした。

以下のようなエラーメッセージが出ます。
HTTP/1.1 403 Access Forbidden
Server: Microsoft-IIS/5.0
Date: Fri, 15 Feb 2008 13:28:38 GMT
Content-Type: text/html
--------------: ---

<html><head><title>Directory Listing Denied</title></head>
<body><h1>Directory Listing Denied</h1>This Virtual Directory does not allow contents to be listed.</body></html>

InetSpyを見てHTTPヘッダを同じにしても駄目でした。

エラーメッセージからしてアクセスを拒否られているみたいなのですが解決方法ありますか?

915 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 22:51:21 ]
取得しようとしてるURLは?

916 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 23:00:43 ]
http://ユーザID.exblog.jp/
なんだけど、自分のブログとか無くて誰かの晒す訳にはいかないから
www.exblog.jp/
で適当な文字列で検索かけて欲しいです。

とりあえず、誰のでやっても同じでした。

917 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 23:15:07 ]
telnetでやってだめならあきらめれ

918 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 23:24:45 ]
>>916
telnet でやったら出来たよ。

$ telnet <hogehoge>.exblog.jp 80
...

GET / HTTP/1.0

HTTP/1.1 404
Server: Microsoft-IIS/5.0
Date: Fri, 15 Feb 2008 14:24:02 GMT
Pragma: no-cache
P3P: CP="NOI DSP CURa ADMa DEVa TAIa OUR BUS IND UNI COM NAV INT"
Pragma: no-cache
Connection: Keep-Alive
Content-Length: 4030
Content-Type: text/html;charset=utf-8
Expires: Fri, 15 Feb 2008 14:24:03 GMT
Cache-control: no-cache
...


919 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 23:27:16 ]
> HTTP/1.1 403 Access Forbidden

http の勉強しろよ。

> Directory Listing Denied
> This Virtual Directory does not allow contents to be listed.

もしくは、英語の勉強な。

て言うか、telnet で試したら、

telnet ○○.exblog.jp 80
GET / HTTP/1.1
Host: ○○.exblog.jp


で、普通に取得できたぞ。(Host を指定しないと、400 Bad Request で、
丁寧に Host を指定しろよゴラァといってくれるし。)



920 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 23:35:34 ]
>919
それはHTTP/1.1でリクエスト出してるくせに
必須の筈のHostヘッダを落としたからだ。

921 名前:914 mailto:sage [2008/02/15(金) 23:36:06 ]
ありがとうございます。
でも、telnetって何ですか?
ググって見たらwindowsに標準のソフト事だとあったけど良く分からない。
もうちょっと、調べてきます。

922 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 23:44:09 ]
。。。

923 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 00:17:33 ]
>>921
www.nurs.or.jp/~telnet/http.html
tonetsutomu.com/tone/articles/nos1998b/www/
などを嫁


924 名前:914 mailto:sage [2008/02/16(土) 00:21:20 ]
結局良く分からなかった。
telnetってソフトですよね?Tera Termって言うの落としてみたけど使い方が分からず。
それを使えば、エキサイトブログのデータ取得できるかもしれないけど、
取得したデータを解析する場合プログラムに埋めないと駄目ですよね?
その変が良く分からない・・・。

925 名前:914 mailto:sage [2008/02/16(土) 00:22:11 ]
と、書いたらレス来てた。
ちょっと読んできます。

926 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 00:56:46 ]
>>924
ネットワークプログラミングをする時、テキスト系のプロトコル
(http, smtp, pop)をテストするのに実験用汎用クライアントとして
telnetが使えるという事。 もちろん最終的にはプログラムに組み込まなければ
ならないが、>>914のような問題はまずtelnetでちょこちょこと検証が
出来るので便利。

927 名前:914 mailto:sage [2008/02/16(土) 02:04:05 ]
なるほど、ありがとうございます。
自分はちと先を急ぎすぎたみたいですね・・・。
まず、telnetでの操作を覚えたいと思います。
ご迷惑お掛けしました。

928 名前:デフォルトの名無しさん [2008/02/18(月) 16:02:50 ]
はじめまして。質問をさせて下さい。
softbank出版の「WinSock2.0プログラミング」という本のP.45に
次のような記述があります。

・・・このポートという概念が在るおかげで、1つのマシンアドレスで
複数のソケットを使う事が可能となります。ソケットのフルアドレス
(sockaddr)は1つのIPアドレス、プロトコル、ポートから構成されます。
これらの3種類の情報が集まって、1つのソケットを一意に特定します。
同じマシン上にある2つのソケットを、同じプロトコルを使って
同じポートに関連付ける事は出来ません。それぞれが異なるプロトコルを
使うのであれば、同じポートに関連付ける事が出来ます。

そこで、お聞きしたいのですが、>>788以降の書き込みを見ると
この本の記述とは異なるようです。この本は間違っているのでしょうか?

929 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 16:29:24 ]
>>788の話と何の関係もない気がするんだが



930 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 16:35:17 ]
788の人はたぶん何か勘違いしてるだけなので気にしなくていいかと

931 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 16:50:19 ]
>>928
>同じマシン上にある2つのソケットを、同じプロトコルを使って
>同じポートに関連付ける事は出来ません。

アドレスが異なれば、同じプロトコルの同じポートでも関連付けられる。
・・・そういう話じゃないか。

932 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 16:59:57 ]
>>928
その本捨てた方が良いかも。
本当にその通りに書かれているなら書いてる奴自身がわかってないっぽい。

スティーブンス本で TCP/IP について勉強したら
後は以下のサイトを熟読すれば Winsock についてもほぼ困ることはない。

tangentsoft.net/wskfaq/
www.kt.rim.or.jp/~ksk/wskfaq-ja/


933 名前:932 mailto:sage [2008/02/18(月) 17:07:49 ]
>>928
すまん、俺が勘違いしてた。
そこの「プロトコル」ってのはUDPとかTCPとかのレイヤの話か。

934 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 18:52:31 ]
>>932 が一番わかっていなかった件

935 名前:928 mailto:sage [2008/02/18(月) 18:54:57 ]
本は正しいのでしょうか?
私の解釈だと、この本の通りであれば、TCPで繋ぐ時
サーバーが同時に接続可能なクライアントの数が
ポートの数に縛られるような気がするのですが・・

936 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 18:56:42 ]
http で あるサーバー 1 IP で ポートは 80 のみ
なぜ同時に沢山アクセス出来ているんだと思う?

937 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 18:59:08 ]
>同じマシン上にある2つのソケットを、同じプロトコルを使って
>同じポートに関連付ける事は出来ません。

ここをちゃんと読めてない香具師は多い


938 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 19:01:44 ]
「一つの(アドレス、プロトコル、ポートで一意)に複数のソケットを割り当てられない」
とは書いてあるが
「一つのソケットに複数のクライアントを繋げない」
とはどこにも書かれていない


939 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 19:12:45 ]
イメージで、複数つながるときは複数Listenしてると思うんだろう。



940 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 20:38:33 ]
>>935
ソケットは
・プロトコル
・自分のアドレス
・自分のポート
・相手のアドレス
・相手のポート
の組で区別されるので、自分側が同じアドレス・ポートでも相手側が異なれば異なる
サーバは1個のアドレス・ポートだけでいくつものクライアントを裁ける
ポート数には縛られない
・・・で合ってたっけ?ちょっと自信ない

941 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 20:38:44 ]
便乗質問ですが
一つのソケットに繋げられるクライアント数の最大数は?
あるいは何によって制限されますか?
メモリ?OSが処理できるプロセス数?スレッド数?

942 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 20:41:29 ]
>>935
つまり結局、
> サーバーが同時に接続可能なクライアントの数が
> ポートの数に縛られるような気がするのですが・・
その解釈でいいように思える。
unsigned short だから6万個くらいだっけ。
縛られるっつっても、現実問題としては充分だわな。

943 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 20:44:39 ]
ダウト

944 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 20:49:01 ]
>>941
openの方法にもよります
FAQにも書いてあるので見ておくとよいかと
また、ライセンスによっても制限があります
Win2000などは10までだったかな

945 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 20:53:08 ]
>941
1つのソケットで繋げられるのは、1つのクライアントだけだろ?

946 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 22:01:33 ]
>>944の訂正
2000Proはサーバ用途のソフトは不可
XPProが10
VistaはEURAみたことないので知らん


947 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 22:43:42 ]
>>928
> ソケットのフルアドレス
> (sockaddr)は1つのIPアドレス、プロトコル、ポートから構成されます。
> これらの3種類の情報が集まって、1つのソケットを一意に特定します。

ここは間違いだね。
これじゃacceptの引数のソケットと、
帰り値のソケットの違いを説明できない。
TCPの接続は>>940の組で識別するということが理解できてないようだ。

ただこれはAPIの本であって、プロトコルの本ではないから、
プロトコルについてはカマーやスティーブンスの本を読んで、
APIの解説はこの本を参照すれば?
もちろんMSDNも。
MSDNはどこに自分の欲しい情報があるか分かりにくいから、
こういう本を一読しておくとWinsock2全体を概観できていいよ。
リファレンスじゃなくて、解説本だからね。


948 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 22:45:29 ]
>>945
「繋げる」の意味によるなあ。
TCP or UDPとか、マルチキャストとか。

949 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 23:03:35 ]
色々と理解不十分なのがゴチャゴチャかいてるので、元質問者が混乱しそう
なのでいっておく。

>>940>>947が正解。



950 名前: ◆0uxK91AxII mailto:sage [2008/02/18(月) 23:10:43 ]
>>941
Winsockの場合。
www.kt.rim.or.jp/~ksk/wskfaq-ja/advanced.html

951 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 23:54:40 ]
>>948
マルチキャストってソケット関係ないじゃん?

952 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 23:57:34 ]
>>951
あるよ^^

953 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 00:36:59 ]
>>952
あるね。ごめんよ^^

954 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 19:13:41 ]
OSによるとは思うんですが、UnixドメインソケットとループバックIFでTCPではどっちが高速ですか?

955 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 20:55:10 ]
ループバック

956 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 21:04:31 ]
>>954
そんくらいはかってみれ

957 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 22:02:32 ]
>>954
悩むなら両方に対応してオプションで選択できるようにするといいよ

958 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 22:16:23 ]
「ウィンドウズだとプロセス作成が重い」という話をよく聞くのですが、
ウィンドウズでhttpサーバーを書く場合、どのような構成が適切だと思いますか?

1、1リクエスト=1プロセスを尊守する
2、いくつかのリクエスト(数十〜数百)をまとめて一つのプロセスで処理する
3、プロセスは1つ。1リクエスト=1スレッドで行う
4、プロセスは1つ。いくつかのリクエストをまとめて1スレッドで行う
5、プロセスもスレッドも1つ。すべてのリクエストを非同期で処理する

959 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 22:18:26 ]
>>958
6. apache を使う



960 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 22:23:30 ]
>>958
組み込みなら5しか選択肢はない

961 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 22:25:05 ]
>>958
プロセス生成が重いと考えているのに、どうして1と2が選択肢になるのか。



962 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 22:47:20 ]
7. 複数のスレッドですべてのリクエストを非同期処理する

963 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 22:59:10 ]
>>958
お前の書くサーバなら2で十分。

964 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 00:25:57 ]
7、プロセスチーズは雪印

965 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 10:04:47 ]
雪印はあの事件以降買ってないわ

966 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 11:54:21 ]
そうだね、雪印はちょっと怖いよね。
だから最近できたメグミルクってとこの買ってるよ。


967 名前:932 mailto:sage [2008/02/20(水) 13:00:08 ]
>>960
マルチスレッドカーネルくらい書けよ。

968 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 18:55:48 ]
>>958
IOCP

969 名前: ◆0uxK91AxII mailto:sage [2008/02/20(水) 19:38:43 ]
一方、IIS6ではTDIを叩いた。



970 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 20:59:11 ]
TDIってそのうち非推奨になるって書いてあるけど、次のIISはどうするの?

971 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 21:40:56 ]
IISはOSと癒着だから。
ミニポートドライバを挟み込むくらいは遣りかねない(w

972 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 21:57:22 ]
>>967
マルチスレッドカーネルつかってても、組み込みなら1スレッドで非同期で全部やる
常識でしょ

973 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 09:55:45 ]
>>972
なぜ常識なのかわかんね。
結果として1プロ1スレでやらざるを得ないことは多いけど。

974 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 14:37:54 ]
スレッド増えるとコンテキストの切り替えで遅くなるからじゃない?

975 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 16:04:31 ]
タイマによる切り替えだけじゃなくて、デバイスI/O待ちとかで積極的にdispatchするようにしとけば問題ない事が多い。

976 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 21:44:32 ]
1タスクのスタック領域4kとってるとして、100個接続裁いて100スレッドになると
400kのメモリが必要。そして、さばく接続数に比例して使用するメモリがどんどん
増える。非常に無駄。

977 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 21:46:53 ]
コンテキストスイッチに時間がかかるのも効率が悪い。

まぁ最近の携帯電話とかだと、鬼のようなスペックつんでるので、携帯電話
メーカーが作るのならいいのかもだけど。「うちのミドルウェアには、HTTP
サーバもついてますよ!1接続、1スレッド必要ですが」とかいったら、
ゼッタイそのミドルウェアは採用されないな。

978 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 23:49:22 ]
スレッドをプールしてもダメなん?

979 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 23:59:31 ]
接続数が多くなる場合はIOCP使えってのは常道みたいだが。




980 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 01:36:54 ]
Winsockの挙動について
connect()するときに、以下の条件

1.プロトコルはTCP
2.HostAddressにDNS名を指定
3.DNS応答に複数IPが含まれている(DNSラウンドロビン等)

において、DNS応答の1つ目のIPアドレスへの接続に失敗した場合、
接続再試行として、DNS応答の2つ目以降のIPアドレスへ接続を行ってくれる?

それとも、接続試行を行うのは一つ目のIPアドレスに対してのみ?

知ってたら教えておくれやす。

981 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 01:49:38 ]
おまいの使ってるconnect()とやらのパラメータには、何を渡すようになっているか知ってるか?

982 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 02:58:25 ]
がびーーーん!
参考にしたMSDNのページをよく確認したら、
MFCのCAyncSocket。

逝ってきまつ…

  ;y=ー( ゚д゚)・∵. ターン
  \/| y |)

983 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 09:46:26 ]
>>979
銭形警部?

984 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 11:27:47 ]
オレもその略号みるとそれ思い出すんだw
ICPOだけどな

985 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 14:28:45 ]
>>983-984
お前らのせいで変な見方しか出来なくなったヽ(`Д´)ノ

986 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 16:44:23 ]
linuxでIOCP無いと思った
windowsで実装されてるようなの。

987 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 16:56:41 ]
IOCPは特許になっているので、
スケジューラ絡みの部分はLinuxに実装できないが、
aio_*を使えばほとんど同じことができる。

988 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 14:23:24 ]
IOCPって特許になってたんだ。知らなかった。

989 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 22:21:24 ]
組み込みのカスは死ねよ



990 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 11:35:46 ]
日本のソフト産業でシェアあるのってほとんど組み込み系じゃねえか

991 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 12:33:31 ]
>>989
すべてお膳立てされたPCでのプログラミングしかできないカスは死ねよ。

992 名前: ◆0uxK91AxII mailto:sage [2008/02/26(火) 12:42:17 ]
組込みと聞いて見てみたら、窓CEとかJavaなんてのは、よくある話。

993 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 19:07:56 ]
組み込みと聞いて行ってみたら…
ハードの事は何も分からないで仕切ってる奴がいて
1 octet を CHAR と書けとか
2 octet を WORD と書けとか
4 octet を LWORD と書けとか
...
言われるのもよくある話.


994 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 22:08:18 ]
別に違和感ないけど。

むしろ、UCHAR, UWORD, ULWORD とかはいらんのか? と思ってしまう。

995 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 22:59:09 ]
そういえば、これは本当に偶然だったんだけど
azn っていう略称の動作があって、せっかくなので使用可否のフラグを
char aznable;
って書いたら上司に見つかって、2人でウヘラウヘラ笑いあった。

996 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 23:26:01 ]
>>995
俺もウヘラウヘラした

997 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 14:59:11 ]
TCPでサイズが8kbくらいのデータを送ろうとするとへにゃるんですが、
TCP送信できるデータには最大サイズみたいなのはありますか?
それとも、何か別の原因が考えられますか?

998 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 15:06:56 ]
へにゃるって何だよ
具体的に何が起こったのか書け
1回のrecvで受け切れなかったとか、そういうことか?

999 名前:デフォルトの名無しさん [2008/02/27(水) 15:11:08 ]
どっちにしろ下の層で細かく分割されるんだ。
TCPやソケットはそういうのを考えなくていいように作られてるんだ。



1000 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 16:09:40 ]
へにゃりつつウヘラウヘラすればいいさ

1001 名前:1001 [Over 1000 Thread]
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<263KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef