2016-11-14 3 views
-1

私はPythonを使ってネットワークプログラミングを学び始めました。私は自分のサーバーにいくつか問題があります。pythonソケットサーバーhttpプロトコルで空のファイルを転送

いくつかの画像、js、cssでシンプルなサーバーを表現できるシンプルなものを構築しようとしていますが、私はファイル転送コードの問題点を把握できません。時間を私はあきらめた。 私はブラウザをチェックしています.HTMLをかなりうまく送信していますが、ページの上部にJSコードがあります。画像をリクエストするときに、ブラウザは "name_I_choose.jpg"ファイルをダウンロードしましたが、0kbファイルでした。ここで

は私のコードです:私はあなたが提案します、すべてを感謝しますので

import socket 
import os 

print "server on" 
server_socket = socket.socket() 
server_socket.bind(("127.0.0.1", 80)) 
server_socket.listen(10) 
while True: 
    (client_socket, client_address) = server_socket.accept() 
    try: 
     data = client_socket.recv(1024) 
     # print data 
    except socket.error: 
     print "no more requests, bye" 
     break 
    if not data: 
     break 
    lines = data.split("\r\n") 
    print lines[0] 
    parts = lines[0].split(" ") 
    print "1: " + parts[0] + " 2: " + parts[1] + " 3: " + parts[2] 
    if parts[0] == "GET" and parts[2] == "HTTP/1.1": 
     print "good" 
     if parts[1] == "\\" or parts[1] == "/": 
      path = "path/to/root/index.html" 
     else: 
      path = "path/to/root" + parts[1].replace("\\", "/") 
     if os.path.isfile(path): 
      f = file(path, 'rb') 
      size = b = os.path.getsize(path) 
      print size 
      types = {"txt": "text/html; charset=utf-8", "html": "text/html; charset=utf-8", "jpg": "image/jpeg", 
        "js": "text/javascript; charset=utf-8", "css": "text/css"} 
      f_type = types.get(path.split(".")[1]) 
      data = f.read(size) 
      print "sending data" 
      client_socket.send("HTTP/1.0 200 " + str(size) + "\r\n" + "Content-Type: " + f_type) 
      client_socket.send(data) 
     else: 
      print "file not found" 
      print path 
      client_socket.send("HTTP/1.0 404 -1\r\n") 
    else: 
     print "not GET HTML FORM" 
    break 
print "done" 
client_socket.close() 
server_socket.close() 

は、多くの問題は、おそらくあります。ありがとう:)

+0

このコードを実行すると出力を含めることはできますか?助けてください。 –

+0

あなたはもっと具体的になりますか?どのような出力? –

+0

申し訳ありません - 私はこのプログラムの出力を意味します。あなたはこのプログラムをサーバーとして実行し、それからファイルをフェッチしようとしますか?あなたは実行中のサーバーからどのような出力を見ることができますか?私はあなたのコードのprintステートメントを参照してください - あなたは私たちにその出力を表示できますか?この実行中のサーバーからデータをどのように取得していますか? –

答えて

0

最終的に私はそれを解決し、問題はファイルの読み取りであったことが判明しました。 正しい操作は:

with open(path, 'rb') as infile: 
      d = infile.read(1024) 
      while d: 
       try: 
        client_socket.send(d) 
       except socket.error, msg: 
        print "socket error occurred: ", msg 
       d = infile.read(1024) 
関連する問題