精华内容
下载资源
问答
  • CSEE-W4119-计算机网络 CSEE W4119计算机网络套接字编程
  • 题目要求 You will develop a web server that handles one HTTP request at a time. Your web server should accept and parse the HTTP request, get the requested file from the server’s file system, create...

    题目要求

    You will develop a web server that handles one HTTP request at a time. Your web server should accept and parse the HTTP request, get the requested file from the server’s file system, create an HTTP response message consisting of the requested file preceded by header lines, and then send the response directly to the client. If the requested file is not present in the server, the server should send an HTTP “404 Not Found” message back to the client.

    • 从浏览器请求文件,若存在则请求成功,显示文件。若失败则返回404.

    服务器代码

    from socket import *
    
    HOST = ''
    PORT = 6789
    BUFSIZE = 1024
    ADDR = (HOST, PORT)
    
    tcpSerSock = socket(AF_INET, SOCK_STREAM)
    tcpSerSock.bind(ADDR)
    tcpSerSock.listen(1)
    
    while True:
    	print('waiting for connection...')
    	tcpCliSock, addr = tcpSerSock.accept()
    
    	try:
    		data = tcpCliSock.recv(BUFSIZE)
    		#print(data)					#data是一个get的http请求报文
    		filename = data.split()[1]      #filename = /HelloWorld.html
    		#print(filename[1:])
    		f = open(filename[1:])          #f = HelloWorld.html	
    		outputdata = f.read()
    		header = 'HTTP/1.1 200 OK\r\n\r\n'       #回复报文
    		tcpCliSock.send(header.encode())
    		for i in range(0, len(outputdata)):
    			tcpCliSock.send(outputdata[i].encode())
    		tcpCliSock.close()
    	except IOError:
    		header = 'HTTP/1.1 404 NOT FOUND\r\n\r\n'
    		tcpCliSock.send(header.encode())
    		tcpCliSock.close()
    tcpSerSock.close()
    
    

    代码注意点

    • header 时注意格式,比如如果还有content type 这种字段的话,每个字段之间相隔\r\n ,然后报文结束以\r\n\r\n 结束,否则后面请求文件内容会显示在回复报文中。
    • 看socket文档时send(bytes()) 这个函数里面的是bytes,所以不能直接发送str ,要做一个strbytes 之间的转换。

    运行过程

    1. 运行该webserber.py 代码
    2. 准备HelloWorld.html,内容为<head>Hello World!</head> 。在浏览器输入 ip:6789:HelloWord.html ,会显示文档内容。
      这里写图片描述
    3. 如果输入不存在的文档,比如ip:6789:Hello.html ,会显示HTTP ERROR 404 ,(这里我一一直以为反应在报文里,其实不是,而是反应在页面上,当代码把404改成403就会显示HTTP ERROR 403
      这里写图片描述

    参考myk的GitHub

    展开全文
  • 后来看了《python核心编程》的示例代码。它没有直接用MIME格式发啊,而是以字符串的方式。竟然用到这个代码也可以!!开心!! 问题3:写subject的时候不要写test(可能会被判垃圾邮件?) 结果: 使用...

    题目要求:

    • Your task is to develop a simple mail client that sends email to any recipient. Your client will need to connect to a mail server, dialogue with the mail server using the SMTP protocol, and send an email message to the mail server. Python provides a module, called smtplib, which has built in methods to send mail using SMTP protocol. However, we will not be using this module in this lab, because it hide the details of SMTP and socket programming.
    • 创建一个向任何接收方发送电子邮件的简单邮件客户。客户端必须与邮件服务器创建一个TCP连接,使用SMTP协议与邮件服务器进行交谈,经该邮件服务器向某接收方发送一个电子邮件报文,最后关闭邮件服务器的TCP连接。

    前提准备:

    host port
    smtp.qq.com 25
    smtp.163.com 25
    • 开启发送方邮件的SMTP服务。一般在邮箱的设置选项里,开启服务时有一个授权码。这个授权码会代替真正的邮箱密码进行登陆。(即填在我代码的password那里)

    使用socket发邮件作业代码:

    from socket import *
    import base64
    
    HOST = 'smtp.163.com'
    PORT = 25
    BUFSIZE = 1024
    ADDR = (HOST, PORT)
    user = base64.b64encode(b'******@163.com').decode() + '\r\n'
    password = base64.b64encode(b'......').decode() + '\r\n'
    
    tcpCliSock = socket(AF_INET, SOCK_STREAM)
    tcpCliSock.connect(ADDR)
    recv = tcpCliSock.recv(BUFSIZE)
    print(recv)
    if recv[:3] != b'220':
    	print('220 reply not received from server.')
    
    heloCommand = 'HELO Alice\r\n'
    tcpCliSock.send(heloCommand.encode())
    recv = tcpCliSock.recv(BUFSIZE)
    print('hello: ', recv)
    if recv[:3] != b'250':
    	print('250 reply not received from server.')
    
    login = 'AUTH LOGIN\r\n'
    tcpCliSock.send(login.encode())
    recv = tcpCliSock.recv(BUFSIZE)
    print('login:', recv)
    tcpCliSock.send(user.encode())
    recv = tcpCliSock.recv(BUFSIZE)
    print('user:', recv)
    tcpCliSock.send(password.encode())
    recv = tcpCliSock.recv(BUFSIZE)
    print('password: ', recv)
    
    mailFrom = 'MAIL FROM: <******@163.com>\r\n'
    tcpCliSock.send(mailFrom.encode())
    recv = tcpCliSock.recv(BUFSIZE)
    print('mail from: ', recv)
    
    reptTo = 'RCPT TO: <xxxxxxxxx@qq.com>\r\n'
    tcpCliSock.send(reptTo.encode())
    recv = tcpCliSock.recv(BUFSIZE)
    print('rcpt to: ', recv)
    
    data = b'DATA\r\n'
    tcpCliSock.send(data)
    recv = tcpCliSock.recv(BUFSIZE)
    print('data: ', recv)
    
    who = '******@163.com'
    from_ = who
    to = ['xxxxxxxx@qq.com']
    headers = [
        'From: %s' % from_,
        'To: %s' % ','.join(to),
        'Subject: send SMTP',
    ]
    
    body = [
        'Hello',
        'World!',
    ]
    msg = '\r\n\r\n'.join(('\r\n'.join(headers), '\r\n'.join(body)))
    tcpCliSock.send(msg.encode())
    endmsg = b'\r\n.\r\n'
    tcpCliSock.send(endmsg)
    recv = tcpCliSock.recv(BUFSIZE)
    print('msg: ', recv)
    
    quit = 'QUIT\r\n'
    tcpCliSock.send(quit.encode())
    recv = tcpCliSock.recv(BUFSIZE)
    print('quit: ', recv)
    
    tcpCliSock.close()
    
    

    难点:

    问题1:AUTH LOGIN这个在作者配套的代码文件里没有。
    C:auth login ----------------------------------------- 进行用户身份认证 
    S:334 VXNlcm5hbWU6 ----------------------------------- BASE64编码“Username:”
    C:用户名,使用BASE64编码
    S:334 UGFzc3dvcmQ6 ----------------------------------- BASE64编码"Password:"
    C:密码,使用BASE64编码
    S:235 auth successfully ------------------------------ 身份认证成功
    
    问题2:原作者写的msg会被163判定为垃圾邮件,发不成功
    • 哇,这里我真的百度了很久。后来看了《python核心编程》的示例代码。它没有直接用MIME格式发啊,而是以字符串的方式。竟然用到这个代码也可以!!开心!!
    问题3:写subject的时候不要写test(可能会被判垃圾邮件?)

    结果:

    这里写图片描述
    这里写图片描述

    使用SMTP发邮件

    from smtplib import SMTP
    from email.mime.text import MIMEText 
    from email.header import Header
    
    mail_server = 'smtp.163.com'
    port = '25'
    
    sender = '******@163.com'
    sender_pass = '......'
    receiver = 'xxxxxxxx@qq.com'
    
    mail_msg = 'this is a test'
    msg = MIMEText(mail_msg, 'plain', 'utf-8')
    msg['From'] = sender
    msg['To'] = receiver
    msg['Subject'] = Header('testone', 'utf-8')
    
    try:
    	mail = SMTP(mail_server, port)
    	mail.login(sender, sender_pass)
    	mail.sendmail(sender, (receiver), msg.as_string() )
    	mail.quit()
    	print("邮件发送成功!")
    except:
    	mail.quit()
    	print("邮件发送失败!")  
    
    
    展开全文
  • 题目要求 客户端输入ping 1-10,服务器端人工模拟UDP的丢包。 如果时间超过1s,则表示该包丢了,显示超时 ...如果没有丢包,则输出服务器返回的数据,并且输出...参考书籍:《Python核心编程》,《计算机网络

    题目要求

    • 客户端输入ping 1-10,服务器端人工模拟UDP的丢包。
    • 如果时间超过1s,则表示该包丢了,显示超时
    • 如果没有丢包,则输出服务器返回的数据,并且输出RTT

    服务器代码

    这个代码是教程配套网站已经有的。我是从myk502的GitHub下载的。

    import random
    from socket import *
    
    HOST = ''
    PORT = 12001
    BUFSIZE = 1024
    ADDR = (HOST, PORT)
    
    udpSerSock = socket(AF_INET, SOCK_DGRAM)
    udpSerSock.bind(ADDR)
    
    while True:
    	print('wating for connection...')
    	data, addr = udpSerSock.recvfrom(BUFSIZE)
    	rand = random.randint(0, 10)
    	print(rand, addr)
    	data = data.upper()
    	if rand < 4:                          #人工模拟丢包
    		continue
    	udpSerSock.sendto(data, addr)
    
    udpSerSock.close()
    

    客户端代码

    from socket import *
    from time import *
    from datetime import *
    
    HOST = '127.0.0.1'
    PORT = 12001
    BUFSIZE = 1024
    ADDR = (HOST, PORT)
    TIMEOUT = 1
    
    udpCliSock = socket(AF_INET, SOCK_DGRAM)
    udpCliSock.settimeout(TIMEOUT)
    
    for i in range(0, 10):
    	data = input('> ')
    	if not data:
    		break
    		
    	try:
    		begin_time = datetime.now()
    		udpCliSock.sendto(data.encode(), ADDR)
    		data, ADDR = udpCliSock.recvfrom(BUFSIZE)
    		end_time = datetime.now()
    		if data:
    			print('Response: ', data)
    		time = (end_time - begin_time).microseconds #微秒
    		print('RTT: ', time, 'ms')
    	except Exception as e:
    		print(e)
    		#print('Request timed out')
    
    udpCliSock.close()
    

    运行过程

    这里写图片描述

    参考书籍:《Python核心编程》,《计算机网络》

    展开全文
  • 计算机网络 VC套接字编程 含完整的程序
  • 网络套接字编程

    2012-10-28 10:22:34
    网络套接字编程\计算机网络基础\套接字概述\套接字函数\MFC套接字编程
  • 套接字:(IP和端口)组合的抽象, 网络套接字流程: 域套接字: 下面是vc++编写的聊天工具: 链接: 下载源码.

    在这里插入图片描述
    套接字:(IP和端口)组合的抽象,
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    网络套接字流程:
    在这里插入图片描述
    域套接字:
    在这里插入图片描述
    下面是vc++编写的聊天工具:
    在这里插入图片描述

    链接: 下载源码.

    展开全文
  • 计算机网络实验 UDP套接字编程

    千次阅读 2018-10-31 23:17:20
    西科大计算机网络实验 UDP套接字编程 我用自己的Ubuntu16.04来举例,实验室的是虚拟机,差不多 只针对第三个题目,修改服务器来通过响应客户端发送的GetTime并发送给客户端当前系统时间。 ubuntu16.04界面就不说了。...
  • 大三所作的计算机网络的课程设计,包括报告的书写,内容非常详细,可以在一个局域网中进行人机交流,界面的设计也很漂亮,详细请联系QQ492611814
  • 计算机网络实验:UDP套接字编程一、安装实验环境二、编写程序并调试程序三、实验代码 一、安装实验环境 这次实验使用的是C/C++来编写套接字程序,可以安装DEVC++、VC6.0、CodeBlocks等,在这里我们选择CodeBlocks。...
  • 在本实验中,将学习Python中TCP连接的套接字编程的基础知识:如何创建套接字,将其绑定到特定的地址和端口,以及发送和接收HTTP数据包。你还将学习一些HTTP首部格式的基础知识。 你将开发一个处理一个HTTP请求的Web...
  • 套接字与套接字编程 注:转载请标明原文出处链接:https://blog.csdn.net/lxw234lxw/article/details/103937507 使用端口(Port)来标记不同的网络进程,端口(Port)使用16比特位表示(0~65535)。 套接字...
  • 是关于如何去学习计算机网络这门课程,能够更加清楚明白教师上课讲的内容
  • 文章目录一、计算机网络基础IP地址OSI七层参考模型地址解析ARP协议解析地址的过程域名系统TCP/IP协议TCP协议IP协议ICMP协议UDP协议端口套接字的引入网络字节顺序二、套接字概述TCP的套接字的socket编程UDP的套接字的...
  • 计算机网络个人实验报告,计算机网络(第七版)-实验4-TCP套接字编程。特别说明:个人想法和做法,不保证完全正确。若有错误,欢迎留言纠正!
  • Socket又称”套接字”,应用程序通常通过”套接字”向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。 socket()函数 Python 中,我们用 socket()函数来创建套接字,语法格式如下: ...
  • TCP和UCDP套接字编程步骤 编程步骤参考文章链接:https://www.cnblogs.com/gd-luojialin/p/7694149.html TCP套接字编程 1)服务端 创建一个socket,用函数socket(); 设置socket属性; 绑定ip地址、端口等...
  • 计算机网络个人实验报告,计算机网络(第七版)-实验三-UDP套接字编。特别说明:个人想法和做法,不保证完全正确。若有错误,欢迎留言纠正!
  • 计算机网络自顶向下方法套接字编程作业

    千次阅读 多人点赞 2018-11-30 22:34:02
    本博客是针对,《计算机网络自顶向下方法》一书第二章后面套接字编程作业, 所有代码均已上传至我的github:https://github.com/inspurer/ComputerNetwork 所有代码均本人亲自编写,有问题欢迎评论交流; 如需转载请...
  •  IP地址是在IP协议中,用来标识网络中不同主机的地址。IP协议有两个版本,IPv与IPv6,在一般情况下默认的都是IPv4。对于IPv4来说,IP地址是一个无符号四字节32位的整数(uint32_t)。 IP地址是在传输层协议的报头信息...
  • 套接字 理解源IP地址和目的IP地址 我们在 初识计算机网络 中也提到了源IP地址和目的IP地址,这里我们再来深入理解一下这个概念 在IP数据包的头部,有两个IP地址,一个源IP地址,一个目的IP地址,它代表着这个数据包...

空空如也

空空如也

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

计算机网络套接字编程