重剑点评:

真简单明了!复习网络编程,顺便学习python。

一、套接字

套接字是为特定网络协议(例如TCP/IP,ICMP/IP,UDP/IP等)套件对上的网络应用程序提供者提供当前可移植标准的对象。它们允许程序接受并进行连接,如发送和接受数据。为了建立通信通道,网络通信的每个端点拥有一个套接字对象极为重要。

套接字为BSD UNIX系统核心的一部分,而且他们也被许多其他类似UNIX的操作系统包括Linux所采纳。许多非BSD UNIX系统(如ms-dos,windows,os/2,mac os及大部分主机环境)都以库形式提供对套接字的支持。

三种最流行的套接字类型是:stream,datagram和raw。stream和datagram套接字可以直接与TCP协议进行接口,而raw套接字则接口到IP协议。但套接字并不限于TCP/IP。

二、套接字模块

套接字模块是一个非常简单的基于对象的接口,它提供对低层BSD套接字样式网络的访问。使用该模块可以实现客户机和服务器套接字。要在python 中建立具有TCP和流套接字的简单服务器,需要使用socket模块。利用该模块包含的函数和类定义,可生成通过网络通信的程序。一般来说,建立服务器连 接需要六个步骤。

第1步是创建socket对象。调用socket构造函数。

socket=socket.socket(familly,type)

family的值可以是AF_UNIX(Unix域,用于同一台机器上的进程间通讯),也可以是AF_INET(对于IPV4协议的TCP和 UDP),至于type参数,SOCK_STREAM(流套接字)或者 SOCK_DGRAM(数据报文套接字),SOCK_RAW(raw套接字)。

第2步则是将socket绑定(指派)到指定地址上,socket.bind(address)

address必须是一个双元素元组,((host,port)),主机名或者ip地址+端口号。如果端口号正在被使用或者保留,或者主机名或ip地址错误,则引发socke.error异常。

第3步,绑定后,必须准备好套接字,以便接受连接请求。

socket.listen(backlog)

backlog指定了最多连接数,至少为1,接到连接请求后,这些请求必须排队,如果队列已满,则拒绝请求。

第4步,服务器套接字通过socket的accept方法等待客户请求一个连接:

connection,address=socket.accept()

调用accept方法时,socket会进入'waiting'(或阻塞)状态。客户请求连接时,方法建立连接并返回服务器。accept方法返回 一个含有俩个元素的元组,形如(connection,address)。第一个元素(connection)是新的socket对象,服务器通过它与客 户通信;第二个元素(address)是客户的internet地址。

第5步是处理阶段,服务器和客户通过send和recv方法通信(传输数据)。服务器调用send,并采用字符串形式向客户发送信息。send方法 返回已发送的字符个数。服务器使用recv方法从客户接受信息。调用recv时,必须指定一个整数来控制本次调用所接受的最大数据量。recv方法在接受 数据时会进入'blocket'状态,最后返回一个字符串,用它来表示收到的数据。如果发送的量超过recv所允许,数据会被截断。多余的数据将缓冲于接 受端。以后调用recv时,多余的数据会从缓冲区删除。

第6步,传输结束,服务器调用socket的close方法以关闭连接。

建立一个简单客户连接则需要4个步骤。

第1步,创建一个socket以连接服务器 socket=socket.socket(family,type)

第2步,使用socket的connect方法连接服务器 socket.connect((host,port))

第3步,客户和服务器通过send和recv方法通信。

第4步,结束后,客户通过调用socket的close方法来关闭连接。

三、一个简单的服务器和客户端通信的例子

服务器:

importsockets=socket.socket()s.bind(('xxx.xxx.xxx.xxx',xxxx))#ip地址和端口号s.listen(5)cs,address=s.accept()print 'got connected from',addresscs.send('byebye')ra=cs.recv(512)printracs.close()

客户端:

importsockets=socket.socket()s.connect(('xxx.xxx.xxx.xxx',xxxx))#与服务器程序ip地址和端口号相同data=s.recv(512)s.send('hihi')s.close()print 'the data received is',data

运行:

在本机测试(windows环境下,可以将ip地址改为本机ip,端口号在1024以上,windows将1024以下的为保留),运行--CMD--进入命令行模式

先python 服务器程序,后python 客户端程序即可。

或者启动服务器程序后,用telnet ip地址 端口号,也可以得到同样结果。让server持续接受连接

server.py

importsockets=socket.socket()s.bind(('192.168.43.137',2000))s.listen(5)while 1:    cs,address=s.accept()print 'got connected from',address    cs.send('hello I am server,welcome')    ra=cs.recv(512)printra    cs.close()

测试两个一个程序中两个socket并存是否可行client.py

importsockets=socket.socket()s.connect(('192.168.43.137',2000))   data=s.recv(512)print 'the data received is\n',datas.send('hihi I am client')sock2=socket.socket()sock2.connect(('192.168.43.137',2000))data2=sock2.recv(512)print 'the data received from server is\n',data2sock2.send('client send use sock2')sock2.close()s.close()

