练习目的

有随机30个数字然后分别需要计算1、这30个数字的 奇偶性 奇数返回True 偶数返回False2、这30个数字的 2倍3、这30个数字的 是否大于10要求用socket分布式部署给三个client来计算服务端进行数据汇总显示.

服务器端:

#导入模块import socketimport threadingimport randomimport time#创建一个函数来创建套接字def sock_start():    #创建一个套接字,并以tcp链接(主机(ip)+端口(port))    sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)    #绑定主机加端口(''空表示任意的主机)    #绑定地址(host,port)到套接字, 在AF_INET下,以元组(host,port)的形式表示地址    sock.bind(('',8000))    #最大打开5个监听,大于5个链接,则等待    sock.listen(5)    #死循环一直等待这主机来连接    while True:        #有主机来连接,建立连接        client,address =sock.accept()        #创建一个套接字        t = threading.Thread(target=setResponse,args=(client,address))        #开始运行        t.start()    #关闭链接    sock.close()def setResponse(sock,address):    num = 1    while True:        info = '''        是否开启本次作业?        开启请输入yes        不开启请输入no        你直接回车就是默认开启,坏笑!!!        现在是第 %s 次开始运行!!!!        '''%num        #判断是否要运行与客户端的数据交流        status = input(info)        if status == 'no':            print('你不开始我退出了!')            exit()        else:            for i in range(10):                j = random.randint(1,100)                #把数字转化为字符串                data = str(j)                #加码数据,发送数据给客户端                sock.send(data.encode('utf-8'))                time.sleep(1)                #接受客户端的数据                msg_rec = sock.recv(1024)                #解码客户端的数据,并打印出来                print(msg_rec.decode('utf-8'))        num +=1if __name__ == '__main__':    sock_start()

客户端:

# -*- coding: utf-8 -*-# File  : 客户端3.py# Author: HuXianyong# Date  : 2018-08-23 15:26import socket,timemy_name = '客户端3'#创建一个套接字,并以tcp链接(主机(ip)+端口(port))sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)#  主动初始化TCP服务器连接,格式为元组(hostname,port)sock.connect(('127.0.0.1',8000))while True:    #接收客户端的数据(数据大小)    msg_rec = sock.recv(1024)    #把字符串转化为×××    num  = int(msg_rec)    #判断数据的奇偶    if num%2 == 0:        sex = '女同志'    else:        sex = '男同胞'    #判断数字是否大于10    if num <= 10:        age = '瓜娃子'    elif 10
<=20:        age = '2b小青年'    elif 20 
<= 40:        age = '成家立业,养瓜娃子'    elif 40< num <=60:        age = '人到中年'    else:        age = '该养老了'    #生成数据类型    msg_send = '我是:%s 性别:%s 人生:%s 年龄:%d'%(my_name,sex,age,num*2)    #加码数据,并发送数据    sock.send(msg_send.encode('utf-8'))    time.sleep(1)    #打印接收到的服务器端的数据    print(msg_rec.decode('utf-8'))#关闭连接sock.close()

我这里要用三个客户端,所以这里的客户端代码复制三次,执行三次:

执行的效果如下:

image.png