繁体   English   中英

Xamarin.Android与控制台应用程序(Websockets)通信

[英]Xamarin.Android communicate with Console app (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函数的第一行:

如果(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内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM