2012-03-11 10 views
4

Android 용 Galaxy Tab에 sl4a 및 Python을 설치했습니다. 필자는 파이썬의 socket 모듈을 사용하여 노트북과 휴대 전화 사이의 통신 문제를 해결했습니다.Android에서 Python과 소켓 통신

example은 컴퓨터 전용 파이썬 프로그램을 작성했지만 컴퓨터/탭 설정에서 예상대로 작동하지 않을 때 항상 정상적으로 작동했습니다. 여기에 내가 탭에서 실행하고있어 코드입니다 :

import socket, android 
droid=android.Android() 
droid.makeToast('Running...') 
s=socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.bind(('', 50111)) 
droid.makeToast('Socket has been bound') 
s.listen(1) 
conn, addr = s.accept() 
droid.makeToast('Connection has been accepted') 

그리고 내가 노트북에서 실행하고있어 코드 (여기서 <Tab IP Address> 탭의 IP 주소입니다) :

import socket 
s=socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.connect(('<Tab IP address>', 50111)) 

socket.error: [Errno 10060] A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond 

및 마지막 토스트 메시지를 제외한 모든 탭에 스크립트가 표시됩니다.

www.whatismyip.org에서 Tab의 IP 주소를 가져오고 있습니다.

IP 주소 'localhost'에 연결하여 탭에서 클라이언트와 서버를 모두 실행하는 로컬 소켓 프로그래밍이 정상적으로 작동합니다.

가이드를 사용하여 here을 사용하여 파일을 내 탭으로 전송했습니다.

내 프로젝트의 최종 목표는 내 랩톱에서 명령을 실행하여 내 탭을 통해 텍스트를 보낼 수있게하는 것입니다. 나는 이미 솔루션이 존재한다고 확신하지만 직접 해보는 방법을 배우고 싶습니다!

EDIT : [Added 21/03/12] Wi-Fi 네트워크에 Tab을 연결하고 192.168.0.xx 주소를 사용하면 위의 코드가 잘 작동한다는 사실이 밝혀졌습니다 (Tab과 Laptop 간의 통신). 이로 인해 문제는 코드 자체가 아니라 Tab에 연결하기 위해 사용하는 IP 주소에 있다고 믿습니다. 나는 계속 노력할 것이다. 가장 좋은 방법에 대한 조언은 연결하려는 IP 주소를 찾거나 내가 작성한 오류가 있으면 감사하게 생각합니다.

다시 편집 : this questionthis link에서 스마트 폰의 (및 태블릿) IP 주소는 정적이 아니므로이 경우 모바일 장치를 서버로 취급하는 것이 잘못된 방법이라고 결론을 냈습니다. . 프로그램 구조를 다시 생각해 보겠습니다. 이것이 상호 작용을 구조화하는 잘못된 방법이라는 것을 이제 알았지 만, 왜 실패했는지 완전히 이해하지 못합니다. 이전 링크를 읽으면서 www.whatismyip.org에서 얻은 IP 주소가 내 탭에만 국한된 것이 아니라 네트워크 공급자가 속한 "대량 IP"였기 때문에 연결이 가능합니다. 개별 장치로 전달됩니다 (네트워크 라우터가 네트워크의 개별 장치로 자체 연결을 전달할 수있는 것과 동일한 방식으로). 그러나, 나는 이것에 대해 확신이 없으며 그것을 확인하는 방법을 생각할 수 없다. (나와 같은 네트워크에있는 사람들을 사냥하고, 같은 세포 지역에 살고, 그들에게 그들의 모바일 IP를 물어 보는 것이 부족하다.) 누군가가이 점을 분명히 할 수 있다면, 나는 매우 감사 할 것입니다.

답변

1

당신은 "대량 IP"에 대해 옳았습니다. Wi-Fi를 통해 휴대 전화를 연결할 때 라우터의 사용 가능한 IP 주소 풀에서 임의의 IP를 가져옵니다.

라우터에 연결된 장치의 수가 일정하면 대개 동일한 IP가됩니다. 예를 들어 케이블 3 개와 스마트 폰 1 대를 통해 연결된 3 대의 컴퓨터를 사용하는 경우 전화기는 항상 192.168.1.5 IP (192.168.1.2 - .4 IP가 컴퓨터에 사용됨)를 얻습니다.

라우터에 따라 Wi-Fi에 연결할 때마다 똑같은 주소를 스마트 폰에 제공하도록 설정할 수 있습니다. 그리고 www.whatismyip.org에서 사용했던 IP는 네트워크가 "공용 인터넷"에 도달하는 데 사용하는 공급자의 IP입니다 (그러나 다른 이야기입니다).

태블릿에있는 로컬 IP를 확인 (설정 -> Wi-Fi -> Wi-Fi 설정 -> 연결을 누릅니다. 작은 정보 상자가 IP와 함께 표시되어야 함).

서버용 코드에 사용해야합니다.

도움이 되었기를 바랍니다.

+0

@scubbo 도움이 되었다니 기뻤습니다. –