TCP 套接字实现在 Xamarin.Android 中的工作方式是否不同?

2023-12-31

我正在尝试使用以下命令在我的 Xamarin Android 应用程序中建立 TCP 连接System.Net.Sockets.TcpClient.

当我在控制台应用程序上执行此操作时,连接非常好。但是,当我在 Android 应用程序中使用完全相同的代码时,出现异常tcpClient.Connect("127.0.0.1", 6121);说“System.Net.Sockets.SocketException(0x80004005):连接被拒绝”。因为它是 Xamarin Android,所以我需要做一些不同的事情吗?下面是我的代码。感谢您的帮助!

using Android.App;
using Android.OS;
using System;
using System.Net.Sockets;

namespace App1
{
    [Activity(Label = "App1", MainLauncher = true)]
    public class MainActivity : Activity
    {
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);

            // Set our view from the "main" layout resource
            SetContentView(Resource.Layout.Main);

            Connect();
        }

        public void Connect()
        {
            try
            {
                TcpClient tcpClient = new TcpClient();
                tcpClient.Connect("127.0.0.1", 6121);
            }
            catch(Exception){}
        }
    }
}

无论您是否可以在主线程上执行网络操作(如@ÖmerBaş 所评论),您都会遇到导致错误的网络概念的更基本问题。

127.0.0.1always指的是程序正在运行的机器。

当您在控制台中运行代码时,127.0.0.1 指的是您正在使用的 PC,并且可能是 TCP 服务器正在运行的地方。

当您在 Android 上运行代码时,127.0.0.1 指的是 Android 设备本身。您的错误消息显示“连接被拒绝”。那是因为您的 TCP 服务器未在 Android 设备上运行。它正在您的 PC 上运行。

您需要知道您的 Android 设备可以使用哪个 IP 地址连接到您的 PC。

如果您使用的是真正的 Android 设备,则需要将 Android 设备通过 WiFi 连接到与 PC 相同的网络。然后您可以在代码中使用 PC 的 IP 地址。

对于模拟器来说,有几种可能性:

  1. Google 模拟器:10.0.2.2 是从 Android 中看到的 PC 地址。
  2. 微软模拟器:169.254.80.80是从Android上看到的PC地址。

