python实现socket()模块函数

前言

要通过socket实现进程间通信,需要理解客户端/服务器的概念和客户端/服务器之间收发请求的过程。

1.什么是客户端/服务器架构?

对于不同的人来说,它意味着不同的东西,这取决于你问谁以及描述的是软件还是硬件系统。在这两种情况中的任何一种下,前提都很简单: 服务器就是一系列硬件或软件,为一个或多个客户端(服务的用户)提供所需的“服务”。它存在唯一目的就是等待客户端的请求,并响应它们(提供服务),然后等待更多请求。另一方面,客户端因特定的请求而联系服务器,并发送必要的数据,然后等待服务器的回应,最后完成请求或给出故障的原因。服务器无限地运行下去,并不断地处理请求;而客户端会对服务进行一次性请求,然后接收该服务,最后结束它们之间的事务。客户端在一段时间后可能会再次发出其他请求,但这些都被当作不同的事务。

2.socket()模块函数基础

要创建套接字,必须使用 socket.socket()函数,它一般的语法如下。

socket(socket_family, socket_type, protocol=0)

其中, socket_family 是 AF_UNIX 或 AF_INET(如前所述),socket_type 是 SOCK_STREAM或 SOCK_DGRAM(也如前所述)。 protocol 通常省略,默认为 0。所以,为了创建 TCP/IP 套接字,可以用下面的方式调用socket.socket()。

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)

一旦有了一个套接字对象,那么使用套接字对象的方法将可以进行进一步的交互。接下来两节分别讲解TCP和UDP的socket()函数的实现,其中代码都是基于python3实现。

3.创建 TCP socket模块

(1)创建 TCP 服务器
首先,我们将展现创建通用 TCP 服务器的一般伪代码,然后对这些代码的含义进行一般
性的描述。需要记住的是,这仅仅是设计服务器的一种方式。一旦熟悉了服务器设计,那么
你将能够按照自己的要求修改下面的伪代码来操作服务器。

ss = socket() # 创建服务器套接字
ss.bind() # 套接字与地址绑定
ss.listen() # 监听连接
inf_loop: # 服务器无限循环
	cs = ss.accept() # 接受客户端连接
	comm_loop: # 通信循环
		cs.recv()/cs.send() # 对话(接收/发送)
	cs.close() # 关闭客户端套接字
ss.close() # 关闭服务器套接字#(可选)

所有套接字都是通过使用 socket.socket()函数来创建的。因为服务器需要占用一个端口并
等待客户端的请求,所以它们必须绑定到一个本地地址。因为 TCP 是一种面向连接的通信系
统,所以在 TCP 服务器开始操作之前,必须安装一些基础设施。特别地, TCP 服务器必须监
听(传入)的连接。一旦这个安装过程完成后,服务器就可以开始它的无限循环。

调用 accept()函数之后,就开启了一个简单的(单线程)服务器,它会等待客户端的连接。
默认情况下, accept()是阻塞的,这意味着执行将被暂停,直到一个连接到达。另外,套接字
确实也支持非阻塞模式。

一旦服务器接受了一个连接,就会返回(利用 accept())一个独立的客户端套接字,用来

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值