клиент-серверное приложение Android
Добавлено: 22 дек 2014, 21:36
дайте ссылку где есть такое. Не просто java клиент сервер а именно чтоб на android было. гугление особо не помогло.
вот кое что сам пытался сделать.
по чему-то приложение не закрывается кнопкой back. после нажатия на нее, через некоторое время всплывает окно "приложение не отвечает. подождать? , принудительно остановить?
тестировал на реальном устройстве android 2.3.6
сервер
[syntax=java5]package com.example.test_server;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.TimeUnit;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.Menu;
import android.widget.TextView;
public class MainActivity extends Activity
{
int n_port = 7656;
TextView tv;
Handler handler;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView)findViewById(R.id.tv);
tv.append('\n' + "N port " + n_port);
handler = new Handler();
Thread t = new Thread(new Runnable()
{
public void run()
{
try
{
TimeUnit.MILLISECONDS.sleep(500);
handler.post(_run);
}
catch(InterruptedException e)
{
e.printStackTrace();
}
}
});
t.start();
}
Runnable _run = new Runnable()
{
public void run()
{
tv.append('\n' + "ServerSocket");
try
{
ServerSocket server = null;
Socket client = null;
server = new ServerSocket(n_port);
client = server.accept();
tv.append('\n' + "Got client");
PrintWriter out = null;
BufferedReader in = null;
in = new BufferedReader(new InputStreamReader(client.getInputStream()));
out = new PrintWriter(client.getOutputStream());
String input, output;
while((input = in.readLine()) != null)
{
if(input.equalsIgnoreCase("exit"))
break;
// Ответ клиенту
out.println(input);
tv.append('\n' + input);
}
out.close();
in.close();
client.close();
server.close();
tv.append('\n' + "Server closed");
}
catch(IOException e)
{
tv.append('\n' + "ERROR" + '\n' + e.getMessage());
}
}
};
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
} [/syntax]
скорее всего это криво. подскажите как надо.
мне на с++ как то проще кодить
на java кодил только в андройде. может там свой какие то особенности?
вот кое что сам пытался сделать.
по чему-то приложение не закрывается кнопкой back. после нажатия на нее, через некоторое время всплывает окно "приложение не отвечает. подождать? , принудительно остановить?
тестировал на реальном устройстве android 2.3.6
сервер
[syntax=java5]package com.example.test_server;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.TimeUnit;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.Menu;
import android.widget.TextView;
public class MainActivity extends Activity
{
int n_port = 7656;
TextView tv;
Handler handler;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView)findViewById(R.id.tv);
tv.append('\n' + "N port " + n_port);
handler = new Handler();
Thread t = new Thread(new Runnable()
{
public void run()
{
try
{
TimeUnit.MILLISECONDS.sleep(500);
handler.post(_run);
}
catch(InterruptedException e)
{
e.printStackTrace();
}
}
});
t.start();
}
Runnable _run = new Runnable()
{
public void run()
{
tv.append('\n' + "ServerSocket");
try
{
ServerSocket server = null;
Socket client = null;
server = new ServerSocket(n_port);
client = server.accept();
tv.append('\n' + "Got client");
PrintWriter out = null;
BufferedReader in = null;
in = new BufferedReader(new InputStreamReader(client.getInputStream()));
out = new PrintWriter(client.getOutputStream());
String input, output;
while((input = in.readLine()) != null)
{
if(input.equalsIgnoreCase("exit"))
break;
// Ответ клиенту
out.println(input);
tv.append('\n' + input);
}
out.close();
in.close();
client.close();
server.close();
tv.append('\n' + "Server closed");
}
catch(IOException e)
{
tv.append('\n' + "ERROR" + '\n' + e.getMessage());
}
}
};
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
} [/syntax]
скорее всего это криво. подскажите как надо.
мне на с++ как то проще кодить
на java кодил только в андройде. может там свой какие то особенности?