重剑点评:

真简单明了!复习网络编程,顺便学习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. QIIME 2用户文档. 14机器学习预测样品元数据分类和回归q2-sample-classifier(2018.11)
  2. 一起谈.NET技术,一句代码实现批量数据绑定[下篇]
  3. HDU_1072_Nightmare题解
  4. 关于ajax 1.0的一个问题?
  5. C语言头文件组织与包含原则
  6. 我从小米裸辞后进Shopee了...
  7. Javascript根据属性从对象数据中删除元素
  8. 联想小新模式切换不了_精彩,不止一屏!联想多款消费新品亮相秋季发布会
  9. Oracle增加自增长列
  10. C++ STL常用算法总结
  11. Atitit USRqc62204 证书管理器标准化规范
  12. 计算机视觉方向开题,机器视觉开题报告.doc
  13. 高分meta分析质量评价方法
  14. java 切图_分布式切图服务——切图篇
  15. 小说APP源码的图片加载方式,懒加载和预加载的实现
  16. eWebEditor编辑器的使用
  17. 实验过程分析1——数据集为什么需要按一定比例划分
  18. 建立备份域控服务器,备份域控制器
  19. c/c++编程学习:空指针是什么?
  20. 【NLP】⚠️学不会打我! 半小时学会基本操作 2⚠️词向量模型简介

热门文章

  1. Php的if自动转换类型,php输出数据字段类型自动转换函数
  2. brand.php dnfire.cn_能美火灾报警_能美西科姆消防报警主机如何屏蔽故障点_滁州气象...
  3. resin php mysql_RedhatAS4.0上安装Apache2+PHP5+MySQL+Resin+SSL+GD+webalizer
  4. python中的单下划线和双下划线_python 里面的单下划线与双下划线的区别(私有和保护)...
  5. 一篇带你搞透回溯算法
  6. 网络体系架构—运输层协议概述
  7. wxWidgets:wxGridEvent类用法
  8. boost::smart_ptr模块智能指针测试程序
  9. boost::range_reverse_iterator相关的测试程序
  10. boost::hana::is_nothing用法的测试程序