C# Xamarin Forms PCL Socket插件未从wifi卡接收数据
我需要将Xamarin forms pcl或Android设备内置wifi卡的ios与tcp客户端连接。 事实上,这种联系是建立在文字上的,但我无法读取返回给我的数据。 我通常与串行工作,我不希望它的超时,我不能通过tcp读取 谁能给我一些建议,我的意思不大。 我正在使用这个插件Xamarin forms pcl进行连接 或者如果有人有其他的解决办法,请告诉我。我想直接使用套接字,但无法在visual studio中进入library Systems.Net.SocketC# Xamarin Forms PCL Socket插件未从wifi卡接收数据,c#,sockets,xamarin,xamarin.forms,portable-class-library,C#,Sockets,Xamarin,Xamarin.forms,Portable Class Library,我需要将Xamarin forms pcl或Android设备内置wifi卡的ios与tcp客户端连接。 事实上,这种联系是建立在文字上的,但我无法读取返回给我的数据。 我通常与串行工作,我不希望它的超时,我不能通过tcp读取 谁能给我一些建议,我的意思不大。 我正在使用这个插件Xamarin forms pcl进行连接 或者如果有人有其他的解决办法,请告诉我。我想直接使用套接字,但无法在visual studio中进入library Systems.Net.Socket private asy
private async void testTCPSocketPlugin()
{
int port = 5555;
String ip = "192.168.222.1";
TcpSocketListener listener = new TcpSocketListener();
await listener.StartListeningAsync(5555);
listener.ConnectionReceived += Listener_ConnectionReceived;
try
{
await client.ConnectAsync(ip, port);
//listener.ConnectionReceived += async (sender, args) =>
//{
// var clientListener = args.SocketClient;
// var bytesRead = -1;
// var buf = new byte[1];
// while (bytesRead != 0)
// {
// bytesRead = await args.SocketClient.ReadStream.ReadAsync(buf, 0, 1);
// if (bytesRead > 0)
// {
// }
// //Debug.Write(buf[0]);
// }
//};
}
catch (Exception ex)
{
throw ex;
}
//byte[] array1 = null;
Byte[] dati = new Byte[8];
dati[0] = 1;
dati[1] = 8;
dati[2] = 0;
dati[3] = 0;
dati[4] = 0;
dati[5] = 0;
dati[6] = 0xe0;
dati[7] = 0x0b;
Byte[] fromBoard = new Byte[8];
try
{
await client.WriteStream.WriteAsync(dati, 0, 8);
client.ReadStream.ReadTimeout = 5000;
Stream str = client.ReadStream;
int testInt = await client.ReadStream.ReadAsync(fromBoard, 0, 8);
}
catch (Exception ex)
{
throw ex;
}
}
private void Listener_ConnectionReceived(object sender, Sockets.Plugin.Abstractions.TcpSocketListenerConnectEventArgs e)
{
String test = "break here";
}
好的,在你的代码中有一些错误的东西,我将尝试指出它们 首先,您将客户机和服务器代码混合在一个函数中,这非常令人困惑,即使这只是一个测试,因此首先将代码分为两个函数,它将更具可读性 其次,您的客户端尝试在服务器侦听之前进行连接和写入:
try
{
await client.ConnectAsync(ip, port);
}
catch (Exception ex)
{
throw ex;
}
//...
await client.WriteStream.WriteAsync(dati, 0, 8);
await listener.StartListeningAsync(5555);
这将导致连接失败,在启动客户端之前,服务器必须正在侦听。您声明已建立连接,但我对此表示怀疑,除非您执行两次调用,如果前一个服务器仍在侦听,则第二次调用将正常工作
接下来,调用wait listener.StartListeningAsync5555;在挂接事件之前,它不是非常有害的,但是如果出于某种原因,客户端在服务器启动时尝试连接,那么该连接可能会丢失,因为它将在没有任何内容连接到事件处理程序之前被接受
之后,您尝试读取客户端流,但服务器没有发送任何内容,因此代码将在int testInt=wait client.ReadStream.ReadAsyncfromBoard,0,8处阻塞;直到它抛出读取异常,因为它将达到超时
最后,如果您喜欢纯本机解决方案,您可以在共享库上创建客户机/服务器代码,在iOS/Android项目上引用该库,在这些项目上创建DependencyService,然后在PCL库上检索服务,这样您就可以完全控制代码
更新:
似乎您根本没有使用任何服务器功能,请尝试以下操作:
async void Call()
{
TcpSocketClient client = new TcpSocketClient();
await client.ConnectAsync("192.168.222.1", 5555);
byte[] Data = new byte[] { 0x01, 0x08, 0, 0, 0, 0, 0xe0, 0x0b }
await client.WriteStream.WriteAsync(Data, 0, 8);
byte[] finalData = new byte[8];
int read = await client.ReadStream.ReadAsync(finalData, 0, 8);
//Check here, read will have the number of bytes read.
}
不要添加任何try/catch,如果抛出任何异常,请更新问题。我试图根据您的说明更改代码,但侦听器似乎不像以前那样。没有办法解决吗?似乎不是什么?似乎没有联系?似乎什么都没有收到?请输入客户端和服务器代码,并更明确地说明问题。它似乎无法读取数据,但是,写入和连接工作您没有在服务器端写入任何内容,因此客户端将永远不会读取任何内容…对于我来说,公司有一个刚刚编写的逻辑板,她立即用缓冲液回应。然后就开始写,她回答说,我读不起来了。我还说,已经有软件在桌面WPF工作。我只对Xamarin的阅读有问题。