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,如需转载请自行联系原作者

目录
相关文章
|
1月前
|
Ubuntu 网络协议 Java
【Android平板编程】远程Ubuntu服务器code-server编程写代码
【Android平板编程】远程Ubuntu服务器code-server编程写代码
|
1月前
|
Ubuntu 网络协议 Java
在Android平板上使用code-server公网远程Ubuntu服务器编程
在Android平板上使用code-server公网远程Ubuntu服务器编程
|
7月前
|
Android开发
Android获取已连接wifi的热点信息(上位机开发学习之多个界面切换编程)
Android获取已连接wifi的热点信息(上位机开发学习之多个界面切换编程)
190 0
|
8月前
|
IDE Java 开发工具
在Android Studio中进行JNI编程
在Android Studio中进行JNI编程
|
12月前
|
缓存 监控 Linux
Android C++系列:Linux Socket编程(四)多路IO转接服务器
select能监听的文件描述符个数受限于FD_SETSIZE,一般为1024,单纯改变进程打开 的文件描述符个数并不能改变select监听文件个数
94 0
|
12月前
|
网络协议 Linux API
Android C++ 系列:Linux Socket 编程(三)CS 模型示例
服务器调用socket()、bind()、listen()完成初始化后,调用accept()阻塞等待,处于 监听端口的状态,客户端调用socket()初始化后,调用connect()发出SYN段并阻塞等待服 务器应答,服务器应答一个SYN-ACK段,客户端收到后从connect()返回,同时应答一个ACK 段,服务器收到后从accept()返回。
125 0
|
12月前
|
网络协议 Unix Linux
Android C++ 系列:Linux Socket 编程(二)网络套接字函数
socket()打开一个网络通讯端口,如果成功的话,就像open()一样返回一个文件描 述符,应用程序可以像读写文件一样用read/write在网络上收发数据,如果socket()调 用出错则返回-1。对于IPv4,domain参数指定为AF_INET。对于TCP协议,type参数指定为 SOCK_STREAM,表示面向流的传输协议。如果是UDP协议,则type参数指定为SOCK_DGRAM,表 示面向数据报的传输协议。protocol参数的介绍从略,指定为0即可。
156 0
|
12月前
|
网络协议 Unix Linux
Android C++ 系列:Linux Socket 编程(一)预备知识
为使网络程序具有可移植性,使同样的C代码在大端和小端计算机上编译后都能正常运 行,可以调用以下库函数做网络字节序和主机字节序的转换。
167 0
|
Ubuntu 物联网 Android开发
QT应用编程: 编写低功耗BLE蓝牙调试助手(Android系统APP)
QT应用编程: 编写低功耗BLE蓝牙调试助手(Android系统APP)
1403 0
QT应用编程: 编写低功耗BLE蓝牙调试助手(Android系统APP)
|
Android开发 异构计算
Android OpenGL ES(八)----纹理编程框架(二)
Android OpenGL ES(八)----纹理编程框架(二)
160 0
Android OpenGL ES(八)----纹理编程框架(二)