プログラミング演習(Computer Networking:A Top-Down Approach(6th Edition)by Kurose and Ross)では、Pythonで単純なプロキシサーバーを開発しようとしています。
#Fill in start. ... #Fill in end.
コードを書く必要があると書かれているところならどこでも、次のコードが与えられました。私の具体的な質問と試みは、この元のスニペットの下にあります。
Pythonサーバーを次のコマンドで起動する必要があります。python proxyserver.py [server_ip]
次にに移動するlocalhost:8888/google.com
と、終了時に機能するはずです。
from socket import *
import sys
if len(sys.argv) <= 1:
print 'Usage : "python ProxyServer.py server_ip"\n[server_ip : It is the IP Address Of Proxy Server'
sys.exit(2)
# Create a server socket, bind it to a port and start listening
tcpSerSock = socket(AF_INET, SOCK_STREAM)
# Fill in start.
# Fill in end.
while 1:
# Strat receiving data from the client
print 'Ready to serve...'
tcpCliSock, addr = tcpSerSock.accept()
print 'Received a connection from:', addr
message = # Fill in start. # Fill in end. print message
# Extract the filename from the given message print message.split()[1]
filename = message.split()[1].partition("/")[2] print filename
fileExist = "false"
filetouse = "/" + filename
print filetouse
try:
# Check wether the file exist in the cache
f = open(filetouse[1:], "r")
outputdata = f.readlines()
fileExist = "true"
# ProxyServer finds a cache hit and generates a response message
tcpCliSock.send("HTTP/1.0 200 OK\r\n")
tcpCliSock.send("Content-Type:text/html\r\n")
# Fill in start.
# Fill in end.
print 'Read from cache'
# Error handling for file not found in cache
except IOError:
if fileExist == "false":
# Create a socket on the proxyserver
c = # Fill in start. # Fill in end.
hostn = filename.replace("www.","",1)
print hostn
try:
# Connect to the socket to port 80
# Fill in start.
# Fill in end.
# Create a temporary file on this socket and ask port 80 for the file requested by the client
fileobj = c.makefile('r', 0)
fileobj.write("GET "+"http://" + filename + "HTTP/1.0\n\n")
# Read the response into buffer
# Fill in start.
# Fill in end.
# Create a new file in the cache for the requested file.
# Also send the response in the buffer to client socket and the corresponding file in the cache
tmpFile = open("./" + filename,"wb")
# Fill in start.
# Fill in end.
except:
print "Illegal request"
else:
# HTTP response message for file not found
# Fill in start.
# Fill in end.
# Close the client and the server sockets
tcpCliSock.close()
# Fill in start.
# Fill in end.
それが言うところ:
# Create a socket on the proxyserver
c = # Fill in start. # Fill in end.
私は試した:
c = socket(AF_INET, SOCK_STREAM)
これは、ソケットを作成する方法のようです。次に、ホストのポート80に接続するために、次のようにします。
c.connect((hostn, 80))
ここに、私が持っているいくつかのローカル印刷ステートメントによるhostn
と正しくあります。google.com
私が記入する次のセクションはそう言って#Read response into buffer
いますが、それが何を意味するのか本当にわかりません。fileobj
すぐ上に作成されたものと関係があると思います。
よろしくお願いします。追加する必要があるものを見逃した場合はお知らせください。
アップデート
私の現在のコードはここにあり、私が試していることを確認できます。
https://github.com/ardavis/Computer-Networks/blob/master/Lab%203/ProxyServer.py