2019.10.22 用TCP实现服务端并发接收

client



import socket

client = socket.socket()
client.connect(
    ('127.0.0.1',8888)
)

while 1:
    msg = input('input>>>')
    if  msg == 'q':
        break
    client.send(msg.encode('utf-8'))
    data = client.recv(1024).decode('utf-8')
    print(data)

client.close()

server线程解决

import socket
from  multiprocessing  import Process,Queue
import threading
import socketserver

# q = Queue(4)

server = socket.socket()
server.bind(
    ('127.0.0.1', 8888)
)
server.listen(3)

def se():

    while 1:
        conn,addr = server.accept()
        print(addr)

        while 1:
            try:
                data = conn.recv(1024).decode('utf-8')
                print(data)
                conn.send(data.encode('utf-8'))

            except Exception as e:
                print(e)
                break

        conn.close()

if __name__ == '__main__':

    p1 = threading.Thread(target=se)
    p2 = threading.Thread(target=se)
    p3 = threading.Thread(target=se)
    p1.start()
    p2.start()
    p3.start()

server进程解决

from  multiprocessing  import Process
import socket

def se(ser):

    while 1:

        # q.put(sb)
        conn,addr = ser.accept()
        print(addr)

        while 1:
            try:
                data = conn.recv(1024).decode('utf-8')
                print(data)
                conn.send(data.encode('utf-8'))

            except Exception as e:
                print(e)
                break

        conn.close()

if __name__ == '__main__':

    server = socket.socket()
    server.bind(
        ('127.0.0.1', 8888)
    )
    server.listen(3)
    p1 = Process(target=se,args = (server,))
    p2 = Process(target=se,args = (server,))
    p3 = Process(target=se,args = (server,))

    p1.start()
    p2.start()
    p3.start()

原文地址:https://www.cnblogs.com/agsol/p/11721903.html

时间: 2024-10-03 01:52:09

2019.10.22 用TCP实现服务端并发接收的相关文章

使用ranch tcp开发服务端

Ranch: 简单来说,Ranch就是一个tcp acceptor pool,用于高并发下的tcp连接建立与管理.可以设置并发链接最大数量,在不关闭socket连接的情况下可以动态升级连接池.Cowboy就是使用的ranch. https://github.com/ninenines/ranch 下面通过改造ranch自带的reverse example实现简易的服务端. game_server.app.src {application, game_server, [ {description,

TCP协议下的服务端并发,GIL全局解释器锁,死锁,信号量,event事件,线程q

TCP协议下的服务端并发,GIL全局解释器锁,死锁,信号量,event事件,线程q 一.TCP协议下的服务端并发 ''' 将不同的功能尽量拆分成不同的函数,拆分出来的功能可以被多个地方使用 TCP服务端实现并发 1.将连接循环和通信循环拆分成不同的函数 2.将通信循环做成多线程 ''' # 服务端 import socket from threading import Thread ''' 服务端 要有固定的IP和PORT 24小时不间断提供服务 能够支持并发 ''' server = sock

socket 网络编程快速入门(二)教你编写基于UDP/TCP的服务端多线程通信

在上一篇博文中,我们介绍了利用socket进行简单的UDP/TCP的服务端和客户端的通信. (一) 在基于UDP的程序中,你有没有想过,如果我的这台主机在通讯的时候要求既能够收到别的主机发来的数据,又能够自己向目的主机发出数据,该怎样实现?也就是说需要两个while循环同时进行.答案是使用多线程,一个线程用于接受数据,另一个线程用来发送数据.接下来我们介绍WinSock的多线程编程. 多线程的实现我们使用_beginthread()函数: uintptr_t _beginthread( void

linux 网络编程之最简单的tcp通信服务端

编写一个最为简单的tcp通信服务端.代码如下: #include <iostream> #include <cstring> using namespace std; #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <arpa/inet.h> #include <errno.h> #include <uni

TCP/IP网络编程之基于TCP的服务端/客户端(二)

回声客户端问题 上一章TCP/IP网络编程之基于TCP的服务端/客户端(一)中,我们解释了回声客户端所存在的问题,那么单单是客户端的问题,服务端没有任何问题?是的,服务端没有问题,现在先让我们回顾下服务端的I/O代码 echo_server.c --while ((str_len = read(clnt_sock, messag, 1024)) != 0) write(clnt_sock, messag, str_len);-- 接着,我们回顾客户端的代码 echo_client.c -- wr

UDP广播 与 TCP客户端 --服务端

随着倒计时的响声,自觉无心工作,只想为祖国庆生. 最近有遇到过这样一个问题,将摄像头识别的行人,车辆实时显示在客户端中.有提供接口,会以Json的数据的形式将实时将识别的对象进行Post提交.所以我们这边先写一个web服务来持续接收数据,再将数据进行解析存入数据库.到这里为止,数据没有问题,都全部存入数据库中,这样还剩下一个实时刷新识别图片的问题.之前的处理方法是每隔5秒左右去读取数据库最新消息,用Timer计时器来解决,这样的话确实能解决问题,但是感觉不是最好的方法,因为摄像头识别的对象有时效

进程池与线程池、协程、协程实现TCP服务端并发、IO模型

进程池与线程池.协程.协程实现TCP服务端并发.IO模型 一.进程池与线程池 1.线程池 ''' 开进程开线程都需要消耗资源,只不过两者比较的情况下线程消耗的资源比较少 在计算机能够承受范围内最大限度的利用计算机 什么是池? 在保证计算机硬件安全的情况下最大限度的利用计算机 池其实是降低了程序的运行效率,但是保证了计算机硬件的安全 (硬件的发展跟不上软件的速度) ''' from concurrent.futures import ThreadPoolExecutor import time p

微信公众号开发 但是服务端仅仅接收到了 p1 p2 没有接收到p3

w 栗子 js window.location = www.xx.com?p1=123&p2=456&p3=789 但是服务端仅仅接收到了 p1 p2 没有接收到p3 原因有哪些呢? 参考PHP get方式传递参数小心掉坑 - 咖啡如同生活的专栏 - 博客频道 - CSDN.NEThttp://blog.csdn.net/gaoxuaiguoyi/article/details/48469165 除了未进行字符过滤或转码

如何提高Web服务端并发效率的异步编程技术

作为一名web工程师都希望自己做的web应用能被越来越多的人使用,如果我们所做的web应用随着用户的增多而宕机了,那么越来越多的人就会变得越来越少了,为了让我们的web应用能有更多人使用,我们就得提升web应用服务端的并发能力.那么我们如何做到这点了,根据现有的并发技术我们会有如下选择: 第一个做法:为每个客户端发送给服务端的请求都开启一个线程,等请求处理完毕后该线程就被销毁掉,这种做法很直观,但是在现代的web服务器里这种做法已经很少使用了,原因是新建一个线程,销毁一个线程的开销(开销是指占用