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编程的主要内容,如果未能解决你的问题,请参考以下文章