Я разрабатываю приложение android wifi -chat.ServerSocket, закрывающий себя в AsyncTask [Android Wifi P2P Manager]
Немного информации о моем приложении: -> Устройство вызовов StartServer() выступать в качестве сервера, другие вызовов устройства запуска клиента(), чтобы действовать в качестве клиента
Что работает: -> A Client может успешно отправить данные в первый раз клиенту, но не снова и снова
-> Мне нужно снова вызвать starterver() на первом устройстве, чтобы клиент мог снова отправить данные.
StartServer() вызывает эту задачу Async, следующее его DoinBackgroundMethod
protected String doInBackground(Void... params) {
ServerSocket serverSocket = null;
try {
while(true) {
serverSocket = new ServerSocket(PORT);
Socket client = serverSocket.accept();
StartMSG(client);
}
} catch (IOException e) {
return null;
} finally {
try {
chatclient.changeserverrunning(false);
if (serverSocket == null) {
} else {
serverSocket.close();
}
return null;
} catch (Exception e) {
}
}
//return null;
}
protected void StartMSG(Socket client){
try {
InputStream inputstream = client.getInputStream();
ObjectInputStream ois = new ObjectInputStream(inputstream);
Message m = null;
try {
m = (Message) ois.readObject();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
if (m != null) {
if (m.gettype() == 1) {
final String my_msg = m.getMessage();//Toast msg afterwards
}
}catch (Exception e){
}
}
стороны клиента Код: Он запускается, когда хиты клиента отправить кнопку и вызовы начинают метод клиента .в который Он устанавливает значения Ip до и расслоения их и вызывает сообщение отправки участия в качестве Намерения службы под названием FileTransferService
его код (отведенный):
protected void onHandleIntent(Intent intent) {
Context context = getApplicationContext();
if(socket==null){
socket = new Socket();
}
if (intent.getAction().equals(ACTION_SEND_FILE)) {
final String msg_type=intent.getExtras().getString(MESSAGE_TYPE);
String host = intent.getExtras().getString(EXTRAS_ADDRESS);
int port = intent.getExtras().getInt(EXTRAS_PORT);
try {
socket.bind(null);
socket.connect((new InetSocketAddress(host, port)), SOCKET_TIMEOUT);
Message m = (Message) intent.getExtras().getSerializable(MESSAGE_INTENT_STR);
final String my_message=m.getMessage();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(m);
oos.flush();
oos.close();
InputStream is = new ByteArrayInputStream(baos.toByteArray());
OutputStream stream = socket.getOutputStream();
ChatClient.copyFile(is, stream);
} catch (IOException e) {
} finally {
if (socket != null) {
if (socket.isConnected()) {
try {
//socket.close();
} catch (Exception e) {
// Give up
e.printStackTrace();
}
}
}
}
}
}
Какое 'IOException' было поймано? – EJP
Я не могу Toast Exception, поскольку я запускаю задачу сервера в Async Task, я могу поджарить с помощью handler.post, но это будет тост только статическим текстом, мне нужно передать объект Exception к нему, чтобы поджарить его, что я нахожу путают, как это сделать – abhirulz