基于socket完成客户端和服务器端的交互

一、.服务器端代码
(1)代码结构
服务器主要功能:不断监听客户端的发送的消息,并和相应客户端进行通信
主要包括:第一步:服务器的设置;第二步:服务器监听(监听包括监听客户端触发和客户端信息的处理)
特殊处理地方1:一个客户端断开后,方便下一个客户端进入,需要进行判断上一个客户端是否断开(即什么时候接收到的是空消息,就断开)
特殊处理地方2:如果客户端随机输入的不是正常命令,进行提示输入的命令无输出。
(2)具体代码
author = “叶子”

import socket
import os

#第一步:准备工作
server = socket.socket()#声明一个IPv4、使用TCP/IP协议的socket实例
server.bind((“localhost”,6666))#绑定一个监听端口
server.listen(5)#确定最多可以监听多少个客户端

#第二步:不断等待消息到来,并进行处理

while True: #第一层大循环:不断接听不同客户端打来的电话(此处拿打电话进行比喻)
conn,addr = server.accept()#标记每个打电话来的人是谁

while True:#第二层小循环:和某一客户端反复进行沟通,像打电话挂断后,再换一下一个客户
    receive_data = conn.recv(1024)#设置一次最大可以接受接收多少字节

    #判断一下本次接收是否空消息,空消息意味着客户端挂掉了
    if not receive_data:
        print("客户端断开了。。。。。。。。。。。")
        break

    #如果客户端未断开进行处理信息
    data_res = os.popen(receive_data.decode()).read()#receive_data进行decode是因为popen只能接收bytes类型

    #把没有输出的情况摘出来
    if len(data_res) ==0:
        data_res ="输入的命令没有输出"
    #将输出结果的长度和内容返回给客户端(长度是方便客户端判断是否接收完,内容是客户端关心的)
    conn.send(str(len(data_res.encode())).encode())#需要两次encode,统计长度和发送都使用utf-8
    conn.send(data_res.encode())

server.close()
二、客户端代码
(1)代码结构
客户端主要实现的功能:客户端发送命令给服务器端,并接收服务器端返回的结果
主要包括:第一步:客户端的设置:第二步:数据处理(发数据和接收数据)
特殊处理地方1:确保输入的命令不是空,进行了空校验
特殊处理地方2:保证一次接收完服务器返回的数据,通过返回数据长度进行检查数据是否接收完毕。
(2)具体代码
author = “叶子”

import socket

#第一步:准备
client = socket.socket()
client.connect((“localhost”,6666))

#第二步:与服务端进行交互
while True:
input_cmd = input(“请输入命令:”).strip()

#检测一下是否输入,如果没有输入命令,提示请输入命令
if len(input_cmd) == 0:
    continue

client.send(input_cmd.encode("utf-8"))#发送输入的命令给服务器端
rec_res_size = client.recv(1024)
rec_all_size = 0
rec_all_data = b""
#确保客户端可以一次性全部接受服务器发送过来的消息
while rec_all_size < int(rec_res_size):#rec_all_data接收所有数据以后再一次性展示
    data = client.recv(1024)
    rec_all_size += len(data)
    rec_all_data += data
else:
    print(rec_all_data.decode())

client.close()
三、执行结果
在这里插入图片描述
在这里插入图片描述

发布了55 篇原创文章 · 获赞 4 · 访问量 7636

猜你喜欢

转载自blog.csdn.net/qq_44801116/article/details/100591974