Android作為完全開源的手機平台,已經被非常多的開發者視作未來最有潛力的智能手機操作系統。而且短時間內已經有大量的第三方應用程序出現在Android Market供用戶下載和使用,其中有一些程序增強了手機的應用功能,而另外一些會充分的發揮手機與其它電子設備的互動。今天將主要通過兩個例子講解如何實現Android與PC通訊。
1. Android與PC通訊的第一個例子:
- PC: Java Server
- Android:Java Client
Java Server 源代碼:
01.
public
class
TCPDesktopServer
implements
Runnable{
02.
03.
public
static
final
String SERVERIP =
"192.168.0.149"
;
04.
public
static
final
int
SERVERPORT =
51706
;
05.
06.
public
void
run() {
07.
try
{
08.
System.out.println(
"S: Connecting..."
);
09.
10.
ServerSocket serverSocket =
new
ServerSocket(SERVERPORT);
11.
while
(
true
) {
12.
13.
Socket client = serverSocket.accept();
14.
System.out.println(
"S: Receiving..."
);
15.
16.
try
{
17.
BufferedReader in =
new
BufferedReader(
new
InputStreamReader(client.getInputStream()));
18.
String str = in.readLine();
19.
System.out.println(
"S: Received: '"
+ str +
"'"
);
20.
}
catch
(Exception e) {
21.
System.out.println(
"S: Error"
);
22.
e.printStackTrace();
23.
}
finally
{
24.
client.close();
25.
System.out.println(
"S: Done."
);
26.
}
27.
28.
}
29.
30.
}
catch
(Exception e) {
31.
System.out.println(
"S: Error"
);
32.
e.printStackTrace();
33.
}
34.
}
35.
36.
public
static
void
main (String a[]) {
37.
Thread desktopServerThread =
new
Thread(
new
TCPDesktopServer());
38.
desktopServerThread.start();
39.
}
40.
}
對上邊的源代碼做一些介紹:
指定Server監聽的端口和服務器IP地址。
1.
public
static
final
String SERVERIP =
"192.168.0.149"
;
2.
public
static
final
int
SERVERPORT =
51706
;
應用之前所指定的IP和Port創建一個ServerSocket對象。
1.
ServerSocket serverSocket =
new
ServerSocket(SERVERPORT);
用於偵聽和捕捉通過Socket連接的客戶端。
1.
Socket client = serverSocket.accept();
應用Socket創建BufferedReader對象,用於接收Socket Stream中的數據。
1.
BufferedReader in =
new
BufferedReader(
new
InputStreamReader(client.getInputStream()));
Android Client 源代碼:
01.
InetAddress serverAddr = InetAddress.getByName(
"192.168.0.149"
);
//TCPServer.SERVERIP
02.
Log.d(
"TCP"
,
"C: Connecting..."
);
03.
Socket socket =
new
Socket(serverAddr,
51706
);
04.
String message =
"AndroidRes,Where is my Pig (Android)?"
;
05.
try
{
06.
Log.d(
"TCP"
,
"C: Sending: '"
+ message +
"'"
);
07.
PrintWriter out =
new
PrintWriter(
new
BufferedWriter(
new
OutputStreamWriter(socket.getOutputStream())),
true
);
08.
out.println(message);
09.
}
catch
(Exception e) {
10.
Log.e(
"TCP"
,
"S: Error"
, e);
11.
}
finally
{
12.
socket.close();
13.
}
對上邊的源代碼做一些介紹:
指定Server的IP地址。
1.
InetAddress serverAddr = InetAddress.getByName(
"192.168.0.149"
);
應用Server的IP和端口建立Socket對象。
1.
Socket socket =
new
Socket(serverAddr,
51706
);
根據已經建立的Socket來創建PrintWriter,將信息通過這個對象來發送給Server,其中包含了三個部分:
1.
PrintWriter out =
new
PrintWriter(
new
BufferedWriter(
new
OutputStreamWriter(socket.getOutputStream())),
true
);
以上是Android與運行在PC上的Java Server通訊的例子。來源由Anddev.org提供
2. Android與PC通訊的第二個例子:
- PC: CSharp Server
- Android:Java Client
通過上邊的例子,本人通過一些轉換,實現了Android與CSharp Server的通訊方法。原理沒有太大差異,僅僅是應用的方法稍有不同。
CSharp Server 源代碼:
01.
TcpClient ConnectedClient = ServerListener.AcceptTcpClient();
02.
03.
NetworkStream netStream = ConnectedClient.GetStream();
04.
05.
BinaryReader br =
new
BinaryReader(netStream);
06.
07.
byte
[] tempByte =
new
byte
[8192];
08.
09.
tempByte = br.ReadBytes(8192);
10.
11.
string
RecevieString = System.Text.Encoding.Default.GetString(tempByte);
對上邊的源代碼做一些介紹:
通過TcpListener獲得的Client信息創建一個TcpClient對象。
1.
TcpClient ConnectedClient = ServerListener.AcceptTcpClient();
從TcpClient對象中提取NetworkStream對象,其目的是建立Socket數據流。
1.
NetworkStream netStream = ConnectedClient.GetStream();
建立BinaryReader對象為剛剛創建的NetworkStream提供一個接口,借助於這個接口可以非常方便的讀取信息。
1.
BinaryReader br =
new
BinaryReader(netStream);
讀取Stream中的byte array數據,轉化為string字符串。
1.
byte
[] tempByte =
new
byte
[8192];
2.
3.
tempByte = br.ReadBytes(8192);
4.
5.
string
RecevieString = System.Text.Encoding.Default.GetString(tempByte);
Android Client 源代碼:
這個Android Client所應用的方法與第一個例子中有很大區別,請各位特別注意(通過本人的反復驗證,這個算是Java 與CSharp間可行的通訊方法)。
1.
String message =
"AndroidRes,Where is my Pig (Android)?"
;
2.
Socket socket =
new
Socket(
"192.168.0.149"
,
51706
);
3.
OutputStream ops=socket.getOutputStream();
4.
DataOutputStream dos=
new
DataOutputStream(ops);
5.
dos.write(message.getBytes());
6.
dos.close();
對上邊的源代碼做一些介紹:
同樣是建立Socket對象。
1.
Socket socket =
new
Socket(
"192.168.0.149"
,
51706
);
根據Socket對象創建OutputStream對象,根據名稱可以很容易的理解這個對象的目的,它是建立一個輸出的NetworkStream。
1.
OutputStream ops=socket.getOutputStream();
DataOutputStream類似於BinaryWriter,是為OutputStream建立一個接口,可以通過這個接口向Socket另外一端寫數據。
1.
DataOutputStream dos=
new
DataOutputStream(ops);
最后這兩行代碼是實施寫的過程。
1.
dos.write(message.getBytes());
2.
dos.close();
以上就是本站為大家提供的兩種Android與PC間通訊的方式(其中第一個方法來自Anddev.org,這里要特別指出)。如果你有更巧妙或者更方便的方法,希望能與大家共同分享!