无法从Android客户端

时间:2018-02-10 10:13:49

标签: android python sockets

我想写一个简单的Android应用程序,它将文本发送到python服务器,然后提出它的答案(在我们的例子中:数据中有多少个元音)并使用Logcat来查看它真正获得了数据。 对于客户端等待服务器响应的部分,一切正常。 即使服务器说它将数据发送回客户端,它也会卡在那里。

有谁知道可能导致此问题的原因是什么?

更新:

在使用Wireshark嗅探后,我发现客户端和服务器相互发送的数据是“格式错误的数据包”。谁知道为什么?

我的客户代码:

public class MainActivity extends Activity {

private Socket socket;

private static final int SERVERPORT = 5000;
private static final String SERVER_IP = "10.0.0.1";

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

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

public void onClick(View view) {
    try {
        EditText et = (EditText) findViewById(R.id.EditText01);
        String str = et.getText().toString();
        PrintWriter out = new PrintWriter(new BufferedWriter(
                new OutputStreamWriter(socket.getOutputStream())),
                true);
        out.println(str);
        Log.i("Tag","sent " + str);
        BufferedReader input = new BufferedReader(new InputStreamReader(this.socket.getInputStream()));
        try {

            String read = input.readLine();
            Log.i("Tag","got " + read);

        } catch (IOException e) {
            e.printStackTrace();
        }
    } 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
   srv_sock = socket.socket()
   ip = "0.0.0.0" # means  local
   port = 3001  # 0 means get random free port
   srv_sock.bind((ip, port))
   srv_sock.listen(5)
   while True:
       (new_sock, address) = srv_sock.accept()
       print "Hello! this is a vowels server! You need to send a word or a 
   sentence and I'll give you the number of vowels in it!"
        while True:
            data = new_sock.recv(1024)
            if data == "" :
               print "Client Disconnected"
               break
            print "Received<<< " + data
            data = data.upper()
            to_send = "Num of vowels is "
            cnt=0
            if data.isdigit():
               to_send = "ERROR:Number doesn't have any vowels!"
            else:
                for letter in data:
                   if (letter == 'A' or letter == 'E' or letter == 'O' or letter 
    == 'U' or letter == 'I'):
                        cnt += 1
                to_send += str(cnt)
            new_sock.send(unicode(to_send + "\n"))
            print "Sent   >>>" + to_send
        new_sock.close()
   srv_sock.close()

0 个答案:

没有答案