服务器:

     当客户联系时创建一个连接套接字
     从这个连接接收HTTP请求(*)
     解释该请求所请求的特定文件 
     从服务器的文件系统获取该文件
     并发送文件内容
     如果文件不存在,则返回“404 Not Found”(*)

客户端:

客户端可以与服务器建立TCP连接

客户端通过TCP连接请求服务器端的某一文件

在客户端显示介绍到的文件内容

注:在运行此文件前,server.py目录下需要包含file文件夹,里面装有服务器里的文件,客户端可以向服务器请求file里的文件。

readme:首先打开server.py,开启服务器
        然后打开client.py,输入文件名,包括后缀
        服务器文件系统为file文件夹
        client.py的命令行窗口中出现文件的具体信息
        按任意键关闭客户端

client.py

  1. import socket
  2. serverName = '127.0.0.1'
  3. serverPort = 50008
  4. clientSocket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
  5. clientSocket.connect((serverName,serverPort))
  6. print 'Input the http request:'
  7. sentence = ''
  8. while True:
  9. tmp = raw_input()
  10. sentence = sentence + tmp
  11. if(tmp==''):break
  12. clientSocket.send(sentence)
  13. receiveSentence = clientSocket.recv(1024)
  14. print 'From Server:', receiveSentence
  15. isEnd = raw_input()
  16. clientSocket.close()

server.py

  1. import socket
  2. import os
  3. serverPort = 50008
  4. serverSocket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
  5. serverSocket.bind(('127.0.0.1',serverPort))
  6. serverSocket.listen(1)
  7. print 'The server is ready to receive'
  8. while 1:
  9. connectionSocket, addr = serverSocket.accept()
  10. sentence = connectionSocket.recv(1024)
  11. ans = ''
  12. flag = False;
  13. for ch in sentence:
  14. if(ch == ' ' and flag ==True):break
  15. if(flag == True):
  16. ans = ans + ch;
  17. elif(ch==' '):
  18. flag = True;
  19. path = 'file//' + ans
  20. if(os.path.exists(path)==False):
  21. connectionSocket.send('404 Not Found')
  22. else:
  23. file = open( path,'r')
  24. while 1:
  25. data = file.read(1024)
  26. if not data:break
  27. connectionSocket.send(data)
  28. file.close()
  29. connectionSocket.close()

python一个简单的web服务器和客户端的更多相关文章

  1. 自己动手模拟开发一个简单的Web服务器

    开篇:每当我们将开发好的ASP.NET网站部署到IIS服务器中,在浏览器正常浏览页面时,可曾想过Web服务器是怎么工作的,其原理是什么?“纸上得来终觉浅,绝知此事要躬行”,于是我们自己模拟一个简单的W ...

  2. 一个简单的web服务器

    写在前面 新的一年了,新的开始,打算重新看一遍asp.net本质论这本书,再重新认识一下,查漏补缺,认认真真的过一遍. 一个简单的web服务器 首先需要引入命名空间: System.Net,关于网络编 ...

  3. Tomcat剖析(一):一个简单的Web服务器

    Tomcat剖析(一):一个简单的Web服务器 1. Tomcat剖析(一):一个简单的Web服务器 2. Tomcat剖析(二):一个简单的Servlet服务器 3. Tomcat剖析(三):连接器 ...

  4. 自己模拟的一个简单的web服务器

    首先我为大家推荐一本书:How Tomcat Works.这本书讲的很详细的,虽然实际开发中我们并不会自己去写一个tomcat,但是对于了解Tomcat是如何工作的还是很有必要的. Servlet容器 ...

  5. 《深度解析Tomcat》 第一章 一个简单的Web服务器

    本章介绍Java Web服务器是如何运行的.从中可以知道Tomcat是如何工作的. 基于Java的Web服务器会使用java.net.Socket类和java.net.ServerSocket类这两个 ...

  6. 一个简单的Web服务器-支持Servlet请求

    上接 一个简单的Web服务器-支持静态资源请求,这个服务器可以处理静态资源的请求,那么如何处理Servlet请求的呢? 判断是否是Servlet请求 首先Web服务器需要判断当前请求是否是Servle ...

  7. 一个简单的Web服务器-支持静态资源请求

    目标 实现一个简单的Web服务器,能够根据HTTP请求的URL响应对应的静态资源,如果静态资源不存在则响应404. HttpServer 使用ServerSocket实现的一个服务器,request根 ...

  8. [置顶] 在Ubuntu下实现一个简单的Web服务器

    要求: 实现一个简单的Web服务器,当服务器启动时要读取配置文件的路径.如果浏览器请求的文件是可执行的则称为CGI程序,服务器并不是将这个文件发给浏览器,而是在服务器端执行这个程序,将它的标准输出发给 ...

  9. python超简单的web服务器

    今天无意google时看见,心里突然想说,python做web服务器,用不用这么简单啊,看来是我大惊小怪了. web1.py   1 2 3 #!/usr/bin/python import Simp ...

随机推荐

  1. “玲珑杯”ACM比赛 Round #13 B -- 我也不是B(二分排序)

    题意:开始有一个空序列s,一个变量c=0,接着从左往右依次将数组a中的数字放入s的尾部,每放一个数字就检测一次混乱度K,当混乱度k大于M时就清空序列并让c=c+1 K = Bi * Vi(1<= ...

  2. NO.2 You must restart adb and Eclipse多种情形分析与解决方案

    一.问题描述:     运行android程序控制台输出     The connection to adb is down, and a severe error has occured.      ...

  3. ubuntu 14.04中安装 ruby on rails 环境(填坑版) 呕血推荐

    环境:在win7 上Vmware虚拟机环境中安装的ubuntu 14.04 开发相关: ruby 2.2.0 rails 4.2.0 sublime text 3 本文说明:所有的命令均在$ 之后,若 ...

  4. mysql数据库优化课程---10、mysql数据库分组聚合

    mysql数据库优化课程---10.mysql数据库分组聚合 一.总结 一句话总结:select concat(class,' 班') 班级,concat(count(*),' 人') 人数 from ...

  5. python学习笔记(session)

    昨天提到想加入cookies 测试登录后的接口 尝试了下 只要用 session方法即可 代码如下 #!/usr/bin/env python # -*- coding: utf_8 -*- impo ...

  6. npm的镜像和淘宝互换

    1.得到原本的镜像地址 npm get registry > https://registry.npmjs.org/ 设成淘宝的 npm config set registry http://r ...

  7. iOS自动化探索(二)WDA API的使用

    前面我们已经安装好了WebdriverAgent, 现在可以用Facebook官方提供的API来进行一些操作 WDA API官方页面: https://github.com/facebook/WebD ...

  8. 原生JS日历 + JS格式化时间格式

    公司项目中用到,以前没做过,废了好几个小时 终于做好了 先来效果图(暂时没写样式 凑合着看吧) 点击左右按钮都能改变月份 下方表格中的数据也会跟着变化 贴上代码 : html部分: <div s ...

  9. (转)程序员应该知道的10个eclipse调试技巧

    调试不仅可以查找到应用程序缺陷所在,还可以解决缺陷.对于Java程序员来说,他们不仅要学会如何在Eclipse里面开发像样的程序,更需要学会如何调试程序.本文介绍了Java程序员必知的10个调试技巧, ...

  10. OC-通知+Block

    =================================== 一.通知(NSNotification) NSNotification 通知类,这个类中有 NSNotificationCent ...