并发编程实战之并发下的socket套接字编程
一、python单线程下实现多个socket并发
1.1 服务端
import sys
# import socket
import time
import gevent
from gevent import socket
from gevent import monkey
monkey.patch_all()
# 类似于python中的黑魔法,把很多模块的阻塞的变成非阻塞的,比如socket中的rece和send都变
# 为不阻塞了
def server(port):
    s = socket.socket()
    s.bind(("127.0.0.1", port))
    s.listen(2000)
    while True:
        cli, add = s.accept()
        gevent.spawn(handle_request, cli)
        # 通过gevent的启动一个协程,把客户端的socket对象传进去
def handle_request(s):
    try:
        while True:
            data = s.recv(1024)
            print("收到的信息:", str(data, encoding="utf-8"))
            s.send(data)
            if not data:
                s.shutdown(socket.SHUT_WR)
                # 把和客户端这个链接销毁
    except Exception as ex:
        print(ex)
    finally:
        s.close()
if __name__ == '__main__':
    server(8000)
1.2 客户端
import socket
import gevent
import threading
import multiprocessing
'''
ip_bind = ("127.0.0.1",8000)
c = socket.socket()
c.connect(ip_bind)
while True:
    data = input("客户端:")
    c.send(bytes(data,encoding="utf-8"))
    data = c.recv(1024)
    print("服务端:",str(data,encoding="utf-8"))
c.close()
'''
import socket
import gevent
ip_bind = ("127.0.0.1",8000)
c = socket.socket()
c.connect(ip_bind)
def f(n):
    while True:
        # c.send(bytes(n,encoding="utf-8"))
        data = str(n)
        c.send(bytes(data,encoding="utf-8"))
        data = c.recv(1024)
        print("server:",str(data,encoding="utf-8"))
    c.close()
x = []
if __name__ == '__main__':
    l = []
    """
    多线程实现并发客户端
        for i in range(500):
         t = threading.Thread(target=f,args=[str(i),])
         t.start()
         l.append(t)
    for t in l:
         t.join()
    """
    # 多进程实现并发客户端
    for i in range(100):
        p = multiprocessing.Process(target=f,args=[i,])
        p.start()
        l.append(p)
    for p in l:
        p.join()
												
											并发编程实战之并发下的socket套接字编程的更多相关文章
- linux网络环境下socket套接字编程(UDP文件传输)
		
今天我们来介绍一下在linux网络环境下使用socket套接字实现两个进程下文件的上传,下载,和退出操作! 在socket套接字编程中,我们当然可以基于TCP的传输协议来进行传输,但是在文件的传输中, ...
 - linux网络编程-(socket套接字编程UDP传输)
		
今天我们来介绍一下在linux网络环境下使用socket套接字实现两个进程下文件的上传,下载,和退出操作! 在socket套接字编程中,我们当然可以基于TCP的传输协议来进行传输,但是在文件的传输中, ...
 - socket套接字编程 HTTP协议
		
socket套接字编程 套接字介绍 1. 套接字 : 实现网络编程进行数据传输的一种技术手段 2. Python实现套接字编程:import socket 3. 套接字分类 >流式套接 ...
 - socket 套接字编程
		
今日内容 socket 套接字编程 简易服务端与客户端代码实现 通信循环 黏包现象(TCP协议) 报头制作.struct 模块.封装形式 内容详细 一.socket 套接字编程 实现一款能够进行数据交 ...
 - 基于TCP协议的socket套接字编程
		
目录 一.什么是Scoket 二.套接字发展史及分类 2.1 基于文件类型的套接字家族 2.2 基于网络类型的套接字家族 三.套接字工作流程 3.1 服务端套接字函数 3.2 客户端套接字函数 3.3 ...
 - Linux之socket套接字编程20160704
		
介绍套接字之前,我们先看一下传输层的协议TCP与UDP: TCP协议与UDP协议的区别 首先咱们弄清楚,TCP协议和UCP协议与TCP/IP协议的联系,很多人犯糊涂了,一直都是说TCP/IP协议与UD ...
 - 基于TCP连接的socket套接字编程
		
基于TCP协议的套接字编程(简单) 服务端 import socket server = socket.socket() server.bind( ('127.0.0.1', 9999) ) serv ...
 - day31 socket套接字编程
		
为什么要有套接字编程? 在上节课的学习中,我们学习了OSI七层协议,但是如果每次进行编程时我们都需要一层一层的将各种协议使用在我们的程序中,这样编写程序实在是太麻烦了,所以为了让程序的编写更加的简单, ...
 - socket套接字编程(1)——基本函数
		
TCP交互流程: 服务器:1. 创建socket:2. 绑定socket和端口号:3. 监听端口号:4. 接收来自客户端的连接请求:5. 从socket中读取字符:6. 关闭socket. 客户端:1 ...
 
随机推荐
- Git介绍与简易搭建
			
Git介绍 Git(读音为/gɪt/.)是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常大的项目版本管理. Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发 ...
 - Python 基础语法-str
			
字符串常见操作 find:检测str是否包含在 mystr 中,如果是返回开始的索引值,否则返回 -1 mystr.index(str, start=0, end=len(mystr)) count: ...
 - 解决测试redis集群时报"java.lang.NumberFormatException: For input string: "7003@17003..7002@17002"等异常
			
一.前言 关于redis5.0的集群模式下,通过客户端测试代码调试报"Exception in thread "main" java.lang.NumberFormatE ...
 - PostgreSQL中的onflict
			
PostgreSQL 9.5 引入了一项新功能,UPSERT(insert on conflict do),当插入遇到约束错误时,直接返回,或者改为执行UPDATE. 1.不存在则插入,存在则更新 i ...
 - SQL语句性能调整原则
			
一.问题的提出 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用系统提交实际应用后,随着数据库中数据的增加,系统 ...
 - [CodeForces-1225B]   TV Subscriptions 【贪心】【尺取法】
			
[CodeForces-1225B] TV Subscriptions [贪心][尺取法] 标签: 题解 codeforces题解 尺取法 题目描述 Time limit 2000 ms Memory ...
 - docker容器中安装vim 、telnet、ifconfig命令
			
一.在使用docker容器时,有时候里边没有安装vim,敲vim命令时提示说:vim: command not found 问题:apt-get install vim安装vim 命令时,提示:如下内 ...
 - 【朝花夕拾】Android自定义View篇之(二)Canvas常用功能
			
前言 转在请申明,转自[https://www.cnblogs.com/andy-songwei/p/10960012.html],谢谢! 上一篇讲View的绘制流程中讲到过,最后一步是draw流程, ...
 - 隐藏Nginx软件版本号信息
			
为了提高我们web服务器的安全性,我们应当尽可能的隐藏服务器的信息以防止他人通过这些信息找到漏洞侵入我们的服务器,对于Nginx而言,我们安装好Nginx后最好隐藏Nginx的版本号,以防止通过该版本 ...
 - Prism_简介(1)
			
Prism 6 Introduction介绍 Initializing初始化 Managing-Dependencies管理依赖 Modules模块 Implementing-MVVM实时MVVM A ...