精华内容
下载资源
问答
  • 计算机网络自顶向下方法PDF,适合网络基础学习。包括应用,运输,网络,链路层
  • 计算机网络书籍——————————————————————————————————————————————————
  • 计算机网络自顶向下方法 第4版计算机网络自顶向下方法 第4版计算机网络自顶向下方法 第4版计算机网络自顶向下方法 第4版
  • 计算机网络 自顶向下方法(第六版)高清.pdf 计算机网络 自顶向下方法(第六版)高清.pdf 计算机网络 自顶向下方法(第六版)高清.pdf 计算机网络 自顶向下方法(第六版)高清.pdf 计算机网络 自顶向下方法(第六版...
  • 华中科技大学计算机学院计算机网络自顶向下方法课件,2017级,较为全面,适合使用计算机网络自顶向下方法第七版或第六版的课程
  • 作者: 肖涛 Python爱好者社区专栏作者 个人公众号:inspurer个人网站: https://inspurer.github.io/简书: https://www.jianshu.com/u/1b872cf08f32 本博客是针对,《计算机网络自顶向下方法》一书第二章后面套接字...

    a6a6c0bfc56b12ff3a49f980ff3f24df.gif

    e3a782f1cd59e62c99afc4dacd284e38.gif

    作者:  肖涛    Python爱好者社区专栏作者 

    个人公众号:inspurer

    个人网站: https://inspurer.github.io/

    简书: https://www.jianshu.com/u/1b872cf08f32

    本博客是针对,《计算机网络自顶向下方法》一书第二章后面套接字编程作业,所有代码均已上传至我的github:https://github.com/inspurer/ComputerNetwork

    所有代码均本人亲自编写,有问题欢迎评论交流。

    作业1: Web服务器

    问题描述

    使用Python开发一个简单的Web服务器,它仅能处理一个请求,具体而言,你的服务器将

    当一个客户(浏览器)联系时创建一个连接套接字;

    这个连接接受http请求;

    解释该请求以确定所请求的特定文件;

    从服务器的文件系统获得请求的文件;

    创建一个由请求的文件组成的HTTP响应报文,报文前有首部行;

    经TCP连接向请求的浏览器发送响应;

    如果文件不存在,返回404 Not Found

    问题解决

    主要代码

    服务端代码

    from socket import *serverSocket = socket(AF_INET, SOCK_STREAM)serverSocket.bind(("127.0.0.1",9999))serverSocket.listen(1)# 没有客户端链接时一直在此阻塞connectionSocket, addr = serverSocket.accept()while True:    print('waiting for connection...')    try:        #接收1k数据        data = connectionSocket.recv(1024)        print(data)        if not data:            continue        #data是一个get的http请求报文        filename = data.split()[1] #filename = /HelloWorld.html        # #print(filename[1:])        f = open(filename[1:],encoding="utf-8") #f = HelloWorld.html        outputdata = f.read()        header = 'HTTP/1.1 200 OK\r\n\r\n'        #回复报文        connectionSocket.send(header.encode())        for i in range(0, len(outputdata)):            connectionSocket.send(outputdata[i].encode())        #connectionSocket.close()            except IOError:        header = 'HTTP/1.1 404 NOT FOUND\r\n\r\n'        connectionSocket.send(header.encode())        connectionSocket.close()# 浏览器键入 localhost:***/index.html会有两个请求# index.html && favicon.ico(网站的图标)

    客户端代码

    from socket import *ClientSocket = socket(AF_INET, SOCK_STREAM)ClientSocket.connect(('localhost',9999))while True:    #这里的Connetction: close不同于浏览器常见的keep-alive,    #close表示要求服务器在发送完被请求的对象后就关闭这条链接    Head = '''GET /index.html HTTP/1.1\r\nHost: localhost:9999\r\nConnection: close\r\nUser-agent: Mozilla/5.0\r\n\r\n'''    ClientSocket.send(Head.encode('utf-8'))    data = ClientSocket.recv(1024)    print(data)    with open("response.html","wb") as f:        f.write(data)

    How to run

    首先运行服务端代码WebServer.py

    可以直接运行WebClient.py

    此时会在工程下得到一个响应文件response.html

    也可以在浏览器输入localhost:9999/index.html87911b234a553d0d4509cd1baec92238.png

    浏览器方式时,需要取消对服务端代码第25行#connectionSocket.close()

    的注释再运行,至于为什么是这样,这是个历史遗留问题,有兴趣还是私戳我邮箱交流吧。2391527690@qq.com

    作业2: UDP ping程序

    问题描述

    使用python采用UDP协议编写一个ping程序,发送一个简单的ping报文给服务器,并确定从客户发送ping报文服务器到接受到pong报文为止的时延,称为往返时延(RTT) 。因为UDP是一个不可靠的协议,客户发送的分组可能会丢失,为此,客户不能无限期地等待服务器的响应,等待时间至多为1s,否则,打印一条错误信息。

    问题解决

    主要代码

    服务端代码

    import randomfrom socket import *#AF_INET指定使用IPv4协议,如果要用更先进的IPv6,就指定为AF_INET6#SOCK_DGRAM指定了这个Socket的类型是UDPserverSocket = socket(AF_INET, SOCK_DGRAM)#用0.0.0.0绑定到所有的网络地址,还可以用127.0.0.1绑定到本机地址serverSocket.bind(('127.0.0.1',12000))while True:    #产生一个0到10之间的随机数    rand = random.randint(0, 10)    #从套接口上读取数据,参数为缓冲区大小    message, address = serverSocket.recvfrom(1024)    #通过打印我们可以看到UDP客户端socket的端口是不确定,系统随机分配的    print("收到来自 %s 的报文: (%s)" % (address,message))    # 把接收到的信息全部转为大写    print("随机数是: %d" % rand)    message = message.upper()    #如果随机数小于4,服务端无应答,客户端就会超时    if rand < 4:        continue    serverSocket.sendto(message, address)

    客户端代码

    import timefrom socket import *serverName = '127.0.0.1' # 主机serverPort = 12000# 创建Socket时,AF_INET指定使用IPv4协议,如果要用更先进的IPv6,就指定为AF_INET6# SOCK_DGRAM指定了这个Socket的类型是UDP# SOCK_STREAM指定使用面向流的TCP协议clientSocket = socket(AF_INET, SOCK_DGRAM)clientSocket.settimeout(1) # 设置超时时间为1sfor i in range(0, 10):    oldTime = time.time()    sendTime = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(oldTime))    # encode()把str转成bytes,传输格式要求    message = ('package %d,client_local_time:%s' % (i + 1, sendTime)).encode()    try:        # 发送数据        clientSocket.sendto(message, (serverName, serverPort))        # 1024指定要接收的最大数据量为1kb = 1024 bytes        # recvfrom是一个系统调用,由用户态转向系统态,从套接口上接收数据,并捕获数据发送源的地址。        # 如果数据报大于缓冲区,那么缓冲区中只有数据报的前面部分,其他的数据都丢失了,并且recvfrom()函数返回WSAEMSGSIZE错误        # 如果没有数据待读,那么除非是非阻塞模式,不然的话套接口将一直等待数据的到来,果没有在Timeout = 1s内接收到数据,此时将返回SOCKET_ERROR错误,错误代码是WSAEWOULDBLOCK。用select()或WSAAsynSelect()可以获知何时数据到达        # UDP的 recvfrom() 和 TCP 的recv()不一样,具体可以看 TCP Ping项目        modifiedMessage, serverAddress = clientSocket.recvfrom(1024)        # 计算往返时间        rtt = time.time() - oldTime        # decode 把bytes转成str        modifiedMessage = modifiedMessage.decode("utf-8")        print('报文 %d 收到来自 %s 的应答: %s,往返时延(RTT) = %fs' % (i+1, serverName,modifiedMessage, rtt))    except Exception as e:        print('报文 %d: 的请求超时' % (i+1)) # 处理异常

    How to Run

    先运行服务端代码,再运行客户端代码,注意不要占用端口。

    b7631b9a0094883cee77090c39f5c521.png

    邮件客户

    问题描述

    使用STMP协议从一个邮箱向另一个邮箱发送邮件

    问题解决

    可以先了解一下:Windows下操作POP3

    https://blog.csdn.net/ygdxt/article/details/83928802

    主要代码

    #作业3:邮件客户from smtplib import SMTPfrom email.mime.text import MIMETextfrom email.header import Headermail_server = 'smtp.163.com'#根据发送方邮箱确定邮箱服务器#qq邮箱的服务器为smtp.qq.com;163邮箱为smtp.163.comdef get_mail_server(sender):    key = sender[sender.index('@')+1:]    return "smtp."+keyport = '25'  ## SMTP协议默认端口是25sender = '2391527690@qq.com'mail_server = get_mail_server(sender)sender_pass = 'put your mail_code here'    #注意是授权码,而不是登录密码,需要在邮箱端先获取receiver = 'csu_xiaotao@163.com'mail_msg = 'this is a demo'#第一个参数就是邮件正文,# 第二个参数是MIME的subtype,传入'plain'表示纯文本,最终的MIME就是'text/plain',# 最后一定要用utf-8编码保证多语言兼容性。msg = MIMEText(mail_msg, 'plain', 'utf-8')msg['From'] = sendermsg['To'] = receiver#Header对象编码文本,包含utf-8编码信息和Base64编码。msg['Subject'] = Header('来自inspurer的个人计算机', 'utf-8')try:    server = SMTP(mail_server, port)    #用set_debuglevel(1),可以打印出和SMTP服务器交互的所有信息    #server.set_debuglevel(1)    server.login(sender, sender_pass)    #由于可以一次发给多个人,所以传入一个list,邮件正文是一个str,as_string()把MIMEText对象变成str    server.sendmail(sender, (receiver), msg.as_string() )    server.quit()    print("邮件发送成功!")except:    server.quit()    print("邮件发送失败!")

    How to Run

    直接运行stmpDemo.py

    注意代码里的邮箱授权码要填成你自己的,它和邮箱登录密码不一样,至于怎么获取百度吧,我不做搬运工

    7d5a9d4363f4b415dad68878817b7b8f.png

    e5cbd3de8d1f4ba4366242ecb501e7af.png

    作业4: 多线程Web代理服务器

    写到这发现深夜了,以后更新

    55302e302962eaa009fd41663d4310df.gif

    Python的爱好者社区历史文章大合集

    Python的爱好者社区历史文章列表

    8f417df1a4370c665bc20cbd410d8cb6.gif福利:文末扫码关注公众号,“Python爱好者社区”开始学习Python课程

    关注后在公众号内回复“ 课程 ”即可获取

    小编的转行入职数据科学(数据分析挖掘/机器学习方向)【最新免费】

    小编的Python的入门免费视频课程

    小编的Python的快速上手matplotlib可视化库!

    老师爬虫实战案例免费学习视频。

    老师数据分析报告扩展制作免费学习视频。

    玩转大数据分析!Spark2.X + Python精华实战课程免费学习视频。

    58a316623fe7e327ec61329a0dd01dc1.png

    展开全文
  • 计算机网络 自顶向下方法 6版 Python答案。计算机网络 自顶向下方法 6版 Python答案
  • 计算机网络自顶向下方法第六版的实验指导
  • 计算机网络 自顶向下方法.原书第6版 计算机网络 自顶向下方法.原书第6版 计算机网络 自顶向下方法.原书第6版
  • 计算机网络自顶向下方法.第6版
  • 计算机网络自顶向下方法第五版
  • 计算机网络自顶向下方法
  • 计算机网络自顶向下方法(第六版)
  • 计算机网络自顶向下方法答案 英文第六版
  • 答案计算机网络自顶向下方法答案(英文第六版)计算机网络自顶向下方法答案(英文第六版)计算机网络自顶向下方法答案(英文第六版)
  • 计算机网络自顶向下方法第四版答案是计算机网络自顶向下方法的课后答案汇总
  • 计算机网络 自顶向下方法 原书第6版

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,747
精华内容 698
关键字:

计算机网络自顶向下方法