问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

怎样实现2个app的点对点通讯

发布网友 发布时间:2022-04-23 15:42

我来回答

1个回答

热心网友 时间:2023-10-08 19:22

要用android实现点对点通信,可以使用socket完成,使用socket需要知道对方的IP地址以及端口号,这里我省略了服务器端(编写正规的通信软件还是得需要服务器做中转,用服务器得知A的IP地址,然后让A做服务器端,B用A的Ip地址去获取数据),只是展示相关原理,首先看服务器端
1 package polly.liu;
2
3 import java.io.BufferedReader;
4 import java.io.IOException;
5 import java.io.InputStreamReader;
6 import java.net.InetAddress;
7 import java.net.NetworkInterface;
8 import java.net.ServerSocket;
9 import java.net.Socket;
10 import java.net.SocketException;
11 import java.util.Enumeration;
12
13 import android.app.Activity;
14 import android.os.Bundle;
15 import android.os.Handler;
16 import android.util.Log;
17 import android.widget.TextView;
18
19 import java.io.BufferedReader;
20 import java.io.IOException;
21 import java.io.InputStreamReader;
22 import java.net.ServerSocket;
23 import java.net.Socket;
24 import android.app.Activity;
25 import android.os.Bundle;
26 import android.os.Handler;
27 import android.os.Message;
28 import android.widget.TextView;
29
30 public class ServerActivity extends Activity {
31 ServerSocket ss = null;
32 String mClientMsg = "";
33 Thread myCommsThread = null;
34 protected static final int MSG_ID = 0x1337;
35 public static final int SERVERPORT = 6000;
36
37 @Override
38 public void onCreate(Bundle savedInstanceState) {
39 super.onCreate(savedInstanceState);
40 setContentView(R.layout.main);
41 TextView tv = (TextView) findViewById(R.id.TextView01);
42 tv.setText("Nothing from client yet");
43 this.myCommsThread = new Thread(new CommsThread());
44 this.myCommsThread.start();
45 }
46
47 @Override
48 protected void onStop() {
49 super.onStop();
50 try {
51 // 确保你退出时要关闭socket连接
52 ss.close();
53 } catch (IOException e) {
54 e.printStackTrace();
55 }
56 }
57
58 Handler myUpdateHandler = new Handler() {
59 public void handleMessage(Message msg) {
60 switch (msg.what) {
61 case MSG_ID:
62 TextView tv = (TextView) findViewById(R.id.TextView01);
63 tv.setText(mClientMsg);
64 break;
65 default:
66 break;
67 }
68 super.handleMessage(msg);
69 }
70 };
71 class CommsThread implements Runnable {
72 public void run() {
73 Socket s = null;
74 try {
75 ss = new ServerSocket(SERVERPORT );
76 } catch (IOException e) {
77 e.printStackTrace();
78 }
79 while (!Thread.currentThread().isInterrupted()) {
80 Message m = new Message();
81 m.what = MSG_ID;
82 try {
83 if (s == null)
84 s = ss.accept();
85 BufferedReader input = new BufferedReader(new InputStreamReader(s.getInputStream()));
86 String st = null;
87 st = input.readLine();
88 mClientMsg = st;
89 myUpdateHandler.sendMessage(m);
90 } catch (IOException e) {
91 e.printStackTrace();
92 }
93 }
94 }
95 }
96 }

服务器端和平时在PC上的代码差不多,只不过现在把在PC上的代码转到了手机端,注意耗时间的操作要放在子线程上去做,再来看看客户端代码:
1 package polly.liu;
2
3 import java.io.BufferedWriter;
4 import java.io.IOException;
5 import java.io.OutputStreamWriter;
6 import java.io.PrintWriter;
7 import java.net.InetAddress;
8 import java.net.Socket;
9 import java.net.UnknownHostException;
10
11 import android.app.Activity;
12 import android.os.Bundle;
13 import android.util.Log;
14 import android.view.View.OnClickListener;
15 import android.widget.Button;
16 import android.widget.EditText;
17 import android.widget.TextView;
18 import android.view.View;
19
20 public class ClientActivity extends Activity {
21 private Button bt;
22 private TextView tv;
23 private Socket socket;
24 private String serverIpAddress = "192.168.1.104";
25
26 private static final int REDIRECTED_SERVERPORT = 6000;
27 @Override
28 public void onCreate(Bundle savedInstanceState) {
29 super.onCreate(savedInstanceState);
30 setContentView(R.layout.main);
31 bt = (Button) findViewById(R.id.myButton);
32 tv = (TextView) findViewById(R.id.myTextView);
33 try {
34 InetAddress serverAddr = InetAddress.getByName(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() {
42 public void onClick(View v) {
43 try {
44 EditText et = (EditText) findViewById(R.id.EditText01);
45 String str = et.getText().toString();
46 PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),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 }
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
少儿学什么舞蹈 青年学什么舞蹈好 成年人学什么舞蹈 福州企业最低工资标准 2013年厦门的底薪是多少 生产要素的需求有哪些性质 生产要素的需求有何特点? 什么是生产要素需求 微观经济学要素需求什么是条件要素需求?它和要素需求有什么不同?_百度... 养宠物的人遵守规则,是不是就能和别人平安相处呢? 摄像机去app通信连接不上 怎么开启一个app的通讯录权限 通信类App有哪些?? 如何实现在不同app之间通讯 包网通讯app是干什么的? app内即时通讯功能如何开发? 中国网民人均装56款APP,通讯类APP为何能霸占榜首? 打开app提示通讯异常怎么回事,重启卸载重装都不好用? 我梦见我暗恋的人对我表白,什么预兆? 梦见我暗恋的人想我表白这是什么意思? 如果梦见暗恋的人跟我告白 梦见被自己暗恋的人告白了,有什么意思吗?会不会实现? 我梦见自己暗恋的人,向自己表白…是代表什么? 梦见我喜欢的人向我表白,真的会向我表白吗 做梦梦见自己的喜欢的人对自己表白,是什么意思? 梦见自己暗恋的人向自己表白是什么意思? 做梦梦到自己暗恋的人和自己表白,这是什么意思? 梦见暗恋的人向我表白说明什么? 梦见暗恋的人和我表白 如何正确卸载虚拟机VMware 飞星通讯APP是什么 APP内即时通讯问题 app信息屏蔽了还能爆通讯录吗 为什么不管下载什么APP,都要获取通讯录、照片、短信各种权限? 为什么很多现在很多app要查看我们的通讯录、通话记录? Win7系统笔记本电脑外置麦克风怎么设置? W7系统怎么设置麦克风? win7系统插入麦克风那个选项怎么打开? windows7怎样设置外接 麦克风录音?请高人帮忙??? 如何设置win7系统电脑能听到麦克风输入的声音 win7系统的电脑管理音频设备里面怎么没有外接麦克风这个选项 Q币充值中心可以寄售Q币吗 找不到腾讯Q币充值中心 腾讯Q币充值中心 苹果手机怎么用Q币充值游戏 进入哪个q币充值中心呀! 腾讯Q币充值中心 怎么把已经充值的q币退回支 QQ上的q币怎么充到游戏里面? 腾讯q币充值中心 Q币卡怎么充值 电信官网积分兑换的Q币卡如何使用 键盘那个是关机键