tcp与http协议 以及python的实现

摘要:
htpp协议RquestHeaders格式:请求方法空格URL空格协议版本回车符换行符头部字段名:值回车符换行符···头部字段名:值回车符换行符回车符换行符请求数据socket网络聊天服务端#sokcet服务断importsocketimportthreadingserver=socket.socket()#绑定到0.0.0.0:8000端口上server.bind(('0.0.0.0',8000

htpp协议Rquest Headers格式:

请求方法空格URL空格协议版本回车符换行符

头部字段名:值回车符换行符

···

头部字段名:值回车符换行符

回车符换行符

请求数据

socket网络聊天

服务端

#sokcet服务断
importsocket
importthreading
server =socket.socket()
#绑定到0.0.0.0:8000端口上
server.bind(('0.0.0.0',8000)) #如果是绑定127.0.0.1,那么只能本地连接
server.listen()

defhandle_sock(sock,addr):
    whileTrue:
        #recv是阻塞的
        tmp_data = sock.recv(1024)
        print(tmp_data.decode("utf8"))
        input_data =input()
        sock.send(input_data.encode("utf8"))
#获取客户端连接并启动线程去处理
whileTrue:
    #阻塞,等待连接
    sock,addr =server.accept()

    #启动一个线程去处理新的用户连接
    client_thread = threading.Thread(target=handle_sock,args=(sock,addr))
    client_thread.start()
#sock.close()

客户端

#socket客户端
importsocket
client =socket.socket()
client.connect(('192.168.2.129',8000))
whileTrue:
    
    input_data =input()
    client.send(input_data.encode('utf8'))
    server_data = client.recv(1024)
    print(server_data.decode('utf8'))

client.close()

socket模拟http实现拉取百度首页源码:

#socket客户端
importsocket
http_client =socket.socket()
http_client.connect(('www.baidu.com',80))
html = "GET / HTTP/1.1
Connection:close
"http_client.send(html.encode("utf8"));

data = b""
whileTrue:
    tmp = http_client.recv(1024)
    iftmp:
        data +=tmp;
    else:
        break
print(data.decode('utf8'))
input()

    

socket模拟http实现nginx接受访问:

#tcp实现http协议
importsocket
server =socket.socket()

server.bind(('0.0.0.0',80))
server.listen()
#获取客户端连接并启动线程去处理
whileTrue:
    print("等待连接")
    #阻塞,等待连接
    sock,addr =server.accept()
    tmp_data = sock.recv(1024)
    print("收到浏览器信息:")
    print(tmp_data.decode("utf8"))
    #谷歌浏览器访问 打印为:
    #GET / HTTP/1.1
    #Host: 192.168.2.129
    #Connection: keep-alive
    #Cache-Control: max-age=0
    #Upgrade-Insecure-Requests: 1
    #User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36
    #Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
    #Accept-Encoding: gzip, deflate
    #Accept-Language: zh-CN,zh;q=0.9
    response_template = '''HTTP/1.1 200 OK

    <h1>hello</h1>'''sock.send(response_template.encode("utf8"))
    #浏览器展示形式为:
    #Request URL: http://192.168.2.129/
    #Request Method: GET
    #Status Code: 200 OK
    #Remote Address: 192.168.2.129:80
    #Referrer Policy: no-referrer-when-downgrade
    print("已回信息")
    sock.close()
    print("已断开连接")

Rquest Headers

免责声明:文章转载自《tcp与http协议 以及python的实现》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇NetBios协议详解及网上邻居工作原理android控件拖动,移动、解决父布局重绘时控件回到原点下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

springboot java mail sender邮件发送配置

转: springboot java mail sender邮件发送超时springboot java mail sender邮件发送超时西门吹雪碧 2020-10-10 11:18:55 751 收藏版权正常来说,发送邮件在本地发送走25端口都不会有问题,但是部署到linux环境就失败?看过很多博主写的,大多相互抄袭,不妨看看下面的解决方案吧。1. 有关...

python获取cookie的方法

介绍下3种获取cookie的方法。 (1)借助handler 这种方法也是网上介绍最多的一种方法,但是用起来比较麻 fromhttpimportcookiejarfrom urllib importrequest classCraw(): def __init__(self): self.url = '' se...

4.1. 如何在Windows环境下开发Python

4.1. 如何在Windows环境下开发Python 4.1. 如何在Windows环境下开发Python 4.1.1. Python的最原始的开发方式是什么样的 4.1.1.1. 找个文本编辑器,新建个.py文件,写上Python代码 4.1.1.2. 打开Windows的cmd,并且切换到对应的python脚本所在目录 4.1.1.2.1....

网络编程之套接字(udp)

   Socket的英文原义是“孔”或“插座”。作为BSD UNIX的进程通信机制,取后一种意思。通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。在Internet上的主机一 般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务...

游戏辅助脚本(python)

本文介绍怎样用Python写游戏辅助脚本 主要实现方式是通过图片的对比,在游戏中就行点击。运行程序需要以下东西。 PIL: 图片处理模块     (python3 换成了 pillow)  下载地址: https://www.lfd.uci.edu/~gohlke/pythonlibs/ pywin32 :  用来模拟点击用的      pip   ins...

传说中Python最难理解的点|看这完篇就够了

​ 今天我就带领大家由浅入深的去窥探一下,这个装饰器到底是何方神圣,看完本篇,装饰器就再也不是难点了. 1.什么是装饰器 网上有人是这么评价装饰器的,我觉得写的很有趣,比喻的很形象 每个人都有的内裤主要是用来遮羞,但是到了冬天它没法为我们防风御寒,肿木办? 我们想到的一个办法就是把内裤改造一下,让它变得更厚更长,这样一来,它不仅有遮羞功能,还能提供保暖,不...