发布时间:2019-09-27 07:07:17编辑:auto阅读(1815)
练习目的
有随机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()
我这里要用三个客户端,所以这里的客户端代码复制三次,执行三次:
执行的效果如下:
上一篇: Python3中的open函数
下一篇: python3实现图片转字符画
47750
46252
37132
34640
29231
25893
24762
19866
19427
17916
5720°
6323°
5843°
5892°
6992°
5830°
5850°
6365°
6319°
7683°