我想從一個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」應用程序正在連接併發送字符串,因爲它應該是(因爲我看到所有打印語句)。
你應該先運行你的第二個代碼(它是你的服務器)。它會等待客戶。現在運行你的第一個代碼(它是你的客戶端) –
@ScaryWombat,我更新了我的問題,以便更清楚。也許你可以看看。我嘗試通過運行第二個代碼「AppListener」進行測試,但我仍然面臨同樣的問題。 – Natalie
我可以建議第二個android不在IP地址192.168.0.26上偵聽。 –