work hard work smart

专注于Java后端开发。 不断总结,举一反三。
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Android 网路编程

Posted on 2013-04-03 15:17  work hard work smart  阅读(369)  评论(0编辑  收藏  举报

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的网络通信