2015-07-13 95 views
0

在我的应用程序中有一台PC(赢得7作为网络服务器)和1 - n的Android设备(作为客户端)。
网络是通过调制解调器/路由器。 android设备应该连接到PC并发送/接收数据。
,我有问题是,调制解调器/路由器分配给PC的IP是每次不同的网络复位
,所以我想用PC-名称连接到PC,如:连接到PC与计算机名称

public static String ServerAddress = "Reza-PC"; 

或找到一种方法,将计算机名称转换为计算机IP。
我该怎么做(如果甚至可能的话)?

回答

0

考虑使用WAN IP将路由器外部的服务器PC连接起来。你也需要执行port forwarding

+0

感谢。但是应该是本地的。我知道端口转发是什么,但我怎么用它来解决我的问题? – ReZa

+0

您可以手动设置您的计算机的IP地址(为了防止它有随机的IP地址),然后尝试连接。 – Taha

+0

或者,您可以为本地电脑设置一个域名。我发现[这](http://lifehacker.com/124804/geek-to-live--how-to-assign-a-domain-name-to-your-home-web-server)。希望这可以帮助。 – Taha

0

您可以使用JCIFS库实现CIFS/SMB网络协议......简而言之,它允许您通过网络和/或具有共享文件夹的Windows PC发送和接收文件。

实施例:

private boolean startSmbTransfer(String filename) { 

    boolean IS_SUCCESS = true; 
    File sourse = new File(Environment.getExternalStorageDirectory() 
      + "/FolderName/" + filename); 

    final String NETWORK_FOLDER = "smb://PC-NAME/FOLDER-NAEME/"; 

    SmbFileOutputStream sfos = null; 
    InputStream is = null; 
    try { 

     NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(
       null); 
     String path = NETWORK_FOLDER + sourse.getName(); 
     System.out.println("Path: " + path); 

     SmbFile sFile = new SmbFile(path, auth); 
     sfos = new SmbFileOutputStream(sFile); 

     byte[] buf = new byte[512]; 
     is = new FileInputStream(sourse); 
     int c = 0; 
     while ((c = is.read(buf, 0, buf.length)) > 0) { 
      sfos.write(buf, 0, c); 
      sfos.flush(); 
     } 

    } catch (Exception e) { 
     e.printStackTrace(); 
     IS_SUCCESS = false; 
    } finally { 
     try { 
      sfos.close(); 
      is.close(); 
     } catch (Exception e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
      IS_SUCCESS = false; 
     } 
    } 
    return IS_SUCCESS; 
} 

检查下面的链接详细信息和例如使用该库, using JCIFS library in android

+0

我不需要文件共享。我想连接到网络服务器。 – ReZa