网络程序崩溃

时间:2010-08-05 23:55:39

标签: python networking

我从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()

有谁知道这可能是什么原因? (对不起,很长的帖子)

1 个答案:

答案 0 :(得分:0)

作为第二个猜测(我用这个替换了我的第一个猜测)我怀疑你在IDLE中运行接收器,然后IDLE挂起,所以你无法运行客户端。我不确切知道IDLE是如何工作的,因为我从不使用它,但是包含recvfrom的行将阻止Python线程运行直到发送数据。因此,您需要在IDLE的单独实例或命令行中启动客户端。

无论如何,我已经使用127.0.0.1作为主机在我的Python上测试了有问题的程序,并且它运行良好,对于一些好的值。 recvfrom确实挂起,但只有在发送一些数据之后,它才会返回数据并将其打印出来。你确实有一个在那之后发生的错误。 : - )