第二章编程作业

import socket
serverSocket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
serverPort=6789
serverSocket.bind(('',serverPort))
serverSocket.listen(1)
while True:
    print('ready to server')
    connectionSocket,addr=serverSocket.accept()
    try:
        message=connectionSocket.recv(1024)
        filename=message.split()[1]
        f=open(filename[1:])
        outputData=f.readlines()
        connectionSocket.send('HTTP/1.1 200 OK\r\n\r\n')
        for i in range(0,len(outputData)):
            connectionSocket.send(outputData[i].encode())
        connectionSocket.close()
    except IOError:
        connectionSocket.send('404'.encode())
        connectionSocket.close()
serverSocket.close()

message是你的浏览器请求的,是http请求,split默认以空格分格,split后得到一个list,第一个是get,第二个是/hello.html,所以只要从下标1开始就可以得到请求的文件名

还有很重要的一点,只要在自己电脑上用127.0.0.1:端口号/文件名     就可以了,不用管互联网,因为我不会,以后学到再说吧


第二题:udpping

import random  
from socket import *  
serverSocket = socket(AF_INET, SOCK_DGRAM)#建立udp协议的socket连接  
serverSocket.bind(('', 12000))  
while True:  
    rand = random.randint(0, 10)#生成随机数,模拟udp环境下的丢包  
    message, address = serverSocket.recvfrom(1024)#接收客户端发送的信息,应该传送ip地址比较好  
    message = message.upper()  
    if rand < 4: continue#如果随机数字小于4那么就模拟丢包,不进行回复  
    serverSocket.sendto(message, address) 

from socket import *  
import time  
HOST = 'localhost'  
PORT = 12000  
clientSocket = socket(AF_INET, SOCK_DGRAM)#使用udp协议    
for i in range(0,10):#发出十次ping  
    try:  
        start_time = time.time()#从发出报文开始计时  
        clientSocket.sendto('A'.encode(),(HOST, PORT))#发送报文给服务器  
        clientSocket.settimeout(1.0)#设置socket等待时间  
        message, address = clientSocket.recvfrom(1024)#recvfrom设置了一秒的时间限制  
        end_time = time.time()#结束时间  
        print ("Ping %d %f"%(i, end_time-start_time))#得到ttl,并显示出来  
    except timeout:#如果超过时间,抛出一个timeout的错误  
        print ("Resquest time out" )

第三题;

220:服务就绪。

扫描二维码关注公众号,回复: 1638992 查看本文章

250:请求动作正确完成(HELO、MAIL FROM、RCPT TO、QUIT指令执行成功会返回此信息,大小写均可)

235:认证通过。

221:正在处理。

354:开始发送邮件内容,提示以特殊行.结束邮件内容。

500:语法错误,命令不能识别。

552:中断处理。

每个命令都是以\r\n结尾的字符串,并且要encode,这个实验我失败了,等变强了再来做


猜你喜欢

转载自blog.csdn.net/qq_40178140/article/details/80684792