python3 套接字练习

练习目的

有随机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()

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

执行的效果如下: