python网络编程学习《一》
最近,刚实习完,很喜欢实验楼,但是自己的方向仍然不能确定,自己觉得可选择的空间很大,尽管已经是大四的人了,想到别人都在忙着买职业装,买高跟鞋面试,学习化妆什么的,看看自己,反而开始慢慢关注运动,食疗以及护肤了,哈哈,程序员就是酱紫,身体是革命的本钱。现在的方向至少是确定了,数据分析,但是图像处理这个项目既然当初选择当负责人,现在也要负责啊;那么目前学习网络编程,也是因为学长希望在“wind”的登陆上面实现c/s架构,那么我就试试吧,说不定,自己在量化投资或者网络上面也是可以的捏。废话不说,进入学习状态。
- 什么是c/s架构?
‘c’就是'client','s'就是'server',那么初步理解就是实现服务器与客户端之间的通信,那么我学习的目的就是实现万得数据库上面的多方登陆,也就是说在服务器上登录了,在多个客户端可以实现交易操作,前提是只要在局域网内访问一下服务器的地址即可。
2. 什么是套接字?
举个例子,如果说万得金融数据平台是我要访问的一家公司“万得”,那么我现在要打电话,请求该公司的数据什么的;这个时候,服务器就是该公司的接线员,众多个电话就是客户端了,我可以通过多个电话访问该公司的号码以及端口来跟公司取得联系,这个时候电话的“插口”就是“套接字”,套接字有两种,一种是基于文件型的,一种是基于网络型的;其中,当两个进程都运行在同一台电脑,这个时候这两个进程之间的通信之间的套接字就是基于文件型;那么,我们研究的网络编程当然就是基于网络型的啦,家族名字为“AF_INET”,全称是“地址家族:Internet”,可想而知,套接字地址就是由“主机”和“端口”组成,通信的前提是,你的电话号码和区号都对了,并且对方公司有人时刻准备接听电话,也就是说,你得跟对方之间有一个通信口:对的地址和相同的端口号;以及对方随时的“listen”。
这里,主机地址不用说了,那么端口号一般是人为给定的,合法的端口号范围是0-65535。其中,小于1024的端口号为系统保留端口,linux系统上可以通过查看文件“/etc/services”查看保留的端口号以及对应的服务和套接字类型。
3. 什么是面向连接?
好了,现在你有了电话,有了接线员,有了插口,就缺一根电话线了,更准确的说是连接你的电话与公司电话之间的线路,就是一个面向连接。面向连接提供了顺序的、可靠的、不会重复的数据传输,没有数据边界,意味着数据会被拆成多份,每一份数据都会正确送达目的地,然后按照顺序拼接起来发给对方接线员。这里实现面向连接的主要协议就是传输控制协议(TCP)。创建TCP套接字的时候需要在创建的时候指定套接字类型为“SOCK_STREAM”,字面意思就是套接字流。
讲了这么多,主要围绕“套接字”,在python中主要使用socket模块实现网络通信,其中函数socket()就是用来创建套接字。关于socket函数的参数以及例子可以通过在交互平台输入“help(socket.socket)”实现,前提是要“import socket”哈~

