计算机网络课后——socket编程(多线程Web代理服务器)

编程入门 行业动态 更新时间:2024-10-13 10:23:37

计算机网络<a href=https://www.elefans.com/category/jswz/34/1769768.html style=课后——socket编程(多线程Web代理服务器)"/>

计算机网络课后——socket编程(多线程Web代理服务器)

计网课后编程作业

多线程Web代理服务器

在这个编程作业中,你将研发一个简单的Web代理服务器。当你的代理服务器从一个浏览器接收到对某对象的HTTP请求,它生成对相同对象的一个新HTTP请求并向初始服务器发送。当该代理从初始服务器接收到具有该对象的HTTP响应时,它生成一个包括该对象的新HTTP响应,并发送给该客户。这个代理将是多线程的,使其在相同时间能够处理多个请求。

对本作业而言,配套Web网站对该代理服务器提供了框架代码。你的任务是完善该代码,然后测试你的代理,方法是让不同的浏览器经过你的代理来请求Web对象。
 

备注

测试过滴😜阔以运行哒~~
 
下面奉上源码:
 

源码

ProxyServer

from socket import *
import sys
import os# 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)# 为代理服务器 创建一个TCP套接字、绑定端口号、设置服务器最大连接客户机数量为3(因为是多线程Web服务器)
tcpSerSock = socket(AF_INET, SOCK_STREAM)
tcpSerSock.bind(('', 1234))
tcpSerSock.listen(3)while 1:# 准备从客户机接收响应消息print('准备从客户机接收响应消息...')tcpCliSock, addr = tcpSerSock.accept()print('接收到一个连接,来自:', addr)# 获取客户机发送过来的消息message = tcpCliSock.recv(4096).decode()print('客户机发送过来的消息:', message)# 从消息从提取出文件名filename = message.split()[1].partition("//")[2].replace('/', '_')print('文件名:', filename)fileExist = "false"try:# 检查要访问的文件是否在此Web代理服务器中print('开始检查代理服务器中是否存在文件:', filename)f = open(filename, "r")outputdata = f.readlines()fileExist = "true"print('文件存在在代理服务器中')# 文件存在在代理服务器中,返回响应消息(请求的web网页)给客户机# tcpCliSock.send("HTTP/1.0 200 OK\r\n")# tcpCliSock.send("Content-Type:text/html\r\n")for i in range(0, len(outputdata)):tcpCliSock.send(outputdata[i].encode())print('Read from cache')# 文件不在代理服务器当中,代理服务器就会向远端服务器请求消息,保存好了再返回给客户机except IOError:if fileExist == "false":print('文件不在代理服务器当中,开始向远端服务器请求网页')# 在代理服务器中创建一个TCP套接字c = socket(AF_INET, SOCK_STREAM)hostn = message.split()[1].partition("//")[2].partition("/")[0]print('Host Name: ', hostn)try:# TCP套接字c 连接到远端服务器80端口c.connect((hostn, 80))print('套接字连接到主机的80号端口')# 在套接字上创建一个临时的文件,而且要向80端口(远端服务器)请求信息# for the file requested by the client# fileobj = c.makefile('r', 0)# fileobj.write("GET "+"http://" + filename + " HTTP/1.0\n\n")# 代理服务器 读取 从远端服务器从响应的消息c.sendall(message.encode())buff = c.recv(4096)tcpCliSock.sendall(buff)# 在代理服务器中 创建一个新的文件 用于存放请求过来的消息# 将代理服务器中的响应 发送到客户端套接字,并将相应的文件发送到缓存中tmpFile = open("./" + filename, "w")tmpFile.writelines(buff.decode().replace('\r\n', '\n'))tmpFile.close();except:print("代理服务器向远端服务器请求网页失败")else:# 如果客户机请求的消息在远端服务器也找不到,就说明请求不到了print('文件存在,但是还是出现了 IOError异常')# 关闭客户机 和 代理服务器的TCP套接字print('关闭套接字:tcpCliSock')tcpCliSock.close();
# 关闭代理服务器 和 服务器的TCP套接字
print('关闭套接字:tcpSerSock')
tcpSerSock.close();

更多推荐

计算机网络课后——socket编程(多线程Web代理服务器)

本文发布于:2024-02-05 09:27:30,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1674111.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:课后   计算机网络   代理服务器   多线程   socket

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!