2016-04-21 171 views
1

我想从一个Android应用程序向另一个Android应用程序发送一个字符串(以及后来的图像)。我知道我非常接近。使用TCP通过套接字发送字符串

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

“SendString”,这发出了一个字符串“的AppListener”:

(即我送“的applicationName”的字符串获得通过,以“SendString”从项目的不同的活动)

我知道这段代码正在工作,因为我在“try”中获得所有打印语句,并且它永远不会传递给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; 
} 

} 

以下是正在侦听端口连接的其他Android应用程序代码,然后它应该从“SendString”接收字符串。

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. 

,因为我从来没有得到print语句“这应该连接后打印”,但我得到的所有之前的打印语句那。有人看到问题是什么,为什么我的AppListener活动似乎没有连接到端口来接收字符串,即使我知道“SendString”应用程序正在连接并发送字符串,因为它应该是(因为我看到所有打印语句)。

+0

你应该先运行你的第二个代码(它是你的服务器)。它会等待客户。现在运行你的第一个代码(它是你的客户端) –

+0

@ScaryWombat,我更新了我的问题,以便更清楚。也许你可以看看。我尝试通过运行第二个代码“AppListener”进行测试,但我仍然面临同样的问题。 – Natalie

+0

我可以建议第二个android不在IP地址192.168.0.26上侦听。 –

回答

0

有没有人看到问题是什么,为什么我的客户端似乎没有连接到端口来接收字符串,即使我知道服务器端正在连接并发送字符串,因为它应该是。

  1. 你有'服务器'和'客户端'混在一起。客户端连接:服务器接受。
  2. 您描述为客户端的真实服务器不接受连接。
  3. 这只能意味着您所描述的服务器的真实客户端不会创建一个客户端。

你必须要么没有执行你的真实客户端,要么你有没有告诉我们ConnectException

+0

谢谢你澄清我的困惑!我更新了我的问题,希望更清楚(我希望)。所以,你说我的服务器“AppListener”不接受一个连接,我完全同意这个连接,因为这是我的代码似乎卡住了,并且不会再创建任何打印语句的地方。看起来我的客户端正在建立连接,因为我看到所有的打印语句,包括“应用程序名称发送!”,并且它从不抛出异常。但是,它有可能没有建立连接,即使它从不抛出异常? – Natalie

+1

它必须连接到别的东西。 – EJP

+0

所以我确实知道当“AppListener”连接到公共网络时字符串正确传递。如果AppListener使用私有IP地址(以190开头的地址开始的地址),则该字符串永远不会发送到“AppListener”。你知道如何改变我的代码,以便我可以将字符串发送到连接到专用Wifi网络的设备吗? – Natalie