python--gevent高并发socket

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jacke121/article/details/83546877

python--gevent高并发socket

原文:https://www.cnblogs.com/guqing/p/6486275.html

server:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

import sys

import socket

import time

import gevent

from gevent import socket,monkey

monkey.patch_all()

def server(port):

    try:

        = socket.socket()

        s.bind(('0.0.0.0',port))

        s.listen(500)

        while True:

            cli, addr = s.accept()

            gevent.spawn(handle_request, cli)

    except KeyboardInterrupt as e:

        print(e)

def handle_request(conn):

    try:

        while True:

            print("before start recv")

            data = conn.recv(1024)

            print("after start recv")

            if not data:

                #print("client has been closed...")

                #conn.shutdown(socket.SHUT_RD)

                conn.close()

            else:

                print("recv:", data)

                conn.send(data)

    except OSError as e:

        print("client has been closed")

    except Exception as ex:

        print(ex)

    finally:

        conn.close()

if __name__ == '__main__':

    server(8001)

client:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

import socket

HOST = 'localhost'

PORT = 8001

= socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.connect((HOST, PORT))

while True:

    msg = bytes(input(">>:"), encoding="utf-8")

    if msg == 'q'.encode("utf-8"):

        exit("退出!")

    s.sendall(msg)

    data = s.recv(1024)

    print('Received',repr(data))

s.close()

猜你喜欢

转载自blog.csdn.net/jacke121/article/details/83546877