我目前有一個應用程序可以將字符串從一個設備發送到另一個設備。 我通過打開設備連接到組所有者的端口來監視此初始文件傳輸,然後客戶端發送文件,組所有者收到它沒有問題。套接字關閉。如何監視Android Wifi Direct(P2P)上的傳入文件傳輸請求
但是,如果客戶端試圖發送第二個文件,套接字已關閉,連接狀態沒有改變,所以我想不出一種方法讓GO重新打開此第二次傳輸的套接字。有什麼建議麼?
插座初始打開。
if (WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION.equals(action)) {
// Respond to new connection or disconnections
FileServerAsyncTask at = new FileServerAsyncTask(getApplicationContext());
at.execute();
}
文件傳輸的異步任務:
public class FileServerAsyncTask extends AsyncTask<Void, Void, String[]> {
private Context context;
public FileServerAsyncTask(Context context) {
this.context = context;
}
@Override
protected String[] doInBackground(Void... params) {
try {
ServerSocket serverSocket = new ServerSocket(2553);
Socket client = serverSocket.accept();
String[] message = getMessage(client);
serverSocket.close();
return message;
} catch (IOException e) {
// Error message.
return null;
}
}
@Override
protected void onPostExecute(String[] result) {
if (result != null) {
// Do something with result.
}
}
}
而對於完整性我收到我的留言出路:
public static String[] getMessage(Socket s)
throws IOException {
InputStream is = s.getInputStream();
int len = is.available();
Reader reader = null;
reader = new InputStreamReader(is, "UTF-8");
char[] buffer = new char[len];
reader.read(buffer);
String msg = new String(buffer);
String[] myMessageArray = msg.split(",");
return myMessageArray;
}
感謝您的幫助。
爲什麼不保持服務器套接字打開? – 2015-04-06 13:58:38
我留下了一個開放式插座的印象是不好的做法。這可能確實有效,但我沒有考慮到它。所以這引發了一個後續問題。 如果插座保持打開狀態,我將如何聽它以獲取傳入的消息? – KevMscotland 2015-04-06 14:02:51
檢查我的更新答案。服務器需要持續監聽套接字,因爲您永遠不知道客戶端何時想連接到它。所以當它發生時,它會運行另一個線程來處理客戶端,同時它始終監聽其他連接。 – 2015-04-06 14:11:17