2017-10-09 21 views
0

私はPythonを使い始めました。単純なWebサーバーをコーディングしようとしています。 1つの小さな問題を抱えていること以外は、すべて仕事のようです。 WebサーバーからTest.htmlのような特定のファイルを要求すると、HTMLファイル内のデータは、ループ内に滞留しているように繰り返しクライアント内で何度も繰り返されます。 Webクライアントに「Test」と表示されているのを見るのではなく、「Test Test Test Test Test Test ...何度も」参照してください。これはおそらく単純なエラーですが、私は誰かが私を正しい方向に向けることを望んでいました。非常に基本的なPython Webサーバー - 奇妙な問題

ありがとうございました!あなたがループ内で立ち往生している

import socket 
import sys 

serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
print("Socket Created!!") 

try: 
#bind the socket 
    #fill in start 
     server_address = ('localhost', 6789) 
     serversocket.bind(server_address) 
    #fill in end 
except socket.error as msg: 
    print("Bind failed. Error Code: " + str(msg[0]) + "Message: " + 
msg[1]) 
    sys.exit() 
print("Socket bind complete") 

#start listening on the socket 
#fill in start 
serversocket.listen(1) 
#fill in end 
print('Socket now listening') 

while True: 
#Establish the connection 
    connectionSocket, addr = serversocket.accept() 
    print('source address:' + str(addr)) 
    try: 
    #Receive message from the socket 
     message = connectionSocket.recv(1024) 
     print('message = ' + str(message)) 
     #obtian the file name carried by the HTTP request message 
     filename = message.split()[1] 
     print('filename = ' + str(filename)) 
     f = open(filename[1:], 'rb') 
     outputdata = f.read() 
     #Send the HTTP response header line to the socket 
     #fill in start 
     connectionSocket.send(bytes('HTTP/1.1 200 OK\r\n\r\n','UTF- 
8')) 
     #fill in end 
     #Send the content of the requested file to the client 
     for i in range(0, len(outputdata)): 
      connectionSocket.send(outputdata) 

     #close the connectionSocket 
     #fill in start 
     connectionSocket.close() 
     #fill in end 

     print("Connection closed!") 
    except IOError: 
     #Send response message for file not found 
     connectionSocket.send(bytes("HTTP/1.1 404 Not 
Found\r\n\r\n","UTF-8")) 
     connectionSocket.send(bytes("<html><head></head><body><h1>404 
Not Found</h1></body></html>\r\n","UTF-8")) 

#Close the client socket 
     #fill in start 
     connectionSocket.close() 
serverSocket.close() 
+0

なぜあなたはこれを行いますか?ちょうど '輸入フラスコ' –

答えて

3

:)

#fill in end 
    #Send the content of the requested file to the client 
    for i in range(0, len(outputdata)): 
     connectionSocket.send(outputdata) 

あなたはしかし、長い回数ファイルの長さがあるoutputdataの内容を送っています。

connectionSocket.send(outputdata)はfor..loopを一度だけ送信すると必要です。

また、内容を読み取ったファイルを閉じてください。 (f.close()