2011-04-16 135 views
7

我有一个android应用程序,我尝试使用套接字连接向服务器发送和接收消息。使用Socket发送和接收消息的Android应用程序:

我已经有各种问题发送和接收。我一直都能够做到这一点,而不是两个。

我想知道是否有人可以帮我做一个简单的练习,我可以使用BufferedReaderPrintWriter来编译。

我很欣赏任何帮助,因为我处于放弃的地步。

在此先感谢....下面是我试过的几张照片(虽然它们与这个问题无关,但我希望它表明我已经在此之前尝试过)。

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:为什么要使用套接字?这很容易处理HTTP。 – Squonk 2011-04-17 00:03:26

+0

可能重复[客户端和服务器之间使用套接字通信](http://stackoverflow.com/questions/5689667/communication-between-client-and-server-using-sockets) – MByD 2011-04-17 00:04:53

+0

您问了几乎相同的问题约2小时前。 – MByD 2011-04-17 00:06:09

回答

1

我只是忘了关闭在客户端套接字连接。所以虽然我怀疑我做了什么是对我自己的问题的模型回答,但它的作品包含在内。

相关问题