Java 使用TCP通过套接字发送字符串

Java 使用TCP通过套接字发送字符串,java,android,string,sockets,tcp,Java,Android,String,Sockets,Tcp,我正在尝试从一个Android应用程序向另一个Android应用程序发送一个字符串(稍后还有一个图像)。我知道我很亲近 代码“SendString”是一款手机上的Android应用程序。代码“AppListener”在另一部手机上。“SendString”似乎工作正常并发送字符串,因为我所有的打印语句都在打印 “SendString”,它正在向“AppListener”发送字符串: (我正在发送的字符串“applicationName”正在从项目中的其他活动传递到“SendString”) 我知

我正在尝试从一个Android应用程序向另一个Android应用程序发送一个字符串(稍后还有一个图像)。我知道我很亲近

代码“SendString”是一款手机上的Android应用程序。代码“AppListener”在另一部手机上。“SendString”似乎工作正常并发送字符串,因为我所有的打印语句都在打印

“SendString”,它正在向“AppListener”发送字符串:

(我正在发送的字符串“applicationName”正在从项目中的其他活动传递到“SendString”)

我知道这段代码是有效的,因为我在“try”中得到了所有的print语句,但它从未传递给catch异常

public class SendString extends AsyncTask<String, String, String> {

@Override
protected String doInBackground(String... params) {

    Log.d("tag_name", "Entered AsyncTask");

    String applicationName = params[0];


    // SEND APPLICATION NAME AND ICON TO OTHER APP

    try {

        Log.d("tag_name", "TRY TO SEND STRING");
        Socket socket = new Socket("192.168.0.26", 1755);
        DataOutputStream DOS = new DataOutputStream(socket.getOutputStream());
        DOS.writeUTF(applicationName);
        Log.d("tag_name", "Application Name Sent!");
        socket.close();

    }

    catch (Exception e){

        Log.d("tag_name", "Did not send string");

    }

    return null;
}

}
因为我从来没有得到print语句“this should print after connection”,但我得到了之前所有的print语句。是否有人看到问题所在,以及为什么我的AppListener活动似乎没有连接到端口以接收字符串,即使我知道“SendString”应用程序正在按原样连接和发送字符串(因为我看到了所有打印语句)

有人知道问题是什么吗?为什么我的客户机似乎没有连接到端口来接收字符串,即使我知道服务器端正在按应有的方式连接和发送字符串

  • “服务器”和“客户端”混淆了。客户端连接:服务器接受
  • 您真正的服务器(您称之为客户机)不接受连接
  • 这只能意味着您的真正客户机(您将其描述为您的服务器)并没有创建一个
  • 您必须根本没有执行您真正的客户机,否则就会出现
    ConnectException
    ,您还没有告诉我们

    有人知道问题是什么吗?为什么我的客户机似乎没有连接到端口来接收字符串,即使我知道服务器端正在按应有的方式连接和发送字符串

  • “服务器”和“客户端”混淆了。客户端连接:服务器接受
  • 您真正的服务器(您称之为客户机)不接受连接
  • 这只能意味着您的真正客户机(您将其描述为您的服务器)并没有创建一个

  • 您必须根本没有执行真正的客户机,否则就会出现一个您没有告诉我们的
    ConnectException

    您应该先运行第二段代码(它是您的服务器)。它将等待客户端。现在运行您的第一段代码(这是您的客户)@ScaryWombat,我更新了我的问题以使其更清楚。也许你可以看看。我试着先运行第二个代码“AppListener”进行测试,但我仍然面临同样的问题。我是否可以建议第二个android没有在ip地址192.168.0.26上侦听。@ScaryWombat所以我确实发现,当“AppListener”连接到公共网络时,字符串被正确传递。如果AppListener使用的是私有IP地址(地址以19世纪开始),那么字符串永远不会发送到“AppListener”。您知道我如何更改代码,以便将字符串发送到连接到专用Wifi网络的设备吗?您应该首先运行第二个代码(它是您的服务器)。它将等待客户端。现在运行您的第一段代码(这是您的客户)@ScaryWombat,我更新了我的问题以使其更清楚。也许你可以看看。我试着先运行第二个代码“AppListener”进行测试,但我仍然面临同样的问题。我是否可以建议第二个android没有在ip地址192.168.0.26上侦听。@ScaryWombat所以我确实发现,当“AppListener”连接到公共网络时,字符串被正确传递。如果AppListener使用的是私有IP地址(地址以19世纪开始),那么字符串永远不会发送到“AppListener”。您知道我如何更改代码以便将字符串发送到连接到专用Wifi网络的设备吗?谢谢您澄清我的困惑!我更新了我的问题,使之更清楚(我希望如此)。所以,您是说我的服务器“AppListener”不接受连接,我完全同意这一点,因为这是我的代码被卡住的地方,不会再创建任何打印语句。我的客户机似乎正在建立连接,因为我看到了所有的打印语句,包括“application name sent!”,它从不抛出异常。但是,即使它从未抛出异常,它也可能没有建立连接吗?它一定是连接到了其他东西。因此,我确实发现,当“AppListener”连接到公共网络时,字符串的传递是正确的。如果AppListener使用的是私有IP地址(地址以19世纪开始),那么字符串永远不会发送到“AppListener”。您知道我如何更改代码以便将字符串发送到连接到专用Wifi网络的设备吗?谢谢您澄清我的困惑!我更新了我的问题,使之更清楚(我希望如此)。所以,您是说我的服务器“AppListener”不接受连接,我完全同意这一点,因为这是我的代码被卡住的地方,不会再创建任何打印语句。我的客户机似乎正在建立连接,因为我看到了所有的打印语句,包括“application name sent!”,它从不抛出异常。但是,即使它从未抛出异常,它也可能没有建立连接吗?它一定是连接到了其他东西。因此,我确实发现,当“AppListener”连接到公共网络时,字符串的传递是正确的。如果AppListener使用的是私有IP地址(地址以19世纪开始),那么字符串永远不会发送到“AppListener”。您知道我如何更改代码,以便将字符串发送到连接到专用Wifi网络的设备吗?
    public class AppListener extends AsyncTask<String, String, String> {
    
    
    
    @Override
    protected String doInBackground(String... uri) {
    
        String msg_received = null;
    
        System.out.println("LISTENING FOR LAST INSTALLED APP");
    
        try {
    
    
            System.out.println("TRY");
            ServerSocket socket = new ServerSocket(1755);
            System.out.println("Connect to Socket and listening");
            Socket clientSocket = socket.accept();       //This is blocking. It will wait.
            System.out.println("This should print after connection");
            DataInputStream DIS = new DataInputStream(clientSocket.getInputStream());
            msg_received = DIS.readUTF();
    
            System.out.println("Message from server" + msg_received);
    
            clientSocket.close();
            socket.close();
        } catch (Exception e) {
            System.out.println("Did not connect to SendString");
        }
        System.out.println("Return Statement is Reached");
        return msg_received;
    }
    }
    
    Socket clientSocket = socket.accept();       //This is blocking. It will wait.