前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python3 套接字练习

python3 套接字练习

作者头像
py3study
发布2020-01-03 16:29:08
5140
发布2020-01-03 16:29:08
举报
文章被收录于专栏:python3python3

练习目的

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

服务器端:

代码语言:javascript
复制
#导入模块
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()

客户端:

代码语言:javascript
复制
# -*- 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()

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

执行的效果如下:

image.png
image.png
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-09-27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档