編輯:關於Android編程
客戶端通常可以使用Socket的構造器來鏈接到指定的服務器。
下面演示一下,Android端鏈接到服務器,同時,用服務器給Android發送一條消息:
1)服務器端
2)Android端
1)服務器端
編寫過程中遇到的一個小問題:java.net.BindException: Address already in use: JVM_Bind,分析出現這個問題的原因,一般有如下幾種:
①)原因:端口已被占用。
解決方案:換一個端口。
②)原因:變量定義位置問題(我不知道是不是這個問題,可能是,我開始出現這個問題的時候,換了幾個端口還是沒解決,後來我將變量定義在外面,就解決了)
解決方案:將變量定義在外部。

package dujun.king.javaee;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class CServer {
public static void main(String[] args){
//創建一個ServerSocket,用於監聽客戶端Socket的鏈接請求
//本機IP: 169.254.49.31
ServerSocket ss=null;
Socket s = null;
OutputStream os = null;
//采用循環不斷的接受來自客戶端的請求
while (true)
{
try {
System.out.println(等待客戶端的鏈接....);
ss = new ServerSocket(9527);
//每當接收到客戶端Socket的請求,服務器也對應產生一個Socket
s = ss.accept();
System.out.println(客戶端已鏈接....);
os = s.getOutputStream();
os.write(您好,收到一條信息!.getBytes(utf-8));
//關閉輸出流,關閉Socket
os.close();
s.close();
ss.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
2)Android端
編寫過程中遇到的一個小問題,就是(我用真機)一直連接不上服務器,我當時以為不是ip地址的問題,我先後換了好幾個都沒用(包括我聯網後的ip 113.132.174.158,沒聯網時的ip 169.254.49.31)。
解決方案:添加一個模擬器,不用真機模擬。(使用:169.254.49.31 測試成功,如下圖)

a) xml布局代碼:
b)MainActivity.java代碼:
package client.dujun.king.tcp;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.Socket;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.EditText;
public class MainActivity extends Activity {
EditText show;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
show = (EditText)findViewById(R.id.show);
new Thread()
{
@Override
public void run()
{
try {
//建立連接到遠程服務器的Socket
Socket socket = new Socket(169.254.49.31,9527);
//將Socket對應的輸入流包裝成BufferedReader
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//進行普通的I/O操作
String line = br.readLine();
show.setText(來自服務器的數據:+line);
br.close();
socket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}.start();
}
@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;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
c) AndroidMainiFest.xml 權限設置代碼:
Android編程實現自定義ProgressBar樣式示例(背景色及一級、二級進度條顏色)
本文實例講述了Android編程實現自定義ProgressBar樣式。分享給大家供大家參考,具體如下:效果圖如下,本例中設置了第一級進度條和第二級進度條。樣式資源:pro
android_handler(一)
只是一個簡單的handler的例子,目的就是對handler有一個初步的接觸。 在layout上添加一個button,點擊按鈕,然後打印出利用handler傳送的數據。(
ContentProvider
API IntroductionContent providers are one of the primary building blocks(構件) of Andro
iOS/Android 浏覽器(h5)及微信中喚起本地APP
在移動互聯網,鏈接是比較重要的傳播媒質,但很多時候我們又希望用戶能夠回到APP中,這就要求APP可以通過浏覽器或在微信中被方便地喚起。這是一個既直觀又很好的用戶體驗,但在