Skip to main content

Python 入门基础知识 - 使用socket模块建立网络通信

Python 入门基础知识 - 使用socket模块建立网络通信

使用socket模块建立网络通信

使用Python中的socket模块提供的socket对象的方法,可以在计算机与计算机之间建立连接。一般来说,使用socket创建的通信

应有服务端和客户端,服务端首先建立一个socket,并等待客户端的连接。

客户端建立与服务端的socket连接,当连接成功后,客户端和服务端就可以使用socket进行通信。

socket模块简介

使用socket模块时,应首先使用socket()函数,创建一个socket对象。然后就可以使用socket对象的方法创建连接。

socket()函数原型如下

socket(family, type, proto)

参数含义如下:

family: 地址系列,可选参数。默认为AF_INET,也可以是AF_INET6或AF_UNIX。

type: socket类型,可选参数。默认为SOCK_STREAM

proto: 协议类型,可选参数。


创建好socket对象后,可以使用socket对象的bind方法绑定IP地址和端口。

bind方法的原型如下所示。

bind(address)

其参数函数如下

address: 由IP地址和端口组成的元组,例如"('127.0.0.1', 1051)"。如果IP地址为空,则表示本机。


使用socket对象的listen方法可以监听所有socket对象创建的连接。

其函数原型如下

listen(backlog)

其参数含义如下

backlog: 指定连接队列数,最小值为1,最大值由所使用的操作系统决定,一般情况下为5。


使用socket对象的connect和connect_ex都可以连接到服务端,不同的是将返回一个错误,代替引发一个异常。

connect(address)

connect_ex(address)

其参数含义如下

address: 由IP地址和端口组成的元组。


使用socket对象的accept方法可以接收来自客户端的数据。accept方法将返回一个新的socket对象和客户端的地址。

使用socket对象的recv和recvfrom方法都可以从socket对象获取数据,不同的是recvfrom方法将返回所接收的字符串和地址,

而recv方法仅返回字符串,其原型分别如下

recv(bufsize, flags)

recvfrom(bufsize, flags)

其参数含义如下

bufsize: 指定接收缓冲区的大小

flags: 接收标志,可选参数。


使用socket对象的send和sendall方法都可以向已经连接的socket发送数据,不同的是sendall将一直发送完全的数据,

其原型分别如下

send(string, flags)

sendall(string, flags)

其参数含义如下

string: 所发送的数据

flags: 发送标志,可选参数


使用socket对象的sendto方法可以向一个未连接的socket发送数据,

其参数原型如下

sendto(string, flags, address)

其参数含义如下

string: 所发送的数据

flags: 发送标志,可选参数

address: 由IP地址和端口组成的元组


使用socket对象的makefile方法可以将socket关联到文件对象上,

其原型如下

makefile(mode, bufsize)

参数含义如下

mode: 文件模式,可选参数

bufsize: 缓冲区大小,可选参数

当完后通信后,应使用socket对象的close方法关闭网络连接。

下一篇文章我们演示下如何建立服务器

版权声明

版权声明

durban.zhang 创作并维护的 Walkerfree 博客采用 创作共用保留署名-非商业-禁止演绎4.0国际许可证。本文首发于 Walkerfree 博客(http://www.walkerfree.com/),版权所有,侵权必究。本文永久链接:http://www.walkerfree.com/article/88