【问题标题】:Can't send data android to pc over TCP无法通过 TCP 将数据 android 发送到 pc
【发布时间】:2016-08-17 22:14:06
【问题描述】:

我正在尝试通过TCP 将数据从我的Android app 发送到我的PC。我用 PC 到 PC 进行了测试并且工作正常。但是当我尝试从 Android 发送到 PC 时,Android 卡住了。 PC sockets和android sockets有什么区别,我该如何解决?

服务器

byte[] buffer = new byte[1000];

IPAddress ipAddress = IPAddress.Parse("XXX.XXX.XXX.XXX");
IPEndPoint localEndpoint = new IPEndPoint(ipAddress, 8080);

Socket sock = new Socket(ipAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp);


sock.Bind(localEndpoint);
sock.Listen(5);

Socket confd = sock.Accept();

while (true) {
    string data = null;
    int b = confd.Receive(buffer);
    data += Encoding.ASCII.GetString(buffer, 0, b);
    Console.WriteLine("" + data);
}

客户端安卓

IPAddress ipAddress = IPAddress.Parse("XXX.XXX.XXX.XXX");
IPEndPoint ipEndpoint = new IPEndPoint(ipAddress, 8080);

Socket client = new Socket(ipAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp);


try {

    client.Connect(ipEndpoint);
    string message = "What can i send for you?";
    byte[] sendmsg = Encoding.ASCII.GetBytes(message);
    int n = client.Send(sendmsg);
}
catch (Exception e) {
    Toast.MakeText(Application.Context, e.ToString(), ToastLength.Short).Show();
}

【问题讨论】:

  • 在处理网络通信时,首先检查基础知识总是有帮助的。确保没有防火墙或网络路由器阻止。尝试不同的端口(8080 很常见)。尝试不同的 IP 地址。确保您的 IP 地址在客户端和服务器中正确。您说您尝试过 PC -> PC,但这是在同一台 PC 上还是在不同的 PC 上?如果相同,请尝试不同。等等
  • 我检查了所有,仍然可以工作 PC -> PC 但不是 Android -> PC。
  • 大多数路由器不允许从 Wifi 到有线(PC?)网络的流量。确保它也有效。顺便说一句:IP 地址应该是本地地址 (192.168.x.x / 10.x.x.x) - 你不必屏蔽它们。
  • 你是对的!无论如何我如何检查它?我现在没有 Wifi 选项。我的手机正在使用移动数据。
  • 看起来是这样! Hostednetwork帮助了我。感谢所有有用的 cmets。如果您添加答案,我可以接受。

标签: c# android sockets xamarin tcp


【解决方案1】:

答案只是总结了 cmets 中所说的内容。

问题似乎不是编程问题,而是网络配置问题。

在进行任何类型的网络通信时,从基础开始尝试追踪任何问题总是有帮助的。

  1. 检查您的防火墙是否阻止任何流量。
  2. 检查您的路由器没有阻塞任何流量。
  3. 更改您使用的端口,特别是如果它是一个常见的端口,例如 8080,因为它可能正在被其他应用程序使用。
  4. 如果使用主机名,请尝试直接使用 IP 地址
  5. 尝试更改您的 IP 地址(如果使用动态地址)

因为这在同一主机上进行 PC -> PC 测试时有效,然后在同一网络上的两台不同 PC 之间尝试相同的测试。这将帮助您找出是否是网络问题。

在这种情况下,您似乎是通过移动网络访问,那么您必须使用您的公共 IP 地址而不是您的私有本地 IP 地址。要找到这个有很多服务,例如https://www.whatismyip.com 然后还要确保您的路由器和防火墙允许流量通过您的本地 PC 并根据需要进行端口转发。

为避免通过移动网络,您还可以尝试通过 USB 将手机连接到 PC 并通过这种方式联网。
该站点应该可以帮助您配置您的 PC 和手机以允许这样做:https://android.stackexchange.com/questions/73168/how-to-use-pcs-internet-on-android-phone-through-usb-cable

【讨论】:

  • 请注意:不需要 USB 连接。只需将您的 PC 上的网络托管为 here
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-30
  • 1970-01-01
相关资源
最近更新 更多