Java-Server-sockel stecken, auf accept call (Android-Client, Java-Server)

Unten habe ich ein fragment von code zu verstehen mein problem. Ich habe einen server-code, funktioniert gut, für das erste mal, das der client lädt und sendet ein Paket. Nach dem das erste Paket empfangen wird, der server ist fest auf "akzeptieren".

Habe ich wireshark konfiguriert für diesen port, und der server ist immer diese Pakete. Ich Frage mich nur, warum akzeptieren Sie nicht mehr zurück als einmal. Seine mich verrückt.

Server-Code

 public class DAPool implements Runnable {
 private ServerSocket serverSocket;
 private ArrayList<DA> pool;
 private LinkedList<Socket> clientConnQ;
 public DAPool(int newPoolSize, int serverPort) {
  try {
     serverSocket = new ServerSocket(serverPort, 500, InetAddress.getByName("127.0.0.1"));
  } catch (IOException e) {
     e.printStackTrace();
     return;
  }
  poolSize = newPoolSize;
  clientConnQ = new LinkedList<Socket>();
  pool = new ArrayList<DA>(poolSize);
                DA deviceThread;
  for (int threads = 0; threads < poolSize; threads++) {
     deviceThread = new DA();
     connPool.add(deviceThread);
     deviceThread.start();
  }
 }
 public void run() {
    while (true) {
       Socket incomingSocket;
       try {
           incomingSocket = serverSocket.accept();
       } catch (IOException e) {
           e.printStackTrace();
       return;
     }
     insertNewConnToQ(incomingSocket);
  }
 }


 private class DA extends Thread {
  private Socket clientSocket;
  private ObjectInputStream inputObjectStream;
  public DA() { 
  }
  public void run() {
   while (true) {

    while (clientConnQ.isEmpty()) {
     synchronized (clientConnQ) {
      try {
       clientConnQ.wait();
      } catch (InterruptedException ignored) {
       ignored.printStackTrace();
      }
     }
    }
    synchronized (clientConnQ) {
     clientSocket = (Socket) clientConnQ.removeFirst();
     try {
      inputObjectStream = new ObjectInputStream(clientSocket.getInputStream());
     } catch (IOException e) {
      e.printStackTrace();
      return;
     }
        //Do something useful here     
                                    }
    }
   }
  }
 }

Client-Code

public class SendQueue extends Thread {
 LinkedList<Message> requestQ;
 Message sendRequest, requestMessage;

 Socket clientSocket;
 OutputStream outputStream;
 ObjectOutputStream objectOutputStream;

 public SendQueue(Socket newClientSocket) {
  requestQ = new LinkedList<Message>();
  clientSocket = newClientSocket;
 }

 public void run() {
  while (true) {
   synchronized (requestQ) {
    while (requestQ.isEmpty()) {
     try {
      requestQ.wait();
     } catch (InterruptedException ignored) {
      ignored.printStackTrace();
     }
    }
    sendRequest = requestQ.removeFirst();
   }
   try {
    outputStream = clientSocket.getOutputStream();
    objectOutputStream = new ObjectOutputStream(outputStream);    
    objectOutputStream.writeObject(sendRequest);
    objectOutputStream.flush();
    outputStream.flush();
   } catch (IOException e) {
    e.printStackTrace();
   } catch (RuntimeException e) {
    e.printStackTrace();
   }
  }
 }

 public int sendRequest(Message message) {
  synchronized (requestQ) {
   requestQ.addLast(message);
   requestQ.notify();
  }
  return 0;
 }
}
  • Bitte formatieren Sie Ihren code mit code Taste auf dem Bedienfeld.
  • ersten timer, nur Festnetz. sieht jetzt besser denke ich
  • Was genau ist dein problem? Sie sagen, dass accept() nicht zurück, aber es ist genau so wie es funktionieren soll. Es ist warten auf die nächste Verbindung. Haben Sie versucht, die Verbindung mehr als einmal? Es ist nicht klar, aus Ihrer Frage.
  • Ok, habe ich versucht zu erstellen, die den clientSocket wieder, und es scheint zu funktionieren. <pre><code> try { clientSocket = new Socket(InetAddress.getByName("10.0.2.2"), 32123); } catch (IOException e) { e.printStackTrace(); return; }</code></pre>
InformationsquelleAutor Siddharth | 2010-12-20
Schreibe einen Kommentar