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

时间:2018-07-31 13:59:15

标签: c# xamarin websocket xamarin.forms xamarin.android

我有这个控制台应用程序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
};

1 个答案:

答案 0 :(得分:0)

无论您使用的是模拟器还是硬件设备,移动应用程序都将被有效地视为网络上的外部设备。有很多方法可以做到这一点,但是对于开发,我更喜欢下载Fiddler并按照this document中的描述设置反向代理。因此,在打开“允许远程计算机进行连接”之后,我添加了如下规则,例如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内容。