[表示 : 全て 最新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/


710 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 21:59:30 ]
それは、君のやりたいこと次第だからなんとも言えないけど、
WSAAsyncGetHostByName() は、ウィンドハンドルを要するから
作業スレッドでは使いにくいよ。

ぶっちゃけ WSAAsyncGetHostByName() は、スレッド使わない
人向けだよ。

711 名前:デフォルトの名無しさん [2008/01/19(土) 15:19:46 ]
TCP最高や!
UDPなんか最初からいらんかったんや!

712 名前:デフォルトの名無しさん [2008/01/19(土) 22:03:37 ]
WSAAsyncGetHostByName()を使わないとすると
スレッド内でデータベース関数がブロッキングを起こさないようにするにはどうしたらいいですか?

713 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 22:13:38 ]
別のスレッドを起動してそれにやらせる

714 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 00:14:28 ]
ダイアログに貼付けたエディットの中の文字列をGetDlItemTextで取得し
gethostbyname関数を使うとNULLが返されるんですが、
NULLが返される原因としては、どんなものがありますか?

715 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 00:39:47 ]
プラットフォームがよくわからんけど、なんで errno
とか GetLastError() とかを見ないんだ?

716 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 00:41:25 ]
一番の原因として考えられるのは
渡した文字列を確認したりWSAGetLastErrorを見たりという簡単なことすら
やろうとしない人間がコードを書いていること

717 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 02:41:16 ]
ネットワークプログラミングとは関係ないし
WindowsAPIとも関係ないな


718 名前:デフォルトの名無しさん [2008/01/20(日) 23:45:31 ]
WSAStartupはWinMain側でしか出来ませんか?



719 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 00:01:24 ]
試した方が速くね?

720 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 00:37:06 ]
試して出来ませんでした。

721 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 00:48:30 ]
ということは出来ないってことだね
解決して何よりです。

722 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 14:32:41 ]
ソケット通信について質問します。
サーバー win-XP JAVAアプリ
クライアント Linux gccアプリ

コネクション成立後に、クライアント側から close → open する場合、
close後にopenするまでの待ち時間はどのくらいとればいいのでしょうか?

723 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 14:35:19 ]
別に待たなくて良い

724 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 17:02:38 ]
>>723
サーバー側で時々クライアントのソケット断検出がうまくいかない時があったものですから。
アプリケーションの不具合みたいです。
すみませんでした。

725 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 23:20:47 ]
生ソケ開いて

Macアドレスと
IPとポートでフィルタしようと
思うのですが、効率のいいアルゴリズム
知らないでしょうか?

726 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 00:02:29 ]
受信がうまくいかないのですが、
//送信
char szBuffer[1024];
char lpFileName[1024] = "/case.html";
sprintf(szBuffer, "GET %s HTTP/1.0\r\n\r\n",lpFileName);
nRet = send(Socket, szBuffer, (int)strlen(szBuffer), 0);

if (nRet == SOCKET_ERROR)
{
SendMessage(GetDlgItem(pval->hWndMain,IDC_EDIT2),\
EM_REPLACESEL,0,(LPARAM)"sendに失敗");
closesocket(Socket);
}
//受信
while(1)
{
nRet = recv(Socket, szBuffer, sizeof(szBuffer), 0);
if (nRet == SOCKET_ERROR)
{
SendMessage(GetDlgItem(pval->hWndMain,IDC_EDIT2),\
EM_REPLACESEL,0,(LPARAM)"recvに失敗");
closesocket(Socket);
break;
}

if (nRet == 0)
break;
sprintf(szBuffer,"%s",szBuffer);
SendMessage(GetDlgItem(pval->hWndMain,IDC_EDIT2),\
EM_REPLACESEL,0,(LPARAM)(LPCTSTR)szBuffer);
}

727 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 00:15:55 ]
> sprintf(szBuffer,"%s",szBuffer);

( ゚д゚) !?

728 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 00:30:53 ]
>>725
bitmaskするだけだろ



729 名前:デフォルトの名無しさん [2008/01/22(火) 01:17:46 ]
動画にアクセスしたらzoomeのDQNは早い
70Mbpsぐらい出たよ インターネットなら
透過スピードに近いのではないだろうか?
www.lunascape.jp/community/
Lunascape Core Version 4.5.2.1 / ANSI
Operating System Version 6.0.6000
Internet Explorer Version 7.0.6000.

730 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 05:08:26 ]
bitmask?よくわからん?

731 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 20:55:45 ]
あきらめたほうがいいね

