流式套接字

当你需要使用 TCP 协议进行通信时,需要创建流式套接字。这是套接字编程中最常用的一种。

光谈这些概念显得很抽象,还是举送外卖的这个例子,假设你点了一份烤鸭,外卖骑手需要先去店铺取餐,然后送到你的家门口,那么商家就是服务端,你的家门口是客户端,那份烤鸭是你需要接受的数据。一开始商家不知道你的住所在哪,但你知道商家的地址,你点餐这个操作就相当于和商家建立连接,当你成功下单之后,商家才知道了你的住所,就会派骑手去为你送餐了,此时你需要做的只有等待外卖骑手送餐了。

在计算机通信中,服务端开启后要做的就是等待客户端连接、接受客户端发送过来的消息和响应客户端请求。

接下来该思考用 Python 代码如何来模拟这个场景了,我们先来实现服务端,假设客户端下单后等待时间为 10 秒,与客户端交互的操作就用 socket 提供的各种函数实现,但还要注意在与客户端交互的过程中,有可能会出现 IO 异常的情况,别忘了进行异常处理;还要注意在使用完 socket 之后一定要记得关闭 socket,让系统释放资源,这是很重要的编码习惯。

服务端代码实现:

import time
from socket import *

serverSocket=socket(AF_INET,SOCK_STREAM)   #创建套接字对象
serverSocket.bind(("127.0.0.1",6666))      #绑定IP和端口,必须是元组形势
serverSocket.listen(1)                     #设置连接池挂起的数量

try:
    connectionSocket,addr=serverSocket.accept()  #接受客户端连接,connectionSocket是客户端连接服务器的信号,addr是客户端地址
    print("收到"+addr[0]+":"+str(addr[1])+"的订单")
    time.sleep(10)  #让线程等待10秒
    connectionSocket.send(bytes("您的订单已送达",encoding='utf-8'))  #向客户端发送消息
    connectionSocket.close()  #断开连接
except IOError:
    connectionSocket.close()
serverSocket.close()  #关闭套接字对象

下篇文章,与大家分享:实现客户端代码,当客户端接受到服务端的消息时,输出到控制台。

敬请期待~

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