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

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

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

Re[8]: 初歩的なSocket通信の質問


(過去ログ 61 を表示中)

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

■35171 / inTopicNo.1)  初歩的なSocket通信の質問
  
□投稿者/ Jr5 (1回)-(2009/04/21(Tue) 14:57:48)

分類:[VB.NET/VB2005 以降] 

OS:Windows XP
言語:VB.NET 2008
経験:2ヶ月

ものすごい初歩的な質問ですが、教えて下さい。

私は現在Socket(TCP)通信を使用して、メッセージをやり取りするアプリケーション、
チャットみたいなものを目指して作成しています。

そこで、Socketクラスを使用した通信周りを行うクラス(clsSocket)を用意し、
とりあえずサーバもどきとクライアントもどきのフォームを作成しました。

サーバがclsSocketを使用してBindし、
クライアントが同じくclsSocketを使用してConectとBiginRecive(非同期受信)
までは成功したのですが、

サーバがclsSocketを使用してSendを行って、クライアントがclsSocketでメッセージを受信した場合
クライアントのフォームでリアルタイムにメッセージを表示させる場合はどうしたらよろしいのでしょうか?


clsSocketはサーバ、クライアントそれぞれが参照し、ロード時にクラスを生成します。
clsSocketを使用しない場合は、デリゲートを使用して出来た処理が、
急にどうコーディングすればいいか分からなくなり、混乱してます。

どうか、この先の実装指針についてなにかアドバイスを頂けないでしょうか??
引用返信 編集キー/
■35172 / inTopicNo.2)  Re[1]: 初歩的なSocket通信の質問
□投稿者/ .SHO (802回)-(2009/04/21(Tue) 15:06:47)
No35171 (Jr5 さん) に返信

> サーバがclsSocketを使用してSendを行って、クライアントがclsSocketでメッセージを受信した場合
> クライアントのフォームでリアルタイムにメッセージを表示させる場合はどうしたらよろしいのでしょうか?

何に悩んでいるのか、いまいち良くわからないのですが
メッセージを受信したら、すぐ表示すればいいのでは?
引用返信 編集キー/
■35174 / inTopicNo.3)  Re[2]: 初歩的なSocket通信の質問
□投稿者/ Jr5 (2回)-(2009/04/21(Tue) 15:24:25)
2009/04/21(Tue) 15:28:58 編集(投稿者)
2009/04/21(Tue) 15:25:09 編集(投稿者)

No35172 (.SHO さん) に返信
> ■No35171 (Jr5 さん) に返信
>
>>サーバがclsSocketを使用してSendを行って、クライアントがclsSocketでメッセージを受信した場合
>>クライアントのフォームでリアルタイムにメッセージを表示させる場合はどうしたらよろしいのでしょうか?
>
> 何に悩んでいるのか、いまいち良くわからないのですが
> メッセージを受信したら、すぐ表示すればいいのでは?

すみません、初心者なので上手く説明できない上に
何に悩んでいるのかさえわかりません…涙

非同期で受信したメッセージを単純にフォームに表示することは出来ます。
ですが、
子クラス(親クラスがNEWしたクラス)の非同期で受信したメッセージを
親クラスのフォームに表示する。

ということをするために

親クラスの表示用メソッドを子クラスがコールバック出来れば
おそらくは目的達成出来るのではないかと考えていますが、

そもそも、親クラスの関数を子クラスが参照出来るのかという点と
出来るのであればどう実装すれば良いのかが、

全くわからないのです。
ああ、言っている自分も既に頭が混乱しています。
出来る限り詳しく説明したつもりですが、至らないことばかりですみません…
引用返信 編集キー/
■35176 / inTopicNo.4)  Re[3]: 初歩的なSocket通信の質問
□投稿者/ .SHO (804回)-(2009/04/21(Tue) 15:32:55)
ようするに、とりあえずはSocketとかどうでもよくて
子クラスから親クラスのフォームに文字列を表示出来るか?
っていうのが質問ですか?
引用返信 編集キー/
■35178 / inTopicNo.5)  Re[4]: 初歩的なSocket通信の質問
□投稿者/ Jr5 (3回)-(2009/04/21(Tue) 15:40:58)
No35176 (.SHO さん) に返信
> ようするに、とりあえずはSocketとかどうでもよくて
> 子クラスから親クラスのフォームに文字列を表示出来るか?
> っていうのが質問ですか?

