安卓开发,手机和电脑不在同一局域网内,如何通信?
我使用okhttp实现数据传输,手机和电脑后台在同一局域网时可以通信,但是不在同一局域网时就显示“failed to connect to 电脑ip(port 82) from 手机ip (port 60998) after 10000ms”。
后台是Flask,加了flask_cors跨域,还是无法连接
如果手机使用流量,电脑使用wifi的情况下,如何使手机app连接到电脑后台呢?
安卓app连接部分代码
void postRequest(String postUrl, RequestBody postBody) {
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url(postUrl)
.post(postBody)
.build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
// Cancel the post on failure.
call.cancel();
Log.d("FAIL", e.getMessage());
runOnUiThread(new Runnable() {
@Override
public void run() {
TextView responseText = findViewById(R.id.responseText);
responseText.setText("Failed to Connect to Server. Please Try Again.");
}
});
}
电脑端代码
import flask
from flask_cors import CORS
import werkzeug
import time
app = flask.Flask(__name__)
@app.route('/', methods = ['GET', 'POST'])
def handle_request():
return "Image(s) Uploaded Successfully. Come Back Soon."
if __name__=='__main__':
app.run(host="0.0.0.0", port=82)
CORS(app)
不在同一局域网,那就得在公网上啊,否则不可能凭空连啊。
自己电脑一般没有公网ip,要用内网穿透。花生壳啥的。
参考GPT和自己的思路:
由于手机和电脑不在同一局域网内,你需要进行端口映射(Port Forwarding)来实现从互联网上的任意位置访问电脑上的应用程序。这样可以将电脑公网 IP 地址的某个端口映射到内部局域网上的电脑的某个端口。一般来说,路由器的设置页面里都有相关的选项,你可以在设置页面里查找"端口映射"、"虚拟服务器"等选项进行配置。
具体操作方法如下:
打开路由器管理页面,进入端口映射/虚拟服务器选项。
新增端口映射规则,选择协议类型,填写内网IP地址和端口号,然后填写转发后的外网端口号。
在手机端使用电脑的公网IP地址及相应的端口号进行HTTP请求即可。
注意事项:
由于涉及到网络安全问题,建议在端口映射后,及时关闭对应的端口映射功能。
使用自有服务器完成对于互联网上的应用程序访问,需要注意网络安全,保障服务器的网络安全性。
总之,进行端口映射后即可在不同局域网中进行通信,可以正常使用okhttp实现数据传输,同时需要在Flask服务端使用flask_cors跨域处理。
可以vpn 连代理就行了吧
不知道你这个问题是否已经解决, 如果还没有解决的话: