练习目的
有随机30个数字
然后分别需要计算
1、这30个数字的 奇偶性 奇数返回True 偶数返回False
2、这30个数字的 2倍
3、这30个数字的 是否大于10
要求用socket分布式部署给三个client来计算
服务端进行数据汇总显示.
服务器端:
#导入模块
import socket
import threading
import random
import 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 +=1
if __name__ == '__main__':
sock_start()
客户端:
# -*- coding: utf-8 -*-
# File : 客户端3.py
# Author: HuXianyong
# Date : 2018-08-23 15:26
import socket,time
my_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<num<=20:
age = '2b小青年'
elif 20 <num <= 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()
我这里要用三个客户端,所以这里的客户端代码复制三次,执行三次:
执行的效果如下: