参考资料:http://www.oschina.net/question/54100_30830、http://blog.sina.com.cn/s/blog_685790700100xjuo.html
摘录自参考资料:
根据之前的经验,应用软件的网络通信无非就是Socket和HTTP,其中Socket又可以用TCP和UDP,HTTP的话就衍生出很多方式,基础的HTTP GET和POST请求,然后就是WebService的SOAP。
在这些方式中,Socket当然是最基础的。因此先从Socket开始。
服务端就不需要过多的说明了,无论采用什么语言什么平台都可以,只要遵循基本的Socket监听模式就行。
实际上Android的Socket开发就是Java的Socket开发,因此学习过Java的开发人员也许觉得并没有什么难度,不过依然有一些不同于PC开发的地方需要注意。
根据以上的关键词,我们可以搜索android的Socket、HTTP编程!!!
下面是简单发送一个字符'A'到电脑的例程!其中的地址就是你主机的地址!!!
package com.example.com.rianboe.wifi.ch01;
import java.io.DataOutputStream;
import java.net.Socket;
import com.example.com.rianboe.wifi.ch01.R.id;
import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Menu;
import android.widget.Button;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button senddata = (Button) findViewById(id.sendbutton);
senddata.setOnClickListener(alllistener);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
private OnClickListener alllistener = new OnClickListener()
{
@Override
public void onClick(View arg0)
{
// TODO Auto-generated method stub
SendToServer();
}
};
public void SendToServer()
{
// TODO Auto-generated method stub
String ip = "10.50.95.57";
try
{
Socket sc = new Socket(ip, 8080);
DataOutputStream output = new DataOutputStream(sc.getOutputStream());
output.writeByte('A');
output.close();
sc.close();
} catch (Exception e)
{
// TODO: handle exception
e.printStackTrace();
}
}
}
UI界面:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<TextView
android:id="@+id/ideal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:text="@string/hello_world" />
<Button
android:id="@+id/sendbutton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/ideal"
android:layout_centerHorizontal="true"
android:layout_marginTop="58dp"
android:text="SendData" />
</RelativeLayout>
完成上述编码,下载到手机后发送数据,log会提示权限不够!
11-21 20:47:36.929: W/System.err(21935): java.net.SocketException: Permission denied
经百度后需要在mainfest中添加:<uses-permission android:name="android.permission.INTERNET"/>
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.com.rianboe.wifi.ch01"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="10"
android:targetSdkVersion="10" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.com.rianboe.wifi.ch01.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-permission android:name="android.permission.INTERNET"/>
</manifest>
至此手机按下senddata就会发送字符到电脑,一开始可以使用网络调试助手查看!