Python 网络程序崩溃

Python 网络程序崩溃,python,networking,Python,Networking,我从中获得了这段代码,并对其进行了修改,以侦听来自另一端的单个“1” 但是,每当我运行这个程序时,它就会停止,python IDLE在“data1,addr=UDPSock.recvfrom(1024)”上变为无响应 和客户端 def send1(): # Client program, sends 1 if ball found # mf1 is file with data to be sent import socket # Set the socket parameters host

我从中获得了这段代码,并对其进行了修改,以侦听来自另一端的单个“1”

但是,每当我运行这个程序时,它就会停止,python IDLE在“data1,addr=UDPSock.recvfrom(1024)”上变为无响应

和客户端

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()
有人知道这可能是什么原因吗?(很抱歉发了这么长的帖子)

作为第二个猜测(我用这个替换了我的第一个猜测),我怀疑您正在空闲状态下运行接收器,然后空闲状态挂起,因此无法运行客户端。我不知道IDLE是如何工作的,因为我从未使用过它,但是包含
recvfrom
的行将停止Python线程的运行,直到发送数据为止。因此,您需要在IDLE的单独实例中启动客户机,或者从命令行或其他地方启动客户机


无论如何,我已经在我的Python上用127.0.0.1作为主机测试了这个有问题的程序,对于fine的一些值,它工作得很好。
recvfrom
确实挂起,但只有在发送一些数据之后,它才会返回数据并打印出来。不过,在此之后确实会发生错误。:-)

这是一个很好的猜测(我不知道答案),但我已经尝试过了,这不是问题所在…@pjehyun-我自己测试了这段代码,它有一个bug,但主要适用于一条消息。空闲挂起时是否运行客户端?我已设置了两台计算机,一台运行get1(),另一台运行send1()。get1()一碰到这一行就会阻塞。这回答了你的问题吗?我不是sure@pjehyun-您是否测试了这两台计算机之间的网络连接?你有没有试过在同一台计算机上运行两次该程序,以确保它在网络没有问题的情况下工作?有问题的两台计算机之间有防火墙吗?是的,问题是它以前工作得很好。只做了极小的改变,比如时间。增加了睡眠(2)。所以这个bug应该是非常微小的…你发布的版本工作得很好,以至于你遇到的问题不会出现在我面前。如果你有一个不可用的版本,为什么不发布它而不是可以使用的版本呢?
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()