【发布时间】:2020-04-13 18:33:13
【问题描述】:
我正在尝试在 android studio 和 node js 服务器之间建立连接,但我有点卡住了。我很确定我做错了很多事情,但我可以开始寻找解决方案的一条错误消息是节点服务器端的 listen EADDRINUSE :::3000 错误。这是双方的所有代码,我真的希望有经验的人能指出问题并给我一个继续前进的方向。提前致谢!
节点 JS 代码:
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);
Android Studio 代码(MainActivity.java):
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);
}
});
}
}
以及Node JS 错误信息:
错误:监听 EADDRINUSE :::3000
在 Object._errnoException (util.js:1022:11)
在 _exceptionWithHostPort (util.js:1044:20)
在 Server.setupListenHandle [as _listen2] (net.js:1367:14)
在listenInCluster (net.js:1408:12)
在 Server.listen (net.js:1492:7)
在 Function.listen (/home/leventecsoba/node_modules/express/lib/application.js:618:24)
在对象。 (/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)
【问题讨论】:
-
如错误所说。您已经有一台服务器在端口 3000 上运行
-
好的,请问如何解决? :)
-
查看此 SO 帖子 stackoverflow.com/questions/9898372/…
-
我杀死了正在运行的进程,摆脱了错误信息。但是服务器没有运行(没有好的,它的运行日志消息)。
-
kill $(lsof -i:3000 -t)
标签: javascript android node.js express android-volley