732 名前:デフォルトの名無しさん [2008/01/22(火) 21:06:04 ]
ソケットでの通信を行うときのバッファサイズについてなのですが、
イーサネットのフレームは最大1518バイトらしいので
バッファは1600バイト程度取っておけばいいんでしょうか?

733 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 21:15:05 ]
>>732
TCPのウィンドウバッファはもっと大きいよ。

734 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 17:41:26 ]
どのくらい取っておくのが普通?

735 名前:デフォルトの名無しさん [2008/01/23(水) 18:27:41 ]
>>734
TCPとかイーサネットとかの仕様は考えなくて良い。
自分で設計したプロトコルに基づいてバッファを決めるのが普通。
どうせ、recvでまとめて受信したり、分割して受信したりするんだから。

736 名前:デフォルトの名無しさん [2008/01/24(木) 14:50:24 ]
質問す。
ソケット繋がった状態で、LANケーブル抜いて、すぐ差し直して、まだソケット繋がったまま。
何故切断されない?

737 名前:デフォルトの名無しさん mailto:sage [2008/01/24(木) 14:55:48 ]
TCPは送ったパケットが届かなくても何度か再試行するから、そのときに届けば問題なし

738 名前:デフォルトの名無しさん mailto:sage [2008/01/24(木) 15:05:32 ]
>>736
そもそも下のレイヤの信頼性を補うためのプロトコルがTCPだ…



739 名前:736 mailto:sage [2008/01/24(木) 15:12:29 ]
>>737 >>738
あー、そっか・・・いいこという。

740 名前:デフォルトの名無しさん mailto:sage [2008/01/24(木) 15:28:30 ]
WindowsでLANケーブル抜くと断線扱いで
まさに>>736のときネットワークが落とされるんだが
これはどうしたらいいかね

741 名前:736 mailto:sage [2008/01/24(木) 15:40:46 ]
>>740
それは回線切断を検知したというか、
LANケーブルが抜けたことを検知した、ってことかな。

742 名前:デフォルトの名無しさん mailto:sage [2008/01/24(木) 22:19:21 ]
>>740
Windows で TCP/IP のメディア検出機能を無効にする方法
support.microsoft.com/kb/239924/ja

743 名前:デフォルトの名無しさん [2008/01/27(日) 15:31:55 ]
accept関数の宣言は /include/sys/socket.hでされてるのは分かったのですが
externされてて中身がどこで表記されてるのかが分かりませんでした。
どこに表記されているか教えてもらえないでしょうか…。

744 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 17:46:25 ]
UNIX系統なら、acceptの中身はシステムコール叩いてるだけだから、
カーネルに実体がある、といった方が良いのかな。

745 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 18:53:00 ]
詳解TCP/IP Vol.2だと、uipc_syscalls.cを見てるね。

746 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 08:04:18 ]
チャットプログラムを作ろうとしているんだけど
同時に複数のデータを送りたい場合はどういうやり方が常道なんだろう

具体的には発言者、発言内容、文字色のデータがあるとして
適当にカンマ区切りとかにして一回で送信するか
それぞれで三回送信した方がいいのか

747 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 12:03:48 ]
TCPなら3回に分けて送信したって区切りの代わりにはならんぞ
10バイトを3回送信しても30バイト一度に受信するかもしれんし1バイトずつ30回受信するかもしれんし
区切り文字でもいいけどデータサイズを前に付ける方がたぶん楽
カンマ区切りにするなら発言内容にカンマ含んでるときのことも忘れずに

748 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 12:38:43 ]
isprint()な文字しか投稿不可能なんだろうから、
ヌル終端に決めといて、最大サイズ制限あり。

発言者\0発言内容\0文字色\0

が簡単と思う。

送られたデータサイズは疑う必要があるから、
(分散システムでは、完全性の仮定レベルをかなり低くする必要がある)
データサイズが送られても、結局は同じ様なコードになる。
バッファ管理とか、タイムアウト処理とか。





749 名前:デフォルトの名無しさん [2008/01/28(月) 12:53:24 ]
質問なんですが、

select使って多重処理のサーバ作ってるのですが、
A、Bという二つのクライアントがサーバに繋がってるとして
Aから送った文字列に対してのレスポンスをAだけでなくBにも返す時ってどうすればいいんですか?

アドバイスだけでもお願いしますorz

750 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 13:02:15 ]
AとBの両方に同じものをsendすれば?

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直下?






[ 続きを読む ] / [ 携帯版 ]

前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