2013-10-04 1 views
0

У меня эта невероятно сумасшедшая ошибка! Я бросаю idhttpserver, webbrowser на новое мобильное приложение для Android.Delphi XE5 Ошибка сегментации Httpserver Android?

Я хочу, чтобы сервер предоставлял контент браузеру. Он отлично работает на окнах, но не работает на моем устройстве Android. Я тестировал tcpserver и tcpclient. Я могу заставить клиента подключиться, но когда я начинаю writeln и readln, я получаю ошибку сегментации.

Даже если я запускаю с отладкой, приложение все еще падает ... вот фрагмент кода.

procedure TForm37.Button1Click(Sender: TObject); 
begin 
    IdHTTPServer1.Bindings.Add; 
    try 
    IdHTTPServer1.Active := true; 
    if IdHTTPServer1.Active then 
     Button1.Text := 'Server Started'; 
    except on E: Exception do 
    Button1.Text := 'Server Failed'; 
    end; 
end; 

procedure TForm37.Button2Click(Sender: TObject); 
var 
    astring : string; 
begin 
    try 
    astring := IdHTTP1.Get('http://10.0.1.78:6000/'); 
    // or astring := IdHTTP1.Get('http://127.0.0.1:6000/'); 
    ShowMessage(astring); 
    except on E: Exception do 
    Button2.Text := 'connection failed'; 
    end; 
end; 

procedure TForm37.IdHTTPServer1CommandGet(AContext: TIdContext; 
    ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo); 
begin 
    AResponseInfo.ContentText := 
    '<html><head><title>My First Response</title></head>' + 
    '<body>Command: ' + ARequestInfo.Command + 
    '<br />Host: ' + ARequestInfo.Host + 
    '<br />URI: ' + ARequestInfo.URI + 
    '<br />UserAgent: ' + ARequestInfo.UserAgent + 
    '</body></html>'; 
end; 
+0

'Bindings.Add' просто создает новую привязку к IP 0.0.0.0, порт 80. Ни один из них не относится к IP-адресу или порту, к которому вы пытаетесь получить доступ. После добавления вы должны настроить привязку. –

+0

Более точно, 'Bindings.Add' создает новое связывание, которое по умолчанию имеет значение свойства' TIdCustomTCPServer.DefaultPort', которое по умолчанию остается в 80 в 'TIdHTTPServer ', но может быть изменено. Skywalker мог установить «DefaultPort» до 6000 перед вызовом 'Bindings.Add'. –

+0

@Skywalker: укажите, какая строка кода действительно вызывает ошибку, и укажите полное сообщение об ошибке. Ошибка сегментации является эквивалентом платформы AccessViolation на Windows. Скорее всего, это означает, что что-то не было правильно инициализировано, прежде чем вы пытались его использовать. –

ответ

0

Этот ответ обязательно будет непопулярным. Я тоже пытаюсь разработать приложение Datasnap для FM HD Android с помощью XE5, и я получаю Segementation Fault (11) на каждом шагу! Это совершенно непредсказуемо. Компиляция в качестве цели Win32 не вызывает ошибок. Например: Обработчик событий кнопки будет выполняться и успешно завершаться при первом нажатии кнопки, а затем при втором щелчке он вызывает ошибку сегментации без видимых причин. Мое приложение почти ничего не приносит пользы на данный момент, но мне потребовалось несколько часов и часов пробной ошибки, чтобы заставить его делать то, что он делает. Я лично не думаю, что разработка Android в Delphi XE5 на самом деле жизнеспособна, если вы не являетесь кем-то, кто уже уже разрабатывает приложения для Android, используя другой dev. средах и/или у вас нет ничего лучше делать весь день, чем бороться с ним.

+0

Я активно разрабатываю приложение для Android, которое работает очень хорошо ... Большинство проблем возникает, потому что мы так используем способ, которым win32 обрабатывает освобождение памяти и как создаются компоненты. Я обнаружил, что FMX по-прежнему очень жуткий в некоторых ошибках, но супер awesom в других областях. Может быть, напишите мне какой-нибудь код, и я вижу, могу ли я вам помочь? Имейте великий День Майк! – Skywalker

+0

Мне бы очень понравилась помощь! Как я могу получить свой код для вас? –