Android 网路编程

简介:

1、获得网络信息

首先在AndroidManifest.xml中加入权限

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

 Code代码如下:

public  class  MainActivity extends  Activity {
 
     TextView netWorkTextView;
     ConnectivityManager cManager;
     NetworkInfo networkInfo;
     @Override
     protected  void  onCreate(Bundle savedInstanceState) {
         super .onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
         netWorkTextView = (TextView)findViewById(R.id.networkInfo);
         cManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
     }
     
     @Override
     protected  void  onStart()
     {
         super .onStart();
         networkInfo = cManager.getActiveNetworkInfo();
         netWorkTextView.setText(networkInfo.toString());   
     }
 
}

 显示入下图:代表的意思,采用WIFI连接,其它不解释。

 

2 .Socket的网络通信

1)服务端: 新建Android工程SocketServerDemo。

public  class  MainActivity extends  Activity {
 
     @Override
     protected  void  onCreate(Bundle savedInstanceState) {
         super .onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
         startService( new  Intent( this ,SocketService. class ));
     }
}

 SocketService类

public  class  SocketService extends  Service{
 
     Thread mServiceThread;
     Socket client;
     @Override
     public  IBinder onBind(Intent intent) {
         // TODO Auto-generated method stub
         return  null ;
     }
     
     @Override
     public  void  onCreate()
     {
         super .onCreate();
         mServiceThread = new  Thread( new  SocketServerThread());
     }
     
     public  class  SocketServerThread extends  Thread {
 
         private  static  final  int  PORT = 8801 ;
         private  SocketServerThread() {
             
         }
         
         @Override
         public  void  run() {
             // TODO Auto-generated method stub
             try  {
                 ServerSocket serverSocket = new  ServerSocket(PORT);
                 
                 while ( true )
                 {
                     System.out.println( "begin client connected" );
                     client = serverSocket.accept();
                     System.out.println( "client connected" );
                     
                     BufferedReader reader = new  BufferedReader(
                             new  InputStreamReader(client.getInputStream()));
                     System.out.println( "read from client:" );
                     String textLine = reader.readLine();
                     if  (textLine.equalsIgnoreCase( "EXIT" )) {
                         System.out.println( "EXIT invoed, closing client" );
                         break ;
                     }
                     System.out.println(textLine);
                     
                     PrintWriter writer = new  PrintWriter(
                             new  BufferedWriter( new  OutputStreamWriter(client.getOutputStream())));
                     writer.println( "ECHO from server: "  + textLine);
                     writer.flush();
                     writer.close();
                     reader.close();
                     
                 }
             } catch  (IOException e) {
                 // TODO: handle exception
                 System.err.println(e);
             }
         }
 
     }
 
}

 

2)客户端:新建Android工程SocketClientDemo

public  class  MainActivity extends  Activity {
 
     private  static  final  String SERVERIP = "192.168.1.100" ; //自己电脑的IP
     private  static  final  int  SERVERPORT = 8801 ;
 
     TextView mMsgRev;
     EditText mMsgEdit;
     Button mMsgSendBtn;
 
     String mSendMsg;
     String mReceivedMsg;
 
     @Override
     protected  void  onCreate(Bundle savedInstanceState) {
         super .onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
 
         mMsgRev = (TextView) findViewById(R.id.receive_msg);
         mMsgEdit = (EditText) findViewById(R.id.edit_msg);
         mMsgSendBtn = (Button) findViewById(R.id.send_msg);
         
         mMsgSendBtn.setOnClickListener( new  View.OnClickListener() {
             
             @Override
             public  void  onClick(View v) {
                 // TODO Auto-generated method stub
                 Socket socket = null ;
                 mSendMsg = mMsgEdit.getText().toString();
                 try  {
                     socket = new  Socket(SERVERIP, SERVERPORT);
                     
                     PrintWriter writer = new  PrintWriter(
                             new  BufferedWriter( new  OutputStreamWriter(socket.getOutputStream())));
                     writer.println(mSendMsg);
                     writer.flush();
                     
                     BufferedReader reader = new  BufferedReader( new  InputStreamReader(socket.getInputStream()));
                     mReceivedMsg = reader.readLine();
                     if  (mReceivedMsg != null ) {
                         mMsgRev.setText(mReceivedMsg);
                     }
                     else  {
                         mMsgRev.setText( "receive data error" );
                     }
                     writer.close();
                     reader.close();
                     socket.close();
                     
                 } catch  (UnknownHostException e) {
                     // TODO: handle exception
                     Log.i( "Error" , e.getMessage());
                 }
                 catch  (IOException e) {
                     // TODO: handle exception
                     Log.i( "Error" , e.getMessage());
                 }
             }
         });
 
     }
}

 其中客户端跑在我的平板上,服务端跑在我的手机上。然后再服务端的文本框中输入文本,点击Send按钮,最后会收到信息。

 注意:两个程序的端口号8801都是相同的,客户端的IP地址是我的电脑IP地址,两个程序都要有权限

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

  参考:基于Socket的网络通信