很明显,socket()有三个参数,分别是family,type以及protol,那么family当然一般是“AF_INET”啦,type就是“SOCK_STREAM”,protol一般默认值为0,不用填写,好了其他的函数在该文档也有详细介绍,例如accept以及bind什么的,大家那么从聪明,这点英文还是看得懂滴,废话不说, 上几个例子,来源于http://defshine.github.io/python-source-learn01.html。
- 最简单的socket通信
server_1.py
# coding=utf-8
__author__ = 'wing1995'
import socket # 设置本机地址以及通信端口号,缓存空间为1024
HOST = '127.0.0.1'
PORT = 8888
ADDR = (HOST, PORT)
BUF_SIZE = 1024 # 生成套接字,绑定套接字地址并开始TCP监听
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(ADDR)
server.listen(1) # 被动的等待连接以及接受的地址,等待客户端发送数据,如果没有数据就退出循环并关闭连接退出服务器,反之数据接收成功
conn, addr = server.accept()
print("server connected by:", addr)
while 1:
data = conn.recv(BUF_SIZE)
if not data:
break
print("server recv success")
conn.close()
client_1.py
# coding=utf-8
__author__ = 'wing1995'
import socket # 服务器的主机名和通信的端口号
HOST = '127.0.0.1'
PORT = ADDR = (HOST, PORT)
BUF_SIZE = 1024 # 类似服务器,不同的是多了发送数据以及接受数据
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(ADDR)
client.send('client say:hello, my name is wing!')
data = client.recv(BUF_SIZE)
if data:
print("client recv----", data)
client.close()
分别运行客户端和服务端瞧瞧~
报错:
好吧,先挖一个坑在这里,后面再补上
python网络编程学习《一》的更多相关文章
- python网络编程学习笔记(三):socket网络服务器(转载)
1.TCP连接的建立方法 客户端在建立一个TCP连接时一般需要两步,而服务器的这个过程需要四步,具体见下面的比较. 步骤 TCP客户端 TCP服务器 第一步 建立socket对象 建立socket对 ...
- Python网络编程学习_Day11
一.协程 1.理论知识 协程,又称伪线程,是一种用户态的轻量级线程. 协程拥有自己的寄存器上下文和栈,协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈. ...
- Python网络编程学习_Day10
一.进程与线程 1.区别 进程:一个程序要运行时所需要的所有资源的集合,进程是资源的集合. 一个进程至少需要一个线程,这个线程称为主线程 一个进程里面可以有多个线程 两个进程之间的数据是完全独立,不能 ...
- Python网络编程学习_Day9
一.socketserver实现多并发 socket只能实现单进程通讯,要实现多进程同时和服务端通讯就要使用socketserver. 代码如下: import socket client = soc ...
- python网络编程学习笔记(10):webpy框架
转载请注明:@小五义http://www.cnblogs.com/xiaowuyi django和webpy都是python的web开发框架.Django的主要目的是简便.快速的开发数据库驱动的网站. ...
- Python网络编程基础|百度网盘免费下载|零基础入门学习资料
百度网盘免费下载:Python网络编程基础|零基础学习资料 提取码:k7a1 目录: 第1部分 底层网络 第1章 客户/服务器网络介绍 第2章 网络客户端 第3章 网络服务器 第4章 域名系统 第5章 ...
- Python学习(22)python网络编程
Python 网络编程 Python 提供了两个级别访问的网络服务.: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的 ...
- 《Python网络编程》学习笔记--使用谷歌地理编码API获取一个JSON文档
Foundations of Python Network Programing,Third Edition <python网络编程>,本书中的代码可在Github上搜索fopnp下载 本 ...
- Python 网络编程相关知识学习
Python 网络编程 Python 提供了两个级别访问的网络服务.: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的 ...
随机推荐
- Linux下防火墙开启相关端口及查看已开启端口
最近利用Apache Mina实现了一个http服务,发布到linux下发现无法访问,通过HttpClient来发送http请求时,报如下错误: Exception in thread "m ...
- python写的分析mysql binlog日志工具
因为数据库增删改突然暴增,需要查询是那些表的操作特别频繁,写了一个用来分析bin-log的小工具,找出增删改查的表,并按照操作次数降序排列,以下是代码: 1 2 3 4 5 6 7 8 9 10 11 ...
- SQLServer:删除log文件和清空日志的方法
数据库的性能是DBA都需要重点关注的,日志文件的增多严重影响数据库的性能,本文将为您介绍SQL Server删除日志文件的方法,供您参考,希望对您有所帮助. 数据库在使用过程中会使日志文件不断增加,使 ...
- 用struts和hibernate结合MVC层实例
1.倒包hibernate11个包+sturts2 13个包 2.创建web.xml <?xml version="1.0" encoding="UTF-8&quo ...
- .NET/ASP.NET 4.5 Bundle组件(捆绑、缩小静态文件)
阅读目录: 1.开篇介绍 2.System.Web.Optimization 组件 3.System.Web.Optimization 组件基本原理 4.扩展自定义类型静态文件 1]开篇介绍 这篇文章 ...
- HTTP状态码206和416
HTTP 2xx范围内的状态码表明了:"客户端发送的请求已经被服务器接受并且被成功处理了". TTP/1.1 200 OK是HTTP请求成功后的标准响应 HTTP/1.1 206状 ...
- spring之依赖注入
- 004.UDP--拼接UDP数据包,构造ip头和udp头通信(使用原始套接字)
一.大致流程: 建立一个client端,一个server端,自己构建IP头和UDP头,写入数据(hello,world!)后通过原始套接字(SOCK_RAW)将包发出去. server端收到数据后,打 ...
- java 判断两个时间相差的天数
1.实现目标 输入:两个日期 输出:两个日期相差的天数 2.代码实现 方法1: 通过Calendar类的日期比较.注意:这里需要考虑一下: 日期是跨年份的,如一个是2012年,一个是2015年的 ...
- 六轴加速度传感器MPU6050官方DMP库到瑞萨RL78/G13的移植
2015年的电赛已经结束了.赛前接到器件清单的时候,看到带防护圈的多旋翼飞行器赫然在列,又给了一个瑞萨RL78/G13的MCU,于是自然联想到13年的电赛,觉得多半是拿RL78/G13做四旋翼的主控, ...