Python(服务器)Android(客户端)套接字编程

时间:2018-07-29 13:12:56

标签: android python sockets client android-strictmode

我想制作一个将Python代码与Android Studio连接的程序。 但是android studio出现了一个问题,该问题没有显示我想在模拟器屏幕上显示的任何UI。我认为这是由于“ StrictMode”造成的。但是如果我除了StrictMode代码。该程序已停止。我该怎么办?这是代码。

  1. Python代码(服务器)

    import socket
    import random as r
    
    HOST = "localhost"
    PORT = 9999
    
    x = ['10', '20', '30', '40', '50']
    y = ['-10', '-20', '-30','-40', '-50']
    rssi = ['1.5', '2.5', '3.5', '4.5', '5.5']
    
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    print('Socket created')
    
    try:
        s.bind((HOST, PORT))
    except socket.error as err:
        print('Bind failed. Error Code : ' .format(err))
    s.listen(10)
    print("Socket Listening")
    conn, addr = s.accept()
    while(True):
        i = r.randint(0, 4)
        conn.send(bytes("x : " + x[i] + " y : "+ y[i] + " rssi : " +                    
    rssi[i] + "\r\n", 'UTF-8'))
    print("Message sent in python")
        data = conn.recv(1024)
        print(data.decode(encoding='UTF-8'))
    
  2. Android Studio(客户端)-AndroidManifest.xml

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.yangseungchan.socketwithpython">
    
        <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:roundIcon="@mipmap/ic_launcher_round"
            android:supportsRtl="true"
            android:theme="@style/AppTheme">
            <activity android:name=".MainActivity">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>
        <uses-permission android:name="android.permission.INTERNET" />
    </manifest>
    

3.Android Studio(客户端)-MainActivity.java

    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.os.StrictMode;
    import android.support.v7.app.AppCompatActivity;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;

    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.io.PrintWriter;
    import java.net.Socket;

    public class MainActivity extends AppCompatActivity {

        Button button;
        TextView textView;

        private Socket clientSocket;
        private BufferedReader socketIn;
        private PrintWriter socketOut;
        private int port = 9999;
        private final String ip = "222.99.99.14";
        private MyHandler myHandler;
        private MyThread myThread;

        static String text;

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

            StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
            StrictMode.setThreadPolicy(policy);

            try{
                clientSocket = new Socket(ip, port);
                socketIn = new BufferedReader(new         InputStreamReader(clientSocket.getInputStream()));
                socketOut = new PrintWriter(clientSocket.getOutputStream(), true);
            }catch(Exception e){
                e.printStackTrace();
            }

    myHandler = new MyHandler();
    myThread = new MyThread();
    myThread.start();

    button = (Button)findViewById(R.id.button);
    textView = (TextView)findViewById(R.id.textView);


    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            /*socketPython.Datastack.printStack();
            textView.setText((String)SocketwithPython.Datastack.Peek(0));*/
            socketOut.println(123);
        }
    });
}

class MyThread extends Thread{
    @Override
    public void run() {
        while(true){
            try{
                System.out.println("Trying to read...");
                String data = socketIn.readLine(); 
                Message msg = myHandler.obtainMessage(); 
                msg.obj = data;
                myHandler.sendMessage(msg);
                System.out.println(data);
                socketOut.print("Try"+"\r\n");
                socketOut.flush();
                System.out.println("Message sent");
            }
            catch(Exception e){
                e.printStackTrace();
            }
        }
    }
}

class MyHandler extends Handler {
    public void handleMessage(Message msg){
        textView.setText(msg.obj.toString());
    }
}

}

0 个答案:

没有答案