2016-11-04 2 views
0

python 웹 서버에서 Android 앱으로 데이터를 수신해야하는 앱 요구 사항이 있습니다. 먼저 테스트 할 로컬 환경을 설정했고, Python 서버를 로컬로 호스트했습니다. 소켓을 사용하여 연결을 생성하면 서버 소켓은 android app에 있고 클라이언트는 파이썬 서버입니다. 기본적으로 서버에서 응용 프로그램으로 상태 업데이트를 요청해야합니다 (발리 장착 POST 또는 개장 등). 안드로이드 측 android serversocket 4g 네트워크에 연결할 수 없습니다.

, 나는 기본적으로이 페이지에서 포스트 ... 여기

https://thinkandroid.wordpress.com/2010/03/27/incorporating-socket-programming-into-your-applications/는 파이썬 서버에서 클라이언트 소켓의 ... 여기

@app.route('/clientMessage', methods=['GET', 'POST']) 
def clientMessage(): 
    address = request.values.get('address') 
    host = address 
    port = 6667 

    #create an INET, STREAMing socket 
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
    s.connect((host, port)) 

    #send message using socket 
    s.sendall("please work\n") 

    return "msg sent" 

는 안드로이드 MainActivity이야을 따랐다 곳 청취 서버 소켓이있는 스레드

안드로이드 전화가 pyth와 동일한 내부/로컬 네트워크에있을 때 문제가되지 않습니다. 서버에. 무선을 끄고 4g에 연결하자마자 python이이 오류를 발생시킵니다. 내가 차이를 만드는 경우 나는 맥을 사용하고 있습니다.

~/Documents/androidProjects/pythonExamples$ python serverSockets.py 
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) 
[2016-11-04 09:45:05,876] ERROR in app: Exception on /clientMessage [GET] 
Traceback (most recent call last): 
File "/Library/Python/2.7/site-packages/flask/app.py", line 1988, in wsgi_app 
response = self.full_dispatch_request() 
    File "/Library/Python/2.7/site-packages/flask/app.py", line 1641, in full_dispatch_request 
rv = self.handle_user_exception(e) 
    File "/Library/Python/2.7/site-packages/flask/app.py", line 1544, in handle_user_exception 
reraise(exc_type, exc_value, tb) 
    File "/Library/Python/2.7/site-packages/flask/app.py", line 1639, in full_dispatch_request 
rv = self.dispatch_request() 
    File "/Library/Python/2.7/site-packages/flask/app.py", line 1625, in dispatch_request 
return self.view_functions[rule.endpoint](**req.view_args) 
    File "serverSockets.py", line 66, in clientMessage 
s.connect((host, port)) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py", line 228, in meth 
return getattr(self._sock,name)(*args) 
error: [Errno 51] Network is unreachable 
127.0.0.1 - - [04/Nov/2016 09:45:05] "GET /clientMessage?address=100.74.228.97 HTTP/1.1" 500 - 

나는 내 라우터에서 해당 포트를 전달했고, 그래서 난 트래픽이 인터넷에 내 네트워크에서 점점 알고 그것을 통해 사이트를 Ping 할 수 있지만,이 도달 할 수없는 이유는 알아낼 수 없습니다 안드로이드 장치. 여러 포트를 시도해 봤지만 사용해야 할 특정 포트가있을 수 있습니다. 이것은 처음으로 소켓을 가지고 노는 것이고, 나는 신인 개발자이기도합니다. 나는 내가 보안과 SSL에 대해 heroku에서 호스팅되는 공개 python 서버로 옮길 때 더 생각해야 할 것이지만, 공개 네트워크에서 안드로이드 장치에 연결할 수없는 이유에 대해 누구에게도 통찰력을 줄 수는 없을 것이라고 확신합니다. ?

+0

127.0.0.1 ???? 귀하의 클라이언트가 안드로이드 장치에서도 실행되고 있습니까? – greenapps

+0

당신은 실제로 어떤 ip를 사용합니까? 이 루프백 주소는 작동하지 않으므로 – greenapps

+0

'내 라우터에서 해당 포트를 전달했습니다 .' 정확하게는? 어느 IP 주소로? Wi-Fi를 사용하는 경우에는 필요하지 않습니다. – greenapps

답변

1

귀하의 안드로이드 장치가 모바일 연결에있는 경우, 모바일 공급자가 들어오는 연결을 차단하므로 인터넷 연결이 불가능한 서버가 인터넷에 연결되어 있지 않습니다.

+0

고마워, 그게 내가 알아야 할거야. 나는 방향을 바꾸고 heroku에서 호스팅되는 python 서버의 서버 소켓을 가지고 클라이언트 소켓을 사용하여 안드로이드 애플 리케이션에서 연결을 생성해야한다고 생각한다. 끝점에 도달하면 웹 서버에서 앱으로 전송 된 UI를 업데이트하는 데 필요한 정보가 필요합니다. – salminnella