热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Python核心编程第2章网络编程(1)

一、基本概念1.嵌套字套接字是计算机网络数据结构,它体现了上节中所描述的“通信端点”的概念。在任何类型的通信开始之前,网络应用程序必须创建套接字。可以将

一、基本概念

  1.嵌套字

套接字是计算机网络数据结构,它体现了上节中所描述的“通信端点”的概念。在任何类型的通信开始之前,网络应用程序必须创建套接字。可以将它们比作电话插孔,没有它将无法进行通信。

  2.套接字地址:主机-端口对

  如果一个套接字像一个电话插孔——允许通信的一些基础设施,那么主机名和端口号就像区号和电话号码的组合。然而,拥有硬件和通信的能力本身并没有任何好处,除非你知道电话打给谁以及如何拨打电话。一个网络地址由主机名和端口号对组成,而这是网络通信所需要的。有效的端口号范围为0~65535(尽管小于1024的端口号预留给了系统)。

二、socket函数

          要创建套接字,必须使用socket.socket()函数,它一般的语法为:socket(socket_family, socket_type, protocol=0)

其中,socket_family是AF_UNIX或AF_INET(如前所述),socket_type是SOCK_STREAM或SOCK_DGRAM(也如前所述)。protocol通常省略,默认为0。
所以,为了创建TCP/IP套接字,可以用下面的方式调用socket.socket()。

                    tcpSock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
同样,为了创建UDP/IP套接字,需要执行以下语句。

                    udpSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

  1.创建TCP服务器和客户端

  伪代码如下:

1 ss = socket() # 创建服务器套接字
2 ss.bind() # 套接字与地址绑定
3 ss.listen() # 监听连接(开启监听)
4 inf_loop: # 服务器无限循环
5 cs = ss.accept() # 接受客户端连接
6 comm_loop: # 通信循环
7 cs.recv()/cs.send() # 对话(接收/发送)
8 cs.close() # 关闭客户端套接字
9 ss.close() # 关闭服务器套接字#(可选)

     所有套接字都是通过使用socket.socket()函数来创建的。因为服务器需要占用一个端口并等待客户端的请求,所以它们必须绑定到一个本地地址。因为TCP是一种面向连接的通信系统,所以在TCP服务器开始操作之前,必须安装一些基础设施。特别地,TCP服务器必须监听(传入)的连接。一旦这个安装过程完成后,服务器就可以开始它的无限循环。

  调用accept()函数之后,就开启了一个简单的(单线程)服务器,它会等待客户端的连接。默认情况下,accept()是阻塞的,这意味着执行将被暂停,直到一个连接到达。另外,套接字确实也支持非阻塞模式。一旦服务器接受了一个连接,就会返回(利用accept())一个独立的客户端套接字,用来与即将到来的消息进行交换。使用新的客户端套接字类似于将客户的电话切换给客服代表。当一个客户电话最后接进来时,主要的总机接线员会接到这个电话,并使用另一条线路将这个电话转接给合适的人来处理客户的需求。

 

  【示例2-2】 python 3 TCP时间戳服务器:

1 #!/usr/bin/env python
2 from socket import *
3 from time import ctime
4
5 HOST = ''
6 PORT = 21567
7 BUFSIZE = 1024
8 ADDR = (HOST,PORT)
9
10
11 tcpSerSock = socket(AF_INET,SOCK_STREAM)
12 tcpSerSock.bind(ADDR) #绑定
13 tcpSerSock.listen(5) #开启监听
14
15 while True:
16 print('waiting for connecting...')
17 tcpCliSock,addr = tcpSerSock.accept()
18 print('...connected from:',addr)
19
20 while True:
21 data = tcpCliSock.recv(BUFSIZE).decode()
22 print('data:',data)
23 if not data:
24 break
25
26 tcpCliSock.send(('[%s] %s' % (ctime(), data)).encode())
27 tcpCliSock.close()
28 tcpSerSock.close()

View Code

【示例2-4】   Python 3 TCP时间戳客户端

1 #!/usr/bin/env python
2 from socket import *
3 from time import ctime
4
5 HOST = '172.10.11.142'
6 PORT = 21567
7 BUFSIZE = 1024
8 ADDR = (HOST,PORT)
9
10
11 tcpCliSock = socket(AF_INET,SOCK_STREAM)
12 tcpCliSock.connect(ADDR)
13
14 while True:
15 data = input('please your information......')
16 if not data:
17 break
18 tcpCliSock.send(data.encode())
19 data = tcpCliSock.recv(BUFSIZE).decode()
20 if not data:
21 break
22 print(data)
23 tcpCliSock.close()

