前提・実現したいこと
C#超初心者です。
WindowsFormでWebsocket通信を行うアプリ(サーバーサイド)を作ろうとしています。クライアント側から受信したメッセージをテキストボックス上に表示させるようなアプリを作りたく下記のようなコードを書いたのですが、テキストボックスへの表示部分がうまくいかず困っています。
少し調べてみた結果、GUIで表示させるform1と受信時にインスタンスとして呼び出しているform1が異なることが原因であることがわかったのですが、Hogeクラス内でのform1の適切な呼び出し方がわかりません。。。
(因みにwebsocket-sharpライブラリの仕様上引数ありコンストラクタが使えないため、Hogeクラスのインスタンス作成時の引数としてform1を呼び出すことはできなさそうです…)
あまりにも未熟すぎるが故の質問ですが、どなたかご教授いただければ幸いです。よろしくお願いいたします。
発生している問題・エラーメッセージ
例外がスローされました: 'System.InvalidOperationException' (websocket-sharp.dll の中)
型 'System.InvalidOperationException' の例外が websocket-sharp.dll で発生しましたが、ユーザー コード内ではハンドルされませんでした
The underlying listener has failed to start.
該当のソースコード(Form1.cs)
c#
1 2using System; 3using System.Collections.Generic; 4using System.ComponentModel; 5using System.Data; 6using System.Drawing; 7using System.Linq; 8using System.Text; 9using System.Threading.Tasks; 10using System.Windows.Forms; 11using WebSocketSharp; 12using WebSocketSharp.Net; 13using WebSocketSharp.Server; 14 15namespace sample_websocketGUI 16{ 17 public partial class Form1 : Form 18 { 19 public Form1() 20 { 21 InitializeComponent(); 22 23 WebSocketServer server = new WebSocketServer(8080); //サーバの設立 24 server.AddWebSocketService<Hoge>("/"); //サーバの設定 25 server.Start(); 26 27 28 } 29 30 private void textBox1_TextChanged(object sender, EventArgs e) 31 { 32 33 } 34 35 //受信時のテキストボックス表示用メソッド 36 public void textshow(string str) 37 { 38 textBox1.Text = str; 39 40 } 41 42 } 43 44 public class Hoge : WebSocketBehavior 45 { 46 47 //受信時に呼び出されるメソッド 48 protected override void OnMessage(MessageEventArgs e) 49 { 50 51 //エラーの要因と思われる箇所 52 Form1 f1 = new Form1(); 53 54 f1.textshow(e.Data); 55 //Console.WriteLine(e.Data); //デバッグ用 56 57 } 58 59 60 } 61 62 63} 64
補足情報(FW/ツールのバージョンなど)
以下のツール、ライブラリを使用
・WindowsForms (Windows 10 Pro)
・Websocket-sharp
https://github.com/sta/websocket-sharp
・テスト(クライアント側)
C:\Users*** >wscat -c ws://localhost:8080
回答2件
あなたの回答
tips
プレビュー