Application Android à l'aide de Socket pour envoyer et recevoir des messages:

J'ai une application android que j'essaie d'utiliser pour envoyer et recevoir des messages vers un serveur à l'aide de la connexion socket.

J'ai eu toutes sortes de problèmes d'envoi et de réception. J'ai été en mesure de faire l'un ou l'autre, à aucun moment les deux.

Je me demandais si quelqu'un pouvait m'aider avec un exercice simple que je peux le compiler à l'aide de BufferedReader et PrintWriter de le faire.

J'apprécie toute l'aide que je suis sur le point d'abandonner.

Merci d'avance.... Ci-dessous, quelques clichés de ce que j'ai essayé (même Si elles ne sont pas pertinentes à cette question, j'espère que cela montre que j'ai essayé avant de demander ici).

    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();
}
}
}
  • Pourquoi utiliser des sockets? C'est facile à faire avec HTTP.
  • double possible de la Communication entre le Client et le Serveur à l'aide de Sockets
  • Vous avez demandé presque la même question à propos de 2 heures.
  • Au départ, j'allais utiliser HTTP, je pensais Sockets serait un moyen simple d'envoyer simplement des Chaînes d'avant en arrière. Comment puis-je envoyer des messages avec l'adresse HTTP de l'intérêt? Je suis très ouvert à une meilleure façon de le faire. Il est si proche et pourtant si éloignées, la seule chose qui me retient de ce que je vois est d'avoir retourné le message de l'interface graphique.
  • Salut MByD je pensais que j'allais juste voir si je pouvais obtenir un exemple de la simple prise de connexion de l'envoi et de la réception d'un message. J'apprécie la nécessité de garder les forums effacer les doublons. J'ai seulement posté le code ici pour montrer que je n'étais pas juste de prendre la pisse. Désolé pour tout désagrément causé.