python3+socket搭建简易服务器
踩了一上午的坑之后,终于对网络编程有了一点大致的、基本的了解。真的是0基础,之前对socket网络编程一点都不知道。(感觉自己与时代脱轨。。。。)
首先我想对这些美妙的专业术语进行一番搜索:
服务器:简而言之,它是一个位于一个物理服务器上的网络服务器(呀,服务器上的服务器),它等待客户端发送请求。当它接收到一个请求,就会生成一个响应并回发给客户端。客户端和服务器使用HTTP协议通信。客户端可以是浏览器或者别的使用HTTP协议的软件。-----------------------伯乐在线
套接字:TCP用主机的IP地址加上主机上的端口号作为TCP连接的端点,这种端点就叫做套接字(socket)或插口。套接字用(IP地址:端口号)。-------------------------百度
表示如果把服务器和客户端比作一对情侣的话,那么套接字就是他们相互拥抱的双手。
TCP?HTTP?:HTTP是高层协议,而TCP/IP是个协议集,包过许多的子协议。包括:传输层的 FTP,UDP,TCP协议等,网络层的ip协议等,高层协议如HTTP,telnet协议等,HTTP是TCP/IP的一个子协议。
TCP/IP :他是一个协议栈,就像操作系统的运行机制一样,必须要具体实现,同时还要提供对外的操作接口。这个就像操作系统会提供标准的编程接口,比如win32编程接口一样,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口。
socket:实际上socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议。实际上,Socket跟TCP/IP协议没有必然的联系。Socket编程接口在设计的时候,就希望也能适应其他的网络协议。所以说,Socket的出现只是使得程序员更方便地使用TCP/IP协议栈而已,是对TCP/IP协议的抽象,从而形成了我们知道的一些最基本的函数接口,比如create、listen、connect、accept、send、read和write等等。---------------------------------http://www.cnblogs.com/shangdahao/archive/2013/05/22/3085131.html?share_from=com.rae.cnblogs
利用Socket建立网络连接的步骤:
建立Socket连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket ,另一个运行于服务器端,称为ServerSocket 。
套接字之间的连接过程分为三个步骤:服务器监听,客户端请求,连接确认。
1。服务器监听:服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态,等待客户端的连接请求。
2。客户端请求:指客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。
3。连接确认:当服务器端套接字监听到或者说接收到客户端套接字的连接请求时,就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,双方就正式建立连接。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。
(我是盗图小能手)
好了,了解了一些可能会用到的术语,下面看看一个用python搭建的简易服务器是长什么样的:
- #coding: utf-8
- """
- 搭建简单服务器
- """
- import socket
- HOST = '10.130.167.108' #获取本地主机名,cmd下用ipconfig命令查看
- PORT = 12345 #设置端口号
- ADDR = (HOST,PORT) #放在一起就是套接字了
- web = socket.socket() #创建socket对象
- web.bind(ADDR) #绑定端口
- web.listen(5) #等待客户端连接,参数为TCP连接队列的大小,就是连接数
- print('sever is listening...')
- while True:
- client_connection,client_address = web.accept() #建立客户端连接
- print('link addr:')
- print(client_address) #打印客户端发来的嵌套字
- client_connection.send(str.encode("HELLO,WORLD")) #向客户端发送信息,需要byte类型的参数,需要做一下转换
- data = client_connection.recv(1024)
- print(data)
- client_connection.close() #关闭连接
其中 listen 函数会监听连接到socket上的连接,参数表示在拒绝连接之前系统可以挂起的最大连接队列数量为5。这些连接还没有被accept处理。数量不能无限大,通常指定5。一旦我们监听到了连接,就会调用 accept 函数接收连接 。
accept 函数返回一个二元组,client_connection 是一个新的socket对象,用来接收和发送数据。client_address 表示另一端的socket地址。
我们打印出客户端的套接字后,紧接着向客户端发送信息,这里发送的时候,注意一下我用的python3.6,里面的字符编码的格式问题。
发送完信息之后,我们等待接收客户端发送来的信息并显示。然后关闭连接,一个循环结束。进入下一个循环。
客户端的程序:
- """
- 简易客户端
- """
- import socket
- HOST = '10.130.167.108' #获取本地主机名
- PORT = 12345 #设置端口号
- ADDR = (HOST,PORT)
- web = socket.socket()
- web.connect(ADDR) #请求与服务器建立连接
- web.send(str.encode("this is client...")) #向服务器发送信息
- data = web.recv(1024) #接收数据
- print(data) #打印出接受到的数据
- web.close()
运行效果:
这是服务器的打印结果。
客户端:
python3+socket搭建简易服务器的更多相关文章
- python搭建简易服务器实例参考
有关python搭建简易服务器的方法. 需求分析: 省油宝用户数 已经破了6000,原有的静态报表 已经变得臃肿不堪, 每次打开都要缓上半天,甚至浏览器直接挂掉 采用python搭建一个最最简易的 w ...
- Python使用socketServer包搭建简易服务器过程详解
官方提供了socketserver包去方便我们快速的搭建一个服务器框架. 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做案例的 ...
- 使用Python3.7.0搭建简易服务器
一.下载并安装Python 官网地址 二.新建start_server.bat 在需要搭建服务器的根目录位置,新建一个start_server.bat文件 内容 python -m http.serv ...
- [容器]python搭建简易服务器+docker导入多个镜像shell脚本
从其他机器导出来的docker镜像,集中地放在某台上,其他的机器执行 curl xxx:8000/load_images.sh 来导入镜像,简单方便 使用python简易web服务器. (在镜像目录下 ...
- nodejs 搭建简易服务器
www文件夹下 template文件夹下 server.js代码: const express=require('express'); const static=require('express-st ...
- 搭建简易的WebServer(基于pyhton实现简易Web框架 使用socket套接字)
1. 使用web底层socket的方式实现简易服务器的搭建,用来理解学习 # 1.导入socket模块 import socket import re import gevent import sys ...
- django+nginx+xshell简易日志查询,接上<关于《rsyslog+mysql+loganalyzer搭建日志服务器<个人笔记>》的反思>
纠正一下之前在<关于<rsyslog+mysql+loganalyzer搭建日志服务器<个人笔记>>的反思>中说到的PHP+MySQL太慢,这里只是说我技术不好,没 ...
- Python中使用Flask、MongoDB搭建简易图片服务器
主要介绍了Python中使用Flask.MongoDB搭建简易图片服务器,本文是一个详细完整的教程,需要的朋友可以参考下 1.前期准备 通过 pip 或 easy_install 安装了 pymong ...
- express搭建简易web的服务器
express搭建简易web的服务器 说到express我们就会想到nodejs,应为它是一款基于nodejs平台的web应用开发框架.既然它是基于nodejs平台的框架那么就得先安装nodejs. ...
随机推荐
- springmvc+jsp 拦截器下如何设置欢迎页面
0.需求 如何让用户在浏览器地址栏键入[http://XXX.XXX.XX.XX:端口号/应用名/]以后自动跳转到系统的登录界面 1.web.xml 1.1 注意welcome-file-list的配 ...
- 史上最强大的python selenium webdriver的包装
1.之前已经发过两次使用单浏览器了,但是这个最完美,此篇并没有使用任何单例模式的设计模式,用了实例属性结果缓存到类属性. 2.最简单的控制单浏览器是只实例化一次类,然后一直使用这个对象,但每个地方运行 ...
- FileSaver.js 浏览器导出Excel文件
限制一:不同浏览器对 blob 对象有不同的限制 具体看看下面这个表格(出自 FileSaver.js): Browser Constructs as Filenames Max Blob Size ...
- 胡思乱想 & 胡言乱语
其大无外,其小无内,在数学上是不存在的,有无穷大,又有无限逼近于0而永远不等于0 现实中,人们对事物的认知局限于科学工艺的发展,往小的方面说,在没有显微镜之前,我们能看到的最小的东西莫过于尘埃,其后认 ...
- php 安装rabbitmq扩展无报错版
需要安装rabbitmq-c,rabbitmq-c是一个用于C语言的,与AMQP server进行交互的client库.下载了v0.5.2版本(https://github.com/alanxz/ra ...
- 01python初识—编辑器&版本&变量知识
python2.0和3.0版本变化很大,要跟随脚步,学新的,用新的.3.0 python开发工具pycharm 5.0 python的交互器 python的程序一般放到Linux环境下运行. pyth ...
- dedeCMS解码
var str = 'arrs1[]=99&arrs1[]=102&arrs1[]=103&arrs1[]=95&arrs1[]=100&arrs1[]=98& ...
- jekins构建通知邮件配置及邮件附件设置,jenkins构建通知邮件没有RF的log和report文件
全局配置: 系统管理-系统设置-Extended E-mail Notification (本邮件是程序自动下发的,请勿回复!)<br/><br/>项目名称:$PROJECT_ ...
- 【RF库Collections测试】Remove Duplicates
Name:Remove DuplicatesSource:Collections <test library>Arguments:[ list_ ]Returns a list witho ...
- ClamAV病毒软件的安装和使用
ClamAV 杀毒是Linux平台最受欢迎的杀毒软件,ClamAV属于免费开源产品,支持多种平台,如:Linux/Unix.MAC OS X.Windows.OpenVMS.ClamAV是基于病毒扫描 ...