そうですね!!

ぜひ知りたいです…。
お願いします。
引用返信 編集キー/
■35180 / inTopicNo.6)  Re[5]: 初歩的なSocket通信の質問
□投稿者/ 倉田 有大 (578回)-(2009/04/21(Tue) 16:00:50)
子クラスにメッセージを受け取ったときのイベントを用意し、フォームのメッセージを表示させるメソッドを渡してやるのはどうでしょう。
スレッドが別の場合はInvokeを忘れないでください。(非同期の場合別スレッドでしたっけ?)


引用返信 編集キー/
■35182 / inTopicNo.7)  Re[6]: 初歩的なSocket通信の質問
□投稿者/ Jr5 (5回)-(2009/04/21(Tue) 16:43:59)
No35180 (倉田 有大 さん) に返信

> 子クラスにメッセージを受け取ったときのイベントを用意し、フォームのメッセージを表示させるメソッドを渡してやるのはどうでしょう。

返信ありがとうございます!!

表示用メソッドを渡す…??

子クラスにデリゲートクラスを用意
メッセージを受け取った時のイベントを登録

親クラスが子クラスを生成時に
表示用メソッドを子クラスのデリゲートクラスに渡す

こういうことでしょうか??
理解能力が低くてすみません…。
引用返信 編集キー/
■35185 / inTopicNo.8)  Re[7]: 初歩的なSocket通信の質問
□投稿者/ επιστημη (1896回)-(2009/04/21(Tue) 16:55:00)
επιστημη さんの Web サイト
> こういうことでしょうか??

↓こういうことです

Class 子
  Public Delegate Sub MessageReceivedHendler(ByVal data As String)
  Public Event MessageReceived As MessageReceivedHendler ' イベント
  Public Sub Receive(ByVal message As String) ' なんか受信したらイベント飛ばす
    RaiseEvent MessageReceived(message)
  End Sub
End Class

Class 親 
  Public Sub ShowMessage(ByVal message As String) ' メッセージを書く
    System.Console.WriteLine(message)
  End Sub
End Class

Module Program
  Sub Main()
    Dim child As New 子
    Dim parent As New 親
    ' 子のイベントに親のハンドラをがっちんこ
    AddHandler child.MessageReceived, AddressOf parent.ShowMessage
    ' ぽちっとな
    child.Receive("なんか来たよー")
  End Sub
End Module

引用返信 編集キー/
■35186 / inTopicNo.9)  Re[8]: 初歩的なSocket通信の質問
□投稿者/ Jr5 (6回)-(2009/04/21(Tue) 17:16:38)
2009/04/21(Tue) 17:38:04 編集(投稿者)
2009/04/21(Tue) 17:38:01 編集(投稿者)

No35185 (επιστημη さん) に返信
> > こういうことでしょうか??
>
> ↓こういうことです
>
> Class 子
> Public Delegate Sub MessageReceivedHendler(ByVal data As String)
> Public Event MessageReceived As MessageReceivedHendler ' イベント
> Public Sub Receive(ByVal message As String) ' なんか受信したらイベント飛ばす
> RaiseEvent MessageReceived(message)
> End Sub
> End Class
>
> Class 親
> Public Sub ShowMessage(ByVal message As String) ' メッセージを書く
> System.Console.WriteLine(message)
> End Sub
> End Class
>
> Module Program
> Sub Main()
> Dim child As New 子
> Dim parent As New 親
> ' 子のイベントに親のハンドラをがっちんこ
> AddHandler child.MessageReceived, AddressOf parent.ShowMessage
> ' ぽちっとな
> child.Receive("なんか来たよー")
> End Sub
> End Module


ふぉぉぉ…!すごい!
予想していたものと全然違いました!
早速、実装してみます。


追記-------------------------------------

すばらしい動き!!
ありがとうございます!!
そしてなんと綺麗でシンプルなコードなのでしょう。

ようやく、clsSocketが完成しそうです。
この調子で、どんどん機能を拡張し、共通クラス化していこうと思います。

本当にありがとうございました。





解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -