python 之 socket 的初步认识

Posted brave1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 之 socket 的初步认识相关的知识,希望对你有一定的参考价值。

什么是socket  

 Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口,socket起源于Unix,而Unix/liunx基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read – 关闭close”模式 来操作。Socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO、打开、关闭)

socket 的常用方法

family(socket家族)

socket.AF_UNIX:用于本机进程间通讯,为了保证程序安全,两个独立的程序(进程)间是不能互相访问彼此的内存的,但为了实现进程间的通讯,可以通过创建一个本地的socket来完成
socket.AF_INET:(还有AF_INET6被用于ipv6,还有一些其他的地址家族,不过,他们要么是只用于某个平台,要么就是已经被废弃,或者是很少被使用,或者是根本没有实现,所有地址家族中,AF_INET是使用最广泛的一个,python支持很多种地址家族,但是由于我们只关心网络编程,所以大部分时候我么只使用AF_INET)

 

socket type类型

socket.SOCK_STREAM #for tcp
socket.SOCK_DGRAM #for udp
socket.SOCK_RAW #原始套接字,普通的套接字无法处理ICMP、IGMP等网络报文,而SOCK_RAW可以;其次,SOCK_RAW也可以处理特殊的IPv4报文;此外,利用原始套接字,可以通过IP_HDRINCL套接字选项由用户构造IP头。
socket.SOCK_RDM #是一种可靠的UDP形式,即保证交付数据报但不保证顺序。SOCK_RAM用来提供对原始协议的低级访问,在需要执行某些特殊操作时使用,如发送ICMP报文。SOCK_RAM通常仅限于高级用户或管理员运行的程序使用。
socket.SOCK_SEQPACKET

常用方法

socket.socket():建立socker套接字,两个参数,family代表家族.type代表类型,type默认TCP

socket.bind():服务器端,接受的参数是元组,不是传递host,port两个元素,而是(host,port)

socket.listen():一个参数,值为允许客户端连接服务器的排队上线,如果超过挂起上限则会拒绝掉

socket.accept():无参数,其返回值是一个元组,第一个是新的套接字对象,第二个是地址

clnt.recv(1024):参数内设置为一次接收的数据,即字节

s.send() 发送数据

socket.connect():客户端,与bind对应,接受的也是元组

s.close() 关闭套接字

 

socket 的通信原理图 

 技术分享图片

 

示列演示:

服务端

import socket

# 生成一个socket 对象连接
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# bind 监听地址
server.bind((127.0.0.1, 8000))
# 启动监听
print("启动监听状态........")
server.listen(5)
# 等待连接
conn, addr = server.accept()
data = conn.recv(1024)
print("从客户端接收的数据", data)
conn.send(data.upper()) # 发送数据给客户端
conn.close()
server.close()

 

客户端

 

import socket

client = socket.socket()
client.connect(("127.0.0.1", 8000))
client.send("hello python ,i am socket".encode("utf-8"))
data = client.recv(1024)
print("从服务端接收的数据", data)
client.close()

 

运行顺序

运行服务端、运行客户端

服务端,显示客户端,发送的数据

技术分享图片

客户端显示 ,服务端发送的数据

技术分享图片

 






以上是关于python 之 socket 的初步认识的主要内容,如果未能解决你的问题,请参考以下文章

Python网络编程之socket应用

WebSocket详解:初步认识WebSocket技术

Python面向对象_初步认识

Python 之 Socket编程(TCP/UDP)

python 初步认识Flask

一OpenStack入门 之 初步认识