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