Код: Выделить всё
private ClientWebSocket _clientWebSocket = new ClientWebSocket();
private readonly Uri _serverUri = new Uri("ws://10.0.2.2:6969/chat");
public MyPage()
{
InitializeComponent();
ConnectToServer();
}
private async void ConnectToServer()
{
try
{
if (_clientWebSocket.State != WebSocketState.Open)
{
_clientWebSocket = new ClientWebSocket();
await _clientWebSocket.ConnectAsync(_serverUri, CancellationToken.None);
}
_ = Task.Run(ReceiveMessages);
}
catch (Exception ex)
{
}
}
private async Task ReceiveMessages()
{
var buffer = new byte[1024 * 4];
while (_clientWebSocket.State == WebSocketState.Open)
{
WebSocketReceiveResult result;
var message = new StringBuilder();
do
{
result = await _clientWebSocket.ReceiveAsync(new ArraySegment(buffer), CancellationToken.None);
if (result.MessageType == WebSocketMessageType.Text)
{
message.Append(Encoding.UTF8.GetString(buffer, 0, result.Count));
}
}
while (!result.EndOfMessage);
Device.BeginInvokeOnMainThread(() =>
{
chatMessages.Children.Add(new Label { Text = message.ToString() });
});
}
}
private async void SendMessage_Clicked(object sender, EventArgs e)
{
try
{
if (_clientWebSocket.State == WebSocketState.Open)
{
var message = edInputMessage.Text;
var buffer = Encoding.UTF8.GetBytes(message);
await _clientWebSocket.SendAsync(new ArraySegment(buffer), WebSocketMessageType.Text, true, CancellationToken.None);
Device.BeginInvokeOnMainThread(() =>
{
chatMessages.Children.Add(new Label { Text = $"Me: {message}" });
});
edInputMessage.Text = "";
}
}
catch (Exception ex)
{
}
}
После инициализации и загрузки страницы я нажимаю кнопку в пользовательском интерфейсе. Который вызывает событие SendMessage_Clicked. Это событие отправит сообщение с помощью сокета. Но здесь я получаю состояние соединения клиентского веб-сокета как «Прервано».
Я не могу понять, что там происходит. Нужна помощь, чтобы решить ее. Заранее спасибо.
Подробнее здесь: https://stackoverflow.com/questions/786 ... ui-c-sharp