增加清华大学出版社信息,增加Gitee链接,修改第二单元部分参考代码。

edit
Xphi 4 years ago
parent 0905ada462
commit b0d9bab304

@ -1,66 +1,71 @@
from socket import *
from base64 import *
mailfrom = "mail from:2@test.com\r\n"
rcptto = "rcpt to:1@test.com\r\n"
data = "data\r\n"
quitmsg = "quit\r\n"
msg = "\r\n I love computer networks!"
# 填写代码使程序发送的邮件中包含内容为 "Hello World!"。
msg = "Hello World!"
endmsg = "\r\n.\r\n"
#此处使用易邮邮件服务器软件搭建了一个内网邮件服务器
mailserver = '10.130.82.62'
#本地搭建的邮件服务器IP地址。
mailserver = 'localhost'
# 在端口25上启动邮件服务器。
mailport = 25
connectaddress = (mailserver, mailport)
# Create socket called clientSocket and establish a TCP connection with mailserver
# 创建 socket 和邮件服务器建立 TCP 连接。
clientSocket = socket(AF_INET, SOCK_STREAM)
clientSocket.connect(connectaddress)
recv = clientSocket.recv(1024)
print (recv)
if recv[:3] != '220':
if recv.decode()[:3] != '220':
print ('220 reply not received from server.')
# Send HELO command and print server response.
# 发送 HELO 命令,打印服务器响应。
heloCommand = 'HELO Alice\r\n'
clientSocket.send(bytes(heloCommand.encode()))
recv1 = clientSocket.recv(1024)
print (recv1.decode())
if recv1[:3] != '250':
if recv1.decode()[:3] != '250':
print ('250 reply not received from server.')
#print('000000000000000')
#从命令和打印服务器响应发送邮件。
#发送登陆认证信息
login = b'auth login\r\n'
clientSocket.send(login)
recv2 = clientSocket.recv(1024).decode('utf-8')
print ('222+',recv2)
print ('登陆认证',recv2)
#发送用户名
userCommand = b64encode('2@test.com'.encode('utf-8'))
clientSocket.send((str(userCommand,encoding='utf-8')+'\r\n').encode())
recv3 = clientSocket.recv(1024).decode('utf-8')
print ('333+',recv3)
print ('用户名',recv3)
#发送密码
password = b64encode('2'.encode('utf-8'))
clientSocket.send((str(password,encoding='utf-8')+'\r\n').encode())
recv4 = clientSocket.recv(1024).decode('utf-8')
print ('444+',recv4)
#print('0000000000000000')
print ('密码',recv4)
# 发送 MAIL FROM 命令,打印服务器响应。
clientSocket.send(bytes(mailfrom.encode()))
check = clientSocket.recv(1024)
print(check)
# 发送 RCPT TO 命令,打印服务器响应。
clientSocket.send(bytes(rcptto.encode()))#将RCPT发送到命令和打印服务器响应。
check1 = clientSocket.recv(1024)
print(check1)
# 发送 DATA 命令,打印服务器响应。
clientSocket.send(bytes(data.encode()))#发送数据命令和打印服务器响应。
check2 = clientSocket.recv(1024)
print(check2)
# 发送邮件内容。消息以单个"." 结束。
clientSocket.send(bytes((mailfrom+msg+endmsg).encode()))#发送消息数据。
check3 = clientSocket.recv(1024)
print(check3)
#发送退出命令并获得服务器响应。
# 发送 QUIT 命令,获取服务器响应。
clientSocket.send(bytes(quitmsg.encode()))
check4 = clientSocket.recv(1024)
print(check4)
clientSocket.close()
clientSocket.close()

@ -0,0 +1,50 @@
from socket import *
import sys
# 准备服务器端 socket
serverSocket = socket(AF_INET, SOCK_STREAM)
# 设定端口号
serverPort = 80
# 绑定地址host,port到套接字
serverSocket.bind(("localhost", serverPort))
# 开始 TCP 监听,该值至少为 1
serverSocket.listen(1)
while True:
# 建立连接
print('Ready to serve...')
# 收到客户端请求时建立一个新连接
connectionSocket, addr = serverSocket.accept()
try:
# 按需补充,接受来自客户端的请求
message = connectionSocket.recv(1024).decode()
# 从消息中提取所请求对象的路径
# 路径是HTTP标头的第二部分由[1]标识
filename = message.split()[1]
# 因为HTTP请求的提取路径包括一个字符“ \”,我们从第二个字符读取路径
f = open(filename[1:])
# 将请求文件的全部内容存储在临时缓冲区中
outputdata = f.read()
# 将HTTP响应标头行发送到连接套接字
connectionSocket.send("HTTP/1.1 200 OK\r\n\r\n".encode())
# 将请求文件的内容发送到客户端
for i in range(0, len(outputdata)):
connectionSocket.send(outputdata[i].encode())
connectionSocket.send("\r\n".encode())
connectionSocket.close()
except IOError:
# 按需补充代码:发送未找到文件的响应消息
connectionSocket.send("HTTP/1.1 404 Not Found\r\n\r\n".encode())
connectionSocket.send("<html><head></head><body><h1>404 Not Found</h1></body></html>\r\n".encode())
# 按需补充代码:关闭客户端 socket
connectionSocket.close()
serverSocket.close()
sys.exit()

