Notei que seu problema se parece muito com o meu. Tenho um Blackberry Bold 9000 para o qual decidi criar um aplicativo de execução remota de tarefas, usando apenas um celular, uma conexão wifi, um cliente no celular(fiz em java, mas não importa o tipo de linguagem, pois desde de que o conceito de sockets seja implementado nos clientes, o servidor irá ouvir normalmente a solicitação).
Quando eu emulo um aparelho celular dentro do meu computador, os comandos e a conexão se dá normalmente e o que eu desejo que seja feito, é feito.
Mas quando passo o cliente para o aparelho e tenho fazer uma comunicação(celular—AP—notebook/desktop), o bendito código me retorna um java.io.IOException - Invalid url parameter. Mas está tudo certinho.
Vi que o tópico não foi fechado desde então, então resolvi postar esse problema e aproveitar minha membresia GUJ rsrsrs.
Algo é certo, o problema está do lado do aparelho celular.
Código rodando em CLDC 1.0 e MIDP 2.0 suporte a wifi.
Vou postar o código java do lado cliente e do lado servidor aqui para ajudar quem futuramente vir a ter o mesmo problema.
Código Servidor:
package servidor;
import java.net.*;
import java.io.*;
/*Existem um problema do lado do cliente ou mesmo, do servidor.
* Ele ouve claramente requisições http 1.0 porém quando o cliente roda através do aplicativo
* e envia requisições por socket mesmo, as requisições não são ouvidas pelo servidor.
*/
public class Servidor extends Thread {
public static void main(String[] args) throws IOException {
new Servidor().start();
}
public final static int porta = 4444;
ServerSocket ss;
public Servidor() throws IOException {
ss = new ServerSocket(porta);
}
public void run() {
while (true) {
try {
System.out.println("Servidor "+InetAddress.getLocalHost().getHostAddress().toString()+" aguardando conexão na porta "+ss.getLocalPort());
Socket s = ss.accept();
BufferedReader is = new BufferedReader(
new InputStreamReader(s.getInputStream()));
String comando = is.readLine();
if(comando !=null){
System.out.println("Ip "+s.getRemoteSocketAddress()+" na porta"+s.getPort());
Runtime.getRuntime().exec("cmd /c"+comando);
System.out.println("Comando "+comando+" executado com sucesso!!!");
}else{
System.out.println("Comando não reconhecido.");
}
} catch (IOException ioe) {
System.err.println("Erro" + ioe.getMessage());
}
}
}
}
Código Cliente
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.microedition.io.ConnectionNotFoundException;
import javax.microedition.io.Connector;
import javax.microedition.io.StreamConnection;
import javax.microedition.lcdui.Alert;
import javax.microedition.lcdui.AlertType;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.TextField;
import javax.microedition.midlet.*;
/**
* @author VITORCRDIAS
*/
public class MidletRAT extends MIDlet implements CommandListener{
private Display display;
private Form endereco = new Form("Remote Administration Tool");
private TextField ipServidor = new TextField("IP:", "", 256, TextField.ANY);
private TextField portaServidor = new TextField("Porta:", "", 8, TextField.NUMERIC);
private TextField comando = new TextField("Comando:", "", 256, TextField.ANY);
private Command ok = new Command("OK", Command.OK, 1);
private Command exit = new Command("Sair", Command.EXIT, 0);
public MidletRAT ()
{
display = Display.getDisplay(this);
}
public void startApp() throws MIDletStateChangeException
{
display.setCurrent(endereco);
endereco.append(ipServidor);
endereco.append(portaServidor);
endereco.append(comando);
endereco.addCommand(ok);
endereco.addCommand(exit);
endereco.setCommandListener(this);
display.setCurrent(endereco);
}
public void pauseApp()
{
}
public void destroyApp(boolean unconditional)
{
}
public void commandAction(Command command, Displayable displayable)
{
if (command == exit)
{
destroyApp(false);
notifyDestroyed();
}
else if (command == ok)
{
try
{
StreamConnection connection =
(StreamConnection) Connector.open("socket://"+ipServidor.getString()+":"+portaServidor.getString(),Connector.WRITE);
InputStream is = connection.openInputStream();
OutputStream os = connection.openOutputStream();
os.write(comando.getString().getBytes());
is.close();
os.close();
connection.close();
}
catch( ConnectionNotFoundException error )
{
Alert alert = new Alert(
"Error", "Cannot access socket.", null, null);
alert.setTimeout(Alert.FOREVER);
alert.setType(AlertType.ERROR);
display.setCurrent(alert);
}
catch( IOException error )
{
Alert alert = new Alert("Error", error.toString(), null, null);
alert.setTimeout(Alert.FOREVER);
alert.setType(AlertType.ERROR);
display.setCurrent(alert);
}
}
}
}
------------------------------------------------------------------------------------------------------
Obs.: Vou procurar por algo que explique esse problema com o blackberry que estou usando, caso eu encontre, posto a solução, mas gostaria que se alguém souber resolver esse problema, me de uma ajudinha…Meu objetivo e fazer uma ferramenta de administração remota simples, que faz uso do cmd.exe no computador.
Obrigado se puderem ajudar.