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

안드로이드(클라이언트)-파이썬(서버) 소켓 통신 스트링 수신 문제

0 추천

안녕하세요. 파이썬에서 안드로이드로 스트링값을 보내려고 합니다. 서로 연결은 잘 되는데, 안드로이드에서 값이 받아질 때도 있고 안 받아질때도 있습니다. 원인을 알 수 있을까요?

getKeyword함수를 실행해서 리턴되는 값을 안드로이드에게 보내는 코드입니다. 

그리고 안드로이드에서 파이썬으로 대용량의 데이터를 소켓통신으로 보낼 수 있나요? 도움주시면 정말 감사하겠습니다ㅠㅠ

#...
data = getKeyword()
server_sock = socket.socket(socket.AF_INET)
server_sock.bind((host, port))
server_sock.listen(1)
print("기다리는 중...")

while True:
  client_sock, addr = server_sock.accept()

  if client_sock:
    client_sock.send(data.encode('utf-8'))

client_sock.close()
server_sock.close()
    void connect(){
        Thread getKeywords = new Thread(){
            public void run(){
                try{    // 서버 접속
                    client = new Socket(SERVER_IP, PORT);
                    Log.d("서버 접속 됨", "서버 접속 됨");

                    bufferedReader = new BufferedReader(    // 데이터 받아오기
                            new InputStreamReader(client.getInputStream()));
                    keywords = bufferedReader.readLine();
                    Log.d("keywords", keywords);

                } catch (IOException e){
                    Log.d("서버 접속 못 함", e.getMessage().toString());
                    e.printStackTrace();
                }
            }
        };
        getKeywords.start();
    }
hmin (120 포인트) 님이 2021년 11월 2일 질문
이런 코드는 특히 실제로 실행시켜봐야 정확하게 알 수 있긴한데... 궁금한게 위의 코드처럼하면 서버와의 커넥션이 계속 살아있나요? 그리고 서버에서 오는 데이터를 계속 대기 중인가요?
while(true) 나 이런 걸로 서버의 응답이 올 때까지 대기해야 할 것 처럼 보이는데... 한번 확인해 보시죠.
서버와의 커넥션이 살아있고, 계속 대기 중으로 보입니다..(finally문을 추가했을 때 finally문에 있는 코드를 실행하지 않고 계속 대기중입니다)
추가로 warning에 W/InputReader: Device virtio_input_multi_touch_5 is associated with display ADISPLAY_ID_NONE. 이렇게 뜨는데 관련이 있을것 같아 혹시 몰라서 남깁니다..
byte[] arr = new byte[1024];
InputStream is = client.getInputStream();
int readByteCount = is.read(arr);
String keywords = new String(arr, 0, readByteCount, "UTF-8");
이렇게 바꾸니 잘 받아옵니다!!!! 도움 주셔서 감사합니다.
아, 그렇군요. 잘 됐네요.

답변 달기

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