[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()