2017-05-29 27 views
1

我正嘗試使用python的套接字模塊(python 2.7)在PC(macbook)和Raspberry Pi 2之間進行無線通信。服務器是PC,客戶端是Pi。 當我運行代碼(服務器第一然後客戶端)時,兩個腳本恭敬地卡在socket.accept()和socket.connect()方法上。PC to Raspberry Pi通過TCP/IP套接字

有趣的是,當我做相反的事情時(Pi是服務器,PC是客戶端),代碼工作正常,數據正確發送。

下面的腳本是爲了永遠循環下去,同時增加發送的計數器(我增加了港口的每一個成功的轉移後,以避免「[錯誤48]地址已在使用」(可能是可怕的做法,我知道))

我的客戶端腳本:

import socket 
import sys 

def read(port): 
     s = socket.socket() 
     host = '10.19.92.44' #(IP address of PC (server)) 
     s.connect((host,port)) 
     try: 
       msg = s.recv(1024) 
       s.close() 
    except socket.error, msg: 
      sys.stderr.write('error %s'%msg[1]) 
      s.close() 
      print 'close' 
      sys.exit(2) 
    return msg 

if __name__ == '__main__': 
    port = 1025 
    while True: 
      print 'hey, checking TCP socket' 
      data = read(port) 
      print 'i just read %s' % data 
      print 'port num is: %d' % port 
      port = port + 1 

我的服務器腳本:

import socket 
import time 

def send(data, port): 
    s = socket.socket() 
    s.bind(('', port)) 
    s.listen(5) 
    c, addr = s.accept() 
    print 'Got connection from',addr 
    c.send(data) 
    c.close() 

if __name__ == '__main__': 
    port = 1025 
    num = 1 
while True: 
      print 'hey, sending data' 
      words = 'helloWorld' 
      data = words + str(num) 
      print 'send data: %s' % data 
      send(data,port) 
      port = port + 1 
      num = num + 1 

正如我提到的,當我換角色(和更換服務器IP地址在客戶端腳本Pis 172.17.33.125)代碼工作正常...

任何想法/建議嗎?

非常感謝你

回答

1

我沒有一個直接的答案,但我有幾個想法。

你的PC和Pi似乎在不同的網絡。 PC的地址是10.19.92.44,而Pi的地址是172.17.33.125。有可能10.19.92.44不是您需要的地址。爲了找出什麼是在應用程序中使用正確的PC的IP地址:找出你的無線接口的名稱

  1. 問題networksetup -listallhardwareports(應該是這樣en0en1)。
  2. 問題ifconfig,找到wifi接口。連接到此接口的IP地址是您需要的。

另一種選擇是在PC上安裝wireshark,建立一個工作系統(server-Pi,client-PC)並使用wireshark捕獲PC和Pi之間的流量。 Wireshark可以輕鬆找出雙方的IP地址。我建議在您想調試複雜的網絡問題時安裝此程序。

+0

感謝您的回覆。你說得對,他們在不同的網絡上。當我用我的PC和以太網與Pi一起使用以太網時,它工作。不幸的是我需要無線coms,因爲它是一個機器人,所以我可能不得不選擇一些更原始的東西 - zigbee :( –