网络编程:套接字基于TCP的应用(二--http传输server)
【1】接收http请求
【2】查看http请求
【3】返回一个网页给客户端
【server端】
from socket import *
# 接收请求
# 查看请求
# 返回客户端段请求内容
def handleClient(connfd):
request = connfd.recv(4096)
# print("***********")
# print(request)
# print("************")
#按照行切割请求
request_lines = request.splitlines()
for line in request_lines:
print(line.decode())
try:
f = open('index.html')
except IOError:
response = "HTTP/1.1 303 Not Found\r\n"
response += "\r\n" #空行
response += '''
**************************
Sorry, not found the page.
**************************
'''
else:
response = "HTTP/1.1 200 OK\r\n"
response += '\r\n'
response += f.read()
finally:
#发送给浏览器
connfd.send(response.encode())
#创建套接字,调用handleClient完成功能
def main():
#创建tcp套接字
sock = socket()
sock.setsockopt\
(SOL_SOCKET,SO_REUSEADDR,1)
sock.bind(('0.0.0.0',8000))
sock.listen()
while True:
print("Listen the port 8000...")
connfd,addr = sock.accept()
#处理浏览器发来的请求
handleClient(connfd)
connfd.close()
if __name__ == "__main__":
main()
【client端】
from socket import *
#创建套接字
sock = socket()
#发起连接
sock.connect(('127.0.0.1',8888))
while True:
#消息收发
msg = input("Msg>>")
if not msg:
break
sock.sendall(msg.encode())
data = sock.recv(1024)
print(data.decode())
sock.close()
#===========================#
【httpserver2.py】
from socket import *
#httpserver基本功能
#接收http请求,查看,返回一个页面
def handleClient(connfd):
request = connfd.recv(4096)
print("***************")
print(request)
print("***************")
f = open('index.html','r')
response = "HTTP/1.1 200 OK\r\n"
response += "Content-Type: text/html\r\n"
response += "\r\n"
response += f.read()
connfd.send(response.encode())
sockfd = socket()
sockfd.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)
sockfd.bind(('0.0.0.0',8000))
sockfd.listen(5)
while True:
print("Listen the port 8000...")
connfd,addr = sockfd.accept()
handleClient(connfd)
connfd.close()