python网络编程教学_python网络编程学习初步相关推荐

  1. python装饰器教学_Python装饰器学习(九步入门)

    这是在Python学习小组上介绍的内容,现学现卖.多练习是好的学习方式. 第一步:最简单的函数,准备附加额外功能 # -*- coding:gbk -*- '''示例1: 最简单的函数,表示调用了两次 ...

  2. Makeblock推出编程教学工具“慧编程”,融入AI和IoT助力老师打造高效课堂

    "慧编程"基于青少年编程语言Scratch开发,提供一站式课堂管理平台,以帮助老师节省备课时间.降低编程教学难度. 4月26日,STEAM教育解决方案提供商Makeblock正式推 ...

  3. python网络编程自学_Python网络编程学习_Day11

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

  4. python网络编程项目_python网络编程详解

    最近在看<UNIX网络编程 卷1>和<FREEBSD操作系统设计与实现>这两本书,我重点关注了TCP协议相关的内容,结合自己后台开发的经验,写下这篇文章,一方面是为了帮助有需要 ...

  5. unet网络python代码详解_python网络编程详解

    最近在看<UNIX网络编程 卷1>和<FREEBSD操作系统设计与实现>这两本书,我重点关注了TCP协议相关的内容,结合自己后台开发的经验,写下这篇文章,一方面是为了帮助有需要 ...

  6. python网络编程项目_Python网络编程攻略

    第1章套接字.IPv4和简单的客户端/服务器编程 本章攻略: 打印设备名和IPv4地址 获取远程设备的IP地址 将IPv4地址转换成不同的格式 通过指定的端口和协议找到服务名 主机字节序和网络字节序之 ...

  7. python中文编程教学_Python入门教程完整版400集(懂中文就能学会)快来带走

    2020最新Python零基础到精通资料教材,干货分享,新基础Python教材,看这里,这里有你想要的所有资源哦,最强笔记,教你怎么入门提升!让你对自己更加有信心,重点是资料都是免费的,免费!!! 如 ...

  8. python编写student类_Python艺术编程节——以趣味活动促进学生学习编程

    陈斌 近年来,Python逐渐成为最热门的计算机编程语言之一,如何开展Python语言的编程教学也成为了计算机基础教育领域的热门话题.面向中小学生的编程教学尤其需要激发并培养学生的学习兴趣.因此,在针 ...

  9. python核心编程电子书_Python核心编程 PDF 超清第3版

    给大家带来的一篇关于Python编程相关的电子书资源,介绍了关于Python编程.Python核心编程方面的内容,本书是由人民邮电出版社出版,格式为PDF,资源大小22.4 MB,卫斯理编写,目前豆瓣 ...

最新文章

  1. axios请求五种方法
  2. CG-CTF-Web-这题不是WEB
  3. c语言将一个已知头结点的单链表逆序_C语言实现常用数据结构:静态链表数组实现(第5篇)...
  4. 关于Makefile,Makefile.in,Makefile.am,Configure功能及相互关系的问题
  5. phpstudy mysql 版本_phpStudy中升级MySQL版本到5.7.17的方法步骤
  6. Maven 系列 5:Maven 项目管理生命周期学习——命令界面四大指令完美运行 Hello、HelloFriend Java 项目完整步骤及错误总结
  7. python telnet登录发送命令_Telnet发送命令,然后读取响应
  8. ubuntu12.04 安装kinect V1驱动
  9. 卸载 Visual Studio 2005
  10. 新萝卜家园 GhostXP SP3 一键极速装机版 2012.05
  11. 多项式输出 洛谷P1067(普及-)
  12. 互联网快讯:饿了么宣布成立蓝骑士智囊团;极米高性能产品获好评;OPPO Reno7系列正式发布
  13. 如何自动生成一本epub电子书
  14. space-around space-evenly区别
  15. android bmob上传图片,Bmob+Android+ECharts 实现移动端数据上传与图表展示
  16. oracle移动文件命令是什么意思,Oracle使用命令移动各类文件的方法
  17. 微积分基本定理:微分符号与积分符号是逆运算
  18. There is no getter for property named xxx in xxx
  19. 如何下载 International Conference on Machine Learning(ICML)顶会的论文?从哪找ICML顶会论文?如何判断会议和期刊级别?
  20. 06篇 Nacos Client本地缓存及故障转移

热门文章

  1. web前端技术分享之页面元素水平居中
  2. 高职职业技能测试题计算机,2019年高职高考职业技能测试信息技术考什么?
  3. Flask框架(flask中的请求上下文和应用上下文,以及请求钩子的使用,Flask-Script 扩展命令行)
  4. HashMap 散列初体验
  5. OpenCASCADE:Modeling Algorithms模块几何工具之来自约束的线和圆
  6. boost::system::generic_category相关的测试程序
  7. boost::hana::detail::unpack_flatten用法的测试程序
  8. boost::graph模块实现使用不相交的集合数据结构计算无向变化的连通分量图形的测试程序
  9. boost::gil::ImageConcept用法的测试程序
  10. boost::geometry::compress_variant用法的测试程序