有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Android客户端和Java服务器的Java。网连接异常'

我在我的Windows机器上制作了一个超级简单的服务器,它等待一个客户端,当连接时,它所做的只是获取一条消息并将其打印到控制台

当我在我的计算机上运行服务器代码,然后运行另一个客户端应用程序时,它工作正常。然而,当我在Android手机上运行完全相同的客户端代码(除了一些必要的更改)时(通过USB连接),它就不起作用了

我电脑的IP地址正确,端口可用,我收到以下错误消息:

W/System.err: java.net.ConnectException: failed to connect to /192.168.10.104 (port 1755) from /:: (port 42102): connect failed: ETIMEDOUT (Connection timed out)

我的服务器。在我的电脑上运行的java是

import java.net.*;
import java.io.*;

public class Server {

    // Initialize everything
    private Socket socket = null;
    private ServerSocket server = null;
    private DataInputStream in =null;

    //constructor with port
    public Server(int port) {
        try {
            server = new ServerSocket(port);

            System.out.println("Server started, waiting for Client...");

            socket = server.accept();

            System.out.println("Client accepted");

            in =new DataInputStream(new BufferedInputStream(socket.getInputStream()));

            String line = "";
            while (!line.equals("Over")) {
                try {
                    line = in.readUTF();
                    System.out.println(line);
                }
                catch(IOException e) {
                    System.out.println(e);
                }
            }

            System.out.println("Closing connection");

            //CLosing connections
            socket.close(); in .close();
        }
        catch(IOException e) {
            System.out.println(e);
        }
    }
    public static void main(String[] args) {
        Server server = new Server(1755);
    }
}

这是客户端代码

import java.io.*;
import java.net.*;

public class MainActivity extends AppCompatActivity {

    TextView Message_shower;
    EditText text_place;
    TextView messageStatus;
    Button send_btn;

    // Initialize sockets and IO streams
    Socket socket = null;
    DataOutputStream out = null;

    private static final int SERVERPORT = 1755;
    private static final String SERVER_IP = "192.168.10.104";

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

        text_place = findViewById(R.id.editText);
        messageStatus = findViewById(R.id.messageStatus);
        send_btn = findViewById(R.id.send_btn);
        // Shows recent sent message
        Message_shower = findViewById(R.id.Message_shower);

        // Establish a connection
        send_btn.setOnClickListener(new View.OnClickListener() {@Override
            public void onClick(View view) {
                new Sender().execute();
            }
        });

    }
    // Close connections
    private void onClose() {
        try {
            if (socket != null) {
                out.close();
                socket.close();
            }

        }
        catch(IOException e) {
            System.out.println(e);
        }
    }

    class Sender extends AsyncTask < Void,
    Void,
    Integer > {

        private Exception e1;
        private Exception e2;
        String input;

        @Override
        protected void onPreExecute() {
            EditText text_place = findViewById(R.id.editText);

            // Takes input from terminal
            input = text_place.getText().toString();
            Message_shower.setText(input);
            System.out.println("Reached here\n");
        }

        @Override
        protected Integer doInBackground(Void...params) {
            try {
                InetAddress serverAddr = InetAddress.getByName(SERVER_IP);

                socket = new Socket(serverAddr, SERVERPORT);

                // Sends output to the socket
                out = new DataOutputStream(socket.getOutputStream());
            }
            catch(Exception e) {
                this.e1 = e;
            }
            try {
                out.writeUTF(input);

            } catch(Exception h) {
                this.e2 = h;
            }

            return 1;
        }

        @Override
        protected void onPostExecute(Integer result) {
            if (e1 != null) {
                e1.printStackTrace();
            }
            if (e2 != null) {
                e2.printStackTrace();
            }
            TextView txt = findViewById(R.id.messageStatus);
            txt.setText("Message Sent");
            text_place.setText("");
            onClose();

        }

    }
}

所有的输入都是非常感谢的,我尝试过各种方法,比如关闭防火墙,但没有一种有效


共 (0) 个答案