Ciao ragazzi, ho un problema....quello che devo fare è un semplicissimo client [Android] che comunica con un semplicissimo Server [java]....una sorta di chat utilizzando le socket..
Il client Android appena si avvia deve connettersi con il server e dopo, ogni volta che viene premuto un bottone, inviare una stringa al server...
Per quanto riguarda il client Android ecco il codice:
1
2public class MainActivity extends Activity {
3DataOutputStream dataOutputStream;
4Button inviaStringa;
5<a rel="nofollow" href="https://www.androidiani.com/forum/members/override.html" target="_blank">Override</a>
6protected void onCreate(Bundle savedInstanceState) {
7super.onCreate(savedInstanceState);
8setContentView(R.layout.activity_main);
9dataOutputStream = null;
10new Connection().start(); //avvio il thread secondario che connette la socket e gli stream di lettura/scrittura
11inviaStringa = (Button)findViewById(R.id.button);
12
13inviaStringa.setOnClickListener(new OnClickListener() {
14public void onClick(View v) {
15if(dataOutputStream!=null){
16try{
17dataOutputStream.writeUTF("stringa da inviare");
18}catch(Exception e){
19// TODO Auto-generated catch block
20e.printStackTrace();
21}
22}
23}
24});
25
26
27
28
29}
30
31
32
33public class Connection extends Thread{
34Socket socket;
35DataInputStream dataInputStream;
36public Connection(){
37socket = null;
38dataOutputStream = null;
39}
40
41public void run(){
42try {
43socket = new Socket("192.168.1.8",8080);
44dataOutputStream = new DataOutputStream(socket.getOutputStream());
45dataInputStream = new DataInputStream(socket.getInputStream());
46
47} catch (UnknownHostException e) {
48// TODO Auto-generated catch block
49e.printStackTrace();
50} catch (IOException e) {
51// TODO Auto-generated catch block
52e.printStackTrace();
53}
54
55while(true){
56try{
57String input = dataInputStream.readLine();
58//stampa la stringa input su qualche TextView...
59}catch(IOException){
60// TODO Auto-generated catch block
61e.printStackTrace();
62}
63}
64
65
66}
67
68
69}
70
mentre il codice del server java è il seguente:
251public class Server {
2public static void main(String args[]){
3
4ServerSocket serverSocket;
5Socket socket;
6DataInputStream dataInputStream;
7
8
9try {
10serverSocket = new ServerSocket(8080);
11System.out.println("in attesa di connessione");
12socket = serverSocket.accept();
13System.out.println("connessione ricevuta");
14dataInputStream = new DataInputStream(socket.getInputStream());
15While(true){
16System.out.println(dataInputStream.readLine().toString());
17}
18} catch (IOException e) {
19// TODO Auto-generated catch block
20e.printStackTrace();
21}
22
23
24}
25}
Il problema è che il server riceve regolarmente la connessione, però non riceve alcuna stringa dal client android....Infatti se sul client premo molte volte il bottone, il server non riceve la stringa....
in pratica il server java rimane fermo su "System.out.println(dataInputStream.readLine().toS tring());"
La cosa più strana è che entrambi funzionano correttamente separati, cioè se faccio connettere un client telnet al server java, quest'ultimo riceve regolarmente le stringe inviategli, mentre se collego il client android a un server telent, quest'ultimo ugualmente riceve le stringhe in modo corretto ogni volta che premo il bottone del client....
In pratica non vengono inviate o ricevute le stringhe solo quando vengono connessi tra di loro....
Sapete il motivo?
o eventualmente avete il codice di un client che funziona correttamente?
L'importante è che il client istanzia "solo" all'inizio il thread secondario e la socket, dopo ad ogni pressione del bottone viene solo inviata la stringa.
vi ringrazio molto....