c# - Xamarin.Android 与控制台应用程序 (Websockets) 通信
问题描述
我有这个控制台应用程序 websocket 服务器:
Console.WriteLine("[SERVER]");
TcpListener server = new TcpListener(IPAddress.Parse("127.0.0.1"), 80);
server.Start();
Console.WriteLine("Server has started on {0}.{1}Waiting for a connection...", server.LocalEndpoint, Environment.NewLine);
TcpClient client = server.AcceptTcpClient(); //wait for client to connect
Console.WriteLine("A client connected.");
NetworkStream stream = client.GetStream(); //communication channel with client
如何连接到 Xamarin.Android 应用中的控制台应用服务器?
我已经尝试过了(在 xamarin android 应用程序中,单击按钮的事件):但我从 'client.Connect("127.0.0.1", 80);' 得到一个异常
异常= System.Net.Sockets.SocketException:连接被拒绝
requestSpeak.Click += (o, e) =>
{
TcpClient client = new TcpClient();
client.Connect("127.0.0.1", 80); //connect to sv
NetworkStream stream = client.GetStream(); //communication channel with server
};
解决方案
无论您使用的是模拟器还是硬件设备,移动应用程序都将有效地被视为网络上的外部设备。有很多方法可以做到这一点,但对于开发,我更喜欢下载Fiddler并按照本文档中的描述设置反向代理。因此,在打开“允许远程计算机连接”后,我将这样的规则添加为OnBeforeRequest
函数的第一行:
if (oSession.host.toLowerCase() == "192.168.0.5:8888") oSession.host = "127.0.0.1:80";
...其中 192.168.0.5 是运行控制台应用程序的机器的 IP 地址。如果您已经正确设置,那么您也应该能够从手机的浏览器中访问 192.168.0.5:8888。
就像我说的那样,还有其他方法可以做到这一点,但我发现这个方法效果很好,因为您可以将规则更改为直接指向 localhost:someport,这是 MVC 应用程序默认用于本地调试的方法;在 VS 模拟器中运行 Xamarin 应用程序(例如),这意味着您可以在同一个项目中调试移动应用程序和服务器代码。通过 Fiddler 重定向所有流量,您可以查看移动应用程序和服务器之间的每个数据包,完全支持 JSON、图像以及压缩和 SSL 内容。
推荐阅读
- regex - [Mon Jan 04 08:36:12 2021] 的 Grok 模式
- django - 在过滤类别、重复时使用 annotate() 和 values() 计数错误
- rascal - 如何创建包含不同类型的集合
- android - 可以在android的通知面板上播放视频吗?
- flutter - 无法使用 Stack 获得正确的对齐方式
- iis - Web.config : 使用 VARIABLE 域名强制 HTTPS 和 WWW
- javascript - 将基于类转换为基于函数的组件
- azure-devops - Using Azure PowerShell or AZ commands I want to check if a Azure DevOps Release Pipeline is executed or not? Is there any script available for it?
- bash - 符号链接现有目录
- scala - 如何在play json中创建一个空的JsResult?