作业

写一个基于TCP协议套接字,服务端实现接收客户端的连接并发。

  1. 基于多线程实现

    # server.py
    import socket
    from threading import Thread
    
    def task(server):
        while True:
            try:
                data = server.recv(1024).decode('utf-8')
                print(data)
    
                server.send(data.encode('utf-8'))
            except Exception:
                break
        conn.close()
    
    server = socket.socket()
    server.bind(('127.0.0.1',9999))
    server.listen()
    
    while True:
        conn ,addr = server.accept()
        t = Thread(target=task, args=(conn,))
        t.start()
    # client.py
    import socket
    
    client = socket.socket()
    
    client.connect(('127.0.0.1',9999))
    
    while True:
        msg = input('请输入')
        client.send(msg.encode('utf-8'))
    
        data = client.recv(1024).decode('utf-8')
        print(data)
    
  2. 基于多进程实现

    # server.py
    import socket
    from multiprocessing import Process
    
    def task(conn):
    
        while True:
            try:
                data = conn.recv(1024).decode('utf-8')
                print(data)
    
                conn.send(data.encode('utf-8'))
            except Exception:
                break
        conn.close()
    
    if __name__ == '__main__':
        server = socket.socket()
        server.bind(('127.0.0.1', 9999))
        server.listen()
        while True:
            conn, addr = server.accept()
    
            t = Process(target=task,args=(conn,))
            t.start()
    
    # client.py
    import socket
    
    client = socket.socket()
    
    client.connect(('127.0.0.1',9999))
    
    while True:
        msg = input('请输入')
        client.send(msg.encode('utf-8'))
    
        data = client.recv(1024).decode('utf-8')
        print(data)
  3. 单线程内多协程实现并发

    # server.py
    from gevent import monkey;monkey.patch_all()
    import gevent
    import socket
    
    def talk(conn):
        try:
            while True:
                data = conn.recv(1024).decode('utf-8')
                print(data)
                conn.send(data.encode('utf-8'))
        except Exception:
            pass
        conn.close()
    
    server = socket.socket()
    server.bind(('127.0.0.1', 9999))
    server.listen()
    while True:
        conn, addr = server.accept()
        gevent.spawn(talk, conn)
    # client.py
    import socket
    
    client = socket.socket()
    
    client.connect(('127.0.0.1',9999))
    
    while True:
        msg = input('请输入')
        client.send(msg.encode('utf-8'))
    
        data = client.recv(1024).decode('utf-8')
        print(data)

