智能手机和计算机之间的套接字连接不起作用

时间:2016-07-04 22:07:39

标签: java c# sockets router

我有一个C#WPF应用程序,它使用TCPListener在我的计算机中启动服务器,以及一个用作客户端的Android应用程序。当我启动服务器并在我的计算机中模拟应用程序时,它工作正常,但大多数时候,当我使用智能手机连接到我的计算机时,它只是不起作用,它只在我重新启动路由器DHCP后工作了一段时间我的智能手机。

如果需要,这是连接代码

服务器:

private static IPAddress ipAd;
private static TcpListener server;
private static TcpClient client;

public static void start() {
    //Already tried with both
    ipAd = IPAddress.Parse(TCPServer.GetLocalIPAddress());
    //ipAd = IPAddress.Parse("127.0.0.1"); 

    server = new TcpListener(ipAd, 1209);
    client = default(TcpClient);
    try {
         server.Start();
        Console.WriteLine("Server started");
    } catch {
        Console.WriteLine("Failed to start server");
    }

客户端:

Socket socket = null;
String response = new String();
try{
    //connect This ipAddress is the same in my desktop
    InetAddress ipAd = InetAddress.getByName(ipAddress);
    socket = new Socket(ipAd, 1209);
    //send
    DataOutputStream DOS = new DataOutputStream(socket.getOutputStream());
    DOS.write(message.getBytes());
}
...

感谢您的时间,我应该更多地致力于我的计算机网络课程......

我应该重定向某个特定端口吗?在我的路由器/防火墙中有一些特定的配置?我想我错过了什么

1 个答案:

答案 0 :(得分:0)

当您的设备在IP路由方面位于同一网络中时,这将起作用。然而,即使是最简单的SOHO级WiFi路由器/ AP的一部分也能够实现所谓的设备隔离,从而拒绝来自WiFi设备的访问,这些设备在它们之间或与以太网连接的客户端之间进行访问。

要使此设置可靠地运行,您需要确保以下内容:

  1. 在移动应用程序中使用路由器的外部地址。 (您可以发现它从服务器浏览http://whatismyip.org

  2. 在路由器中将特定端口的端口转发设置为内部网络中的特定IP。

  3. 对于私有源代码,您宁愿在服务器应用程序中使用0.0.0.0作为绑定地址,因为默认的.NET实现将选择第一个可用的IP地址,它可能不是您所在的地址用于移动应用程序中的连接或与同一网络无关。在复杂的网络设置情况下,这种方法可能具有安全性和便利性(共存)问题,但对大多数情况都有效。