我是 xamarin.forms 的新手。我想构建一个可以使用 System.net.Sockets 接收消息的 xamarin 表单应用程序。我的问题是我能够接收消息但无法使消息显示在 UI 上。
我正在使用依赖服务,所以我专门在每个平台上实现了socket方法,这是我在Android项目中的socket接收方法。我正在尝试使用消息中心将数据从 android 项目发送到 PCL 项目。IResource 是我在 PCL 中定义的一个类。
class SocketConnection : ISocket
{
Socket sSocket;
Socket serverSocket;
public void ReceiveMessage()
{
Int32 port = 7777;
IPAddress address = IPAddress.Parse("192.168.2.100");
IPEndPoint ipe = new IPEndPoint(address, port);
sSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
sSocket.Bind(ipe);
sSocket.Listen(0);
//receive message
serverSocket = sSocket.Accept();
Console.WriteLine("connection succeeded");
while (true)
{
byte[] recByte = new byte[4096];
int bytes = serverSocket.Receive(recByte, recByte.Length, 0);
IResource.data1+=Encoding.ASCII.GetString(recByte, 0, bytes);
MessagingCenter.Send<ISocket, string>(this,"new Messages",IResource.data1);
Console.WriteLine("client: " + IResource.data1);
//send message
if (IResource.data1.Equals("exit"))
{
break;
}
}
serverSocket.Close();
sSocket.Close();
}
}
在我的 pcl 项目中,我有一个按钮,当单击此按钮时,它将调用 ReceiveMessage() 方法。而且我还使用消息中心来接收消息并将其显示在 UI 上,但没有成功。这是按钮单击的方法。有谁知道问题出在哪里,是我没有正确使用消息中心,还是其他原因。加:当按钮被点击时,UI变得无响应,我应该使用异步编程吗?如何?
提前致谢!
private async void Yes_Clicked(object sender, EventArgs e)
{
MessagingCenter.Subscribe<ISocket,string>(this,"new Messages", (socket, data) =>
{
Device.BeginInvokeOnMainThread(() => {
editor.IsVisible = true;
editor.Text = data;
});
});
DependencyService.Get<ISocket>().ReceiveMessage();
}