Я недавно начал программировать клиент-серверные приложения на J2ME. Теперь я работаю с независимыми компонентами c ++ builder 2010 (например, TidTTCPServer) и J2ME.Мое приложение предназначено для перезапуска службы межсетевого экрана kerio winroute с удаленного компьютера.Мое серверное приложение написано на C ++ Builder 2010, я поместил компонент TidTCTServer в форму, привязанную к 127.0.0.1:4500.Это прослушивает порт 4500 на локальной машине.Затем я добавил список, в который мне нужно добавлять все последующие пакеты, конвертированные в UnicodeString.
//void __fastcall TForm1::servExecute(TIdContext *AContext)
UnicodeString s;
UnicodeString txt;
txt=Trim(AContext->Connection->IOHandler->ReadLn());
otvet->Items->Add(txt);
otvet->ItemIndex=otvet->Items->Count-1;
if (txt=="1") {
AContext->Connection->IOHandler->WriteLn("Suhrob");
AContext->Connection->Disconnect();
}
if (txt=="2") {
AContext->Connection->IOHandler->WriteLn("Shodi");
AContext->Connection->Disconnect();
}
// ----------------------------------------------------------------------------
// void __fastcall TForm1::servConnect(TIdContext *AContext)
++counter;
status->Panels->Items[0]->Text="Connections:" + IntToStr(counter);
status->Panels->Items[1]->Text="Connected to " + AContext->Connection->Socket->Binding->PeerIP + ":" + AContext->Connection->Socket->Binding->PeerPort;
и мой клиенткод выглядит примерно так:
else if (command == send) {
// write pre-action user code here
InputStream is=null;
OutputStream os=null;
SocketConnection client=null;
ServerSocketConnection server=null;
try {
server = (ServerSocketConnection) Connector.open("socket://"+IP.getString()+":"+PORT.getString());
// wait for a connection
client = (SocketConnection) Connector.open("socket://"+IP.getString()+":"+PORT.getString());
// set application-specific options on the socket. Call setSocketOption to set other options
client.setSocketOption(SocketConnection.DELAY, 0);
client.setSocketOption(SocketConnection.KEEPALIVE, 0);
is = client.openInputStream();
os = client.openOutputStream();
// send something to server
os.write("texttosend".getBytes());
// read server response
int c = 0;
while((c = is.read()) != -1) {
// do something with the response
System.out.println((char)c);
}
// close streams and connection
}
catch( ConnectionNotFoundException error )
{
Alert alert = new Alert(
"Error", "Not responding!", null, null);
alert.setTimeout(Alert.FOREVER);
alert.setType(AlertType.ERROR);
switchDisplayable(alert, list);
}
catch (IOException e)
{
Alert alert = new Alert("ERror", e.toString(), null, null);
alert.setTimeout(Alert.FOREVER);
alert.setType(AlertType.ERROR);
switchDisplayable(alert, list);
e.printStackTrace();
}
finally {
if (is != null) {
try {
is.close();
} catch (Exception ex) {
System.out.println("Failed to close is!");
}
try {
os.close();
} catch (Exception ex) {
System.out.println("Failed to close os!");
}
}
if (server != null) {
try {
server.close();
} catch (Exception ex) {
System.out.println("Failed to close server!");
}
}
if (client != null) {
try {
client.close();
} catch (Exception ex) {
System.out.println("Failed to close client!");
}
}
}
мое клиентское приложение подключается к серверу, но когда я пытаюсь отправить такие данные, как
os.write("texttosend".getBytes());
, я не могу получить текстовые данные на сервере, используя,То есть я не получаю отправленные пакеты на сервер от клиента.
txt=Trim(AContext->Connection->IOHandler->ReadLn());
Ребята, где я не прав?это способ, которым я делаю, в порядке?
Или мне нужно использовать StreamConnection вместо SocketConnection?
И когда я использую telnet для отправки данных, это здорово работает, строки добавляются вlistbox
telnet 127.0.0.1 4500
texttosend
23
asf
Любая помощь приветствуется !!!Заранее спасибо!