天天看點

[WinError 10038] 在一個非套接字上嘗試了一個操作

[WinError 10038] 在一個非套接字上嘗試了一個操作

socket先close再調recv就會報錯。

解決方法:可以判斷一下是否關閉了再操作:

if not tcpCliSock._closed:      
# !/usr/bin.env python
# -*- coding: cp936 -*-
from socket import *
from time import ctime


def serverSocket():
    HOST = 'localhost'  # 主機位址
    PORT = 21567  # 伺服器接收端口
    BUFSIZ = 1024  # 接收套接字的緩沖區大小
    ADDR = (HOST, PORT)  # 僅僅是将二者合起來,作為連接配接到的伺服器位址類型

    tcpSerSock = socket(AF_INET, SOCK_STREAM)  # udpSerSock = socket(AF_INET , SOCK_DGRAM)
    tcpSerSock.bind(ADDR)
    tcpSerSock.listen(5)

    while True:
        print('waiting for connection...')
        tcpCliSock, address = tcpSerSock.accept()

        print('connected from :', address)

        while True:
            recvData = tcpCliSock.recv(BUFSIZ)
            if not recvData:
                print('no found data')
                break
            tcpCliSock.send(('[%s] %s' % (ctime(), recvData)).encode('utf-8'))
            tcpCliSock.close()
    tcpSerSock.close()


def main():
    serverSocket()


if __name__ == '__main__':
    main()