12/10/07 10:55:28.91
>>178
template <class T, int N>
inline bool memberOf(const T& x, const T (&elems)[N]){
for(int i=0;i <N;i++)
:
}
とすればうまくいくはずです。
const char chars[] = {'a', 'b', 'c', 'd', 'e', 'f'};
memberOf('a', chars);
の場合、Nには6が設定されます。
以前同じ問題で悩んだことがあったので
参考までに。
181:デフォルトの名無しさん
12/10/08 15:47:59.92
バルバロス「バオーwwwwwwwwwww」
182:デフォルトの名無しさん
12/10/08 15:49:24.24
ルポニ「ランーーwwwwwwwwwwwwww」
183:デフォルトの名無しさん
12/10/08 16:02:19.90
コナニゾ「ムゾコナwwwwwwwwwww」
184:デフォルトの名無しさん
12/10/08 21:40:15.02
Winsockを使ったTCPで複数クライアントと接続するソフトを作りたいのですがうまくいきません。
サーバ側はacceptで待機し、接続があれば新規スレッドを作成し
acceptの戻り値のSOCKETだけ新規スレッドに渡して、ループでaccept待機に戻ります。
新規スレッド内では渡されたSOCKETを用いて送受信処理をおこなっているのですが、
クライアント①接続→クライアント②接続→①のSOCKETからデータ受信→①のSOCKETへデータ送信→②に届く
といった結果になってしまいます。
SOCKETをsend関数の第1引数に指定するだけでは送り先を変えることはできないのでしょうか?
Javaですが、以下のページと同じように作っています。
URLリンク(www.cs26.scitec.kobe-u.ac.jp)
185:デフォルトの名無しさん
12/10/08 21:45:15.74
ラゾコンナ「ンババババwwwwwwwwwwwwwwww」
186:デフォルトの名無しさん
12/10/08 22:39:33.65
>>184
send( ), recv( ) の直前でソケットの値表示して、本当に正しいソケットに
対して操作しているか確認しなよ。
もしくは、ソースさらして。
187:デフォルトの名無しさん
12/10/08 22:41:47.22
>>184
えーと、サーバ側アプリを書いているんだよね?
受信したスレッドと送信したスレッドはきちんと把握できている?
ひょっとしたら、メインスレッドで受信してメインスレッドで送信しているんじゃない?
188:デフォルトの名無しさん
12/10/08 23:25:28.29
>>186
ソケットの値も確認しました。recvで①のソケットで受信していて、sendで①のソケットを指定しているのに②に送信されます
スレッド開始など省いていますが、以下のようなソースです。事情があって受信したデータの解析・送信はメインスレッドのクラスにある関数を使っています。
CServer::mainthread(){
while(1){
socket2 = accept( socket1, &addr, &length );
CThread* cthread = new CThread( socket2, this );
cthread.start();
}
}
CServer::Send( SOCKET socket ){
CThread::CThread( SOCKET socket2 ){
Socket = socket2; //メンバ変数
}
CThread::subthread(){
JUSINDATA data;
int length;
while(1){
length = recv( Socket, &data, sizeof(data) );
if( length == sizeof(data) ){
send( Socket, &data, length );
}
}
}
>>187
上記ソースで言うとsubthreadで送り返しているのですが、実際にはsend関数は
189:デフォルトの名無しさん
12/10/08 23:26:54.96
すみません、ソース書いてる途中に間違って送信してしまいました。
>>1のサイトを使ってもう1回書きます。
190:デフォルトの名無しさん
12/10/08 23:34:41.84
URLリンク(codepad.org)
先にも書きましたが、受信データの解析・送信はメインスレッドのあるクラスの関数でおこなっています。
SOCKETを渡して、それをsendに指定しているのですが、もしかしてメインスレッドのクラスでsendしているのが問題なのでしょうか
191:デフォルトの名無しさん
12/10/08 23:53:19.41
>>188
> CThread* cthread = new CThread( socket2, this );
> cthread.start();
ホントにソース書いてる?
cthread->start(); じゃなくて?
イメージは間違ってないと思うが、こういう細かいところでミスってるんじゃないのか?
て言うか、人に見てもらうならせめてコンパイルエラーにならないソースを上げてよ…
192:デフォルトの名無しさん
12/10/09 01:35:08.28
実は java という気がします
193:デフォルトの名無しさん
12/10/09 01:37:01.29
>>191
すみません、他にもいろいろ間違ってますね。
1回間違って書き込んで無意味に焦ってしまいました。
>メインスレッドで受信してメインスレッドで送信しているんじゃない?
というのを受けてもう一度ソースを見なおしたところ、スレッドの扱いは合っていたのですが
別のところで問題があることがわかりました。
TCPがどうとかいう以前の問題でしたので、全体的にソースを見直すことにします。
ご回答して下さった方々、ありがとうございました。
194:デフォルトの名無しさん
12/10/09 06:46:12.36
サブスレッドで受けた後
メインスレッドで処理して
間違ったサブスレッドで送り返していたと
195:デフォルトの名無しさん
12/10/09 23:35:01.10
パゾコナン「マニアwwwwwwwwww」
196:デフォルトの名無しさん
12/10/09 23:36:11.75
>>180
おお、これはすごい
勉強になります
ありがとうございます
197:デフォルトの名無しさん
12/10/09 23:40:12.58
コナニーゾ「ハラバロwwwwwwww」
198:デフォルトの名無しさん
12/10/10 00:00:03.89
uyうぜーよ消えろ
199:デフォルトの名無しさん
12/10/10 00:09:00.78
コナニール「バンバンwwwwwwwwwwwww」
200:デフォルトの名無しさん
12/10/10 00:42:56.19
uyって朝鮮人だってな