2014-04-08 45 views
1

我正在开发一个Android应用程序。有一台设备作为服务器。客户端设备可以连接到服务器设备。我想通过局域网来完成。我不确定这是最好的方式,但我开始做一个基于套接字的通信。客户端无法连接到服务器套接字 - Android

这里是我的服务器线程:

@Override 
public void run() { 
    Socket socket = null; 
    try { 
     serverSocket = new ServerSocket(7777); 
     while (!Thread.currentThread().isInterrupted()) { 
      try { 
       socket = serverSocket.accept(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

而且我有一个其他线程的通信...


现在,这里是我的客户线程:

public void run() { 
     try { 
      InetAddress serverAddress = InetAddress.getByName("10.0.2.2"); 
      socket = new Socket(serverAddress, 7777); 
      writer = new PrintWriter(new BufferedWriter(
        new OutputStreamWriter(socket.getOutputStream())), true); 
      writer.println("Hello!"); 
      writer.flush(); 
     } catch (UnknownHostException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

问题是当客户端尝试连接到服务器时连接将会超时。


编辑:权限:

<uses-permission 
    android:name="android.permission.INTERNET"/>  
<uses-permission 
    android:name="android.permission.ACCESS_NETWORK_STATE"/> 
+0

你能通过telnet连接到10.0.2.2:7777吗?如果您知道serverAddress IP,则不需要使用get ByName()。您可以连接新的套接字(“10.0.2.2”,7777)。 – SpeedEX505

+0

我不行。我收到了以下消息:“正在连接到10.0.2.2 ...无法打开与主机的连接,端口7777:连接失败” – Lyra

回答

0

最后我解决它。我停止用模拟器吮吸。我有2个Android设备。我将下一个代码添加到服务器:

public static String getIPAddress() { 
    try { 
     List<NetworkInterface> interfaces = Collections.list(
       NetworkInterface.getNetworkInterfaces()); 
     for (NetworkInterface networkInterface : interfaces) { 
      List<InetAddress> addresses = Collections.list(
        networkInterface.getInetAddresses()); 
      for (InetAddress inetAddress : addresses) { 
       if (!inetAddress.isLoopbackAddress()) { 
        String sAddress = inetAddress.getHostAddress().toUpperCase(); 
        if (InetAddressUtils.isIPv4Address(sAddress)) { 
         return sAddress; 
        } else { 
         int delim = sAddress.indexOf('%'); 
         return delim < 0 ? sAddress : sAddress.substring(0, 
           delim); 
        } 
       } 
      } 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return ""; 
} 

现在我可以得到服务器地址,看起来像:192.168.1.X.我把它放在服务器设备上的TextView上,客户端必须输入这个IP才能连接到服务器。这对我来说就够了,因为我想在本地网络上使用它。

相关问题