@ -1,62 +0,0 @@
# Import socket module
from socket import *
import sys # In order to terminate the program
# Create a TCP server socket
#(AF_INET is used for IPv4 protocols)
#(SOCK_STREAM is used for TCP)
serverSocket = socket(AF_INET, SOCK_STREAM)
# Assign a port number
serverPort = 80
# Bind the socket to server address and server port
serverSocket.bind(("", serverPort))
# Listen to at most 1 connection at a time
serverSocket.listen(1)
# Server should be up and running and listening to the incoming connections
while True:
print('The server is ready to receive')
# Set up a new connection from the client
connectionSocket, addr = serverSocket.accept()
# If an exception occurs during the execution of try clause
# the rest of the clause is skipped
# If the exception type matches the word after except
# the except clause is executed
try:
# Receives the request message from the client
message = connectionSocket.recv(1024).decode()
# Extract the path of the requested object from the message
# The path is the second part of HTTP header, identified by [1]
filename = message.split()[1]
# Because the extracted path of the HTTP request includes
# a character '\', we read the path from the second character
f = open(filename[1:])
# Store the entire contenet of the requested file in a temporary buffer
outputdata = f.read()
# Send the HTTP response header line to the connection socket
connectionSocket.send("HTTP/1.1 200 OK\r\n\r\n".encode())
# Send the content of the requested file to the connection socket
for i in range(0, len(outputdata)):
connectionSocket.send(outputdata[i].encode())
connectionSocket.send("\r\n".encode())
# Close the client connection socket
connectionSocket.close()
except IOError:
# Send HTTP response message for file not found
connectionSocket.send("HTTP/1.1 404 Not Found\r\n\r\n".encode())
connectionSocket.send("<html><head></head><body><h1>404 Not Found</h1></body></html>\r\n".encode())
# Close the client connection socket
connectionSocket.close()
serverSocket.close()
sys.exit()#Terminate the program after sending the corresponding data

@ -15,10 +15,17 @@
\begin{tabular*}{0.85\textwidth}{rm{0.8\textwidth}}
\large $\copyright$ & \sffamily{\color{darkgray} 2021 计算机网络教案社区}
\hspace{0.3em}\includegraphics[width=0.6cm]{figure/logo} \\
& \footnotesize 本教案中所有原创内容,包括但不限于文字、图片、图表、版面设计、标题等的版权归计算机网络教案社区所有,并受著作权法保护。 \\
& \footnotesize 读者可以将本教案的全部或部分内容{\color{purple}免费用于非商业用途},但在使用本教案内容时请注明来源和版权声明,即“内容来自:计算机网络教案社区,版权归原作者所有”。 \\
& \footnotesize 对于不遵守此声明或者其他违法使用本教案内容者,我们将保留依法追究其侵权责任的权利。 \\
& \footnotesize 本教案如涉及特定版权内容,请版权方在社区提供相关信息以便及时删除该内容。 \\
& \footnotesize 本教案中所有原创内容,
包括但不限于文字、图片、图表、版面设计、
标题等的版权归计算机网络教案社区所有,并受著作权法保护。 \\
& \footnotesize 读者可以将本教案的全部或部分内容{\color{purple}免费用于非商业用途}
但在使用本教案内容时请注明来源和版权声明,
即“内容来自:计算机网络教案社区,版权归原作者所有”。 \\
& \footnotesize 对于不遵守此声明或者其他违法使用本教案内容者,
我们将保留依法追究其侵权责任的权利。 \\
& \footnotesize 本教案如涉及特定版权内容,
请版权方在社区提供相关信息以便及时删除该内容。 \\
& \footnotesize 清华大学出版社参与了版式、字体设计等工作。
\end{tabular*}
\renewcommand{\arraystretch}{1}
\end{center}

@ -18,12 +18,15 @@
在附录\ref{app:cheatsheet}中做了汇总,方便老师快速查询。
在实际使用中,任课老师可以根据具体授课需要在本指导书的基础上通过
增删、组合、修改等方法设计适合自身课程的实验方案。
本指导书基于Latex编写
源代码可以从 \href{https://gitee.com/xphi1980/nap_instructions}{Gitee} 获取。
由于时间仓促,加之编者水平有限,
本指导书中缺点和疏漏在所难免。
作为社区项目,恳请广大读者和同行专家批评指正,
同时欢迎更多读者和专家参与本项目的编纂和开发。
\vspace{1em}
本实验指导书各章节主要编纂人员如下:

Loading…
Cancel
Save