未通过套接字从Python收到消息到Android

时间:2015-02-05 23:17:19

标签: android python sockets client-server

我的android应用程序需要与服务器python进行通信,但在接收响应时,答案并未到来。这些是我的代码:

这是我的客户:

public class MainActivity extends Activity {

private Socket socket;

private static final int SERVERPORT = 5589;
private static final String SERVER_IP = "192.168.1.131";
TextView risp;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    risp = (TextView) findViewById(R.id.textView1);

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

public void onClick(View view) {
    try {
        EditText et = (EditText) findViewById(R.id.editText1);
        String str = et.getText().toString();
        PrintWriter out = new PrintWriter(new BufferedWriter(
                new OutputStreamWriter(socket.getOutputStream())), true);
        out.println(str);
        out.flush();

        // Read from sock
        BufferedReader input = new BufferedReader(new InputStreamReader(
                socket.getInputStream()));
        StringBuilder response = new StringBuilder();
        String line;
        while ((line = input.readLine()) != null) {
            response.append(line);
        }
        risp.setText(risp.getText().toString() + " " + response.toString());
        out.close();
        input.close();
        socket.close();
    } catch (UnknownHostException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

class ClientThread implements Runnable {

    @Override
    public void run() {

        try {
            InetAddress serverAddr = InetAddress.getByName(SERVER_IP);

            socket = new Socket(serverAddr, SERVERPORT);

        } catch (UnknownHostException e1) {
            e1.printStackTrace();
        } catch (IOException e1) {
            e1.printStackTrace();
        }

    }

}

这就是服务器:

import socket
import sys

# Create a TCP/IP socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# Bind the socket to the port
server_address = ('192.168.1.131', 5589)
print >>sys.stderr, 'starting up on %s port %s' % server_address
sock.bind(server_address)
# Listen for incoming connections
sock.listen(1)

while True:
        # Wait for a connection
        print >>sys.stderr, 'waiting for a connection'
        connection, client_address = sock.accept()
        try:
                print >>sys.stderr, 'connection from', client_address

                # Receive the data
                while True:
                        data = connection.recv(1024)
                        if data.lower() != 'q':
                                print "<-- client: ", data
                        else:
                                print "Quit from Client"
                                connection.close()
                                break
                        data = raw_input("--> server: ")
                        if data.lower() != 'q':
                                connection.sendall(data)
                        else:
                                print "Quit from Server"
                                connection.close()
                                break

        finally:
                # Clean up the connection
                print "Connection close"
                connection.close()

服务器接收客户端消息,但客户端未收到服务器消息。为什么呢?

提前全部谢谢

编辑:我这样解决了:

public class MainActivity extends Activity {

    private Socket socket;

    private static final int SERVERPORT = 5589;
    private static final String SERVER_IP = "192.168.1.131";
    TextView risp;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        risp = (TextView) findViewById(R.id.textView1);
        new Thread(new ClientThread()).start();

    }

    public void onClick(View view) {
        new ConnectionTask().execute();
    }

    class ConnectionTask extends AsyncTask<String, Void, String> {

        protected String doInBackground(String... params) {
            String responce = null;
            try {
                EditText et = (EditText) findViewById(R.id.editText1);
                String str = et.getText().toString();
                PrintWriter out = new PrintWriter(new BufferedWriter(
                        new OutputStreamWriter(socket.getOutputStream())), true);
                out.println(str);
                out.flush();

                InputStream input = socket.getInputStream();
                int lockSeconds = 10*1000;

                long lockThreadCheckpoint = System.currentTimeMillis();
                int availableBytes = input.available();
                while(availableBytes <=0 && (System.currentTimeMillis() < lockThreadCheckpoint + lockSeconds)){
                    try{Thread.sleep(10);}catch(InterruptedException ie){ie.printStackTrace();}
                    availableBytes = input.available();
                }

                byte[] buffer = new byte[availableBytes];
                input.read(buffer, 0, availableBytes);
                responce = new String(buffer);

                out.close();
                input.close();
                socket.close();
            } catch (UnknownHostException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }
            return responce;
        }
        protected void onPostExecute(String responce) {
            risp.setText(responce);
        }
    }

    class ClientThread implements Runnable {

        @Override
        public void run() {

            try {
                InetAddress serverAddr = InetAddress.getByName(SERVER_IP);

                socket = new Socket(serverAddr, SERVERPORT);

            } catch (UnknownHostException e1) {
                e1.printStackTrace();
            } catch (IOException e1) {
                e1.printStackTrace();
            }

        }

    }
}

0 个答案:

没有答案