如何在 Android Wifi Direct (P2P) 上监控传入的文件传输请求
How to monitor for incoming file transfer requests on 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;
}
感谢您的帮助。
基本上您需要让服务器套接字始终侦听连接。当它接受一个时,它会 运行 它在另一个线程
while (true) {
Socket socket = serverSocket.accept();
new Thread(new MultiThreadServer(socket)).start();
}
MultiThreadServer 将执行您想对客户端执行的任何操作,然后关闭它连接到客户端的套接字。请注意,这是一个与服务器在 while 循环中侦听的套接字不同的套接字。
检查此以获取有关多线程服务器的更多信息:http://www.tutorialspoint.com/javaexamples/net_multisoc.htm
我目前有一个应用程序可以将字符串从一个设备发送到另一个设备。 我通过打开设备连接到组所有者的端口来监视此初始文件传输,然后客户端发送文件并且组所有者接收它没有问题。套接字关闭。
如果客户端尝试发送第二个文件,套接字已关闭,连接状态没有改变,所以我想不出一种方法让 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;
}
感谢您的帮助。
基本上您需要让服务器套接字始终侦听连接。当它接受一个时,它会 运行 它在另一个线程
while (true) {
Socket socket = serverSocket.accept();
new Thread(new MultiThreadServer(socket)).start();
}
MultiThreadServer 将执行您想对客户端执行的任何操作,然后关闭它连接到客户端的套接字。请注意,这是一个与服务器在 while 循环中侦听的套接字不同的套接字。
检查此以获取有关多线程服务器的更多信息:http://www.tutorialspoint.com/javaexamples/net_multisoc.htm