0

ここではまったくの初心者であり、私の質問に対する答えを見つけることができないようです. Python 2.7 を実行しています。

サーバーの私のコードは次のとおりです。

#UDPPingerClient.py
from socket import *

#Create a UDP socket
clientSocket = socket(AF_INET, SOCK_DGRAM)
#Assign IP address and port number to socket
clientSocket.bind(("127.0.0.1",9501))

#Set a timeout value of 1 second
clientSocket.settimeout(1)

msg = "test"

#the server info
sIP = "127.0.0.1"
sPort = 12007
addr = (sIP,sPort)

a = 10

# the server will automatically drop some messages
# so we send 10 to make sure it gets there and then
# listen for a response from the server
while a > 0:
    clientSocket.sendto(msg,addr)
    try:
        received, server = clientSocket.recvfrom(1024)
        print received
    except timeout:
        print ('an error occured')

    a = a - 1

サーバーコード:

# UDPPingerServer.py 
# We will need the following module to generate randomized lost packets 
import random 
from socket import * 

# Create a UDP socket 
# Notice the use of SOCK_DGRAM for UDP packets 
serverSocket = socket(AF_INET, SOCK_DGRAM) 
# Assign IP address and port number to socket 
serverSocket.bind(("127.0.0.1", 12007)) 

while True: 
    # Generate random number in the range of 0 to 10 
    rand = random.randint(0, 10) 
    # Receive the client packet along with the address it is coming from 
    message, address = serverSocket.recvfrom(1024) 
    # Capitalize the message from the client 
    message = message.upper()
    12 # If rand is less is than 4, we consider the packet lost and do not respond
    if rand < 4:
        continue 
    # Otherwise, the server responds 
    serverSocket.sendto(message, address)

これまでのところ、サーバーから応答を得ることができませんでした。私が達成できたのは、このエラーが発生する前に一度送信してタイムアウトすることです。

an error occured <-- output from exception

Traceback (most recent call last):
  File "C:/Python27/UDPPingerClient.py", line 23, in <module>
    received, server = clientSocket.recvfrom(1024)
error: [Errno 10054] An existing connection was forcibly closed by the remote host

これの再現性は 100% です。これは、サーバー ファイルとクライアント ファイルを実行するたびに得られる結果です。ファイアウォールをオンまたはオフにしても同じことです。これは例外に関係していると感じていますが、その理由について頭を悩ませることはできません。

4

1 に答える 1

0

これは私が得た出力です:

foggy@dew ~ $ python UDPPingerClient.py 
TEST
TEST
an error occured
TEST
TEST
TEST
an error occured
TEST
an error occured
TEST

丁度 10 個のメッセージで、タイムアウトになったものもあれば、差し戻されたものもあります。Server の rand 行の上に余分な 12 があることを除けば (これはインタープリターを悩ませません)、コードに問題はありません。

于 2013-10-12T22:10:13.677 に答える