无法通过TCP将数据android发送到pc

时间:2016-08-17 09:16:07

标签: c# android sockets xamarin tcp

我正在尝试通过Android appPC的数据发送到TCP。我用 PC到PC 进行了测试,工作正常。但是当我尝试从 Android发送到PC 时,Android就会卡住。 PC套接字和Android套接字之间有什么区别吗?我该如何解决?

服务器

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);
}

客户端Android

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();
}

1 个答案:

答案 0 :(得分:0)

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

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

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

  1. 检查防火墙是否阻止任何流量。
  2. 检查您的路由器是否阻止了任何流量。
  3. 更改您使用的端口,特别是如果它是常见的端口,例如 8080,因为它可能被其他应用程序使用。
  4. 如果使用主机名,请尝试直接使用IP地址
  5. 尝试更改您的IP地址(如果使用动态地址)
  6. 因为这在使用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