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接口的 ...
随机推荐
- informatica powercenter学习笔记(LookUp 使用)
LOOKUP TRANSFORMATION的使用点评: LOOKUP基本用法不熟的话请参考下附属信息. 用法感受: 1 LOOKUP的作用跟我们以前在EXCEL的函数功能类似,就是隔表取值.优点就是用 ...
- PHP debug 环境配置
在建立PHP开发调试环境时,经常会遇到xdebug无法成功安装的问题,其实主要原因有两点: 1. xdebug版本和php版本不匹配 2.xdebug和 zend不能同时运行,需要在php.ini中禁 ...
- oracle学习笔记系列------oracle操作例子的专用表
CREATE TABLE dept( deptno ), dname ) , loc ) ) ; CREATE TABLE emp( empno ), ename ), job ), mgr ), h ...
- 阿里云+wordpress搭建个人博客网站【小白专用的图文教程】
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- POJ2230Watchcow[欧拉回路]
Watchcow Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 7512 Accepted: 3290 Specia ...
- HDU1502/Luogu1352/UVa1220 party[树形DP]
题目描述 某大学有N个职员,编号为1~N.他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司.现在有个周年庆宴会,宴会每邀请来一个职员都会增加一定的快乐指数Ri, ...
- 手机开启HDR后拍照有什么不同?
转自http://www.leiphone.com/news/201406/hdr-pic.html HDR这词大家可能并不陌生,但大部分人只是听过而已,在脑子并没有太多的概念,可能只是简单的认为HD ...
- vs2015产品密钥
HM6NR-QXX7C-DFW2Y-8B82K-WTYJV 博主验证有效
- Android驱动入门-Led控制+app+ndk库+底层驱动
硬件平台: FriendlyARM Tiny4412 Cortex-A9 操作系统: UBUNTU 14.04 LTS 时间:2016-09-20 21:56:48 本次实验使用的是 安卓APP + ...
- using关键字背后的故事!
using关键字的作用: 1:可以引入命名空间2:可以释放资源 *****不能使用using语句完全替换掉(try-catch-finally)语句(无法进行异常处理) 在出了using语句的{}后, ...