【问题标题】:Failed to connect to python server (android [java] client)无法连接到 python 服务器(android [java] 客户端)
【发布时间】:2020-06-17 01:49:04
【问题描述】:

我有一个简单的 python 套接字服务器和简单的 android [java] 套接字客户端。客户端连接我的服务器失败。

我的服务器运行良好(我尝试过在 python 中使用简单的套接字客户端)。

服务器(python):

import socket
    def main():
    listening_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    server_address = (' ', LISTEN_PORT)
    listening_sock.bind(server_address)
    listening_sock.listen(1)

    client_soc, client_address = listening_sock.accept()

    client_msg = client_soc.recv(1024)
    client_msg = client_msg.decode()

    print(client_msg)

    answer = "hello " + client_msg
    client_soc.sendall(answer.encode())

   client_soc.close()

   listening_sock.close()
   #print(str(get_distance_by_four_points("31.766977", "34.622898", "31.769887", "34.625430", "31.772632", "34.628273", "31.779327", "34.632951") / 1000) + " km")


  if __name__ == "__main__":
   main()

客户端(java):

package com.example.client;

import androidx.appcompat.app.AppCompatActivity;

import android.annotation.SuppressLint;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class MainActivity extends AppCompatActivity {
EditText etToServer;
TextView tvFromSer;

private static Socket sock;
private static ServerSocket serSock;
private static PrintWriter prWriter;
private static InputStreamReader in;
private static BufferedReader bf;

String message = "";
private static String LOCAL_IP = "127.0.0.1";
private static int PORT = 2002;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    etToServer = (EditText)findViewById(R.id.etxtUsername);
    tvFromSer = (TextView)findViewById(R.id.tvFromServer);
}


public void sendMsg(View view) {
    message = etToServer.getText().toString();

    myTask myT = new myTask();
    myT.execute();
}


class myTask extends AsyncTask<Void,Void, Void> {

    @SuppressLint("WrongThread")
    @Override
    protected Void doInBackground(Void... voids) {
        try {
            sock = new Socket(LOCAL_IP, PORT);

            prWriter = new PrintWriter(sock.getOutputStream());

            prWriter.write(message);
            prWriter.flush();
            prWriter.close();

            sock.close();
        } catch (IOException e) {
            e.printStackTrace();
            tvFromSer.setText(e.toString());
        }
        return null;
    }
}
}

java.net.connectException:无法从 /::(端口 58590)连接到 /127.0.0.1(端口 2002):连接失败:ECONNREFUSED(连接被拒绝)

【问题讨论】:

  • 我假设 127.0.0.1 路由到(模拟的)android 设备而不是您的实际机器,您可以尝试在本地网络中使用您计算机的实际 IP。 (Windows:打开命令提示符,输入ipconfig,Unix-ish:在shell中打开,输入ifconfig

标签: java python android sockets


【解决方案1】:

我认为您忘记在 AndroidManifest.xml 中授予权限

【讨论】:

    猜你喜欢
    • 2014-11-19
    • 2022-01-21
    • 1970-01-01
    • 1970-01-01
    • 2016-07-07
    • 2018-10-14
    • 1970-01-01
    • 2013-12-05
    • 2014-05-21
    相关资源
    最近更新 更多