android使⽤socket实现简单的点对点通信
要⽤android实现点对点通信,可以使⽤socket完成,使⽤socket需要知道对⽅的IP地址以及端⼝号,这⾥我省略了服务器端(编写正规的通信软件还是得需要服务器做中转,⽤服务器得知A的IP地址,然后让A做服务器端,B⽤A的Ip地址去获取数据),只是展⽰相关原理,⾸先看服务器端 1package polly.liu;电汽锅
2
3import java.io.BufferedReader;
4import java.io.IOException;
5import java.io.InputStreamReader;
6import java.InetAddress;
7import java.NetworkInterface;
8import java.ServerSocket;
9import java.Socket;
10import java.SocketException;
11import java.util.Enumeration;
12
13import android.app.Activity;
14import android.os.Bundle;
15import android.os.Handler;
16import android.util.Log;
17import android.widget.TextView;
18
19import java.io.BufferedReader;
20import java.io.IOException;
21import java.io.InputStreamReader;
22import java.ServerSocket;
23import java.Socket;
24import android.app.Activity;
25import android.os.Bundle;
26import android.os.Handler;
27import android.os.Message;
28import android.widget.TextView;
29
30public class ServerActivity extends Activity {
31 ServerSocket ss = null;
32 String mClientMsg = "";
33 Thread myCommsThread = null;
34protected static final int MSG_ID = 0x1337;
35public static final int SERVERPORT = 6000;
36
37 @Override
38public void onCreate(Bundle savedInstanceState) {
40 setContentView(R.layout.main);
41 TextView tv = (TextView) findViewById(R.id.TextView01);
42 tv.setText("Nothing from client yet");
45 }
46
47 @Override
48protected void onStop() {
50try {
52 ss.close();
53 } catch (IOException e) {
54 e.printStackTrace();
55 }
56 }
57
58 Handler myUpdateHandler = new Handler() {
58 Handler myUpdateHandler = new Handler() {
微波杀青
59public void handleMessage(Message msg) {
60switch (msg.what) {
61case MSG_ID:
62 TextView tv = (TextView) findViewById(R.id.TextView01);
63 tv.setText(mClientMsg);
64break;
65default:
66break;
67 }
68super.handleMessage(msg);
69 }
70 };
空气太阳能
71class CommsThread implements Runnable {
72public void run() {
73 Socket s = null;
便携式洒弹器
74try {
75 ss = new ServerSocket(SERVERPORT );
76 } catch (IOException e) {
77 e.printStackTrace();
潜流湿地78 }
79while (!Thread.currentThread().isInterrupted()) {
80 Message m = new Message();
81 m.what = MSG_ID;
82try {
83if (s == null)
84 s = ss.accept();
85 BufferedReader input = new BufferedReader(new InputStream()));
86 String st = null;
87 st = adLine();
88 mClientMsg = st;
89 myUpdateHandler.sendMessage(m);
90 } catch (IOException e) {
ad800991 e.printStackTrace();
92 }
93 }
94 }
95 }
96 }
服务器端和平时在PC上的代码差不多,只不过现在把在PC上的代码转到了⼿机端,注意耗时间的操作要放在⼦线程上去做,再来看看客户端代码: 1package polly.liu;
2
3import java.io.BufferedWriter;
4import java.io.IOException;
5import java.io.OutputStreamWriter;
6import java.io.PrintWriter;
7import java.InetAddress;
8import java.Socket;
9import java.UnknownHostException;
10
11import android.app.Activity;
12import android.os.Bundle;
13import android.util.Log;
14import android.view.View.OnClickListener;
15import android.widget.Button;
16import android.widget.EditText;
17import android.widget.TextView;
18import android.view.View;
19
20public class ClientActivity extends Activity {
21private Button bt;
22private TextView tv;
23private Socket socket;
24private String serverIpAddress = "192.168.1.104";
25
26private static final int REDIRECTED_SERVERPORT = 6000;
27 @Override
28public void onCreate(Bundle savedInstanceState) {
30 setContentView(R.layout.main);
31 bt = (Button) findViewById(Button);
32 tv = (TextView) findViewById(TextView);
33try {
34 InetAddress serverAddr = ByName(serverIpAddress);
35 socket = new Socket(serverAddr, REDIRECTED_SERVERPORT);
36 } catch (UnknownHostException e1) {
37 e1.printStackTrace();
38 } catch (IOException e1) {
39 e1.printStackTrace();
40 }
41 bt.setOnClickListener(new OnClickListener() {
42public void onClick(View v) {
43try {
44 EditText et = (EditText) findViewById(R.id.EditText01);
45 String str = et.getText().toString();
46 PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStream())),true);
47 out.println(str);
48 Log.d("Client", "Client sent message");
49 } catch (UnknownHostException e) {
50 tv.setText("Error1");
51 e.printStackTrace();
52 } catch (IOException e) {
53 tv.setText("Error2");
54 e.printStackTrace();
55 } catch (Exception e) {
56 tv.setText("Error3");
57 e.printStackTrace();
58 }
59 }
60 });
61 }
62 }
这样就实现了点对点的通信,这个只是基本雏形,你可以往⾥⾯添加很多内容,这⾥只是抛砖引⽟,运⾏效果如下:
客户端:
服务器端(未接收到数据时):
服务器端(接收到数据时):