【发布时间】:2017-03-05 12:34:53
【问题描述】:
我创建了一个 TCP 多线程网络服务器,但它给了我以下信息 如果找到文件 1.它说“int obj没有属性编码” 2.稍后会显示list index out of range
如果找不到文件 1. 网页浏览器不显示html错误信息 2.稍后会显示list index out of range
我的服务器代码是
import socket
import threading
import os
import sys
#to convert bytes into string
def bytestoString(stringToRead):
stringToRead = bytes.decode(stringToRead)
type(stringToRead)
return(stringToRead)
#to conver string into bytes
def stringToBytes(bytesToSend1):
bytesToSend1= str.encode(bytesToSend1)
type (bytes)
return(bytesToSend1)
#to retreive a file
def retrFile(name,sock):
message=sock.recv(1024)
message_string = bytestoString(message)
print(message_string)
fileName=message_string.split()[1]
fileName=fileName.split("/")[1]
#stringLength=len(fileName)
print(fileName)
if os.path.isfile(fileName):
print ('Ready to send the file................')
with open(fileName,'rb') as fileRead:
data= fileRead.read()
print (data)
exists_Bytes=stringToBytes('HTTP/1.1 200 OK\nContent-type=text/html')
sock.send(exists_Bytes)
for i in range(0 ,len(data)):
sock.send((data[i]).encode())
print('file sent succesfully')
sock.close()
else :
httpResponse=stringToBytes('HTTP/1.1 404 not Found')
sock.send(httpResponse)
#errorDisplayPage=stringToBytes('<html><title>404 Error</title><body>404 Error- Page cannot be found </body></html>')
sock.send(b'<html><title>404 Error</title><body>404 Error- Page cannot be found </body></html>')
print ('error message displayed')
sock.close()
def Main(serverPort):
#creating a server socket type TCP
serverSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
localHost=socket.gethostname()
#binding the server to the client
serverSocket.bind((localHost,serverPort))
serverSocket.listen(5)
print ('***Server is ready to recieve***')
while True:
connectionSocket, addr = serverSocket.accept()
print ('got connection from:<', addr,'>')
t=threading.Thread(target=retrFile,args=('retrThread',connectionSocket))
t.start()
connectionSocket.send('thank you for connecting')
connectionSocket.close()
if __name__ == '__main__':
#getting server hostname and port number from the user
serverPort=int(sys.argv[1])
Main(serverPort)
【问题讨论】:
-
您能否更具体一点,并添加整个错误消息和产生错误的行?
-
引发错误的行是 line 37.
sock.send((data[i]).encode()) -
你使用的是 Python 3 还是 Python 2?
-
我正在使用 python 3
标签: python multithreading tcp