天天看點

socket 多連接配接 socket 多連接配接

 socket 多連接配接

本文檔為文檔https://www.cnblogs.com/wodeboke-y/p/11241472.html

後續内容。

上一文檔中的案例2給出了一個阻塞型socket server

下面為非阻塞型,關鍵點如下:

accept阻塞,使用thread解決

socket阻塞,使用setblocking解決

# coding=utf-8

# !/usr/bin/env python

'''

'''

from socket import *

from time import ctime

import threading

import time

HOST = ''

PORT = 2159

BUFSIZ = 1024

ADDR = (HOST, PORT)

tcpSerSock = socket(AF_INET, SOCK_STREAM)

tcpSerSock.bind(ADDR)

tcpSerSock.listen(5)

socks = []  # 放每個用戶端的socket

def handle():

    while True:

        for s in socks:

            try:

                data = s.recv(BUFSIZ)  # 到這裡程式繼續向下執行

            except Exception as e:

                continue

            if not data:

                socks.remove(s)

                continue

            s.send('[%s],%s' % (ctime(), data))

t = threading.Thread(target=handle)  # 子線程

if __name__ == '__main__':

    t.start()

    print(u'我在%s線程中 ' % threading.current_thread().name)  # 本身是主線程

    print('waiting for connecting...')

    while True:

        clientSock, addr = tcpSerSock.accept()

        print('connected from:', addr)

        clientSock.setblocking(0)

        socks.append(clientSock)

轉載于:https://www.cnblogs.com/wodeboke-y/p/11241555.html