Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我怎样才能得到“的”呢;除「;触发?_Python_Sockets_Python 3.x_Serversocket - Fatal编程技术网

Python 我怎样才能得到“的”呢;除「;触发?

Python 我怎样才能得到“的”呢;除「;触发?,python,sockets,python-3.x,serversocket,Python,Sockets,Python 3.x,Serversocket,我们正在学习网络中的套接字,我们的任务是用Python填写一个模板(老师在使用Python2.x,而我在使用Python3.x) #导入套接字模块 从套接字导入* #创建TCP服务器套接字 #(AF_INET用于IPv4协议) #(SOCK_流用于TCP) serverSocket=socket(AF\u INET,SOCK\u STREAM) #分配端口号 服务器端口=6789 #将套接字绑定到服务器地址和服务器端口 serverSocket.bind(“”,serverPort)) #一次最

我们正在学习网络中的套接字,我们的任务是用Python填写一个模板(老师在使用Python2.x,而我在使用Python3.x)

#导入套接字模块
从套接字导入*
#创建TCP服务器套接字
#(AF_INET用于IPv4协议)
#(SOCK_流用于TCP)
serverSocket=socket(AF\u INET,SOCK\u STREAM)
#分配端口号
服务器端口=6789
#将套接字绑定到服务器地址和服务器端口
serverSocket.bind(“”,serverPort))
#一次最多收听一个连接
serverSocket.listen(1)
#服务器应该已启动并正在运行,并且正在侦听传入的连接
尽管如此:
打印(“随时可用…”)
#从客户端设置新连接
connectionSocket,addr=serverSocket.accept()
#如果在执行try子句期间发生异常
#跳过该子句的其余部分
#如果异常类型与exception后面的单词匹配
#执行except子句
尝试:
#从客户端接收请求消息
message=connectionSocket.recv(4096).decode()
#从消息中提取请求对象的路径
#路径是HTTP头的第二部分,由[1]标识
filename=message.split()[1]
#因为HTTP请求的提取路径包括
#一个字符“\”,我们从第二个字符读取路径
f=打开(文件名[1:])
#将请求文件的整个内容存储在临时缓冲区中
outputdata=f.read()
#将HTTP响应头行发送到连接套接字
connectionSocket.send(((“HTTP/1.1 200 OK\r\n”).encode())
#将请求文件的内容发送到连接套接字
对于范围内的i(0,len(outputdata.encode()):
connectionSocket.send(outputdata.encode())
connectionSocket.send((“\r\n”).encode())
#关闭客户端连接套接字
connectionSocket.close()连接
打破
除IOError外:
#为找不到的文件发送HTTP响应消息
connectionSocket.send((“未找到HTTP/1.1 404\r\n”).encode()
connectionSocket.send((“错误。请重试\r\n”).encode()
#关闭客户端连接套接字
connectionSocket.close()连接
打破
#合上插座
serverSocket.close()
我正在读取的文件是一个.htm文件:

<html><head><title>HTML Test File</title></head><body><h1>Trying to Get This Frickin' Program to Work</h1></body></html>
HTML测试文件试图让这个程序正常工作
当我运行程序并输入:localhost:6789/TestFile.htm时,它会反复打印文件内容,并给出错误消息:第34行,indexer:list index超出范围。编辑:break会处理错误消息,但文件仍在反复打印

我做错了什么

编辑#2:现在我正在尝试进行错误处理,但它只表明,当我键入一个不存在的文件(即localhost:6789/Test.htm)时,没有发送任何数据。如何获取要打印的错误消息

此代码:

  • 将文本编码两次
  • 循环121次(这是您发布的文件的长度,编码为ASCII或UTF-8)
  • 将整个文件发送121次

您处于
while True
循环中,但从未中断。我在“try”和“except”的末尾添加了一个“break”。处理了错误消息,但仍在反复打印文件。请将其编辑到您的主要问题中。已编辑。标题问题仍然存在。已尝试删除两个编码,但仍会重复打印邮件。是。我对它进行两次编码的注意事项是重复工作的性能。最好编码一次,在局部变量中保留一个引用,然后引用该变量两次。然而,这并不是问题的原因。附言:实际上,这篇文章将被编码122次,而不是两次好的,所以我将范围更改为(0,2),并保留“connectionSocket.send(outputdata.encode())”。现在它只打印一次,但我觉得我采取了简单的方法。对:代码的编写方式,因为整个文件都已经在内存中了,所以我会完全删除循环。你是创建了那个循环还是在老师的模板中?
<html><head><title>HTML Test File</title></head><body><h1>Trying to Get This Frickin' Program to Work</h1></body></html>
  for i in range(0, len(outputdata.encode())):  
        connectionSocket.send(outputdata.encode())