练习目的
有随机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()
我这里要用三个客户端,所以这里的客户端代码复制三次,执行三次:
执行的效果如下: