마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

라즈베리파이와 안드로이드 버튼을 통한 소켓 통신

0 추천
이제 막 코딩을 따라하고 있는 초보자입니다.

라즈베리파이와 안드로이드 스튜디오 버튼 3개를 통한 소켓 통신을 할려고 합니다.

버튼 하나당 Textview에 통신을 받을려고 하고 있는데, 계속 하나에만 통신이 되어서 문의 드립니다.

라즈베리파이 서버 코드(파이썬)

import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(16, GPIO.IN)
GPIO.setup(12, GIPO.IN)
GIPO.setup(13, GIPO.IN)

HOST = ""
PORT = 8091

PORT = 8092

PORT = 8093
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print ('Socket created')
s.bind((HOST, PORT))
print ('Socket bind complete')
s.listen(1)
print ('Socket now listening')

#파이 컨트롤 함수
def do_some_stuffs_with_input(input_string):
   
   if input_string == "send":     
        input_string = "..."
   else :
        input_string = input_string + " 없는 명령어 입니다."
   return input_string
   
while True:
    
    
    conn, addr = s.accept()
    print("Connected by ", addr)

   
    data = conn.recv(1024)
    data = data.decode("utf8").strip()
    if not data: break
    print("Received: " + data)

  
    res = do_some_stuffs_with_input(data)
    print("파이 동작 :" + res)
    if GPIO.input(16) == 1:  
        command =("1")
        conn.sendall(command.encode("utf-8"))

    elif GIPO.input(12) == 1:
        command =("2")
        conn.sendall(command.encode("utf-8"))

    elif GIPO.input(13) == 1:
        command =("3")
        conn.sendall(command.encode("utf-8"))

    else:
        conn.sendall(res.encode("utf-8"))
    conn.close()
  
s.close()

안드로이드 스튜디오 MainActivity 코드

public class MainActivity extends AppCompatActivity {
    TextView recieveText;
    TextView recieveText2;
    TextView recieveText3;
    Button button;

    Socket socket = null;
    static int counter = 0;

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

        recieveText = (TextView)findViewById(R.id.recieveText);
        button = (Button) findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //messageText.setText("");
                TimerTask tt = new TimerTask() {
                    @Override
                    public void run() {
                        MyClientTask myClientTask = new MyClientTask("172.30.1.39",
                                Integer.parseInt("8091"), "0");
                        myClientTask.execute();
                    }
                };
                Timer timer = new Timer();
                timer.schedule(tt,0,200);

            }

        });
        recieveText2 = (TextView)findViewById(R.id.recieveText2);
        button = (Button) findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                TimerTask tt = new TimerTask() {
                    @Override
                    public void run() {
                        MyClientTask myClientTask = new MyClientTask("172.30.1.39",
                                Integer.parseInt("8092"), "0");
                        myClientTask.execute();
                    }
                };
                Timer timer = new Timer();
                timer.schedule(tt, 0, 200);
            }
        });
        recieveText3 = (TextView)findViewById(R.id.recieveText3);
        button = (Button) findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                TimerTask tt = new TimerTask() {
                    @Override
                    public void run() {
                        MyClientTask myClientTask = new MyClientTask("172.30.1.39",
                                Integer.parseInt("8093"), "0");
                        myClientTask.execute();
                    }
                };
                Timer timer = new Timer();
                timer.schedule(tt, 0, 200);
            }
        });

       }
    public class MyClientTask extends AsyncTask<Void, Void, Void> {
        String dstAddress;
        int dstPort;
        String response = "";
        String myMessage = "";

        MyClientTask(String addr, int port, String message) {
            dstAddress = addr;
            dstPort = port;
            myMessage = message;
        }

        @Override
         protected  Void doInBackground(Void... arg0) {

            Socket socket = null;
            myMessage = myMessage.toString();
            try {
                socket = new Socket(dstAddress, dstPort);

                OutputStream out = socket.getOutputStream();
                out.write("0".getBytes());

                ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(1024);
                byte[] buffer = new byte[1024];
                int bytesRead;
                InputStream inputStream = socket.getInputStream();

                while ((bytesRead = inputStream.read(buffer)) != -1) {
                    byteArrayOutputStream.write(buffer, 0, bytesRead);
                    response += byteArrayOutputStream.toString("UTF-8");
                }
                response = "sever:" + response;
            } catch (UnknownHostException e) {
                e.printStackTrace();
                response = "UnknownHostException: " + e.toString();
            } catch (IOException e) {
                e.printStackTrace();
                response = "IOException: " + e.toString();
            } finally {
                if (socket != null) {
                    try {
                        socket.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
            return  null;
        }
union123 (120 포인트) 님이 2021년 3월 10일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...