PC到Rasberry Pi通过TCP / IP套接字

时间:2017-05-29 09:51:54

标签: python sockets tcp server client

我正在尝试使用python的套接字模块(python 2.7)在PC(macbook)和Raspberry Pi 2之间进行无线通信。服务器是PC,客户端是Pi。 当我运行代码(服务器优先然后是客户端)时,两个脚本都会依赖于socket.accept()和socket.connect()方法。

有趣的是,当我执行相反操作(Pi是服务器,PC是客户端)时,代码工作正常,数据已正确发送。

下面的脚本是为了永久循环,同时递增一个发送过的计数器(我在每次成功转移后递增端口,以避免' [Errno 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 个答案:

答案 0 :(得分:1)

我没有立即回答,但我有几个想法。

您的PC和Pi似乎处于不同的网络中。 PC的地址为10.19.92.44,而Pi的地址为172.17.33.12510.19.92.44不是您需要的地址的可能性。networksetup -listallhardwareports不是您需要的地址。为了找出在应用程序中使用的正确PC IP地址:

  1. 问题en0找出wifi接口的名称(应该像en1ifconfig)。
  2. 问题Public Function Give_letter_grade() As String Dim intTotal As Integer intTotal = Gettotal() 'start your secletion If intTotal <= 300 AndAlso intTotal >= 270 Then Letter_grade = "A" ElseIf intTotal <= 269 AndAlso intTotal >= 240 Then Letter_grade = "B" ElseIf intTotal <= 239 AndAlso intTotal >= 210 Then Letter_grade = "C" ElseIf intTotal < 210 AndAlso intTotal >= 180 Then Letter_grade = "D" ElseIf intTotal < 180 Then Letter_grade = "F" Else Letter_grade = "" End If Return Letter_grade '<--- you are missing the 'Return' statement End Function ,找到wifi接口。附加到此接口的IP地址是您需要的IP地址。
  3. 另一个选择是在PC上安装wireshark,设置工作系统(服务器-Pi,客户端PC)并使用wireshark捕获PC和Pi之间的流量。 Wireshark可以轻松找出双方的IP地址。我建议您在调试复杂的网络问题时安装此程序。