day29作业的更多相关文章

  1. Day29作业及默写

    作业: 1\ 默写 黏包协议 2\ 上传大文件(文件\视频\图片) 3\ 和你的同桌调通 从你的计算机上传一个视频到你同桌的电脑上 4\ 进阶 : 带上登录 Server #Server #!/usr ...

  2. day29 作业

    1.引入属性访问控制+property 2.引入继承与派生的概念来减少代码冗余 注意:要满足什么"是"什么的关系,不满足"是"的关系不要去继承 import u ...

  3. python 全栈开发,Day29(昨日作业讲解,模块搜索路径,编译python文件,包以及包的import和from,软件开发规范)

    一.昨日作业讲解 先来回顾一下昨日的内容 1.os模块 和操作系统交互 工作目录 文件夹 文件 操作系统命令 路径相关的 2.模块 最本质的区别 import会创建一个专属于模块的名字, 所有导入模块 ...

  4. python 作业

    Linux day01 计算机硬件知识整理 作业要求:整理博客,内容如下 编程语言的作用及与操作系统和硬件的关系 应用程序->操作系统->硬件 cpu->内存->磁盘 cpu与 ...

  5. python10作业思路及源码:类Fabric主机管理程序开发(仅供参考)

    类Fabric主机管理程序开发 一,作业要求 1, 运行程序列出主机组或者主机列表(已完成) 2,选择指定主机或主机组(已完成) 3,选择主机或主机组传送文件(上传/下载)(已完成) 4,充分使用多线 ...

  6. SQLServer2005创建定时作业任务

    SQLServer定时作业任务:即数据库自动按照定时执行的作业任务,具有周期性不需要人工干预的特点 创建步骤:(使用最高权限的账户登录--sa) 一.启动SQL Server代理(SQL Server ...

  7. 使用T-SQL找出执行时间过长的作业

        有些时候,有些作业遇到问题执行时间过长,因此我写了一个脚本可以根据历史记录,找出执行时间过长的作业,在监控中就可以及时发现这些作业并尽早解决,代码如下:   SELECT sj.name , ...

  8. T-SQL检查停止的复制作业代理,并启动

        有时候搭建的复制在作业比较多的时候,会因为某些情况导致代理停止或出错,如果分发代理时间停止稍微过长可能导致复制延期,从而需要从新初始化复制,带来问题.因此我写了一个脚本定期检查处于停止状态的分 ...

  9. Python09作业思路及源码:高级FTP服务器开发(仅供参考)

    高级FTP服务器开发 一,作业要求 高级FTP服务器开发 用户加密认证(完成) 多用户同时登陆(完成) 每个用户有不同家目录且只能访问自己的家目录(完成) 对用户进行磁盘配额,不同用户配额可不同(完成 ...

随机推荐

  1. 《HelloGitHub》第 42 期

    兴趣是最好的老师,HelloGitHub 就是帮你找到兴趣! 简介 分享 GitHub 上有趣.入门级的开源项目. 这是一个面向编程新手.热爱编程.对开源社区感兴趣 人群的月刊,月刊的内容包括:各种编 ...

  2. 虚拟机ubuntu 网速慢的解决方法

    其实虚拟机网速慢,我觉得就两个限制因素.一个是虚拟机的内存,内存小了,上传和下载的速率就慢了,就像内存小的虚拟机跑得慢是一个道理:还有一个就是网络连接方式,这里我使用的是桥接,之前我使用的NAT模式, ...

  3. Spring 中使用 @Scheduled 创建定时任务

    一.定时任务触发条件 1.在 Application 启动类上添加:@EnableScheduling 2.含定时方法的类上添加注解:@Component,该注解将定时任务类纳入 spring bea ...

  4. Go语言入门教程(十一)

    原创: IT干货栈 Hello,各位小伙伴大家好,我是小栈君,昨天讲了关于go语言的函数的定义和自定函数的部分种类,我们今天接着上期所讲的内容继续进行分享. 一.函数之无参有返回值 有返回值的函数,必 ...

  5. ELK 学习笔记之 Logstash之output配置

    Logstash之output配置: 输出到file 配置conf: input{ file{ path => "/usr/local/logstash-5.6.1/bin/spark ...

  6. vue运行报错webpack-dev-server: command not found

    翻译过来就是: 'webpack-dev-server' 不是内部或外部命令,也不是可运行的程序 解决方法: 然后总结下成功的步骤: 1. 直接在项目目录下: cnpm install npm run ...

  7. ELK日志分析系统(3)-logstash数据处理

    1. 概述 logspout收集数据以后,就会把数据发送给logstash进行处理,本文主要讲解logstash的input, filter, output处理 2. input 数据的输入处理 支持 ...

  8. 31、vue-cli3引入封装svg图标

    svg图标放大不失真,png会出现失真现象. 一.方法一 1.在对应vue项目里添加插件 vue add svg-sprite 输入 Y 2.在执行 npm install svgo svgo-loa ...

  9. Unity动态改变物体遮挡关系

    在动态创建物体时,通常同父级下先创建的子物体会被后创建的遮挡,此时就需要我们用代码改变对象的层级. GameObject go;go.transform.SetAsLastSibling();//设置 ...

  10. LeetCode_844-Backspace String Compare

    输入两个字符串S和T,字符串只包含小写字母和”#“,#表示为退格键,判断操作完退格键剩下字符串是否相等例子:S = “ab#c", T = "ad # c” 返回true,剩下的字 ...