Python网络编程

时间:2020-08-14 14:23:52   收藏:0   阅读:48

1. socket套接字

1.1 socket简介

1)网络中的进程间通信

在本地可以通过进程PID来唯一标识一个进程,但是在网络中这却是行不通的。

TCP/IP协议族已经解决了这个问题,网络层的“IP地址”可以唯一标识网络中的主机,而传输层“协议+端口”可以唯一标识主机中的应用程序(进程)。

这样利用  IP地址,协议,端口  就可以表示网络中的进程了,网络中的进程通信就可以利用这个标志与其他进程进行交互。

2)什么是socket

socket简称套接字,是进程间通信的一种方式;它能实现不同主机间的进程间通信。

socket是应用层与TCP/IP协议族通信中间软件抽象层,它是一组接口

在设计模式中,socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在socket接口后面,对于用户来说,一组简单的接口就是全部,让socket去组织数据,以符合指定的协议;进而,我们无需去关心TCP/UDP协议的细节,因为socket已经封装好了,我们只需要遵循socket的规定去编程,自然就是遵循tcp/udp标准的。

3)socket层

技术分享图片

1.2 套接字的分类

基于文件类型的套接字家族:AF_UNIX

基于网络类型的套接字家族:AF_INET

1.3 套接字的工作流程

1)工作流程图示

技术分享图片

2)工作流程解释

1.4 创建socket

1)创建socket示例

import socket
socket.socket(socket_family,socket_type,protocal=0)
# socket_family 可以是 AF_UNIX 或 AF_INET
# socket_type 可以是 SOCK_STREAM 或 SOCK_DGRAM
# protocol 一般不填,默认值为 0

# 获取tcp/ip套接字
tcpSock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 获取udp/ip套接字
udpSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# 由于 socket 模块中有太多的属性,在这里破例使用了‘from module import *‘语句
# 使用 ‘from socket import *‘, 就把 socket 模块里的所有属性都带到我们的命名空间里了,这样能 大幅减短我们的代码
# 例如tcpSock = socket(AF_INET, SOCK_STREAM)

2)服务端套接字函数

s.bind()     # 绑定(主机,端口号)到套接字
s.listen()   # 开始TCP监听
s.accept()   # 被动接受TCP客户的连接,(阻塞式)等待连接的到来

3)客户端套接字函数

s.connect()     # 主动初始化TCP服务器连接
s.connect_ex()  # connect()函数的扩展版本,出错时返回出错码,而不是抛出异常

4)公共用途的套接字函数

s.recv()            # 接收TCP数据
s.send()            # 发送TCP数据(send在待发送数据量大于己端缓存区剩余空间时,数据丢失,不会发完)
s.sendall()         # 发送完整的TCP数据(本质就是循环调用send,sendall在待发送数据量大于己端缓存区剩余空间时,数据不丢失,循环调用send直到发完)
s.recvfrom()        # 接收UDP数据
s.sendto()          # 发送UDP数据
s.getpeername()     # 连接到当前套接字的远端的地址
s.getsockname()     # 当前套接字的地址
s.getsockopt()      # 返回指定套接字的参数
s.setsockopt()      # 设置指定套接字的参数
s.close()           # 关闭套接字

5)面向锁的套接字方法

s.setblocking()     # 设置套接字的阻塞与非阻塞模式
s.settimeout()      # 设置阻塞套接字操作的超时时间
s.gettimeout()      # 得到阻塞套接字操作的超时时间

6)面向文件的套接字的函数

s.fileno()          # 套接字的文件描述符
s.makefile()        # 创建一个与该套接字相关的文件

2. 基于TCP的套接字

 

原文:https://www.cnblogs.com/hgzero/p/13501849.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!