android使用socket实现简单的点对点通信

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 {
51// 确保你退出时要关闭socket连接
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 }
这样就实现了点对点的通信,这个只是基本雏形,你可以往⾥⾯添加很多内容,这⾥只是抛砖引⽟,运⾏效果如下:
客户端:
服务器端(未接收到数据时):
服务器端(接收到数据时):

本文发布于:2024-09-23 10:15:23,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/4/277405.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议