1. 服务端Server
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# www.etdev.net by respeke
import socket
import threading
def tcp_thread(sock,addr):
print('accept new connection from %s,%s'%addr)
rh='HTTP/1.1 200 OK\r\n'
# rh+='Date: Thu, 08 Nov 2018 01:32:36 GMT\r\n'
rh+='Content-Type: text/html\r\n'
rh+='Connection: Keep-Alive\r\n'
rb='<!DOCTYPE html>\r\n'
rb+='<head>\r\n'
rb+='<meta charset="utf-8">\r\n'
rb+='<title>Python WebServer</title>\r\n'
rb+='</head>\r\n'
rb+='<body style="background-color: #97a8b9">\r\n'
rb+='<div style="margin:100px auto; width:500px;padding: 20px 60px; background-color: #D3D3D3; border: 5px solid maroon;">\r\n'
rb+='<h1 style="font-style:italic">Welcome to <a href="http://www.etdev.net">www.etdev.net</a></h1>\r\n'
rb+='<p>电子技术开发网 - ETDev,电子技术、嵌入式技术交流分享园地</p>'
rb+='</div>\r\n'
rb+='</body>\r\n'
rb+='</html>'
rh+='Content-Length: %d\r\n\r\n'%len(rb.encode('utf-8'))
sock.send(bytes(rh+rb,encoding='utf-8'))
while True:
date=sock.recv(1024)
if not date or date.decode('utf-8')=='exit':
break
print(date.decode('utf-8'))
sock.close()
def start_tcp_server(ip,port):
#create socket
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#bind port
server_addr=(ip,port)
s.bind(server_addr)
#starting listening, allow 10 connection
try:
print ("starting listen on ip %s, port %s"%server_addr)
s.listen(10)
except socket.err as e:
print ("fail to listen on port %s"%e)
sys.exit(1)
#accept client connect
while True:
print ("waiting for client connection")
c,addr=s.accept()
#create a thread to handle tcp link
t=threading.Thread(target=tcp_thread,args=(c,addr))
t.start()
if __name__ == '__main__':
start_tcp_server('localhost', 80)
2. 客户端Client测试
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# www.etdev.net by respeke
import socket
#create socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#connect to server
s.connect(('localhost', 80))
#send request data
h='GET / HTTP/1.1\r\n'
h+='Host: localhost\r\n'
h+='Accept: text/html\r\n'
h+='Connection: keep-alive\r\n\r\n'
s.send(h.encode('utf-8'))
#receive data
buffer = []
while True:
#receiving up to 1k bytes at a time
d = s.recv(1024)
if d:
buffer.append(d)
print(buffer)
break
else:
break
data = b''.join(buffer)
# close connection
s.close()
header, html = data.split(b'\r\n\r\n', 1)
print(header.decode('utf-8'))
#writes the data to file
with open('web.html', 'wb') as f:
f.write(html)
3. 浏览器效果
4. 源码打包下载