我从http://www.evolt.org/node/60276获得此代码并修改它以侦听来自另一方的单个“1”
但是无论何时我运行这个程序它都会停止并且python IDLE在“data1,addr = UDPSock.recvfrom(1024)”上没有响应
def get1():
# Server program, receives 1 if ball found
# ff1 is file w/ received data
import socket
import time
# Set the socket parameters
host = "mysystem"
port = 21567
#buf = 1024
addr = (host,port)
# Create socket (UDP) and bind to address
UDPSock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
UDPSock.bind(addr)
# Receive messages
while 1:
print "waiting..............."
data1,addr = UDPSock.recvfrom(1024)
print "got 1"
if not data1:
print "Client has exited!"
break
else:
print "\nReceived message '", data1,"'"
UDPSock.close() # Close socket
print "socket closed\n"
#call some other function that uses 1
和客户端
def send1():
# Client program, sends 1 if ball found
# mf1 is file with data to be sent
import socket
# Set the socket parameters
host = "mysystem"
port = 21567
buf = 1024
addr = (host,port)
# Create socket (UDP)
UDPSock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
mf1=1
print mf1
# Send messages
if(UDPSock.sendto(str(mf1),addr)):
print "Sending message '",str(mf1),"'....."
# Close socket
UDPSock.close()
有谁知道这可能是什么原因? (对不起,很长的帖子)
答案 0 :(得分:0)
作为第二个猜测(我用这个替换了我的第一个猜测)我怀疑你在IDLE中运行接收器,然后IDLE挂起,所以你无法运行客户端。我不确切知道IDLE是如何工作的,因为我从不使用它,但是包含recvfrom
的行将阻止Python线程运行直到发送数据。因此,您需要在IDLE的单独实例或命令行中启动客户端。
无论如何,我已经使用127.0.0.1作为主机在我的Python上测试了有问题的程序,并且它运行良好,对于一些好的值。 recvfrom
确实挂起,但只有在发送一些数据之后,它才会返回数据并将其打印出来。你确实有一个在那之后发生的错误。 : - )