我正在尝试使用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)时,代码工作正常......
有任何想法/建议吗?
非常感谢
答案 0 :(得分:1)
我没有立即回答,但我有几个想法。
您的PC和Pi似乎处于不同的网络中。 PC的地址为10.19.92.44
,而Pi的地址为172.17.33.125
。 10.19.92.44
不是您需要的地址的可能性。networksetup -listallhardwareports
不是您需要的地址。为了找出在应用程序中使用的正确PC IP地址:
en0
找出wifi接口的名称(应该像en1
,ifconfig
)。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地址。另一个选择是在PC上安装wireshark,设置工作系统(服务器-Pi,客户端PC)并使用wireshark捕获PC和Pi之间的流量。 Wireshark可以轻松找出双方的IP地址。我建议您在调试复杂的网络问题时安装此程序。