python之socket编程

Posted forever77

tags:

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

一、socket简介

socket(套接字)是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口,将复杂的TCP/IP协议族隐藏在接口后面,让socket去组织数据以符合指定的协议。

 下图左为socket在tcp/ip协议中的角色,右为socket的工作流程。

技术图片    技术图片

 

 二、socket分类

套接字有两种(或者称为有两个种族),分别是基于文件型的和基于网络型的。 

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

unix一切皆文件,基于文件的套接字调用底层的文件系统来取数据,两个套接字进程运行在同一机器,可以通过访问同一个文件系统间接完成通信

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

还有AF_INET6被用于ipv6,还有一些其他的地址家族,不过他们要么是只用于某个平台,要么就是已经被废弃,或者是很少被使用,或者是根本没有实现,所有地址家族中,AF_INET是使用最广泛的一个。python支持很多种地址家族,但是由于我们只关心网络编程,所以大部分时候只使用AF_INET

三、基于TCP的socket

#server端
from socket import *
phone = socket(AF_INET,SOCK_STREAM)  #创建socket,第一个参数指定socket家族,第二个指定类型,SOCK_STREAM为tcp,SOCK_DGRAM为UDP
phone.bind((127.0.0.1,8000)) #socket绑定ip和端口,ip应该是本机地址
phone.listen(5)  #socket开启监听
conn,addr = phone.accept() #接收客户端连接
msg = conn.recv(1024)  #接收客户端消息
print(收到客户端的消息:,msg)
conn.send(msg.upper()) #向客户端发送消息
conn.close()  #关闭连接
phone.close()  #关闭socket
#client端
from socket import *
phone = socket(AF_INET,SOCK_STREAM)  #创建客户端socket
phone.connect((127.0.0.1,8000))  #socket连接服务端,ip为服务端地址
phone.send(hello.encode(utf-8))  #向服务端发送消息
msg = phone.recv(1025)   #接收服务端消息
print(收到服务端的消息,msg)
phone.close()  #关闭客户端socket

由于tcp是基于连接的,因此必须先启动服务端,然后再启动客户端去连接服务端。

由于socket是基于tcp/ip协议的,发送和接收消息必须是二进制数据。

 

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

Python—网络编程之tcp编程

python之网络编程

python之socket编程

Python 基础之socket编程

python之socket编程

python之socket编程