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();
}
}
iが1日からこの上で立ち往生してきた私を助けてください...あなたがこれをチェックアウトすることができ、この詳細については、このウェブサイトのためのサンプルである...あなた
ファイアウォールは再インストール後に開いていますか? –
thanx @MATTIAS ...ファイアウォールが着信呼をすべてブロックしていました...私はそれを無効にしていました。それは機能していました。私はそれをオフにする必要はありません。 –