2011-04-16 23 views
7

que tiene una aplicación para Android que estoy tratando de utilizar para enviar y recibir mensajes a un servidor mediante conexión de socket.aplicación Android utiliza la toma para enviar y recibir mensajes:

he tenido todo tipo de problemas de envío y recepción. He podido hacer uno u otro, en ningún momento ambos.

Me preguntaba si alguien podría ayudarme con un ejercicio simple que puedo compilar usando BufferedReader y PrintWriter para hacerlo.

Agradezco cualquier ayuda que yo estoy en el punto de darse por vencido.

Gracias de antemano .... A continuación se presentan algunas fotos de lo que he tratado (A pesar de que son irrelevantes para esta pregunta, espero que muestra que he tratado antes de preguntar aquí).

private OnClickListener sendClickListener = new OnClickListener(){ 
    public void onClick(View arg0) { 

     Thread cThread = new Thread(new ClientThread()); 
     cThread.start(); 
}};  

public class ClientThread implements Runnable { 
    public void run() { 
     try { 
      EditText dstAddress = (EditText) findViewById(R.id.destinationAddress); 
      EditText dstMessage = (EditText) findViewById(R.id.messageToTranslate); 
      EditText dstPort = (EditText) findViewById(R.id.destinationPort); 
      String address = dstAddress.getText().toString(); 
      String message = dstMessage.getText().toString(); 
      int port = Integer.parseInt(dstPort.getText().toString()); 

      InetAddress serverAddr = InetAddress.getByName(address); 
      Log.d(".Coursework", "C: Connecting..."); 

      Socket socket = new Socket(serverAddr, port); 
      connected = true; 
       while (connected) { 
        try { 
         EditText dstTranslation = (EditText) findViewById(R.id.returnedTranslation); 
         dstTranslation.setText("help me"); 
         Log.d(".Coursework", "C: Sending command."); 
         PrintWriter out; 
         out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true); 
         out.println(language); 
         out.println(message); 
         Log.d("ClientActivity", "C: Sent."); 
         //BufferedReader in; 
         //in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
         //String translation = in.readLine(); 


        } catch (Exception e) { 
         Log.e("ClientActivity", "S: Error", e); 
        } 
       } 
       socket.close(); 
       Log.d("ClientActivity", "C: Closed."); 
     } catch (Exception e) { 
      Log.e("ClientActivity", "C: Error", e); 
      connected = false; 
     } 

    } 

public class ClientConnection { 

String address, language, message; 
int portNumber; 
Socket clientSocket = null; 

public ClientConnection(String lan, String mes, String add, int pn) throws IOException{ 
    address = add; 
    portNumber = pn; 
    language = lan; 
    message = mes; 
} 
public String createAndSend() throws IOException{ 
    // Create and connect the socket 
    Socket clientSocket = null; 
    clientSocket = new Socket(address, portNumber); 
    PrintWriter pw = new PrintWriter(clientSocket.getOutputStream(),true); 
    BufferedReader br = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));  

    // Send first message - Message is being correctly received 
    pw.write(language+"\n"); 
    pw.flush(); 
    // Send off the data 

    // Send the second message - Message is being correctly received 
    pw.write(message+"\n"); 
    pw.flush(); 
    pw.close(); 
    // Send off the data 

    // NOTE: Either I am not receiving the message correctly or I am not sending it from the server properly. 
    String translatedMessage = br.readLine(); 
    System.out.print(translatedMessage); 
    br.close(); 
    //Log.d("application_name",translatedMessage); Trying to check the contents begin returned from the server. 
    return "Say What??"; 
} 

import java.io.BufferedOutputStream; 
import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.PrintWriter; 
import java.net.ServerSocket; 
import java.net.Socket; 

public class ServerConnection { 

    public static void main(String[] args) throws Exception {  
     // Delete - Using while loop to keep connection open permanently. 
     boolean status = false; 
     while(!status){ 
      ServerSocket serverSocket = null; 
      try { 
       serverSocket = new ServerSocket(4444); 
      } catch (IOException e) { 
       System.err.println("Could not listen on port: 4444."); 
       System.exit(1); 
      } 
      Socket clientSocket = null; 
      try { 
       clientSocket = serverSocket.accept(); 
      } catch (IOException e) { 
       System.err.println("Accept failed."); 
       System.exit(1); 
      } 
      // Delete - Working as of here, connection is established and program runs awaiting connection on 4444 
      BufferedReader br = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));  
      String language = br.readLine(); 
      String message = br.readLine(); 
      // Test - Works 
      System.out.println(language);  
      // Test - Works 
      System.out.println(message); 
      // Delete - Working as of here, both messages are passed and applied. Messages are received as sent from client. 
      TranslateMessage tm = new TranslateMessage(); 
      String translatedMessage = tm.translateMessage(language, message); 

      // NOTE: This seems to be where I am going wrong, either I am not sending the message correctly or I am not receiving it correctly.. 
      // PrintWriter writer = new PrintWriter(new BufferedOutputStream(clientSocket.getOutputStream())); 
      PrintWriter pw = new PrintWriter(clientSocket.getOutputStream(),true); 
      // Send translation back 
      System.out.println(translatedMessage); 
      pw.write(translatedMessage+"\n"); 
      pw.write("Return test \n"); // Test message! 
      pw.flush(); 
      // Send off the data 
      pw.close(); 
      br.close(); 
      clientSocket.close(); 
      serverSocket.close(); 
     } 
    } 
} 
+0

@ user671430: ¿Por qué usar sockets? Esto es fácil de hacer con HTTP. – Squonk

+0

posible duplicado de [La comunicación entre cliente y servidor utilizando sockets] (http://stackoverflow.com/questions/5689667/communication-between-client-and-server-using-sockets) – MByD

+0

Se preguntó casi la misma pregunta alrededor de 2 horas hace. – MByD

Respuesta

1

simplemente me olvidé de cerrar la conexión de enchufe en el lado del cliente. Así que aunque dudo de lo que he hecho es una respuesta modelo a mi propia pregunta, funciona de incluido.

Cuestiones relacionadas