2016-07-21 21 views
2

こんにちは私は各クライアントが異なるコンピュータにあり、すべてのクライアントがサーバに接続しなければならないサーバクライアントアーキテクチャを作っていますが、別のコンピュータが... 2日前には、別のコンピュータに取り組んでいたが、今それが唯一のIPアドレスを使用して、同じコンピュータ上で働いている私のデバイスをフォーマットした後...ここWinFormを使用して異なるコンピュータのSignalrサーバにSignalrクライアントを接続する方法

は、サーバのための私のコードです...

private IDisposable SignalR { get; set; } 
    public string ServerURI = "http://" + "192.168.1.240"; 

    private void ButtonStart_Click(object sender, EventArgs e) 
    { 
     WriteToConsole("Starting server..."); 
     ButtonStart.Enabled = false; 
     Task.Run(() => StartServer()); 
    } 

    protected void StartServer() 
    { 
     try 
     { 
      SignalR = WebApp.Start(ServerURI); 
     } 
     catch (TargetInvocationException) 
     { 
      WriteToConsole("Server failed to start. A server is already running on " + ServerURI); 
      this.Invoke((Action)(() => ButtonStart.Enabled = true)); 
      return; 
     } 
     this.Invoke((Action)(() => ButtonStop.Enabled = true)); 
     WriteToConsole("Server started at " + ServerURI); 
    } 

    internal void WriteToConsole(String message) 
    { 
     if (RichTextBoxConsole.InvokeRequired) 
     { 
      this.Invoke((Action)(() => 
       WriteToConsole(message) 
      )); 
      return; 
     } 
     RichTextBoxConsole.AppendText(message + Environment.NewLine); 
    } 

    private void WinFormsServer_FormClosing(object sender, FormClosingEventArgs e) 
    {    
     if (SignalR != null) 
     { 
      SignalR.Dispose(); 
     } 
    } 
} 

class Startup 
{ 
    public void Configuration(IAppBuilder app) 
    { 
     app.UseCors(CorsOptions.AllowAll); 
     app.MapSignalR(); 
    } 
} 

public class MyHub : Hub 
{ 
    public void Send(string name, string message) 
    { 
     Clients.All.addMessage(name, message); 
    } 
    public override Task OnConnected() 
    { 
     Program.MainForm.WriteToConsole("Client connected: " + Context.ConnectionId); 
     return base.OnConnected(); 
    } 
    public override Task OnDisconnected(bool stopCalled) 
    { 
     Program.MainForm.WriteToConsole("Client disconnected: " + Context.ConnectionId); 
     return base.OnDisconnected(stopCalled); 
    } 
} 

とクライアント用...

private IHubProxy HubProxy { get; set; } 
    string ServerURI = "http://" + "192.168.1.240" + "/signalr"; 
    private HubConnection Connection { get; set; } 

    private async void ConnectAsync() 
    { 
     Connection = new HubConnection(ServerURI); 
     Connection.Closed += Connection_Closed; 
     HubProxy = Connection.CreateHubProxy("MyHub"); 
     //Handle incoming event from server: use Invoke to write to console from SignalR's thread 
     HubProxy.On<string, string>("AddMessage", (name, message) => 
      this.Invoke((Action)(() => 
       RichTextBoxConsole.AppendText(String.Format("{0}: {1}" + Environment.NewLine, name, message)) 
      )) 
     ); 
     try 
     { 
      await Connection.Start(); 
     } 
     catch (HttpRequestException) 
     { 
      StatusText.Text = "Unable to connect to server: Start server before connecting clients."; 
      //No connection: Don't enable Send button or show chat UI 
      return; 
     } 

     RichTextBoxConsole.AppendText("Connected to server at " + ServerURI + Environment.NewLine); 
    } 

    private void SignInButton_Click(object sender, EventArgs e) 
    { 
     UserName = UserNameTextBox.Text; 
     //Connect to server (use async method to avoid blocking UI thread) 
     if (!String.IsNullOrEmpty(UserName)) 
     { 
      StatusText.Text = "Connecting to server..."; 
      ConnectAsync(); 
     } 
    } 

が、これはhttps://code.msdn.microsoft.com/windowsdesktop/Using-SignalR-in-WinForms-f1ec847b/sourcecode?fileId=119892&pathId=583880341

iが1日からこの上で立ち往生してきた私を助けてください...あなたがこれをチェックアウトすることができ、この詳細については、このウェブサイトのためのサンプルである...あなた

+1

ファイアウォールは再インストール後に開いていますか? –

+1

thanx @MATTIAS ...ファイアウォールが着信呼をすべてブロックしていました...私はそれを無効にしていました。それは機能していました。私はそれをオフにする必要はありません。 –

答えて

0

に感謝します私の場合は、問題を引き起こしているのはアンチウイルスでした。私はそれを無効にした後、アプリケーションは働いた。

関連する問題