- 1 名前:デフォルトの名無しさん mailto:sage [2012/09/21(金) 02:15:05.41 ]
- エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.79【環境依存OK】 toro.2ch.net/test/read.cgi/tech/1341052801/ ◆ソースのインデントについて 半角空白やTABでのインデントはスレに貼ると無くなります。 そのため、アップローダーに上げるのも手ですが直接貼る場合は、 全角空白か に置換すると見栄えだけはよくなります。 【アップローダー】(質問が長い時はココ使うと便利) codepad.org/ (コンパイルもできるし出力結果も得られる[]privateをチェック) ideone.com/ (時間帯によってはcodepadが重い事があるのでここも利用) NG推奨:◆QZaw55cn4c
- 175 名前:デフォルトの名無しさん mailto:sage [2012/10/07(日) 08:43:31.39 ]
- >>174
ttp://ideone.com/7CRnJ 本当に返してるかきちんと調べたか?
- 176 名前:デフォルトの名無しさん mailto:sage [2012/10/07(日) 08:56:18.78 ]
- >>173
emacsを使ってますが色の意味が分かりませんでした…… >>175 sizeofの結果を直接printfした場合にはちゃんと長さを返してくれてたんですが、 memberOfから呼ぶとだめみたいですね。 やっぱりsizeofじゃダメみたいですね。
- 177 名前:デフォルトの名無しさん mailto:sage [2012/10/07(日) 09:01:31.25 ]
- >>176
配列は通常の方法では関数に渡せないからね。渡しているのはポインタ。 関数内で配列のサイズを知りたければ、テンプレート引き数として配列を渡す位しか手がないよ。
- 178 名前:デフォルトの名無しさん mailto:sage [2012/10/07(日) 09:05:46.23 ]
- >>177
まあそうなんですが 直接書いて長さ返してくれるなら インラインは最終的に直接書いたのと同じにならないかなー、と思ったんですが やっぱりこういうのはあんまりやらない方がいいですね
- 179 名前:デフォルトの名無しさん mailto:sage [2012/10/07(日) 09:38:10.37 ]
- >やっぱりこういうのはあんまりやらない方がいいですね
バグの温床になるからしない方が良いかと。
- 180 名前:デフォルトの名無しさん mailto:sage [2012/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 名前:デフォルトの名無しさん mailto:sage [2012/10/08(月) 15:47:59.92 ]
- バルバロス「バオーwwwwwwwwwww」
- 182 名前:デフォルトの名無しさん mailto:sage [2012/10/08(月) 15:49:24.24 ]
- ルポニ「ランーーwwwwwwwwwwwwww」
- 183 名前:デフォルトの名無しさん mailto:sage [2012/10/08(月) 16:02:19.90 ]
- コナニゾ「ムゾコナwwwwwwwwwww」
- 184 名前:デフォルトの名無しさん mailto:sage [2012/10/08(月) 21:40:15.02 ]
- Winsockを使ったTCPで複数クライアントと接続するソフトを作りたいのですがうまくいきません。
サーバ側はacceptで待機し、接続があれば新規スレッドを作成し acceptの戻り値のSOCKETだけ新規スレッドに渡して、ループでaccept待機に戻ります。 新規スレッド内では渡されたSOCKETを用いて送受信処理をおこなっているのですが、 クライアント@接続→クライアントA接続→@のSOCKETからデータ受信→@のSOCKETへデータ送信→Aに届く といった結果になってしまいます。 SOCKETをsend関数の第1引数に指定するだけでは送り先を変えることはできないのでしょうか? Javaですが、以下のページと同じように作っています。 ttp://www.cs26.scitec.kobe-u.ac.jp/~kamada/students/textK/net2_sample0.html
- 185 名前:デフォルトの名無しさん mailto:sage [2012/10/08(月) 21:45:15.74 ]
- ラゾコンナ「ンババババwwwwwwwwwwwwwwww」
- 186 名前:デフォルトの名無しさん mailto:sage [2012/10/08(月) 22:39:33.65 ]
- >>184
send( ), recv( ) の直前でソケットの値表示して、本当に正しいソケットに 対して操作しているか確認しなよ。 もしくは、ソースさらして。
- 187 名前:デフォルトの名無しさん mailto:sage [2012/10/08(月) 22:41:47.22 ]
- >>184
えーと、サーバ側アプリを書いているんだよね? 受信したスレッドと送信したスレッドはきちんと把握できている? ひょっとしたら、メインスレッドで受信してメインスレッドで送信しているんじゃない?
- 188 名前:デフォルトの名無しさん mailto:sage [2012/10/08(月) 23:25:28.29 ]
- >>186
ソケットの値も確認しました。recvで@のソケットで受信していて、sendで@のソケットを指定しているのにAに送信されます スレッド開始など省いていますが、以下のようなソースです。事情があって受信したデータの解析・送信はメインスレッドのクラスにある関数を使っています。 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 名前:デフォルトの名無しさん mailto:sage [2012/10/08(月) 23:26:54.96 ]
- すみません、ソース書いてる途中に間違って送信してしまいました。
>>1のサイトを使ってもう1回書きます。
- 190 名前:デフォルトの名無しさん mailto:sage [2012/10/08(月) 23:34:41.84 ]
- ttp://codepad.org/tzuheXNf
先にも書きましたが、受信データの解析・送信はメインスレッドのあるクラスの関数でおこなっています。 SOCKETを渡して、それをsendに指定しているのですが、もしかしてメインスレッドのクラスでsendしているのが問題なのでしょうか
- 191 名前:デフォルトの名無しさん mailto:sage [2012/10/08(月) 23:53:19.41 ]
- >>188
> CThread* cthread = new CThread( socket2, this ); > cthread.start(); ホントにソース書いてる? cthread->start(); じゃなくて? イメージは間違ってないと思うが、こういう細かいところでミスってるんじゃないのか? て言うか、人に見てもらうならせめてコンパイルエラーにならないソースを上げてよ…
- 192 名前:デフォルトの名無しさん mailto:sage [2012/10/09(火) 01:35:08.28 ]
- 実は java という気がします
- 193 名前:デフォルトの名無しさん mailto:sage [2012/10/09(火) 01:37:01.29 ]
- >>191
すみません、他にもいろいろ間違ってますね。 1回間違って書き込んで無意味に焦ってしまいました。 >メインスレッドで受信してメインスレッドで送信しているんじゃない? というのを受けてもう一度ソースを見なおしたところ、スレッドの扱いは合っていたのですが 別のところで問題があることがわかりました。 TCPがどうとかいう以前の問題でしたので、全体的にソースを見直すことにします。 ご回答して下さった方々、ありがとうございました。
- 194 名前:デフォルトの名無しさん mailto:sage [2012/10/09(火) 06:46:12.36 ]
- サブスレッドで受けた後
メインスレッドで処理して 間違ったサブスレッドで送り返していたと
- 195 名前:デフォルトの名無しさん mailto:sage [2012/10/09(火) 23:35:01.10 ]
- パゾコナン「マニアwwwwwwwwww」
- 196 名前:デフォルトの名無しさん mailto:sage [2012/10/09(火) 23:36:11.75 ]
- >>180
おお、これはすごい 勉強になります ありがとうございます
- 197 名前:デフォルトの名無しさん mailto:sage [2012/10/09(火) 23:40:12.58 ]
- コナニーゾ「ハラバロwwwwwwww」
- 198 名前:デフォルトの名無しさん mailto:sage [2012/10/10(水) 00:00:03.89 ]
- uyうぜーよ消えろ
- 199 名前:デフォルトの名無しさん mailto:sage [2012/10/10(水) 00:09:00.78 ]
- コナニール「バンバンwwwwwwwwwwwww」
- 200 名前:デフォルトの名無しさん mailto:sage [2012/10/10(水) 00:42:56.19 ]
- uyって朝鮮人だってな
|

|