现在有这样的一些需求,本人学的java,自学android开发,拿到以下的需求时,第一个功能可以调用系统api查看是否已经连接到wifi,也应该可以看到手机ip 
第二个功能首先想到的是socketserver,但是不知道在wifi环境下一台android手机当服务器,另外一台当客户端访问
第三个功能看起来有点像飞秋,不知道怎么实现
第四个功能想到的是通过加密算法实现,比如3ds希望各位大牛有想法和意见不吝指导
1、程序能检测本手机是否已经连接上WIFI网络且能方便地查看到本手机的IP地址
2、输入对方IP地址以后可以与对方进行文字消息通信
3、用户可以方便地选定欲发送给接收方的文件,接收方可以选择接收或者拒绝(接收的文件存在预先假定的目录或者允许用户选择目录)
4、本程序所发出的文字消息与文件传输内容均应是经过加密的无法直接查看原来的内容

解决方案 »

  1.   

    你这说的几点技术上都和java没什么差异,查看wifi是否连接,手机ip地址
    public String getIpAddress(){
            String ipAddress = "";
            try{
                ipAddress = wifiIpAddress();
                if(ipAddress!=null&&ipAddress.trim().length()>0){
                }else{
                    ipAddress = this.GPRSIpAddress();
                }
            }catch(Exception ex){
                
            }
            return ipAddress;//有IP返回就联网
        }
        private String wifiIpAddress(){
            String ip = "";
            //获取wifi服务
            WifiManager wifiManager = (WifiManager)(context).getSystemService(Context.WIFI_SERVICE);
            //判断wifi是否开启
            if (wifiManager.isWifiEnabled()) {
                //wifiManager.setWifiEnabled(true);  
                WifiInfo wifiInfo = wifiManager.getConnectionInfo();     
                int ipAddress = wifiInfo.getIpAddress(); 
                ip = intToIp(ipAddress);
            }
            return ip;
        }
        private String intToIp(int i) {
            return (i & 0xFF ) + "." +     
          ((i >> 8 ) & 0xFF) + "." +     
          ((i >> 16 ) & 0xFF) + "." +     
          ( i >> 24 & 0xFF) ;
        }
        
        private String GPRSIpAddress(){
            try{
                for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();){
                   NetworkInterface intf = en.nextElement();
                   for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();){
                       InetAddress inetAddress = enumIpAddr.nextElement();
                       if (!inetAddress.isLoopbackAddress()){
                           return inetAddress.getHostAddress().toString();
                       }
                   }
               }
            }catch (SocketException ex){
                Log.d("GPRSIpAddress IpAddress", ex.toString());
            }
            return "";
        }
    另外配上
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />  
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>  
    这三个权限别把wifi和手机的gprs网络看得这么神秘,说白了还是网络。
    只要有一台公网IP地址的,相互socket都没问题。
    如果没有公网IP,那就只能局域网了。
    加密解密无非是你文本的转化。,只要客户端和服务器端有对应的加密和解密算法就可以了。
      

  2.   

    嗯嗯。。没有公网ip地址,也就是没有自己的网站的话。。只能在局域网之间自个儿玩文件传输你可以看看ftps协议的一些思想,可以基于tcp定制自己指定的协议
      

  3.   

    为什么我用wifi能通讯,用3g就通讯失败?建立连接后,一发送数据就失败!
      

  4.   

    可以的。聊天程序可以参考一下 openfire
      

  5.   

    我在想 如果在android上作为服务端的话,开多个模拟器可以连接吗?
      

  6.   

    openfire。我折腾了半天也弄不好那个sparks的聊天客户端幸好不是需求,要不得熬夜。
      

  7.   

    都已经实现,多客户端多线程等等,  android 连 PC没问题, 3G也可以连上,, 文件发送等都没问题。。就是 PC连 Android, 总是
    hp = gethostbyaddr((char*)&unAddr, sizeof(unAddr), AF_INET); 返回空,还有就是 ping 3G的地址 ping不通,  ping wifi地址没问题
      

  8.   

    http://topic.csdn.net/u/20120705/15/90ce6cb0-7d70-4438-8d73-f8cde3f10b71.html
    参考一下,也许是一个问题