View Code

 

  2.创建UDP时间戳服务器

  伪代码如下:

1 ss = socket() # 创建服务器套接字
2 ss.bind() # 绑定服务器套接字
3 inf_loop: # 服务器无限循环
4 cs = ss.recvfrom()/ss.sendto() # 关闭(接收/发送)
5 ss.close() # 关闭服务器套接字

  【示例2-6】 UDP时间戳服务器(tsUserv.py)

 

1 #!/usr/bin/env python
2 from socket import *
3 from time import ctime
4
5 HOST = ''
6 PORT = 21567
7 BUFSIZE = 1024
8 ADDR = (HOST,PORT)
9
10 udpSerSock = socket(AF_INET, SOCK_DGRAM)
11 udpSerSock.bind(ADDR)
12 #tcpSerSock.listen(5) #TCP开启监听
13
14 while True:
15 print('waiting for connecting...')
16 data,addr = udpSerSock.recvfrom(BUFSIZE)
17 print('data:',data.decode())
18 data_tmp = data.decode()
19 udpSerSock.sendto(('[%s] %s'%(ctime(),data_tmp)).encode(),addr)
20 print('......received from and returned to:',addr)
21 udpSerSock.close()

View Code

  【示例2-7】 UDP时间戳服务器(tsUserv.py)

 

1 #!/usr/bin/env python
2 from socket import * 3 from time import ctime 4 5 HOST = '172.10.11.142' 6 PORT = 21567 7 BUFSIZE = 1024 8 ADDR = (HOST,PORT) 9 udpCliSock = socket(AF_INET,SOCK_DGRAM) 10 11 while True: 12 data = input('please your information......') 13 if not data: 14 break 15 udpCliSock.sendto(data.encode(),ADDR) 16 data,ADDR = udpCliSock.recvfrom(BUFSIZE) 17 if not data: 18 break 19 print(data.decode()) 20 udpCliSock.close()

View Code

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


转载于:https://www.cnblogs.com/yooking/p/9493499.html


推荐阅读
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • 【重识云原生】第四章云网络4.8.3.2节——Open vSwitch工作原理详解
    2OpenvSwitch架构2.1OVS整体架构ovs-vswitchd:守护程序,实现交换功能,和Linux内核兼容模块一起,实现基于流的交换flow-basedswitchin ... [详细]
  • POCOCLibraies属于功能广泛、轻量级别的开源框架库,它拥有媲美Boost库的功能以及较小的体积广泛应用在物联网平台、工业自动化等领域。POCOCLibrai ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • mac php错误日志配置方法及错误级别修改
    本文介绍了在mac环境下配置php错误日志的方法,包括修改php.ini文件和httpd.conf文件的操作步骤。同时还介绍了如何修改错误级别,以及相应的错误级别参考链接。 ... [详细]
  • 本文详细介绍了git常用命令及其操作方法,包括查看、添加、提交、删除、找回等操作,以及如何重置修改文件、抛弃工作区修改、将工作文件提交到本地暂存区、从版本库中删除文件等。同时还介绍了如何从暂存区恢复到工作文件、恢复最近一次提交过的状态,以及如何合并多个操作等。 ... [详细]
  • 基于Socket的多个客户端之间的聊天功能实现方法
    本文介绍了基于Socket的多个客户端之间实现聊天功能的方法,包括服务器端的实现和客户端的实现。服务器端通过每个用户的输出流向特定用户发送消息,而客户端通过输入流接收消息。同时,还介绍了相关的实体类和Socket的基本概念。 ... [详细]
  • 本文介绍了Android中的assets目录和raw目录的共同点和区别,包括获取资源的方法、目录结构的限制以及列出资源的能力。同时,还解释了raw目录中资源文件生成的ID,并说明了这些目录的使用方法。 ... [详细]
  • Postgresql备份和恢复的方法及命令行操作步骤
    本文介绍了使用Postgresql进行备份和恢复的方法及命令行操作步骤。通过使用pg_dump命令进行备份,pg_restore命令进行恢复,并设置-h localhost选项,可以完成数据的备份和恢复操作。此外,本文还提供了参考链接以获取更多详细信息。 ... [详细]
  • 进入配置文件目录:[rootlinuxidcresin-4.0.]#cdusrlocalresinconf查看都有哪些配置文件:[rootlinuxid ... [详细]
  • ZooKeeper 学习
    前言相信大家对ZooKeeper应该不算陌生。但是你真的了解ZooKeeper是个什么东西吗?如果别人面试官让你给他讲讲ZooKeeper是个什么东西, ... [详细]
author-avatar
20乐宝儿_202
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有