<>简介

socket(简称:套接字)是进程之间通信的一个工具,好比现实中的插座,所有的家用电器要想工作都是基于插座进行,进程之间想要进行网络通信需要基于这个socket,负责进程之间的网络数据传输,好比数据的搬运工

<>一、TCP客户端开发
import socket # 1.创建客户端套接字对象 # 参数1:ipv4(ip协议的版本) #
参数2:选择协议(SOCK_STREAM==>TCP协议) tcp_client_socket = socket.socket(socket.AF_INEF,
socket.SCOK_STREAM) # 2.和服务端套接字建立连接 # 参数:元组(有两个元素!) # 参数1:服务器的ip地址(字符串) #
参数2:服务器的端口号(数字) tcp_client_socket.connect(("127.0.0.1", 8080)) #
发送数据的时候需要先转换成二进制 data = '123' # 编码 data = data.encode("utf8") # 3.发送数据
tcp_client_socket.send(data) # 4.接受数据 # 参数:以字节为单位的接受的数据的大小 recv_data =
tcp_client_socket.recv(1024) # 5.关闭客户端套接字 tcp_client_socket.close()
<>

二、服务端开发
import socket # 1.创建服务端的套接字对象 # 参数1:ipv4 # 参数2:tcp协议 tcp_server_socket =
socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 2.绑定端口号 # 参数:元组(两个元素)
参数1:ip地址(字符串) 参数2:端口号(数字) # 参数1不写就是默认本地IP地址(127.0.0.1)
tcp_server_socket.bind(("参数1", 8080)) # 3.设置监听 # 参数:最大监听个数(排队等待处理的最大个数)
tcp_server_socket.listen(128) # 4.阻塞等待接受客户端的连接请求 # 返回值是一个元组(有两个元素) #
元素1:和客户端进行通信的socket 元素2:客户端的地址信息(ip,端口号) # 通过拆包语法
我们分别获取两个元素(client_socket负责处理客户请求) client_socket, client_addr =
tcp_server_socket.accept() # 5.接受数据 # 参数:接受数据的大小(字节) client_data =
client_socket.recv(1024) # 对二进制的数据解码 client_data = client_data.decode()
print(client_data) # 6.发送数据 send_data = "123".encode()
client_socket.send(send_data) # 7.关闭套接字 client_socket.close()
tcp_server_socket.close()
三、端口复用
# 1.创建服务端套接字对象 tcp_server_socket = socket.socket(socket.AF_INET,
socket.SOCK_STREAM) # 在创建服务端后面设置端口复用 # 端口复用(一旦服务端关闭,端口马上释放) # setsocketopt:
设置socket选项 # 参数1:socket选项列表(SOL) # 参数2:地址复用 # 参数3:True:开启选项(默认都是不开启)
tcp_server_socket.setsocketopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
四、持续接受数据,判断客户端关闭

   (对中间的部分代码进行改变) 
while True: # 5.服务端接受数据 client_data = client_socket.recv(1024) #
如果接受的数据长度为零,则证明客户端关闭 if len(client_data) == 0: print("客户端关闭!") break #
对二进制的数据解码 client_data = client_data.encode() print(client_data) # 6.发送数据
send_data = "123".encode() client_data.send(send_data)
五、服务端的多任务
import socket import multiprocessing def
handler_client_request(client_socket): """ 处理客户端请求 """ while True: # 接受数据
client_data = client_socket.recv(1024) # 如果接受的数据长度为零,则证明客户端关闭 if
len(client_data) == 0: print("客户端关闭!") break # 对二进制的数据解码 client_data =
client_data.encode() print(client_data) # 发送数据 send_data = "123".encode()
client_data.send(send_data) def main(): # 1.创建服务端的套接字对象 # 参数1:ipv4 # 参数2:tcp协议
tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 2.绑定端口号
# 参数:元组(两个元素) 参数1:ip地址(字符串) 参数2:端口号(数字) # 参数1不写就是默认本地IP地址(127.0.0.1)
tcp_server_socket.bind(("参数1", 8080)) # 3.设置监听 # 参数:最大监听个数(排队等待处理的最大个数)
tcp_server_socket.listen(128) while True: # 4.阻塞等待接受客户端的连接请求 #
返回值是一个元组(有两个元素)(元素1:和客户端进行通信的socket 元素2:客户端的地址信息(ip,端口号) # 通过拆包语法
我们分别获取两个元素(client_socket负责处理客户请求) client_socket, client_addr =
tcp_server_socket.accept() # 创建子进程 sub_process =
multiprocessing.Process(target=handler_client_request, args=(client_socket,)) #
开启子进程 sub_process.start() # 关闭客户端套接字 client_socket.close()
tcp_client_socket.close() if __name__ == '__main__':
六、原理解析图

<>

<>

技术
下载桌面版
GitHub
Gitee
SourceForge
百度网盘(提取码:draw)
云服务器优惠
华为云优惠券
腾讯云优惠券
阿里云优惠券
Vultr优惠券
站点信息
问题反馈
邮箱:[email protected]
吐槽一下
QQ群:766591547
关注微信