本文转自Work Hard Work Smart博客园博客,原文链接:http://www.cnblogs.com/linlf03/archive/2013/04/03/2997992.html,如需转载请自行联系原作者

目录
相关文章
|
7月前
|
Java 调度 Android开发
构建高效Android应用:探究Kotlin多线程编程
【2月更文挑战第17天】 在现代移动开发领域,性能优化一直是开发者关注的焦点。特别是在Android平台上,合理利用多线程技术可以显著提升应用程序的响应性和用户体验。本文将深入探讨使用Kotlin进行Android多线程编程的策略与实践,旨在为开发者提供系统化的解决方案和性能提升技巧。我们将从基础概念入手,逐步介绍高级特性,并通过实际案例分析如何有效利用Kotlin协程、线程池以及异步任务处理机制来构建一个更加高效的Android应用。
|
7月前
|
Ubuntu 网络协议 Java
【Android平板编程】远程Ubuntu服务器code-server编程写代码
【Android平板编程】远程Ubuntu服务器code-server编程写代码
|
7月前
|
存储 Java Android开发
OpenCV3 安卓应用编程:1~6 全
OpenCV3 安卓应用编程:1~6 全
50 0
|
7月前
|
存储 算法 开发工具
OpenCV 安卓编程示例:1~6 全
OpenCV 安卓编程示例:1~6 全
155 0
|
7月前
|
Java 调度 数据库
Android 性能优化: 如何进行多线程编程以提高应用性能?
Android 性能优化: 如何进行多线程编程以提高应用性能?
113 0
|
5月前
|
移动开发 开发工具 Android开发
探索安卓与iOS开发的差异:平台特性与编程实践
【7月更文挑战第8天】在移动开发的广阔天地中,安卓和iOS这两大操作系统各自占据着半壁江山。它们在用户界面设计、系统架构及开发工具上展现出截然不同的特色。本文将深入探讨这两个平台在技术实现和开发生态上的关键差异,并分享一些实用的开发技巧,旨在为跨平台开发者提供有价值的见解和建议。
|
6月前
|
安全 IDE Android开发
探索Android与iOS开发的差异:平台特性与编程实践
【6月更文挑战第17天】在移动应用开发的广阔天地中,Android和iOS两大平台各自占据半壁江山。它们在用户群体、系统架构以及开发环境上的差异,为开发者带来了不同的挑战和机遇。本文深入探讨了这两个平台在技术实现、界面设计、性能优化等方面的主要区别,并提供了实用的开发建议,旨在帮助开发者更好地理解各自平台的特性,从而创造出更加优秀的移动应用。
|
7月前
|
Java Android开发 Dart
50家大厂面试万字精华总结android编程基础学习
50家大厂面试万字精华总结android编程基础学习
|
7月前
|
Ubuntu Android开发 数据安全/隐私保护
【Android平板编程】远程Ubuntu服务器Code-Server编程写代码
【Android平板编程】远程Ubuntu服务器Code-Server编程写代码
103 0
|
7月前
|
Ubuntu 网络协议 Java
在Android平板上使用code-server公网远程Ubuntu服务器编程
在Android平板上使用code-server公网远程Ubuntu服务器编程