当前位置: 首页 > 知识库问答 >
问题:

如何连接Node Js服务器和Android Studio App?

边浩漫
2023-03-14
var express = require('express');
var app = express();

app.on('listening',function(){
    console.log('ok, server is running');
});

app.post('/postdata', (req, res) => {
    var data = req.body.data; // your data
    // do something with that data (write to a DB, for instance)
    console.log(data)
    res.status(200).json({
        message: "Data received successfully"
    });
});
app.listen(3000);
package com.example.tbg_studio;

import androidx.appcompat.app.AppCompatActivity;

import android.app.DownloadManager;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.Volley;

import org.json.JSONException;
import org.json.JSONObject;

import java.util.HashMap;

public class MainActivity extends AppCompatActivity {
    Button RequestButton; // button which on clicking, sends the request
    TextView DisplayText; // a text field to display the request response
    EditText DataField; // a text field where the data to be sent is entered

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        RequestButton = (Button) findViewById(R.id.RequestButton);
        DataField = (EditText) findViewById(R.id.DataField);
        DisplayText = (TextView) findViewById(R.id.DisplayText);

        final RequestQueue queue = Volley.newRequestQueue(this);
        final String url = "http://serverdomainorip/postdata"; // your URL

        queue.start();
        RequestButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                HashMap<String, String> params = new HashMap<String,String>();
                params.put("data", DataField.getText().toString()); // the entered data as the body.

                JsonObjectRequest jsObjRequest = new
                        JsonObjectRequest(Request.Method.POST,
                        url,
                        new JSONObject(params),
                        new Response.Listener<JSONObject>() {
                            @Override
                            public void onResponse(JSONObject response) {
                                try {
                                    DisplayText.setText(response.getString("message"));
                                } catch (JSONException e) {
                                    e.printStackTrace();
                                }
                            }
                        }, new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        DisplayText.setText("That didn't work!");
                    }
                });
                queue.add(jsObjRequest);
            }
        });
    }

}

和节点JS错误消息:

错误:ListeneAddRinuse:::3000
在对象上_errnoException(util.js:1022:11)
在_ExceptionWithHostPort(util.js:1044:20)
在服务器上.SetUplistEnhandle[as_Listen2](net.js:1367:14)
在listenInCluster(net.js:1408:12)
在服务器上.listen(listenInCluster(net.js:1492:7)
在函数上(/home/leventecsoba/asztal/node js/tbg_studio.js:16:5)
在module._compile(module.js:652:30)
在object.module._extensions.js(module.js:663:10)
在module.load(module.js:565:32)

共有1个答案

何哲
2023-03-14

看起来您已经有一些东西(可能是节点服务器的另一个实例)在:3000运行,因此代码本身并不重要。如果杀死进程不适合你,那么简单地重新启动你的计算机(我知道,这听起来很傻,但它通常是有效的!)。有了新的开始,您就可以再次控制端口3000并在那里运行您想要的节点服务器。

或者,您可以在节点服务器中更改该行,使其侦听端口3001上的请求:

app.listen(3001)

您还必须更新Android Studio中的代码,才能让您的移动应用程序向3001端口发送请求。

 类似资料:
  • 我有一个nodejs聊天服务器,它有不同的事件“Connection”,“SendChat”,“Switchroom”... null Thx很多!

  • 我想连接到树莓Pi节点。我从网络外部设置的js服务器。 我的路由器声称端口是开放的。我尝试在127.0.0.0、0.0.0.0和我的公共IP地址运行服务器。 我曾尝试使用ngrok打开端口8080,服务器在其中托管一个简单的网页,但尝试访问myIP:8080不起作用。 有人能帮我吗?

  • 问题内容: 在Node.js中,我将websockets / ws 用于WebSocket连接。下面是客户端的代码。假设我们要连接的服务器套接字关闭了一分钟。关闭事件将触发,但是每当服务器上的套接字出现故障或错误时,重新连接到套接字的最佳方法是什么? 问题答案: 我已经成功使用https://github.com/joewalnes/reconnecting- websocket/blob/mas

  • 我使用Sabre DAV在PHP中实现了一个webdav目录,用于我的网站(Application Server Webinterface)。 对于这个网站,我现在使用C#编写了一个TCP套接字,它运行在另一个服务器上(实际上它在同一个数据中心,但从理论上讲,它在另一个半球上)。 我想连接我的网络Dav到我的套接字的FTP服务器,这意味着文件监听,下载,上传。用户只能连接到一个服务。想象一下,我的

  • 启动mysql服务: sudo service mysql start 停止mysql服务: sudo service mysql stop 要连接到服务器,我们通常需要提供MySQL的用户名来触发mysql,很可能,还需要密码。如果你的服务器运行在一个其他的机器上,你还需要指定主机名。联系管理员来找到连接参数(例如主机名,用户名和密码),当你知道了正确的参数后,你可以像下面那样连接: she

  • 问题内容: 在我的 主服务器上 ,我从可通过api访问的外部/单独的 redis服务器中 获取数据 。但是,api是不安全的。而且由于我希望将 Redis服务器 分开,因此该技术不适合我的情况。 在我来说,我想有2台独立的服务器, 一个 和 乙 。 A 应该在不使用api或url调用的情况下从 B 加载数据…而是应使用 port (例如)。这样,服务器 乙 只能从访问的 一个 。 我希望这种方法适

  • 所有运行在localhost上,node到web页面的端口为8001,node.js到可执行文件的端口为8002。请原谅代码,因为我已经试着让这个工作了几天,现在有点难看。 要执行的cmd可执行文件及其参数来自工作的网页。我可以启动EXE。EXE希望每个发送的消息都有一个ACK,这就是为什么您会看到代码将其发回。 我在网页上设置和更新元素时有一个间隔。我还有一个设置消息(msg)的元素。

  • 问题内容: 当我使用节点mysql时,在12:00到2:00之间出现错误,表明服务器已关闭TCP连接。这是完整的消息: 有解决办法。但是,以这种方式尝试后,问题也会出现。现在我不知道该怎么办。有人遇到这个问题吗? 这是我按照解决方案编写的方式: 问题答案: 尝试使用以下代码来处理服务器断开连接: 在您的代码中,我错过了之后的部分