сбой сетевой программы - PullRequest
       3

сбой сетевой программы

0 голосов
/ 06 августа 2010

Я получил этот код от 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 голосов
/ 06 августа 2010

Как второе предположение (я заменил свое первое предположение этим), я подозреваю, что вы запускаете приемник в режиме IDLE, а затем IDLE зависает, поэтому вы не можете запустить клиент. Я не знаю точно, как работает IDLE, поскольку я никогда не использую его, но строка, содержащая recvfrom, остановит поток Python, в котором он будет работать, до тех пор, пока данные не будут отправлены. Поэтому вам нужно запустить клиент в отдельном экземпляре IDLE или из командной строки или что-то в этом роде.

Во всяком случае, я протестировал программу на моем Python с 127.0.0.1 в качестве хоста, и она работала нормально, для некоторых значений отлично. recvfrom зависает, но только до тех пор, пока не будут отправлены некоторые данные, затем он вернется с данными и распечатает их и все. У вас есть ошибка, которая случается после этого, хотя. : -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...