一、实验目的学习如何创建套接字,将其绑在特定的地址和端口 学习如何发送和接收HTTP数据包 学习一些HTTP首部格式的基础知识
二、实验内容三、实验原理(随便写写......)C 库中包含了用语网络通信的 socket 套接字。Socket 套接字分为流式套接口、 数据报套接口及原始套接口 3 类。 HTTP协议工作原理。 四、实验步骤根据提供的代码框架,完善代码,运行服务器,通过在主机上运行你的浏览器发送请求来测试该服务器。 五、实验结果及分析Web服务器代码 #import socket modulefrom socket import *import sys # In order to terminate the programserverSocket = socket(AF_INET, SOCK_STREAM)#Prepare a sever socket#Fill in startserverPort = 12345serverSocket.bind(('',serverPort))serverSocket.listen(1)#Fill in endwhile True: #Establish the connection print('Ready to serve...') connectionSocket, addr = serverSocket.accept() try: message = connectionSocket.recv(1024).decode() filename = message.split()[1] f = open(filename[1:]) outputdata = f.read() #Send one HTTP header line into socket #Fill in start headerline = "HTTP/1.1 200 OK\r\n" headerline += "Connection: close\r\nContent-Length: " headerline += str(len(outputdata)) headerline += "\r\nContent-Type: text/html\r\n\r\n" print(headerline) connectionSocket.send(headerline.encode()) #Fill in end #Send the content of the requested file to the client for i in range(0, len(outputdata)): connectionSocket.send(outputdata.encode()) connectionSocket.send("\r\n".encode()) connectionSocket.close() except IOError: #Send response message for file not found #Fill in start errinfo = 'HTTP/1.1 404 Not Found\r\n' connectionSocket.send(errinfo.encode()) #Fill in end #Close client socket #Fill in start connectionSocket.close() #Fill in end serverSocket.close()sys.exit()#Terminate the program after sending the corresponding data测试结果 服务器端运行主机的IP地址 在浏览器中请求文件,成功 这是hello.html的内容 当请求不存在的文件时,返回404报文 六、实验中遇到的问题及解决方法在本实验编写代码时,不清楚HTTP首部行具体包含哪些内容,在阅读教材并在网上查找相关资料后,选择了一些信息进行处理,并加入首部行。 参考文本
|