最近,刚实习完,很喜欢实验楼,但是自己的方向仍然不能确定,自己觉得可选择的空间很大,尽管已经是大四的人了,想到别人都在忙着买职业装,买高跟鞋面试,学习化妆什么的,看看自己,反而开始慢慢关注运动,食疗以及护肤了,哈哈,程序员就是酱紫,身体是革命的本钱。现在的方向至少是确定了,数据分析,但是图像处理这个项目既然当初选择当负责人,现在也要负责啊;那么目前学习网络编程,也是因为学长希望在“wind”的登陆上面实现c/s架构,那么我就试试吧,说不定,自己在量化投资或者网络上面也是可以的捏。废话不说,进入学习状态。

  1. 什么是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网络编程学习《一》的更多相关文章

  1. python网络编程学习笔记(三):socket网络服务器(转载)

    1.TCP连接的建立方法 客户端在建立一个TCP连接时一般需要两步,而服务器的这个过程需要四步,具体见下面的比较. 步骤 TCP客户端 TCP服务器 第一步 建立socket对象  建立socket对 ...

  2. Python网络编程学习_Day11

    一.协程 1.理论知识 协程,又称伪线程,是一种用户态的轻量级线程. 协程拥有自己的寄存器上下文和栈,协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈. ...

  3. Python网络编程学习_Day10

    一.进程与线程 1.区别 进程:一个程序要运行时所需要的所有资源的集合,进程是资源的集合. 一个进程至少需要一个线程,这个线程称为主线程 一个进程里面可以有多个线程 两个进程之间的数据是完全独立,不能 ...

  4. Python网络编程学习_Day9

    一.socketserver实现多并发 socket只能实现单进程通讯,要实现多进程同时和服务端通讯就要使用socketserver. 代码如下: import socket client = soc ...

  5. python网络编程学习笔记(10):webpy框架

    转载请注明:@小五义http://www.cnblogs.com/xiaowuyi django和webpy都是python的web开发框架.Django的主要目的是简便.快速的开发数据库驱动的网站. ...

  6. Python网络编程基础|百度网盘免费下载|零基础入门学习资料

    百度网盘免费下载:Python网络编程基础|零基础学习资料 提取码:k7a1 目录: 第1部分 底层网络 第1章 客户/服务器网络介绍 第2章 网络客户端 第3章 网络服务器 第4章 域名系统 第5章 ...

  7. Python学习(22)python网络编程

    Python 网络编程 Python 提供了两个级别访问的网络服务.: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的 ...

  8. 《Python网络编程》学习笔记--使用谷歌地理编码API获取一个JSON文档

    Foundations of Python Network Programing,Third Edition <python网络编程>,本书中的代码可在Github上搜索fopnp下载 本 ...

  9. Python 网络编程相关知识学习

    Python 网络编程 Python 提供了两个级别访问的网络服务.: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的 ...

随机推荐

  1. MongoDB-安装&启动

    MongoDB安装 使用的版本为3.0,虚拟机操作系统为rhel-server-7.0-x86_641. 将mongodb-linux-x86_64-rhel70-3.0.11.tgz上传并解压到 / ...

  2. Java字符串中常见的10个问题

    下面是Java中10个最常见的关于字符串的问题. 怎样比较字符串?使用==还是equals() 简单的说,“==”用于判断引用是否相等,equals()用于判断值是否相等.除非你要比较两个字符串是否是 ...

  3. mysql错误一例:ERROR 1030 (HY000): Got error 28 from storage engine

    在使用mysqldump导出一份建库脚本是,发生了下面的错误: 当执行 desc table_name; 时也报错: tag为表名,show index from tag;倒是可以执行. 其实真正的错 ...

  4. 大话设计模式C++版——工厂模式在COM中的典型应用

    上篇<大话设计模式C++版——抽象工厂模式>中,我们拯救世界未遂,留下小小的遗憾,本篇中我们将给出一个解决方案——COM组件技术,同时也顺便扯扯工厂模式在COM组件技术中的应用. 工厂模式 ...

  5. Java 三大特性——封装、继承、多态

    一.封装 封装,实际就是把属于同一类事物的共性(包括属性与方法)归到一个类中,以方便使用. 概念:在面向对象程式设计方法中,封装(英语:Encapsulation)是指,一种将抽象性函式接口的实作细节 ...

  6. Zookeeper C API 指南三(回调函数)(转)

    2013-02-21 12:54 by Haippy, 9237 阅读, 0 评论, 收藏, 编辑 接上一篇<Zookeeper C API 指南二(监视(Wathes), 基本常量和结构体介绍 ...

  7. codeforces 732

    A. Buy a Shovel time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...

  8. POJ1276Cash Machine[多重背包可行性]

    Cash Machine Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 32971   Accepted: 11950 De ...

  9. AC日记——单词翻转 1.7 27

    27:单词翻转 总时间限制:  1000ms 内存限制:  65536kB 描述 输入一个句子(一行),将句子中的每一个单词翻转后输出. 输入 只有一行,为一个字符串,不超过500个字符.单词之间以空 ...

  10. SOAP-XML请求(iOS应用下集成携程api)

    用携程机票为例: 携程联盟 飞机票.门票 联盟ID:278639 站点ID:739462 密钥KEY:BE57B925-E8CE-4AA2-AC8E-3EE4BBBB686F API_URL:open ...