0
這裏的服務代碼:錯誤的文件描述符socket.recv錯誤及解決方案,但我不知道爲什麼
from socket import *
from time import ctime
HOST = ''
PORT = 21567
BUFSIZ = 1024
ADDR = (HOST, PORT)
tcpSerSock = socket(AF_INET, SOCK_STREAM)
tcpSerSock.bind(ADDR)
tcpSerSock.listen(5)
try:
while True:
print 'Wait for connection...'
tcpCliSock, addr = tcpSerSock.accept()
print '...connnet from:', addr
while True:
data = tcpCliSock.recv(BUFSIZ)
if not data:
break
tcpCliSock.send('[%s] %s' % (ctime(), data))
tcpCliSock.close()
except (EOFError, KeyboardInterrupt):
tcpSerSock.close()
下面是客戶端代碼:
from socket import *
HOST = 'localhost'
PORT = 21567
BUFSIZ = 1024
ADDR = (HOST, PORT)
tcpCliSock = socket(AF_INET, SOCK_STREAM)
tcpCliSock.connect(ADDR)
while True:
data = raw_input(">")
if not data:
break
tcpCliSock.send(data)
data = tcpCliSock.recv(BUFSIZ)
if not data:
break
print data
break
tcpCliSock.close()
當我運行服務代碼它顯示:
Traceback (most recent call last):
File "G:/python/tcpServ&tcpClnt/tsTserv.py", line 22, in <module>
data = tcpCliSock.recv(BUFSIZ)
File "C:\Python27\lib\socket.py", line 170, in _dummy
raise error(EBADF, 'Bad file descriptor')
socket.error: [Errno 9] Bad file descriptor
但客戶端仍然可以獲取信息。然後我改變了socket.py中的代碼,它工作正常!但我不知道爲什麼。
PS。我改變:
class _closedsocket(object):
__slots__ = []
def _dummy(*args):
raise error(EBADF, 'Bad file descriptor')
這樣:
class _closedsocket(object):
__slots__ = []
def _dummy(*args):
pass
檢查你的服務器代碼,HOST ='',爲什麼這裏沒有IP或主機名? – pmverma 2014-12-08 11:59:14
@pmverm空的HOST可以將「bind()」綁定到所有有效地址 – PythonYXY 2014-12-10 08:14:29