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 서버로 옮길 때 더 생각해야 할 것이지만, 공개 네트워크에서 안드로이드 장치에 연결할 수없는 이유에 대해 누구에게도 통찰력을 줄 수는 없을 것이라고 확신합니다. ?
127.0.0.1 ???? 귀하의 클라이언트가 안드로이드 장치에서도 실행되고 있습니까? – greenapps
당신은 실제로 어떤 ip를 사용합니까? 이 루프백 주소는 작동하지 않으므로 – greenapps
'내 라우터에서 해당 포트를 전달했습니다 .' 정확하게는? 어느 IP 주소로? Wi-Fi를 사용하는 경우에는 필요하지 않습니다. – greenapps