(模拟器地址取自here. https://forums.xamarin.com/discussion/87881/cant-access-localhost-from-android-windows-emulator)

确保将 TCP 服务绑定到所有 IP 地址,而不仅仅是 127.0.0.1。

另一种解决方案是使用 adb 在 Android 设备上设置端口转发(无论是模拟的还是真实的)。 https://stackoverflow.com/questions/13401161/android-to-computer-via-tcp-ip


我认为“主线程上的网络访问”这个事情更多的是一个“不应该”的问题,而不是“不能”的问题。 Ömer Baş 提到的问题显示“权限被拒绝”错误,而不是指向线程问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TCP 套接字实现在 Xamarin.Android 中的工作方式是否不同? 的相关文章

  • Android 导航 DeepLinks - 如何区分使用导航操作进行导航与深层链接

    我有导航操作和深层链接 根据您导航的位置 将您带到某个片段 我想确定是使用了深层链接还是仅使用了导航操作 这正是KEY DEEP LINK INTENT https developer android com reference andro
  • 地理围栏不可用以及如何处理

    我正在 Android 上使用地理围栏 它在大多数手机上都工作正常 但在其中一些上 它不起作用 在我的错误日志中显示 地理围栏不可用 某些用户没有为 Google Play 服务启用位置跟踪 我认为这就是地理围栏在他们的手机上不起作用的原因
  • 布局聊天气泡问题:TextView 占满整个屏幕

    我正在研究泡泡聊天 我使用具有两种布局的适配器 一种用于传入消息 另一种用于我的消息 适配器工作正常 我的问题在于传入布局 无法很好地显示传入时间文本 当消息文本增长时 会填满屏幕的整个宽度 并隐藏消息时间的文本 第一个问题 如何才能实现这
  • Google 的 Android OpenGL 教程是否教授了错误的线性代数?

    在帮助另一位用户解决有关该问题的问题后响应触摸事件 http developer android com training graphics opengl touch htmlAndroid教程 我下载了源代码 并且对我所看到的感到非常困惑
  • 获取接收者的设备令牌以在 Firebase 中发送通知

    所以我正在学习如何使用 firebase 发送设备到设备的通知 我看到了这个answer https stackoverflow com a 42548586 5237289发送通知 看起来很简单 现在 我知道要获取发件人的令牌 它应该如下
  • 打开位置设置页面或提示用户启用位置

    我一直在绞尽脑汁 徒劳地谷歌搜索 我正在尝试找到一种方法来提示用户通过直接进入设置页面或仅点击屏幕上的 是 来切换位置 我见过的所有代码似乎都不起作用 有人有有效的方法吗 一个详细的例子将不胜感激 谢谢 我对 Xamarin 开发非常陌生
  • 什么是版本代码主要?和versionCode有什么区别?

    我刚刚发现PackageInfo versionCode https developer android com reference android content pm PackageInfo html versionCode在 Andr
  • 多线程 - 比单线程慢

    当我使用多个线程而不是单线程运行程序时 它会变慢 不是应该更快吗 该程序应该遍历从起始目录开始的所有目录 并查找并打印所有名为 X 的文件 代码如下 while done pthread mutex lock lock if list is
  • C#生成的csv文件通过电子邮件发送嵌入到Lotus Note中电子邮件的底部

    我遇到了一个奇怪的问题 即使用 NET SmtpClient 通过电子邮件发送的 CSV 附件出现在电子邮件底部 而不是 Lotus Note 中的附件 我只是不知道如何解决这个问题 而且我无法访问客户端计算机 这使得调试非常困难 我可以采
  • 从二进制文件读取字节到 long int

    我有两个问题 我有二进制文件的数据 我想使用 read 函数读取前 8 个字节以签署 long int 但我不能 你知道我该怎么做吗 如何直接读取一块数据到字符串中 我可以像所示那样阅读吗 前任 ifstream is is open te
  • C# 反序列化过程中创建指向父对象的指针

    我有这样的课程 Serializable public class child public Parent parent Serializable public class Parent public List
  • Desire HD 中的应用程序崩溃

    由于某些莫名其妙的原因 我的应用程序在 HTC Desire HD 上崩溃了 它在其他手机和模拟器中运行良好 这是崩溃报告 java lang RuntimeException Unable to start activity Compon
  • 如何使 WinForms UserControl 填充其容器的大小

    我正在尝试创建一个多布局主屏幕应用程序 我在顶部有一些按钮链接到应用程序的主要部分 例如模型中每个实体的管理窗口 单击这些按钮中的任何一个都会在面板中显示关联的用户控件 面板包含用户控件 而用户控件又包含用户界面 WinForms User
  • 如何像UCBrowser一样使用webview打开url

    我是安卓新手 我正在尝试制作一个示例应用程序来在 webview 中打开网站 问题是 网站以桌面模式打开 如何才能像UC浏览器 手机模式 一样打开网站 尝试这个 它应该有效 webview1 getSettings setJavaScrip
  • Web API 2.0 使用 pascalcase 模型接收驼峰式命名的 JSON 数据

    我正在尝试对我的 Web API 进行 PUT 调用 我在 WebApiConfig cs 中设置了以下内容 以处理以驼峰形式将数据发送回我的 Web 项目 config Formatters JsonFormatter Serialize
  • 在两个点之间创建一条曲线,每个点都具有标准化向量

    因此 我需要一种写入方法来在两点之间创建一条曲线 每个点都有一个指向任意方向的归一化向量 我一直在尝试设计这样一种方法 但一直无法理解数学 在这里 由于一张图片胜过一千个文字 这就是我所需要的 在图中 矢量垂直于红线 我相信向量需要进行相同
  • 无法 ACTION_VIEW 外部存储上的文件

    我的 Android 手机的外部存储中有一个文件 在本例中是模拟的 知道通往它的路径和 或拥有File代表它的对象 我如何使用Intent在适当的应用程序中打开它 我尝试的第一件事是 startActivity new Intent Int
  • Android:通过查找带有标签而不是 ID 的容器来添加片段

    我正在使用 for 循环创建片段的多个实例 在每个片段中 我需要添加另一组子片段 为此 我需要找到正确的容器 如果我使用容器的 ID 所有子片段都会添加到第一个父片段 而不是它们自己的父片段 在我的主要片段中 for ParentFragm
  • 线程安全的有限大小队列,不使用锁

    我正在尝试编写一个主题队列 但遇到死锁和其他多线程问题 我想用Interlocked CompareExchange避免lock用法 但这段代码并没有按预期工作 它只是擦除整个队列 我在这里做错了什么 public class FixedS
  • 查找和替换正则表达式问题

    感谢这里对我其他问题的所有大力帮助 我开始掌握正则表达式 但我仍然对这个一无所知 我的代码是 StreamReader reader new StreamReader fDialog FileName ToString string con

随机推荐

  • 优化 PHP 字符串连接 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 这篇文章实际上并不是一个问题 但分享
  • SQLSTATE[23000]:违反完整性约束:19 NOT NULL 约束失败:

    尝试在 Laravel 上创建一个待办事项列表应用程序 但是当我尝试单击按钮创建一个新的待办事项列表时 我收到此错误 SQLSTATE 23000 Integrity constraint violation 19 NOT NULL con
  • jQuery 中的 ConfigurationManager.AppSettings

    我正在使用 mvc3 c 配置管理器中的应用程序设置在控制器中运行良好 但我想在我的 jquery 中使用这些常量 有没有办法在 jQuery 中使用 ConfigurationManager AppSettings 提前致谢 希望这对您有
  • 多部分/表单数据与应用程序/八位字节流

    我正在创建一个简单的REST API用于上传文件 从其他 API 中我发现他们使用 multipart form data 内容类型 但对我来说 它看起来像 application octet stream 就简单多了 如果我不打算随文件发
  • 为什么alloc方法可以增加retain count

    当我们打电话时alloc对于一个类 我知道对象的计数将 1 例如 NSObject obj NSObject alloc obj的引用计数将为1 我阅读了源代码 但找不到一些代码可以告诉我为什么alloc可以添加引用计数 还有一些博客说al
  • 如何将依赖项注入存储库基类

    各种种类 EnableXXXRepositorySpring Data 的注释允许您为存储库指定自定义基类 该基类将用作存储库中方法的实现 如果这样的基类需要访问其他beanApplicationContext如何注射这些药物 它不能开箱即
  • 创建新数据库时的最佳 ANSI 选项

    我正在为我们的生产环境在 SQL Server 2012 上创建一个新数据库 当我使用 SQL Server Management Studio 中的 新数据库 选项并生成输出时 我得到 CREATE DATABASE AAA CONTAI
  • makefile:如何链接不同子目录中的目标文件并包含不同的搜索路径

    我想更改测试代码的位置 tsnnls test DKU c 并且我无法在 makefile 中进行更改以正确反映此文件夹更改 一些帮助将不胜感激 我有两个问题 1 如何链接不同子目录中的目标文件 2 包含不同的搜索路径 在我的示例中为 3
  • 如何按嵌套多重集中的值排序?

    An 先前的问题 https stackoverflow com questions 69552492 jooq multiset order result set via conditions on multiset涵盖如何使用 jOOQ
  • 在 React Native 应用程序中读取 NFC 标签

    我想制作一个可以读取 NFC 标签的反应本机应用程序 我在用反应本机 NFC但无法让它工作 谁能帮助找出我做错了什么并指出我正确的方向 Code in 索引 android js如下 import React Component from
  • 用类装饰器覆盖构造函数?

    如何使用 ES7 类装饰器重写构造函数 例如 我想要这样的东西 injectAttributes foo 42 class Bar constructor console log this foo 哪里的injectAttributes装饰
  • 使用多线程访问同一个字符串(StringBuilder)

    我的问题是 如果我有时在同一个字符串上使用多线程 该字符串不会被替换 我在记事本上写了这个 所以语法可能是 wrong 使用 System Thread 当然还有其他 class private static StringBuild con
  • 如何在 C++ 中使用 malloc() [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如何使用malloc 在C 程序中
  • 在 javaScript 中使用 for 循环时,如何为特定元素设置属性?

    下面我有一个分配给变量的函数 本质上我让它工作 将属性应用于元素集合 我的问题是我希望将设置为属性的元素与我传递给函数的字符串相匹配 我知道问题就在这里 document links i setAttribute target blank
  • 带参数的 Kivy 按钮绑定函数

    我正在尝试学习如何在 Kivy 中创建应用程序 但在向函数发送参数时遇到问题 我想将输入中的文本发送到函数并打印它 有人可以告诉我该怎么做吗 from kivy app import App from kivy uix boxlayout
  • XCode6.3可以配合IOS7.1 SDK使用吗

    是否可以将 XCode6 beta 与 IOS 7 1 SDK 一起使用 新工具好多了 但我需要为 IOS7 构建 是的 1 首先下载7 1 SDK XCode6Beta gt 首选项 gt 下载 gt iOS 7 1 模拟器 Note X
  • 存储库模式可以用于加载“部分实体”吗

    我试图更好地理解领域驱动设计中的存储库模式 存储库模式实现的所有示例都仅处理实体 但是如果我只需要检索实体的某些部分怎么办 例如 我有具有大量属性的客户端实体 我可以在 ClientRepository 中定义这样的东西吗 public I
  • __stdcall 函数指针的模板部分特化

    typedef bool my function f int double typedef bool stdcall my function f2 int double template
  • Java: 之间有什么区别?

    我无法理解以下文字 这是否意味着
  • TCP 套接字实现在 Xamarin.Android 中的工作方式是否不同?

    我正在尝试使用以下命令在我的 Xamarin Android 应用程序中建立 TCP 连接System Net Sockets TcpClient 当我在控制台应用程序上执行此操作时 连接非常好 但是 当我在 Android 应用程序中使用