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()

猜你喜欢

转载自blog.csdn.net/qq_37482202/article/details/82313008