C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[7]: JavaをC#に


(過去ログ 79 を表示中)

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■46634 / inTopicNo.1)  JavaをC#に
  
□投稿者/ もんた (22回)-(2010/02/07(Sun) 22:25:01)

分類:[.NET 全般] 

http://itpro.nikkeibp.co.jp/article/COLUMN/20080220/294242/?ST=develop&P=4

上記サイトのソースをもとに、C#でチャットを作ってみようと思っています。
Javaのサンプルのみなので、それを何とかC#に直そうとしているのですが、以下の通信部分のプログラムで分からない部分が出てきてしまいました。
たとえば、

//@クライアントからのコネクションを待つ
Socket socket = _serversocket.accept();

//A新しいスレッドを起動し、そのスレッドがコネクションの相手をする
_executorService.execute(new ChatTask(socket, _chatContext))

というjavaプログラムをC#に変える場合、日本語の説明通りの事はできてもその他の必要な事ができなくなってしまいます。
@の場合はC#の「Listen()」を使えば待つことはできましたが、socketというオブジェクトにそれを入れる事ができず、Aの場合はC#のThredクラスを使おうにもsocketと_chatContextがChatTaskクラスに送れません。
そもそもJavaではExecuteというものが肝になっている感じですが、C#に同様のものがなさそうです。

要するにソケット通信とマルチスレッドを組み合わせた処理をC#に直せず困っているというところです。

どなたかC#で@やAの処理、Executeなどと同じ事が可能なものをご存知でしたら、教えていただけないでしょうか?
引用返信 編集キー/
■46639 / inTopicNo.2)  Re[1]: JavaをC#に
□投稿者/ επιστημη (2449回)-(2010/02/08(Mon) 08:36:15)
επιστημη さんの Web サイト
http://codezine.jp/article/detail/22
↑コレ読んでみて。Javaからportじゃなく、C#で書き起こしたもの。

引用返信 編集キー/
■46727 / inTopicNo.3)  Re[2]: JavaをC#に
□投稿者/ もんた (23回)-(2010/02/09(Tue) 21:22:16)
No46639 (επιστημη さん) に返信
> http://codezine.jp/article/detail/22
> ↑コレ読んでみて。Javaからportじゃなく、C#で書き起こしたもの。

おお、参考になるサイトをありがとうございます。
これをもとに書いたところ、とりあえず通信自体はできている感じです。
ただ、ひとつ新たな問題が出てしまいました・・・。

サーバー側の処理でSocket.Listen(値)を書いた後、StartAcceptメソッドを呼び出しているのですが、なぜか呼び出せずスルーされてしまいます(エラーは出ない)。
そしてそのまま終了してしまうのでクライアント側が通信できずにエラーが出てしまいます。
While文でメソッド呼び出し部分を無限ループさせれば一応その部分は大丈夫ですが、根本的な解決になっていない気がします。
同様に、クライアント側のBeginReceive(非同期受信開始)もその部分を抜けた後プログラムが終了してしまうので受信できずに終わります。

しっかりと非同期でやり取りするのには何が足りないのでしょうか?
もしかしてコンソールアプリで実行しているのが駄目なのでしょうか?
引用返信 編集キー/
■46733 / inTopicNo.4)  Re[3]: JavaをC#に
□投稿者/ επιστημη (2451回)-(2010/02/10(Wed) 05:45:13)
επιστημη さんの Web サイト
> サーバー側の処理でSocket.Listen(値)を書いた後、StartAcceptメソッドを呼び出しているのですが、なぜか呼び出せずスルーされてしまいます(エラーは出ない)。

BeginAcceptのこと? BaginAcceptはブロックされません。するっと抜けてきます。
Acceptなら繋がるまで待ちに入りますけど。


引用返信 編集キー/
■46878 / inTopicNo.5)  Re[4]: JavaをC#に
□投稿者/ もんた (24回)-(2010/02/12(Fri) 21:55:23)
> BeginAcceptのこと? BaginAcceptはブロックされません。するっと抜けてきます。
> Acceptなら繋がるまで待ちに入りますけど。

そうです、BeginAcceptです。すみません。
ですが今の状況ではプログラムが終了してしまい、接続(connect)や受信をする場所で「リモートホストに切断されました。」などのエラーが出てしまいます・・・。
プログラムが終了しても受信や送信が行われるような方法があるのでしょうか?

起動の仕方やアプリの形式が悪いのか、プログラムが悪いのかがいまひとつ分からないので、アドバイスを頂けないでしょうか?
引用返信 編集キー/
■46883 / inTopicNo.6)  Re[5]: JavaをC#に
□投稿者/ επιστημη (2457回)-(2010/02/13(Sat) 07:52:37)
επιστημη さんの Web サイト
コード見ないとなんとも答えられんです。

引用返信 編集キー/
■46885 / inTopicNo.7)  Re[6]: JavaをC#に
□投稿者/ やじゅ (1522回)-(2010/02/13(Sat) 10:52:29)
やじゅ さんの Web サイト
> もしかしてコンソールアプリで実行しているのが駄目なのでしょうか?

それだとすぐに終わる気がします。ループするようになってないですからね。
Windowsフォームで作成してみればいいのでは。

引用返信 編集キー/
■47144 / inTopicNo.8)  Re[7]: JavaをC#に
□投稿者/ もんた (25回)-(2010/02/18(Thu) 23:50:13)
返信が遅くなって申し訳ないです。
フォームの方に記述したところ、ひとまず問題なく通信ができました。
もう少し聞きたい事があったのですが、少々別の事に時間をとる事になり作業が先送りになってしまいました。
なのでひとまず解決済みにチェックを入れさせて頂きます。

ありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -