簡體   English   中英

在Android上使用Python進行套接字通信

[英]Socket communication with Python on Android

我在Android驅動的Galaxy Tab上安裝了sl4a和Python。 我使用python的socket模塊在我的筆記本電腦和手機之間進行通信時遇到了問題。

當我編寫僅限計算機的python程序時,這個例子對我來說一直很好,但是在計算機/ Tab設置上沒有按預期工作。 這是我在Tab上運行的代碼:

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 >是<Tab IP Address ):

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

選項卡上的腳本顯示除最后一個Toast消息之外的所有消息。

我從www.whatismyip.org獲取了Tab的IP地址。

本地套接字編程(即連接到IP地址'localhost'並在選項卡上運行客戶端和服務器)工作正常。

我一直在使用這里的指南將文件傳輸到我的標簽。

對於上下文,我的項目的最終目標是能夠通過在我的筆記本電腦上執行命令通過我的Tab發送文本。 我確信解決方案已經存在,但我想學習如何自己做!

編輯:[已添加21/03/12]事實證明,如果我將Tab連接到我的wifi網絡並使用192.168.0.xx地址,上面的代碼工作正常(在Tab和筆記本電腦之間進行通信)。 這讓我相信問題在於我用來連接Tab的IP地址,而不是代碼本身。 我會繼續努力。 有關最佳方式的任何建議找到要連接的IP地址,或者我可能會犯的錯誤,將不勝感激。

再次編輯:從閱讀這個問題這個鏈接 ,我得出結論,智能手機(和平板電腦)的IP地址不是靜態的,因此在這種情況下將移動設備視為服務器是錯誤的方法。 我會重新考慮我的程序結構。 雖然我現在知道這是構建交互的錯誤方法,但我仍然不完全理解為什么它失敗了。 我懷疑,通過閱讀之前的鏈接,我從www.whatismyip.org獲取的IP地址並不是我的Tab所獨有的,而是屬於我的網絡提供商的“批量IP”,從中可以連接到轉發到各個設備(與網絡路由器可以將連接自身轉發到網絡上的各個設備的方式相同)。 但是,我不確定這一點,並且無法想出任何方法來驗證它(沒有找到與我在同一網絡上的人,他們住在同一個小區,並向他們詢問他們的移動IP)。 如果有人能澄清這一點,我將非常感激。

你認為“批量IP”是對的。 當您通過Wi-Fi連接手機時,它將從路由器的可用IP地址池中獲取隨機IP。

如果您有一定數量的設備連接到路由器,它通常會獲得相同的IP。 例如,如果您有3台計算機通過電纜和1個智能手機連接,那么手機將始終獲得192.168.1.5 IP(192.168.1.2 - .4 IP用於您的計算機)。

根據您擁有的路由器,您可以將其設置為每次將其連接到Wi-Fi時為智能手機提供完全相同的地址。 您從www.whatismyip.org使用的IP是來自提供商的IP,網絡用來訪問“公共互聯網”(但這是另一個故事)。

您應檢查平板電腦上的本地IP(設置 - > Wi-Fi-> Wi-Fi設置 - >並按連接。您的IP上應顯示一個小信息框)。

您應該在服務器的代碼中使用它。

我希望這有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM