Python web服务器入门

Python 其实能做很多事情,比如服务器

首先我们想一下我们上网的流程,我们在浏览器或者点击链接进入一个网址,其实都是像目标服务器发送请求,然后它们把界面给我们看,python就能很简单的把它们实现


import socket
#定义自己的ip和端口
HOST, PORT = '172.18.74.21', 8080

 

#实例化scoket
"""
它有三个参数,我们这里全是默认就可以了
第一个参数:地址簇
socket.AF_INET  表示IPV4(默认)
socket.AF_INET6 表示IPV6
socket.AF_UNIX   只能用于单一的Unix系统进程间的通信

第二个参数:类型
socket.SOCK_STREAM  流式socket for TCP(默认)
socket.SOCK_DGRAM   数据格式socket,for UDP
socket.SOCK_RAW     原始套接字,普通的套接字无法处理ICMP,IGMP等网络报文,可以通过IP_HDRINCL套接字选项由用户构造IP头
socket.SOCK_RDM      是一种可靠的UDP形式,即保证交付数据报但不保证顺序,SOCK_RDM用来提供对原始协议的低级访问,在需要执行某些特殊操作时使用,如发送ICMP报文,SOCK_RAM通常仅限于高级用户或管理员运行的程序使用
socket.SOCK_SEQPACKET  可靠的连续数据包服务

第三个参数:协议
默认与特定地址家族相关的协议,如果是0 则系统就会根据地址格式和套接类别,自动选择一个合适的协议

"""
listen_socket = socket.socket()
"""
设置socket
一般不会立即关闭而经历TIME_WAIT的过程
便于重用
"""
listen_socket.setsockopt(socket.SOL_SOCKET,
                         socket.SO_REUSEADDR, 1)

#这种是在默认的AF_INET下这样以元组的形式存在即(ip,port)
listen_socket.bind((HOST, PORT))
#开始监听传入连接。backlog指定在拒绝连接之前,可以挂起的最大连接数量
listen_socket.listen(1)
#循环接受消息
while True:
    #得到链接对象和地址
    client_connection, client_address = listen_socket.accept()
    #接受1024个字节
    request = client_connection.recv(1024)
    print(request)
    #定义返回内容
    http_response = b"""
	HTTP/1.1 200 OK\r\n
	\r\n
	Hello,world!
	"""
    #发送应答消息
    client_connection.send(http_response)
    #关闭连接
    client_connection.close()

访问172.18.74.21:8080,打开网址的效果是这样的

 很简单吧,不到50行代码就完成了一个简单web服务器的搭建

最后附上全部代码

import socket

HOST, PORT = '172.18.74.21', 8080

listen_socket = socket.socket(socket.AF_INET,
                              socket.SOCK_STREAM,0)
listen_socket.setsockopt(socket.SOL_SOCKET,
                         socket.SO_REUSEADDR, 1)
listen_socket.bind((HOST, PORT))
listen_socket.listen(1)
print('Serving HTTP on port %s ...' % PORT)
while True:
    client_connection, client_address = listen_socket.accept()
    request = client_connection.recv(1024)
    print(request)

    http_response = b"""
	HTTP/1.1 200 OK\r\n
	\r\n
	Hello,world!
	"""
    client_connection.send(http_response)
    client_connection.close()

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

幽蓝丶流月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值