java - 如何在AsyncTask中启动客户端并连接到服务器?

标签 java android sockets android-asynctask server

我通过端口6666的命令行服务器在计算机上运行。请告诉我如何通过单击模拟器中的按钮来连接到它?我在宽鸥中出现“正在连接...”,然后出现错误:W/System.err: java.net.ConnectException: Connection returned。同时,当我运行服务器和客户端只是单独的文件时,一切正常,无论是命令行还是在 android studio 中。我究竟做错了什么? 这是主要 Activity :

import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;

import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

    Button but;
    MyTask mt;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        but = (Button) findViewById(R.id.btnOk);
        but.setOnClickListener(this);
    }

    public void onClick(View v) {
        mt = new MyTask();
        mt.execute();
    }

    class MyTask extends AsyncTask<Void, Void, Void> {
        int port = 6666;
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        }

        @Override
        protected Void doInBackground(Void... params) {
            int serverPort = 6666; 
            String address = "127.0.0.1"; 

            try {
                InetAddress ipAddress = InetAddress.getByName(address);
                System.out.println("Connecting...");
                Socket socket = new Socket(ipAddress, serverPort);
                System.out.println("Connected");

            } catch (Exception x) {
                x.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            super.onPostExecute(result);
        }
    }
}

我收到以下错误:

java.net.ConnectException: Connection refused
     at java.net.PlainSocketImpl.socketConnect(Native Method)
     at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:334)
     at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:196)
     at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:178)
     at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:356)
     at java.net.Socket.connect(Socket.java:605)
     at java.net.Socket.connect(Socket.java:554)
     at java.net.Socket.<init>(Socket.java:431)
     at java.net.Socket.<init>(Socket.java:241)
     at com.tenday.myapplication.MainActivity$MyTask.doInBackground(MainActivity.java:56)
     at com.tenday.myapplication.MainActivity$MyTask.doInBackground(MainActivity.java:41)
     at android.os.AsyncTask$2.call(AsyncTask.java:305)
     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243)
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
     at java.lang.Thread.run(Thread.java:761)

最佳答案

如果您使用模拟器,您使用的 IP 地址可能是错误的,您应该使用 10.0.0.2。 see the android docs

关于java - 如何在AsyncTask中启动客户端并连接到服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45535962/

相关文章:

java - 如何修复 intelliJ 中的 NoClassDefFoundError : org. slf4j.LoggerFactory (但 eclipse 工作正常)

java - Hashmap 中带有空格的 JSON - 来自 api

android - 带圆角的波纹 Jetpack Compose

c# - Java 服务器,C# 客户端。发送数据

java - 更新到 Hibernate Validator 4 后无法获取 Spring 的 DataIntegrityViolationException

java - 如何从 AppEngine 数据存储中删除与查询匹配的实体?

windows - 将 Winsock 移植到 Linux 套接字

java - Android 蓝牙广播接收器未接收

java - 在 JTable 中添加或删除行后如何刷新 JTree

java - 显示幻灯片 - Android OutOfMemoryError